diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 6cc333a..2e7a769 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -1,6 +1,8 @@
name: Release
-on: push
+on:
+ push:
+ branches: [main]
permissions:
contents: write
@@ -22,7 +24,7 @@ jobs:
- name: Compute release metadata
id: meta
run: |
- VERSION=$(jq -r .version packages/cli/package.json)
+ VERSION=$(jq -r .version package.json)
BRANCH="${GITHUB_REF_NAME}"
# Count previous releases matching this version-branch pattern
@@ -51,8 +53,6 @@ jobs:
include:
- target: bun-darwin-arm64
platform: darwin-arm64
- - target: bun-darwin-x64
- platform: darwin-x86_64
- target: bun-linux-x64
platform: linux-x86_64
- target: bun-linux-arm64
diff --git a/.github/workflows/smart-contracts.yml b/.github/workflows/smart-contracts.yml
index 450ca6c..d554ea1 100644
--- a/.github/workflows/smart-contracts.yml
+++ b/.github/workflows/smart-contracts.yml
@@ -25,13 +25,16 @@ jobs:
with:
node-version: 22
- - run: npm ci
+ - uses: oven-sh/setup-bun@v2
+
+ - name: Install dependencies
+ run: bun install
- name: Compile contracts
- run: npx hardhat compile
+ run: bunx hardhat compile
- name: Lint Solidity
- run: npx solhint 'contracts/**/*.sol'
+ run: bunx solhint 'contracts/**/*.sol'
- name: Run tests
- run: npx hardhat test
+ run: bunx hardhat test
diff --git a/.github/workflows/typescript.yml b/.github/workflows/typescript.yml
index 5342818..37a7d88 100644
--- a/.github/workflows/typescript.yml
+++ b/.github/workflows/typescript.yml
@@ -30,11 +30,11 @@ jobs:
- name: Install contract deps
working-directory: smart-contracts
- run: npm ci
+ run: bun install
- name: Compile contracts
working-directory: smart-contracts
- run: npx hardhat compile
+ run: bunx hardhat compile
- name: Export ABIs
working-directory: smart-contracts
@@ -60,7 +60,7 @@ jobs:
run: bun run test:unit
- name: Start anvil
- run: bash helper-scripts/helper.sh run_anvil
+ run: bash scripts/anvil.sh
- name: Integration tests
working-directory: packages/cli
diff --git a/.gitmodules b/.gitmodules
deleted file mode 100644
index 09c9a62..0000000
--- a/.gitmodules
+++ /dev/null
@@ -1,3 +0,0 @@
-[submodule "helper-scripts"]
- path = helper-scripts
- url = https://github.com/skalenetwork/helper-scripts.git
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..119467b
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,165 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+ This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+ 0. Additional Definitions.
+
+ As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+ "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+ An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+ A "Combined Work" is a work produced by combining or linking an
+Application with the Library. The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+ The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+ The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+ 1. Exception to Section 3 of the GNU GPL.
+
+ You may convey a covered work under sections 3 and 4 of this
+License without being bound by section 3 of the GNU GPL.
+
+ 2. Conveying Modified Versions.
+
+ If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+ a) under this License, provided that you make a good faith effort to
+ ensure that, in the event an Application does not supply the
+ function or data, the facility still operates, and performs
+ whatever part of its purpose remains meaningful, or
+
+ b) under the GNU GPL, with none of the additional permissions of
+ this License applicable to that copy.
+
+ 3. Object Code Incorporating Material from Library Header Files.
+
+ The object code form of an Application may incorporate material from
+a header file that is part of the Library. You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+ a) Give prominent notice with each copy of the object code that the
+ Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the object code with a copy of the GNU GPL and this license
+ document.
+
+ 4. Combined Works.
+
+ You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+ a) Give prominent notice with each copy of the Combined Work that
+ the Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
+ document.
+
+ c) For a Combined Work that displays copyright notices during
+ execution, include the copyright notice for the Library among
+ these notices, as well as a reference directing the user to the
+ copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+ 0) Convey the Minimal Corresponding Source under the terms of this
+ License, and the Corresponding Application Code in a form
+ suitable for, and under terms that permit, the user to
+ recombine or relink the Application with a modified version of
+ the Linked Version to produce a modified Combined Work, in the
+ manner specified by section 6 of the GNU GPL for conveying
+ Corresponding Source.
+
+ 1) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (a) uses at run time
+ a copy of the Library already present on the user's computer
+ system, and (b) will operate properly with a modified version
+ of the Library that is interface-compatible with the Linked
+ Version.
+
+ e) Provide Installation Information, but only if you would otherwise
+ be required to provide such information under section 6 of the
+ GNU GPL, and only to the extent that such information is
+ necessary to install and execute a modified version of the
+ Combined Work produced by recombining or relinking the
+ Application with a modified version of the Linked Version. (If
+ you use option 4d0, the Installation Information must accompany
+ the Minimal Corresponding Source and Corresponding Application
+ Code. If you use option 4d1, you must provide the Installation
+ Information in the manner specified by section 6 of the GNU GPL
+ for conveying Corresponding Source.)
+
+ 5. Combined Libraries.
+
+ You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+ a) Accompany the combined library with a copy of the same work based
+ on the Library, uncombined with any other library facilities,
+ conveyed under the terms of this License.
+
+ b) Give prominent notice with the combined library that part of it
+ is a work based on the Library, and explaining where to find the
+ accompanying uncombined form of the same work.
+
+ 6. Revised Versions of the GNU Lesser General Public License.
+
+ The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+ If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
diff --git a/README.md b/README.md
index eda9158..959f894 100644
--- a/README.md
+++ b/README.md
@@ -23,7 +23,20 @@ Publish and read IoT sensor data on the [SKALE](https://skale.space) blockchain.
```bash
# Install the CLI
-PLATFORM="$(uname -s | tr '[:upper:]' '[:lower:]')-$(uname -m | sed 's/aarch64/arm64/')"
+OS="$(uname -s | tr '[:upper:]' '[:lower:]')"
+ARCH="$(uname -m)"
+
+# On Apple Silicon, Rosetta shells can report x86_64. Prefer real hardware arch.
+if [ "$OS" = "darwin" ] && [ "$(sysctl -n hw.optional.arm64 2>/dev/null || echo 0)" = "1" ]; then
+ ARCH="arm64"
+fi
+
+case "$ARCH" in
+ aarch64|arm64) ARCH="arm64" ;;
+ x86_64|amd64) ARCH="x86_64" ;;
+esac
+
+PLATFORM="${OS}-${ARCH}"
curl -fL -o /usr/local/bin/smartclaws \
"https://github.com/skalenetwork/smartclaws/releases/latest/download/smartclaws-${PLATFORM}"
chmod +x /usr/local/bin/smartclaws
diff --git a/packages/cli/biome.json b/biome.json
similarity index 100%
rename from packages/cli/biome.json
rename to biome.json
diff --git a/helper-scripts b/helper-scripts
deleted file mode 160000
index 13ec345..0000000
--- a/helper-scripts
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 13ec34577827d59622fdcc7b160e54a3dbae293c
diff --git a/package.json b/package.json
index aad9ea8..288b518 100644
--- a/package.json
+++ b/package.json
@@ -1,4 +1,17 @@
{
"private": true,
- "workspaces": ["packages/*"]
+ "version": "0.3.0",
+ "workspaces": ["packages/*", "smart-contracts"],
+ "scripts": {
+ "compile": "cd smart-contracts && bunx hardhat compile",
+ "export-abi": "cd smart-contracts && bunx hardhat compile && bash scripts/export-abi.sh",
+ "test:contracts": "cd smart-contracts && bunx hardhat test",
+ "test:cli": "cd packages/cli && bun test",
+ "lint": "biome check packages/cli/src/ && biome check packages/dashboard/src/",
+ "build:cli": "cd packages/cli && bun run build",
+ "build:dashboard": "cd packages/dashboard && bun run build",
+ "dev:dashboard": "cd packages/dashboard && bun run dev",
+ "version:check": "node scripts/version-check.mjs",
+ "version:bump": "node scripts/version-bump.mjs"
+ }
}
diff --git a/packages/cli/package.json b/packages/cli/package.json
index 0d017fb..76b14a2 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -1,6 +1,6 @@
{
"name": "@smartclaws/cli",
- "version": "0.2.0",
+ "version": "0.3.0",
"type": "module",
"license": "LGPL-3.0-or-later",
"scripts": {
diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts
index ef62f9e..b0f7d5f 100644
--- a/packages/cli/src/index.ts
+++ b/packages/cli/src/index.ts
@@ -1,5 +1,5 @@
import { program } from "commander";
-import pkg from "../package.json" with { type: "json" };
+import pkg from "../../../package.json" with { type: "json" };
import { deviceCommand } from "./commands/device.ts";
import { initCommand } from "./commands/init.ts";
import { publishCommand } from "./commands/publish.ts";
diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json
index d3d9cfa..bdbf4dc 100644
--- a/packages/cli/tsconfig.json
+++ b/packages/cli/tsconfig.json
@@ -1,20 +1,12 @@
{
+ "extends": "../../tsconfig.base.json",
"compilerOptions": {
- "target": "ES2022",
"module": "NodeNext",
"moduleResolution": "NodeNext",
- "types": [
- "bun"
- ],
- "strict": true,
- "skipLibCheck": true,
+ "types": ["bun"],
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
- "resolveJsonModule": true,
- "allowImportingTsExtensions": true,
- "noEmit": true
+ "allowImportingTsExtensions": true
},
- "include": [
- "src"
- ]
+ "include": ["src"]
}
\ No newline at end of file
diff --git a/packages/core/abi/SmartClaws.json b/packages/core/abi/SmartClaws.json
index dbfcb4a..eeddd76 100644
--- a/packages/core/abi/SmartClaws.json
+++ b/packages/core/abi/SmartClaws.json
@@ -435,5 +435,5 @@
"type": "function"
}
],
- "bytecode": "0x6080604052348015600e575f5ffd5b506154698061001c5f395ff3fe608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c8063abf34d3411610093578063da6b03bc11610063578063da6b03bc146101d8578063e21b38d2146101eb578063e234d141146101fe578063eac3fda414610211575f5ffd5b8063abf34d341461018a578063aca30a2b14610192578063bb510a77146101a5578063c21b8c61146101d0575f5ffd5b8063339adfc1116100ce578063339adfc1146101475780633826b9bc1461015a57806391cab63e1461016d5780639575f6ac14610175575f5ffd5b80630adea754146100f45780630eb8fe7a1461011c578063248cfa0614610132575b5f5ffd5b610107610102366004610c46565b610219565b60405190151581526020015b60405180910390f35b61012461022a565b604051908152602001610113565b610145610140366004610c46565b610239565b005b610107610155366004610c46565b6103b1565b610145610168366004610c46565b6103bd565b6101246105dd565b61017d6105e8565b6040516101139190610c61565b61017d6105f3565b6101456101a0366004610c46565b6105ff565b6101b86101b3366004610cac565b610770565b6040516001600160a01b039091168152602001610113565b610124610812565b6101b86101e6366004610d1b565b61081d565b6101076101f9366004610c46565b61096d565b6101b861020c366004610d8e565b610979565b61017d610a13565b5f6102248183610a1f565b92915050565b5f6102345f610a43565b905090565b610244600282610a1f565b61027157604051633380e54b60e01b81526001600160a01b03821660048201526024015b60405180910390fd5b5f819050806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102b1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102d59190610dfa565b6001600160a01b0316336001600160a01b03161461031757604051638c7aa36d60e01b81526001600160a01b0383166004820152336024820152604401610268565b806001600160a01b03166351b42b006040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561034f575f5ffd5b505af1158015610361573d5f5f3e3d5ffd5b50505050610379826002610a4c90919063ffffffff16565b506040516001600160a01b038316907f12424993dff0cf586ab1b4f4d33eae51852b25c9738d91aa2d625134b874497a905f90a25050565b5f610224600283610a1f565b6103c8600482610a1f565b6103f057604051633f0f01a960e11b81526001600160a01b0382166004820152602401610268565b5f819050806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610430573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104549190610dfa565b6001600160a01b0316336001600160a01b03161461049657604051631c31ad3b60e21b81526001600160a01b0383166004820152336024820152604401610268565b806001600160a01b031663d106542b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104f69190610dfa565b6001600160a01b0316632a20d66b6040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561052d575f5ffd5b505af115801561053f573d5f5f3e3d5ffd5b50505050806001600160a01b03166351b42b006040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561057b575f5ffd5b505af115801561058d573d5f5f3e3d5ffd5b505050506105a5826004610a4c90919063ffffffff16565b506040516001600160a01b038316907f3e085cc53b86c19e2e6dba628297af6b8f76c89d1384dbcc599bab2adfd62d08905f90a25050565b5f6102346004610a43565b60606102345f610a60565b60606102346002610a60565b6106095f82610a1f565b610631576040516362c72c2960e01b81526001600160a01b0382166004820152602401610268565b5f819050806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610671573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106959190610dfa565b6001600160a01b0316336001600160a01b0316146106d7576040516305bfb0e160e11b81526001600160a01b0383166004820152336024820152604401610268565b806001600160a01b0316632a20d66b6040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561070f575f5ffd5b505af1158015610721573d5f5f3e3d5ffd5b50505050610738825f610a4c90919063ffffffff16565b506040516001600160a01b038316907f10812805591e289329d04bb0d7d88280e1db08894b6f4a0d9d4458eed9a50e4f905f90a25050565b5f5f83833060405161078190610c08565b6001600160a01b03938416815260208101929092529091166040820152606001604051809103905ff0801580156107ba573d5f5f3e3d5ffd5b5091508190506107ca5f82610a6c565b50836001600160a01b0316826001600160a01b03167f1d61294d5274ecaf47976300afbb3b7c0cc41dc69ec6c8889658e3d34fa6ce2b60405160405180910390a35092915050565b5f6102346002610a43565b5f5f33833060405161082e90610c08565b6001600160a01b03938416815260208101929092529091166040820152606001604051809103905ff080158015610867573d5f5f3e3d5ffd5b5090505f33843060405161087a90610c08565b6001600160a01b03938416815260208101929092529091166040820152606001604051809103905ff0801580156108b3573d5f5f3e3d5ffd5b5090505f338383306040516108c790610c15565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103905ff080158015610908573d5f5f3e3d5ffd5b509350839050610919600482610a6c565b50836001600160a01b03167f37b3aaf4f807403887412a5994aa1832eface4a8c15501a3311bf21d3279ea3f8a8a8a8a6040516109599493929190610e3d565b60405180910390a250505095945050505050565b5f610224600483610a1f565b5f5f33868686863060405161098d90610c22565b61099c96959493929190610e6e565b604051809103905ff0801580156109b5573d5f5f3e3d5ffd5b5091508190506109c6600282610a6c565b50816001600160a01b03167ff74e41ddfe8be4892fd32a44e184fb47198d3396b764801f2e346737c4c2bacd8787604051610a02929190610ec1565b60405180910390a250949350505050565b60606102346004610a60565b6001600160a01b0381165f90815260018301602052604081205415155b9392505050565b5f610224825490565b5f610a3c836001600160a01b038416610a80565b60605f610a3c83610b63565b5f610a3c836001600160a01b038416610bbc565b5f8181526001830160205260408120548015610b5a575f610aa2600183610edc565b85549091505f90610ab590600190610edc565b9050808214610b14575f865f018281548110610ad357610ad3610efb565b905f5260205f200154905080875f018481548110610af357610af3610efb565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080610b2557610b25610f0f565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610224565b5f915050610224565b6060815f01805480602002602001604051908101604052809291908181526020018280548015610bb057602002820191905f5260205f20905b815481526020019060010190808311610b9c575b50505050509050919050565b5f818152600183016020526040812054610c0157508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610224565b505f610224565b6114d480610f2483390190565b610830806123f883390190565b61280c80612c2883390190565b6001600160a01b0381168114610c43575f5ffd5b50565b5f60208284031215610c56575f5ffd5b8135610a3c81610c2f565b602080825282518282018190525f918401906040840190835b81811015610ca15783516001600160a01b0316835260209384019390920191600101610c7a565b509095945050505050565b5f5f60408385031215610cbd575f5ffd5b8235610cc881610c2f565b946020939093013593505050565b5f5f83601f840112610ce6575f5ffd5b50813567ffffffffffffffff811115610cfd575f5ffd5b602083019150836020828501011115610d14575f5ffd5b9250929050565b5f5f5f5f5f60608688031215610d2f575f5ffd5b853567ffffffffffffffff811115610d45575f5ffd5b610d5188828901610cd6565b909650945050602086013567ffffffffffffffff811115610d70575f5ffd5b610d7c88828901610cd6565b96999598509660400135949350505050565b5f5f5f5f60408587031215610da1575f5ffd5b843567ffffffffffffffff811115610db7575f5ffd5b610dc387828801610cd6565b909550935050602085013567ffffffffffffffff811115610de2575f5ffd5b610dee87828801610cd6565b95989497509550505050565b5f60208284031215610e0a575f5ffd5b8151610a3c81610c2f565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f610e50604083018688610e15565b8281036020840152610e63818587610e15565b979650505050505050565b6001600160a01b03871681526080602082018190525f90610e929083018789610e15565b8281036040840152610ea5818688610e15565b91505060018060a01b0383166060830152979650505050505050565b602081525f610ed4602083018486610e15565b949350505050565b8181038181111561022457634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffdfe60c06040526005805460ff1916600117905534801561001c575f5ffd5b506040516114d43803806114d483398101604081905261003b91610155565b826001600160a01b03811661006957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b610072816100cf565b506001600160a01b03811661009a57604051634a100d5960e01b815260040160405180910390fd5b815f036100ba576040516302f2d9e160e21b815260040160405180910390fd5b6001600160a01b031660805260a0525061018e565b600180546001600160a01b03191690556100e8816100eb565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114610150575f5ffd5b919050565b5f5f5f60608486031215610167575f5ffd5b6101708461013a565b9250602084015191506101856040850161013a565b90509250925092565b60805160a0516113026101d25f395f81816101dd01528181610281015281816107dc01528181610818015261084601525f818161020c015261038501526113025ff3fe608060405234801561000f575f5ffd5b5060043610610148575f3560e01c80637b103999116100bf578063b0b578cd11610079578063b0b578cd146102b8578063ce29e0af146102c0578063cf8ab76b146102d3578063e30c3978146102f4578063e8b348a014610305578063f2fde38b14610318575f5ffd5b80637b103999146102075780638da5cb5b146102465780639ba7da9214610256578063a7d270561461025f578063adc4e1d91461027f578063ae61c5ae146102a5575f5ffd5b80634c7f807d116101105780634c7f807d1461019f5780636c6071aa146101a8578063715018a6146101bd578063763f323d146101c55780637924294e146101d857806379ba5097146101ff575f5ffd5b80632929883d1461014c5780632a20d66b1461016757806331933916146101715780633212dd70146101795780633ef1fc3614610196575b5f5ffd5b61015461032b565b6040519081526020015b60405180910390f35b61016f610365565b005b610154610407565b6005546101869060ff1681565b604051901515815260200161015e565b61015460045481565b61015460025481565b6101b061042d565b60405161015e9190610f0c565b61016f610439565b61016f6101d3366004610f57565b61044a565b6101547f000000000000000000000000000000000000000000000000000000000000000081565b61016f610501565b61022e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161015e565b5f546001600160a01b031661022e565b61015460035481565b61027261026d366004610f7d565b610545565b60405161015e9190610fd7565b7f0000000000000000000000000000000000000000000000000000000000000000610154565b61016f6102b3366004610f57565b610662565b610154610714565b61016f6102ce366004610fe9565b610756565b6102e66102e1366004611057565b610966565b60405161015e929190611077565b6001546001600160a01b031661022e565b610186610313366004610f57565b610bb3565b61016f610326366004610f57565b610bdb565b5f6004545f1480610340575060035460045411155b1561035e576040516324f9528560e11b815260040160405180910390fd5b5060035490565b5f546001600160a01b031633148015906103a85750336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614155b156103c5576040516282b42960e81b815260040160405180910390fd5b60055460ff1615610405576005805460ff1916905560405130907f9dadce7d1fbc48896c5ad91bd8a16a125e4170bd2a6c7dc06799659b5cc2e99c905f90a25b565b5f6003546004541161041857505f90565b600354600454610428919061112c565b905090565b60606104286008610c4b565b610441610c5e565b6104055f610c8a565b610452610c5e565b5f546001600160a01b03166001600160a01b0316816001600160a01b03160361048e576040516301f4baf360e11b815260040160405180910390fd5b5f61049a600883610ca3565b9050806104ca57604051632d8c876360e11b81526001600160a01b03831660048201526024015b60405180910390fd5b6040516001600160a01b038316907f466d40d3c5afb07f32aa87fa68d587f144c6fee2dfb883b3363937d5427e0442905f90a25050565b60015433906001600160a01b031681146105395760405163118cdaa760e01b81526001600160a01b03821660048201526024016104c1565b61054281610c8a565b50565b60606004545f03610569576040516324f9528560e11b815260040160405180910390fd5b600454821061059657600480546040516377ca6c2160e11b815291820184905260248201526044016104c1565b6003548210156105c757600354604051631f288e2560e31b81526104c1918491600401918252602082015260400190565b5f82815260066020526040902080546105df9061113f565b80601f016020809104026020016040519081016040528092919081815260200182805461060b9061113f565b80156106565780601f1061062d57610100808354040283529160200191610656565b820191905f5260205f20905b81548152906001019060200180831161063957829003601f168201915b50505050509050919050565b61066a610c5e565b5f546001600160a01b03166001600160a01b0316816001600160a01b0316036106a6576040516301f4baf360e11b815260040160405180910390fd5b5f6106b2600883610cb7565b9050806106dd57604051636a96952f60e01b81526001600160a01b03831660048201526024016104c1565b6040516001600160a01b038316907f215ef528757ca84646fb5c401012a31bcbf1f99487a51e57a57a0c0afa0d3dd2905f90a25050565b5f6004545f1480610729575060035460045411155b15610747576040516324f9528560e11b815260040160405180910390fd5b6001600454610428919061112c565b60055460ff16610779576040516390f5d9a760e01b815260040160405180910390fd5b5f546001600160a01b0316331480159061079b5750610799600833610ccb565b155b156107b8576040516282b42960e81b815260040160405180910390fd5b805f8190036107da57604051630b8fc7cd60e21b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008111156108445760405163116bd21f60e21b8152600481018290527f000000000000000000000000000000000000000000000000000000000000000060248201526044016104c1565b7f0000000000000000000000000000000000000000000000000000000000000000816002546108739190611177565b1180156108835750600454600354105b156108e85760075f60035481526020019081526020015f205460025f8282546108ac919061112c565b90915550506003545f9081526006602052604081206108ca91610ec2565b600380545f9081526007602052604081205580546001019055610844565b6004545f8181526006602052604090206109038486836111ea565b505f81815260076020526040812083905560028054849290610926908490611177565b9091555050600480546001019055604051819030907fa2a2541c43b1972c43c639076a3bef6240e27c11817c7b20a4caab0db3e4f697905f90a350505050565b6060806004545f0361098b576040516324f9528560e11b815260040160405180910390fd5b6003548410156109bc57600354604051631f288e2560e31b81526104c1918691600401918252602082015260400190565b60045484106109e957600480546040516377ca6c2160e11b815291820186905260248201526044016104c1565b5f846004546109f8919061112c565b905080841115610a255760405163bb1cb70b60e01b815260048101859052602481018290526044016104c1565b8367ffffffffffffffff811115610a3e57610a3e61118a565b604051908082528060200260200182016040528015610a7157816020015b6060815260200190600190039081610a5c5790505b5092508367ffffffffffffffff811115610a8d57610a8d61118a565b604051908082528060200260200182016040528015610ab6578160200160208202803683370190505b5091505f5b84811015610baa575f610ace8288611177565b5f818152600660205260409020805491925090610aea9061113f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b169061113f565b8015610b615780601f10610b3857610100808354040283529160200191610b61565b820191905f5260205f20905b815481529060010190602001808311610b4457829003601f168201915b5050505050858381518110610b7857610b786112a4565b602002602001018190525080848381518110610b9657610b966112a4565b602090810291909101015250600101610abb565b50509250929050565b5f80546001600160a01b0383811691161480610bd55750610bd5600883610ccb565b92915050565b610be3610c5e565b600180546001600160a01b0383166001600160a01b03199091168117909155610c135f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60605f610c5783610cec565b9392505050565b5f546001600160a01b031633146104055760405163118cdaa760e01b81523360048201526024016104c1565b600180546001600160a01b031916905561054281610d44565b5f610c57836001600160a01b038416610d93565b5f610c57836001600160a01b038416610ddf565b6001600160a01b0381165f9081526001830160205260408120541515610c57565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561065657602002820191905f5260205f20905b815481526020019060010190808311610d255750505050509050919050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f818152600183016020526040812054610dd857508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610bd5565b505f610bd5565b5f8181526001830160205260408120548015610eb9575f610e0160018361112c565b85549091505f90610e149060019061112c565b9050808214610e73575f865f018281548110610e3257610e326112a4565b905f5260205f200154905080875f018481548110610e5257610e526112a4565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080610e8457610e846112b8565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610bd5565b5f915050610bd5565b508054610ece9061113f565b5f825580601f10610edd575050565b601f0160209004905f5260205f209081019061054291905b80821115610f08575f8155600101610ef5565b5090565b602080825282518282018190525f918401906040840190835b81811015610f4c5783516001600160a01b0316835260209384019390920191600101610f25565b509095945050505050565b5f60208284031215610f67575f5ffd5b81356001600160a01b0381168114610c57575f5ffd5b5f60208284031215610f8d575f5ffd5b5035919050565b5f81518084525f5b81811015610fb857602081850181015186830182015201610f9c565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f610c576020830184610f94565b5f5f60208385031215610ffa575f5ffd5b823567ffffffffffffffff811115611010575f5ffd5b8301601f81018513611020575f5ffd5b803567ffffffffffffffff811115611036575f5ffd5b856020828401011115611047575f5ffd5b6020919091019590945092505050565b5f5f60408385031215611068575f5ffd5b50508035926020909101359150565b5f604082016040835280855180835260608501915060608160051b8601019250602087015f5b828110156110ce57605f198786030184526110b9858351610f94565b9450602093840193919091019060010161109d565b5050505082810360208401528084518083526020830191506020860192505f5b8181101561110c5783518352602093840193909201916001016110ee565b50909695505050505050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610bd557610bd5611118565b600181811c9082168061115357607f821691505b60208210810361117157634e487b7160e01b5f52602260045260245ffd5b50919050565b80820180821115610bd557610bd5611118565b634e487b7160e01b5f52604160045260245ffd5b601f8211156111e557805f5260205f20601f840160051c810160208510156111c35750805b601f840160051c820191505b818110156111e2575f81556001016111cf565b50505b505050565b67ffffffffffffffff8311156112025761120261118a565b61121683611210835461113f565b8361119e565b5f601f841160018114611247575f85156112305750838201355b5f19600387901b1c1916600186901b1783556111e2565b5f83815260208120601f198716915b828110156112765786850135825560209485019460019092019101611256565b5086821015611292575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220529a0aa1554bed0205b03663020c41541f7929176c3ddd5a3f6f7e5954cd007264736f6c634300081c003360e06040526001805460ff60a01b1916600160a01b179055348015610022575f5ffd5b506040516108303803806108308339810160408190526100419161022d565b836001600160a01b03811661007057604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b610079816100e7565b506001600160a01b038316158061009757506001600160a01b038216155b806100a957506001600160a01b038116155b156100c957604051631e4fbdf760e01b81525f6004820152602401610067565b6001600160a01b0392831660a05290821660c052166080525061027e565b6100f0816101a7565b60a05160405163f2fde38b60e01b81526001600160a01b0383811660048301529091169063f2fde38b906024015f604051808303815f87803b158015610134575f5ffd5b505af1158015610146573d5f5f3e3d5ffd5b505060c05160405163f2fde38b60e01b81526001600160a01b038581166004830152909116925063f2fde38b91506024015f604051808303815f87803b15801561018e575f5ffd5b505af11580156101a0573d5f5f3e3d5ffd5b5050505050565b600180546001600160a01b03191690556101c0816101c3565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114610228575f5ffd5b919050565b5f5f5f5f60808587031215610240575f5ffd5b61024985610212565b935061025760208601610212565b925061026560408601610212565b915061027360608601610212565b905092959194509250565b60805160a05160c0516105666102ca5f395f818160ed01528181610196015261044401525f8181610170015281816101e301526103d001525f818161013c015261021001526105665ff3fe608060405234801561000f575f5ffd5b50600436106100b1575f3560e01c80638da5cb5b1161006e5780638da5cb5b1461015e578063b61db0841461016e578063d106542b14610194578063e30c3978146101ba578063f2fde38b146101cb578063f5bae629146101de575f5ffd5b806302fb0c5e146100b557806351b42b00146100de57806367055564146100e8578063715018a61461012757806379ba50971461012f5780637b10399914610137575b5f5ffd5b6001546100c990600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b6100e6610205565b005b61010f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100d5565b6100e66102b0565b6100e66102c3565b61010f7f000000000000000000000000000000000000000000000000000000000000000081565b5f546001600160a01b031661010f565b7f000000000000000000000000000000000000000000000000000000000000000061010f565b7f000000000000000000000000000000000000000000000000000000000000000061010f565b6001546001600160a01b031661010f565b6100e66101d9366004610503565b61030c565b61010f7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461024d576040516282b42960e81b815260040160405180910390fd5b600154600160a01b900460ff166102775760405163232990cb60e01b815260040160405180910390fd5b6001805460ff60a01b1916905560405130907fa58c733780f5c1527d6106ff1e731cbf2e9ffc0eb11ad399ca33ea55f057ddf4905f90a2565b6102b861037c565b6102c15f6103a8565b565b60015433906001600160a01b031681146103005760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b610309816103a8565b50565b61031461037c565b600180546001600160a01b0383166001600160a01b031990911681179091556103445f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f546001600160a01b031633146102c15760405163118cdaa760e01b81523360048201526024016102f7565b6103b1816104a0565b60405163f2fde38b60e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063f2fde38b906024015f604051808303815f87803b158015610411575f5ffd5b505af1158015610423573d5f5f3e3d5ffd5b505060405163f2fde38b60e01b81526001600160a01b0384811660048301527f000000000000000000000000000000000000000000000000000000000000000016925063f2fde38b91506024015f604051808303815f87803b158015610487575f5ffd5b505af1158015610499573d5f5f3e3d5ffd5b5050505050565b600180546001600160a01b0319169055610309815f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610513575f5ffd5b81356001600160a01b0381168114610529575f5ffd5b939250505056fea264697066735822122009a66e90c44b94249f2291617a50d405bc7ab9840584bec8b20e1e007744c28364736f6c634300081c003360a06040526004805460ff1916600117905534801561001c575f5ffd5b5060405161280c38038061280c83398101604081905261003b91610204565b836001600160a01b03811661006a57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b610073816100cc565b506001600160a01b03811661009d57604051631e4fbdf760e01b81525f6004820152602401610061565b60026100a9848261030e565b5060036100b6838261030e565b506001600160a01b0316608052506103c8915050565b600180546001600160a01b03191690556100e5816100e8565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b038116811461014d575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610175575f5ffd5b81516001600160401b0381111561018e5761018e610152565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101bc576101bc610152565b6040528181528382016020018510156101d3575f5ffd5b5f5b828110156101f1576020818601810151838301820152016101d5565b505f918101602001919091529392505050565b5f5f5f5f60808587031215610217575f5ffd5b61022085610137565b60208601519094506001600160401b0381111561023b575f5ffd5b61024787828801610166565b604087015190945090506001600160401b03811115610264575f5ffd5b61027087828801610166565b92505061027f60608601610137565b905092959194509250565b600181811c9082168061029e57607f821691505b6020821081036102bc57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561030957805f5260205f20601f840160051c810160208510156102e75750805b601f840160051c820191505b81811015610306575f81556001016102f3565b50505b505050565b81516001600160401b0381111561032757610327610152565b61033b81610335845461028a565b846102c2565b6020601f82116001811461036d575f83156103565750848201515b5f19600385901b1c1916600184901b178455610306565b5f84815260208120601f198516915b8281101561039c578785015182556020948501946001909201910161037c565b50848210156103b957868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6080516124176103f55f395f8181610244015281816104c0015281816105fb015261066701526124175ff3fe608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c8063783cec80116100935780639a06d92e116100635780639a06d92e1461028e578063d611d6c8146102a1578063e30c3978146102b6578063f2fde38b146102c7575f5ffd5b8063783cec801461022f57806379ba5097146102375780637b1039991461023f5780638da5cb5b1461027e575f5ffd5b80633b7fdb73116100ce5780633b7fdb731461013c5780634869fe261461015157806351b42b001461021f578063715018a614610227575f5ffd5b806302fb0c5e146100f4578063220e81621461011657806337a0701a1461012b575b5f5ffd5b6004546101019060ff1681565b60405190151581526020015b60405180910390f35b610129610124366004610a39565b6102da565b005b60065460405190815260200161010d565b610144610429565b60405161010d9190610a59565b6101d961015f366004610a39565b60408051608080820183525f808352602080840182905283850182905260609384018290526001600160a01b039586168252600581529084902084519283018552805460ff811615158452610100900486169183019190915260018101548516938201939093526002909201549092169181019190915290565b60405161010d91908151151581526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b6101296104b5565b61012961053f565b610144610550565b61012961055d565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161010d565b5f546001600160a01b0316610266565b61026661029c366004610aa4565b6105a1565b6102a96108a5565b60405161010d9190610b28565b6001546001600160a01b0316610266565b6101296102d5366004610a39565b610905565b6102e2610975565b6001600160a01b0381165f908152600560205260409020805460ff1661032a576040516282d79d60e41b81526001600160a01b03831660048201526024015b60405180910390fd5b60028101548154604051635730e2d760e11b81526001600160a01b036101009092048216600482015291169063ae61c5ae906024015f604051808303815f87803b158015610376575f5ffd5b505af1158015610388573d5f5f3e3d5ffd5b5050505060018101548154604051635730e2d760e11b81526001600160a01b036101009092048216600482015291169063ae61c5ae906024015f604051808303815f87803b1580156103d8575f5ffd5b505af19250505080156103e9575060015b50805460ff191681556040516001600160a01b038316907f8b5dde107afbe1f827425373a7c474984b5479bf4889612cf11598c00a2ec58a905f90a25050565b6003805461043690610b73565b80601f016020809104026020016040519081016040528092919081815260200182805461046290610b73565b80156104ad5780601f10610484576101008083540402835291602001916104ad565b820191905f5260205f20905b81548152906001019060200180831161049057829003601f168201915b505050505081565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104fd576040516282b42960e81b815260040160405180910390fd5b60045460ff161561053d576004805460ff1916905560405130907f1820619d110aba86833e84536b2ba04234f5cb9e87d61baf7846f14398bcfeee905f90a25b565b610547610975565b61053d5f6109a1565b6002805461043690610b73565b60015433906001600160a01b031681146105955760405163118cdaa760e01b81526001600160a01b0382166004820152602401610321565b61059e816109a1565b50565b5f6105aa610975565b60045460ff166105cd5760405163e8431ca760e01b815260040160405180910390fd5b6001600160a01b0383166105f657604051631e4fbdf760e01b81525f6004820152602401610321565b5f30837f000000000000000000000000000000000000000000000000000000000000000060405161062690610a04565b6001600160a01b03938416815260208101929092529091166040820152606001604051809103905ff08015801561065f573d5f5f3e3d5ffd5b5090505f30847f000000000000000000000000000000000000000000000000000000000000000060405161069290610a04565b6001600160a01b03938416815260208101929092529091166040820152606001604051809103905ff0801580156106cb573d5f5f3e3d5ffd5b5060405163763f323d60e01b81526001600160a01b0387811660048301529192509082169063763f323d906024015f604051808303815f87803b158015610710575f5ffd5b505af1158015610722573d5f5f3e3d5ffd5b505050505f8282873060405161073790610a11565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103905ff080158015610778573d5f5f3e3d5ffd5b506040805160808101825260018082526001600160a01b03808b166020808501918252898316858701908152898416606087019081528489165f8181526005909452888420975188549551871661010002610100600160a81b0319911515919091166001600160a81b031990961695909517949094178755905186860180549186166001600160a01b031992831617905590516002909601805496909416958116959095179092556006805493840181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f909101805490921681179091559051919550859250907f40ee62d3a0cf66ef791a7a1f9d6d563ec877b394b8f5c097b6238ac82a68c0e290610892908b908b90610bab565b60405180910390a2505050949350505050565b606060068054806020026020016040519081016040528092919081815260200182805480156108fb57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116108dd575b5050505050905090565b61090d610975565b600180546001600160a01b0383166001600160a01b0319909116811790915561093d5f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f546001600160a01b0316331461053d5760405163118cdaa760e01b8152336004820152602401610321565b600180546001600160a01b031916905561059e815f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6114d480610bda83390190565b610334806120ae83390190565b80356001600160a01b0381168114610a34575f5ffd5b919050565b5f60208284031215610a49575f5ffd5b610a5282610a1e565b9392505050565b602081525f82518060208401525f5b81811015610a855760208186018101516040868401015201610a68565b505f604082850101526040601f19601f83011684010191505092915050565b5f5f5f5f60608587031215610ab7575f5ffd5b843567ffffffffffffffff811115610acd575f5ffd5b8501601f81018713610add575f5ffd5b803567ffffffffffffffff811115610af3575f5ffd5b876020828401011115610b04575f5ffd5b602091820195509350610b18908601610a1e565b9396929550929360400135925050565b602080825282518282018190525f918401906040840190835b81811015610b685783516001600160a01b0316835260209384019390920191600101610b41565b509095945050505050565b600181811c90821680610b8757607f821691505b602082108103610ba557634e487b7160e01b5f52602260045260245ffd5b50919050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f1916010191905056fe60c06040526005805460ff1916600117905534801561001c575f5ffd5b506040516114d43803806114d483398101604081905261003b91610155565b826001600160a01b03811661006957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b610072816100cf565b506001600160a01b03811661009a57604051634a100d5960e01b815260040160405180910390fd5b815f036100ba576040516302f2d9e160e21b815260040160405180910390fd5b6001600160a01b031660805260a0525061018e565b600180546001600160a01b03191690556100e8816100eb565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114610150575f5ffd5b919050565b5f5f5f60608486031215610167575f5ffd5b6101708461013a565b9250602084015191506101856040850161013a565b90509250925092565b60805160a0516113026101d25f395f81816101dd01528181610281015281816107dc01528181610818015261084601525f818161020c015261038501526113025ff3fe608060405234801561000f575f5ffd5b5060043610610148575f3560e01c80637b103999116100bf578063b0b578cd11610079578063b0b578cd146102b8578063ce29e0af146102c0578063cf8ab76b146102d3578063e30c3978146102f4578063e8b348a014610305578063f2fde38b14610318575f5ffd5b80637b103999146102075780638da5cb5b146102465780639ba7da9214610256578063a7d270561461025f578063adc4e1d91461027f578063ae61c5ae146102a5575f5ffd5b80634c7f807d116101105780634c7f807d1461019f5780636c6071aa146101a8578063715018a6146101bd578063763f323d146101c55780637924294e146101d857806379ba5097146101ff575f5ffd5b80632929883d1461014c5780632a20d66b1461016757806331933916146101715780633212dd70146101795780633ef1fc3614610196575b5f5ffd5b61015461032b565b6040519081526020015b60405180910390f35b61016f610365565b005b610154610407565b6005546101869060ff1681565b604051901515815260200161015e565b61015460045481565b61015460025481565b6101b061042d565b60405161015e9190610f0c565b61016f610439565b61016f6101d3366004610f57565b61044a565b6101547f000000000000000000000000000000000000000000000000000000000000000081565b61016f610501565b61022e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161015e565b5f546001600160a01b031661022e565b61015460035481565b61027261026d366004610f7d565b610545565b60405161015e9190610fd7565b7f0000000000000000000000000000000000000000000000000000000000000000610154565b61016f6102b3366004610f57565b610662565b610154610714565b61016f6102ce366004610fe9565b610756565b6102e66102e1366004611057565b610966565b60405161015e929190611077565b6001546001600160a01b031661022e565b610186610313366004610f57565b610bb3565b61016f610326366004610f57565b610bdb565b5f6004545f1480610340575060035460045411155b1561035e576040516324f9528560e11b815260040160405180910390fd5b5060035490565b5f546001600160a01b031633148015906103a85750336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614155b156103c5576040516282b42960e81b815260040160405180910390fd5b60055460ff1615610405576005805460ff1916905560405130907f9dadce7d1fbc48896c5ad91bd8a16a125e4170bd2a6c7dc06799659b5cc2e99c905f90a25b565b5f6003546004541161041857505f90565b600354600454610428919061112c565b905090565b60606104286008610c4b565b610441610c5e565b6104055f610c8a565b610452610c5e565b5f546001600160a01b03166001600160a01b0316816001600160a01b03160361048e576040516301f4baf360e11b815260040160405180910390fd5b5f61049a600883610ca3565b9050806104ca57604051632d8c876360e11b81526001600160a01b03831660048201526024015b60405180910390fd5b6040516001600160a01b038316907f466d40d3c5afb07f32aa87fa68d587f144c6fee2dfb883b3363937d5427e0442905f90a25050565b60015433906001600160a01b031681146105395760405163118cdaa760e01b81526001600160a01b03821660048201526024016104c1565b61054281610c8a565b50565b60606004545f03610569576040516324f9528560e11b815260040160405180910390fd5b600454821061059657600480546040516377ca6c2160e11b815291820184905260248201526044016104c1565b6003548210156105c757600354604051631f288e2560e31b81526104c1918491600401918252602082015260400190565b5f82815260066020526040902080546105df9061113f565b80601f016020809104026020016040519081016040528092919081815260200182805461060b9061113f565b80156106565780601f1061062d57610100808354040283529160200191610656565b820191905f5260205f20905b81548152906001019060200180831161063957829003601f168201915b50505050509050919050565b61066a610c5e565b5f546001600160a01b03166001600160a01b0316816001600160a01b0316036106a6576040516301f4baf360e11b815260040160405180910390fd5b5f6106b2600883610cb7565b9050806106dd57604051636a96952f60e01b81526001600160a01b03831660048201526024016104c1565b6040516001600160a01b038316907f215ef528757ca84646fb5c401012a31bcbf1f99487a51e57a57a0c0afa0d3dd2905f90a25050565b5f6004545f1480610729575060035460045411155b15610747576040516324f9528560e11b815260040160405180910390fd5b6001600454610428919061112c565b60055460ff16610779576040516390f5d9a760e01b815260040160405180910390fd5b5f546001600160a01b0316331480159061079b5750610799600833610ccb565b155b156107b8576040516282b42960e81b815260040160405180910390fd5b805f8190036107da57604051630b8fc7cd60e21b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008111156108445760405163116bd21f60e21b8152600481018290527f000000000000000000000000000000000000000000000000000000000000000060248201526044016104c1565b7f0000000000000000000000000000000000000000000000000000000000000000816002546108739190611177565b1180156108835750600454600354105b156108e85760075f60035481526020019081526020015f205460025f8282546108ac919061112c565b90915550506003545f9081526006602052604081206108ca91610ec2565b600380545f9081526007602052604081205580546001019055610844565b6004545f8181526006602052604090206109038486836111ea565b505f81815260076020526040812083905560028054849290610926908490611177565b9091555050600480546001019055604051819030907fa2a2541c43b1972c43c639076a3bef6240e27c11817c7b20a4caab0db3e4f697905f90a350505050565b6060806004545f0361098b576040516324f9528560e11b815260040160405180910390fd5b6003548410156109bc57600354604051631f288e2560e31b81526104c1918691600401918252602082015260400190565b60045484106109e957600480546040516377ca6c2160e11b815291820186905260248201526044016104c1565b5f846004546109f8919061112c565b905080841115610a255760405163bb1cb70b60e01b815260048101859052602481018290526044016104c1565b8367ffffffffffffffff811115610a3e57610a3e61118a565b604051908082528060200260200182016040528015610a7157816020015b6060815260200190600190039081610a5c5790505b5092508367ffffffffffffffff811115610a8d57610a8d61118a565b604051908082528060200260200182016040528015610ab6578160200160208202803683370190505b5091505f5b84811015610baa575f610ace8288611177565b5f818152600660205260409020805491925090610aea9061113f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b169061113f565b8015610b615780601f10610b3857610100808354040283529160200191610b61565b820191905f5260205f20905b815481529060010190602001808311610b4457829003601f168201915b5050505050858381518110610b7857610b786112a4565b602002602001018190525080848381518110610b9657610b966112a4565b602090810291909101015250600101610abb565b50509250929050565b5f80546001600160a01b0383811691161480610bd55750610bd5600883610ccb565b92915050565b610be3610c5e565b600180546001600160a01b0383166001600160a01b03199091168117909155610c135f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60605f610c5783610cec565b9392505050565b5f546001600160a01b031633146104055760405163118cdaa760e01b81523360048201526024016104c1565b600180546001600160a01b031916905561054281610d44565b5f610c57836001600160a01b038416610d93565b5f610c57836001600160a01b038416610ddf565b6001600160a01b0381165f9081526001830160205260408120541515610c57565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561065657602002820191905f5260205f20905b815481526020019060010190808311610d255750505050509050919050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f818152600183016020526040812054610dd857508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610bd5565b505f610bd5565b5f8181526001830160205260408120548015610eb9575f610e0160018361112c565b85549091505f90610e149060019061112c565b9050808214610e73575f865f018281548110610e3257610e326112a4565b905f5260205f200154905080875f018481548110610e5257610e526112a4565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080610e8457610e846112b8565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610bd5565b5f915050610bd5565b508054610ece9061113f565b5f825580601f10610edd575050565b601f0160209004905f5260205f209081019061054291905b80821115610f08575f8155600101610ef5565b5090565b602080825282518282018190525f918401906040840190835b81811015610f4c5783516001600160a01b0316835260209384019390920191600101610f25565b509095945050505050565b5f60208284031215610f67575f5ffd5b81356001600160a01b0381168114610c57575f5ffd5b5f60208284031215610f8d575f5ffd5b5035919050565b5f81518084525f5b81811015610fb857602081850181015186830182015201610f9c565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f610c576020830184610f94565b5f5f60208385031215610ffa575f5ffd5b823567ffffffffffffffff811115611010575f5ffd5b8301601f81018513611020575f5ffd5b803567ffffffffffffffff811115611036575f5ffd5b856020828401011115611047575f5ffd5b6020919091019590945092505050565b5f5f60408385031215611068575f5ffd5b50508035926020909101359150565b5f604082016040835280855180835260608501915060608160051b8601019250602087015f5b828110156110ce57605f198786030184526110b9858351610f94565b9450602093840193919091019060010161109d565b5050505082810360208401528084518083526020830191506020860192505f5b8181101561110c5783518352602093840193909201916001016110ee565b50909695505050505050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610bd557610bd5611118565b600181811c9082168061115357607f821691505b60208210810361117157634e487b7160e01b5f52602260045260245ffd5b50919050565b80820180821115610bd557610bd5611118565b634e487b7160e01b5f52604160045260245ffd5b601f8211156111e557805f5260205f20601f840160051c810160208510156111c35750805b601f840160051c820191505b818110156111e2575f81556001016111cf565b50505b505050565b67ffffffffffffffff8311156112025761120261118a565b61121683611210835461113f565b8361119e565b5f601f841160018114611247575f85156112305750838201355b5f19600387901b1c1916600186901b1783556111e2565b5f83815260208120601f198716915b828110156112765786850135825560209485019460019092019101611256565b5086821015611292575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220529a0aa1554bed0205b03663020c41541f7929176c3ddd5a3f6f7e5954cd007264736f6c634300081c0033610100604052348015610010575f5ffd5b5060405161033438038061033483398101604081905261002f91610108565b6001600160a01b0384166100565760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03831661007d5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0382166100a45760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381166100cb5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0393841660805291831660a052821660c0521660e052610159565b80516001600160a01b0381168114610103575f5ffd5b919050565b5f5f5f5f6080858703121561011b575f5ffd5b610124856100ed565b9350610132602086016100ed565b9250610140604086016100ed565b915061014e606086016100ed565b905092959194509250565b60805160a05160c05160e05161019e6101965f395f606901525f60d301525f818160ac015261011d01525f818160f70152610146015261019e5ff3fe608060405234801561000f575f5ffd5b5060043610610060575f3560e01c806329e7ef2d1461006457806367055564146100a75780638c72c54e146100ce578063b61db084146100f5578063d106542b1461011b578063f5bae62914610141575b5f5ffd5b61008b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b61008b7f000000000000000000000000000000000000000000000000000000000000000081565b61008b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000061008b565b7f000000000000000000000000000000000000000000000000000000000000000061008b565b61008b7f00000000000000000000000000000000000000000000000000000000000000008156fea2646970667358221220ed204b916a188187be4b5f5107f062498136c9b26b5af45732c1999cabb8135b64736f6c634300081c0033a2646970667358221220cc98e4fcb8897f4e0f6164b29b69cb8d56fe98af407c33da2eab0962189f058b64736f6c634300081c0033a2646970667358221220eab686eff07fa636b5f716984ac6858eac99df1a8afdc92ddf3f99f106c2049d64736f6c634300081c0033"
+ "bytecode": "0x6080604052348015600e575f5ffd5b506154148061001c5f395ff3fe608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c8063abf34d3411610093578063da6b03bc11610063578063da6b03bc146101d8578063e21b38d2146101eb578063e234d141146101fe578063eac3fda414610211575f5ffd5b8063abf34d341461018a578063aca30a2b14610192578063bb510a77146101a5578063c21b8c61146101d0575f5ffd5b8063339adfc1116100ce578063339adfc1146101475780633826b9bc1461015a57806391cab63e1461016d5780639575f6ac14610175575f5ffd5b80630adea754146100f45780630eb8fe7a1461011c578063248cfa0614610132575b5f5ffd5b610107610102366004610c46565b610219565b60405190151581526020015b60405180910390f35b61012461022a565b604051908152602001610113565b610145610140366004610c46565b610239565b005b610107610155366004610c46565b6103b1565b610145610168366004610c46565b6103bd565b6101246105dd565b61017d6105e8565b6040516101139190610c61565b61017d6105f3565b6101456101a0366004610c46565b6105ff565b6101b86101b3366004610cac565b610770565b6040516001600160a01b039091168152602001610113565b610124610812565b6101b86101e6366004610d1b565b61081d565b6101076101f9366004610c46565b61096d565b6101b861020c366004610d8e565b610979565b61017d610a13565b5f6102248183610a1f565b92915050565b5f6102345f610a43565b905090565b610244600282610a1f565b61027157604051633380e54b60e01b81526001600160a01b03821660048201526024015b60405180910390fd5b5f819050806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102b1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102d59190610dfa565b6001600160a01b0316336001600160a01b03161461031757604051638c7aa36d60e01b81526001600160a01b0383166004820152336024820152604401610268565b806001600160a01b03166351b42b006040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561034f575f5ffd5b505af1158015610361573d5f5f3e3d5ffd5b50505050610379826002610a4c90919063ffffffff16565b506040516001600160a01b038316907f12424993dff0cf586ab1b4f4d33eae51852b25c9738d91aa2d625134b874497a905f90a25050565b5f610224600283610a1f565b6103c8600482610a1f565b6103f057604051633f0f01a960e11b81526001600160a01b0382166004820152602401610268565b5f819050806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610430573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104549190610dfa565b6001600160a01b0316336001600160a01b03161461049657604051631c31ad3b60e21b81526001600160a01b0383166004820152336024820152604401610268565b806001600160a01b031663d106542b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104f69190610dfa565b6001600160a01b0316632a20d66b6040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561052d575f5ffd5b505af115801561053f573d5f5f3e3d5ffd5b50505050806001600160a01b03166351b42b006040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561057b575f5ffd5b505af115801561058d573d5f5f3e3d5ffd5b505050506105a5826004610a4c90919063ffffffff16565b506040516001600160a01b038316907f3e085cc53b86c19e2e6dba628297af6b8f76c89d1384dbcc599bab2adfd62d08905f90a25050565b5f6102346004610a43565b60606102345f610a60565b60606102346002610a60565b6106095f82610a1f565b610631576040516362c72c2960e01b81526001600160a01b0382166004820152602401610268565b5f819050806001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610671573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106959190610dfa565b6001600160a01b0316336001600160a01b0316146106d7576040516305bfb0e160e11b81526001600160a01b0383166004820152336024820152604401610268565b806001600160a01b0316632a20d66b6040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561070f575f5ffd5b505af1158015610721573d5f5f3e3d5ffd5b50505050610738825f610a4c90919063ffffffff16565b506040516001600160a01b038316907f10812805591e289329d04bb0d7d88280e1db08894b6f4a0d9d4458eed9a50e4f905f90a25050565b5f5f83833060405161078190610c08565b6001600160a01b03938416815260208101929092529091166040820152606001604051809103905ff0801580156107ba573d5f5f3e3d5ffd5b5091508190506107ca5f82610a6c565b50836001600160a01b0316826001600160a01b03167f1d61294d5274ecaf47976300afbb3b7c0cc41dc69ec6c8889658e3d34fa6ce2b60405160405180910390a35092915050565b5f6102346002610a43565b5f5f33833060405161082e90610c08565b6001600160a01b03938416815260208101929092529091166040820152606001604051809103905ff080158015610867573d5f5f3e3d5ffd5b5090505f33843060405161087a90610c08565b6001600160a01b03938416815260208101929092529091166040820152606001604051809103905ff0801580156108b3573d5f5f3e3d5ffd5b5090505f338383306040516108c790610c15565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103905ff080158015610908573d5f5f3e3d5ffd5b509350839050610919600482610a6c565b50836001600160a01b03167f37b3aaf4f807403887412a5994aa1832eface4a8c15501a3311bf21d3279ea3f8a8a8a8a6040516109599493929190610e3d565b60405180910390a250505095945050505050565b5f610224600483610a1f565b5f5f33868686863060405161098d90610c22565b61099c96959493929190610e6e565b604051809103905ff0801580156109b5573d5f5f3e3d5ffd5b5091508190506109c6600282610a6c565b50816001600160a01b03167ff74e41ddfe8be4892fd32a44e184fb47198d3396b764801f2e346737c4c2bacd8787604051610a02929190610ec1565b60405180910390a250949350505050565b60606102346004610a60565b6001600160a01b0381165f90815260018301602052604081205415155b9392505050565b5f610224825490565b5f610a3c836001600160a01b038416610a80565b60605f610a3c83610b63565b5f610a3c836001600160a01b038416610bbc565b5f8181526001830160205260408120548015610b5a575f610aa2600183610edc565b85549091505f90610ab590600190610edc565b9050808214610b14575f865f018281548110610ad357610ad3610efb565b905f5260205f200154905080875f018481548110610af357610af3610efb565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080610b2557610b25610f0f565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610224565b5f915050610224565b6060815f01805480602002602001604051908101604052809291908181526020018280548015610bb057602002820191905f5260205f20905b815481526020019060010190808311610b9c575b50505050509050919050565b5f818152600183016020526040812054610c0157508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610224565b505f610224565b6114bf80610f2483390190565b610830806123e383390190565b6127cc80612c1383390190565b6001600160a01b0381168114610c43575f5ffd5b50565b5f60208284031215610c56575f5ffd5b8135610a3c81610c2f565b602080825282518282018190525f918401906040840190835b81811015610ca15783516001600160a01b0316835260209384019390920191600101610c7a565b509095945050505050565b5f5f60408385031215610cbd575f5ffd5b8235610cc881610c2f565b946020939093013593505050565b5f5f83601f840112610ce6575f5ffd5b50813567ffffffffffffffff811115610cfd575f5ffd5b602083019150836020828501011115610d14575f5ffd5b9250929050565b5f5f5f5f5f60608688031215610d2f575f5ffd5b853567ffffffffffffffff811115610d45575f5ffd5b610d5188828901610cd6565b909650945050602086013567ffffffffffffffff811115610d70575f5ffd5b610d7c88828901610cd6565b96999598509660400135949350505050565b5f5f5f5f60408587031215610da1575f5ffd5b843567ffffffffffffffff811115610db7575f5ffd5b610dc387828801610cd6565b909550935050602085013567ffffffffffffffff811115610de2575f5ffd5b610dee87828801610cd6565b95989497509550505050565b5f60208284031215610e0a575f5ffd5b8151610a3c81610c2f565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b604081525f610e50604083018688610e15565b8281036020840152610e63818587610e15565b979650505050505050565b6001600160a01b03871681526080602082018190525f90610e929083018789610e15565b8281036040840152610ea5818688610e15565b91505060018060a01b0383166060830152979650505050505050565b602081525f610ed4602083018486610e15565b949350505050565b8181038181111561022457634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffdfe60c06040526005805460ff1916600117905534801561001c575f5ffd5b506040516114bf3803806114bf83398101604081905261003b91610155565b826001600160a01b03811661006957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b610072816100cf565b506001600160a01b03811661009a57604051634a100d5960e01b815260040160405180910390fd5b815f036100ba576040516302f2d9e160e21b815260040160405180910390fd5b6001600160a01b031660805260a0525061018e565b600180546001600160a01b03191690556100e8816100eb565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114610150575f5ffd5b919050565b5f5f5f60608486031215610167575f5ffd5b6101708461013a565b9250602084015191506101856040850161013a565b90509250925092565b60805160a0516112ed6101d25f395f81816101dd01528181610281015281816107dc01528181610818015261084601525f818161020c015261038501526112ed5ff3fe608060405234801561000f575f5ffd5b5060043610610148575f3560e01c80637b103999116100bf578063b0b578cd11610079578063b0b578cd146102b8578063ce29e0af146102c0578063cf8ab76b146102d3578063e30c3978146102f4578063e8b348a014610305578063f2fde38b14610318575f5ffd5b80637b103999146102075780638da5cb5b146102465780639ba7da9214610256578063a7d270561461025f578063adc4e1d91461027f578063ae61c5ae146102a5575f5ffd5b80634c7f807d116101105780634c7f807d1461019f5780636c6071aa146101a8578063715018a6146101bd578063763f323d146101c55780637924294e146101d857806379ba5097146101ff575f5ffd5b80632929883d1461014c5780632a20d66b1461016757806331933916146101715780633212dd70146101795780633ef1fc3614610196575b5f5ffd5b61015461032b565b6040519081526020015b60405180910390f35b61016f610365565b005b610154610407565b6005546101869060ff1681565b604051901515815260200161015e565b61015460045481565b61015460025481565b6101b061042d565b60405161015e9190610f0c565b61016f610439565b61016f6101d3366004610f57565b61044a565b6101547f000000000000000000000000000000000000000000000000000000000000000081565b61016f610501565b61022e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161015e565b5f546001600160a01b031661022e565b61015460035481565b61027261026d366004610f7d565b610545565b60405161015e9190610fc2565b7f0000000000000000000000000000000000000000000000000000000000000000610154565b61016f6102b3366004610f57565b610662565b610154610714565b61016f6102ce366004610fd4565b610756565b6102e66102e1366004611042565b610966565b60405161015e929190611062565b6001546001600160a01b031661022e565b610186610313366004610f57565b610bb3565b61016f610326366004610f57565b610bdb565b5f6004545f1480610340575060035460045411155b1561035e576040516324f9528560e11b815260040160405180910390fd5b5060035490565b5f546001600160a01b031633148015906103a85750336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614155b156103c5576040516282b42960e81b815260040160405180910390fd5b60055460ff1615610405576005805460ff1916905560405130907f9dadce7d1fbc48896c5ad91bd8a16a125e4170bd2a6c7dc06799659b5cc2e99c905f90a25b565b5f6003546004541161041857505f90565b6003546004546104289190611117565b905090565b60606104286008610c4b565b610441610c5e565b6104055f610c8a565b610452610c5e565b5f546001600160a01b03166001600160a01b0316816001600160a01b03160361048e576040516301f4baf360e11b815260040160405180910390fd5b5f61049a600883610ca3565b9050806104ca57604051632d8c876360e11b81526001600160a01b03831660048201526024015b60405180910390fd5b6040516001600160a01b038316907f466d40d3c5afb07f32aa87fa68d587f144c6fee2dfb883b3363937d5427e0442905f90a25050565b60015433906001600160a01b031681146105395760405163118cdaa760e01b81526001600160a01b03821660048201526024016104c1565b61054281610c8a565b50565b60606004545f03610569576040516324f9528560e11b815260040160405180910390fd5b600454821061059657600480546040516377ca6c2160e11b815291820184905260248201526044016104c1565b6003548210156105c757600354604051631f288e2560e31b81526104c1918491600401918252602082015260400190565b5f82815260066020526040902080546105df9061112a565b80601f016020809104026020016040519081016040528092919081815260200182805461060b9061112a565b80156106565780601f1061062d57610100808354040283529160200191610656565b820191905f5260205f20905b81548152906001019060200180831161063957829003601f168201915b50505050509050919050565b61066a610c5e565b5f546001600160a01b03166001600160a01b0316816001600160a01b0316036106a6576040516301f4baf360e11b815260040160405180910390fd5b5f6106b2600883610cb7565b9050806106dd57604051636a96952f60e01b81526001600160a01b03831660048201526024016104c1565b6040516001600160a01b038316907f215ef528757ca84646fb5c401012a31bcbf1f99487a51e57a57a0c0afa0d3dd2905f90a25050565b5f6004545f1480610729575060035460045411155b15610747576040516324f9528560e11b815260040160405180910390fd5b60016004546104289190611117565b60055460ff16610779576040516390f5d9a760e01b815260040160405180910390fd5b5f546001600160a01b0316331480159061079b5750610799600833610ccb565b155b156107b8576040516282b42960e81b815260040160405180910390fd5b805f8190036107da57604051630b8fc7cd60e21b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008111156108445760405163116bd21f60e21b8152600481018290527f000000000000000000000000000000000000000000000000000000000000000060248201526044016104c1565b7f0000000000000000000000000000000000000000000000000000000000000000816002546108739190611162565b1180156108835750600454600354105b156108e85760075f60035481526020019081526020015f205460025f8282546108ac9190611117565b90915550506003545f9081526006602052604081206108ca91610ec2565b600380545f9081526007602052604081205580546001019055610844565b6004545f8181526006602052604090206109038486836111d5565b505f81815260076020526040812083905560028054849290610926908490611162565b9091555050600480546001019055604051819030907fa2a2541c43b1972c43c639076a3bef6240e27c11817c7b20a4caab0db3e4f697905f90a350505050565b6060806004545f0361098b576040516324f9528560e11b815260040160405180910390fd5b6003548410156109bc57600354604051631f288e2560e31b81526104c1918691600401918252602082015260400190565b60045484106109e957600480546040516377ca6c2160e11b815291820186905260248201526044016104c1565b5f846004546109f89190611117565b905080841115610a255760405163bb1cb70b60e01b815260048101859052602481018290526044016104c1565b8367ffffffffffffffff811115610a3e57610a3e611175565b604051908082528060200260200182016040528015610a7157816020015b6060815260200190600190039081610a5c5790505b5092508367ffffffffffffffff811115610a8d57610a8d611175565b604051908082528060200260200182016040528015610ab6578160200160208202803683370190505b5091505f5b84811015610baa575f610ace8288611162565b5f818152600660205260409020805491925090610aea9061112a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b169061112a565b8015610b615780601f10610b3857610100808354040283529160200191610b61565b820191905f5260205f20905b815481529060010190602001808311610b4457829003601f168201915b5050505050858381518110610b7857610b7861128f565b602002602001018190525080848381518110610b9657610b9661128f565b602090810291909101015250600101610abb565b50509250929050565b5f80546001600160a01b0383811691161480610bd55750610bd5600883610ccb565b92915050565b610be3610c5e565b600180546001600160a01b0383166001600160a01b03199091168117909155610c135f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60605f610c5783610cec565b9392505050565b5f546001600160a01b031633146104055760405163118cdaa760e01b81523360048201526024016104c1565b600180546001600160a01b031916905561054281610d44565b5f610c57836001600160a01b038416610d93565b5f610c57836001600160a01b038416610ddf565b6001600160a01b0381165f9081526001830160205260408120541515610c57565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561065657602002820191905f5260205f20905b815481526020019060010190808311610d255750505050509050919050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f818152600183016020526040812054610dd857508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610bd5565b505f610bd5565b5f8181526001830160205260408120548015610eb9575f610e01600183611117565b85549091505f90610e1490600190611117565b9050808214610e73575f865f018281548110610e3257610e3261128f565b905f5260205f200154905080875f018481548110610e5257610e5261128f565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080610e8457610e846112a3565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610bd5565b5f915050610bd5565b508054610ece9061112a565b5f825580601f10610edd575050565b601f0160209004905f5260205f209081019061054291905b80821115610f08575f8155600101610ef5565b5090565b602080825282518282018190525f918401906040840190835b81811015610f4c5783516001600160a01b0316835260209384019390920191600101610f25565b509095945050505050565b5f60208284031215610f67575f5ffd5b81356001600160a01b0381168114610c57575f5ffd5b5f60208284031215610f8d575f5ffd5b5035919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610c576020830184610f94565b5f5f60208385031215610fe5575f5ffd5b823567ffffffffffffffff811115610ffb575f5ffd5b8301601f8101851361100b575f5ffd5b803567ffffffffffffffff811115611021575f5ffd5b856020828401011115611032575f5ffd5b6020919091019590945092505050565b5f5f60408385031215611053575f5ffd5b50508035926020909101359150565b5f604082016040835280855180835260608501915060608160051b8601019250602087015f5b828110156110b957605f198786030184526110a4858351610f94565b94506020938401939190910190600101611088565b5050505082810360208401528084518083526020830191506020860192505f5b818110156110f75783518352602093840193909201916001016110d9565b50909695505050505050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610bd557610bd5611103565b600181811c9082168061113e57607f821691505b60208210810361115c57634e487b7160e01b5f52602260045260245ffd5b50919050565b80820180821115610bd557610bd5611103565b634e487b7160e01b5f52604160045260245ffd5b601f8211156111d057805f5260205f20601f840160051c810160208510156111ae5750805b601f840160051c820191505b818110156111cd575f81556001016111ba565b50505b505050565b67ffffffffffffffff8311156111ed576111ed611175565b611201836111fb835461112a565b83611189565b5f601f841160018114611232575f851561121b5750838201355b5f19600387901b1c1916600186901b1783556111cd565b5f83815260208120601f198716915b828110156112615786850135825560209485019460019092019101611241565b508682101561127d575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220b5aba89e2383af65925a0a3588b2894561865509b56096b726d8120603bc74ad64736f6c634300081c003360e06040526001805460ff60a01b1916600160a01b179055348015610022575f5ffd5b506040516108303803806108308339810160408190526100419161022d565b836001600160a01b03811661007057604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b610079816100e7565b506001600160a01b038316158061009757506001600160a01b038216155b806100a957506001600160a01b038116155b156100c957604051631e4fbdf760e01b81525f6004820152602401610067565b6001600160a01b0392831660a05290821660c052166080525061027e565b6100f0816101a7565b60a05160405163f2fde38b60e01b81526001600160a01b0383811660048301529091169063f2fde38b906024015f604051808303815f87803b158015610134575f5ffd5b505af1158015610146573d5f5f3e3d5ffd5b505060c05160405163f2fde38b60e01b81526001600160a01b038581166004830152909116925063f2fde38b91506024015f604051808303815f87803b15801561018e575f5ffd5b505af11580156101a0573d5f5f3e3d5ffd5b5050505050565b600180546001600160a01b03191690556101c0816101c3565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114610228575f5ffd5b919050565b5f5f5f5f60808587031215610240575f5ffd5b61024985610212565b935061025760208601610212565b925061026560408601610212565b915061027360608601610212565b905092959194509250565b60805160a05160c0516105666102ca5f395f818160ed01528181610196015261044401525f8181610170015281816101e301526103d001525f818161013c015261021001526105665ff3fe608060405234801561000f575f5ffd5b50600436106100b1575f3560e01c80638da5cb5b1161006e5780638da5cb5b1461015e578063b61db0841461016e578063d106542b14610194578063e30c3978146101ba578063f2fde38b146101cb578063f5bae629146101de575f5ffd5b806302fb0c5e146100b557806351b42b00146100de57806367055564146100e8578063715018a61461012757806379ba50971461012f5780637b10399914610137575b5f5ffd5b6001546100c990600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b6100e6610205565b005b61010f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100d5565b6100e66102b0565b6100e66102c3565b61010f7f000000000000000000000000000000000000000000000000000000000000000081565b5f546001600160a01b031661010f565b7f000000000000000000000000000000000000000000000000000000000000000061010f565b7f000000000000000000000000000000000000000000000000000000000000000061010f565b6001546001600160a01b031661010f565b6100e66101d9366004610503565b61030c565b61010f7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461024d576040516282b42960e81b815260040160405180910390fd5b600154600160a01b900460ff166102775760405163232990cb60e01b815260040160405180910390fd5b6001805460ff60a01b1916905560405130907fa58c733780f5c1527d6106ff1e731cbf2e9ffc0eb11ad399ca33ea55f057ddf4905f90a2565b6102b861037c565b6102c15f6103a8565b565b60015433906001600160a01b031681146103005760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b610309816103a8565b50565b61031461037c565b600180546001600160a01b0383166001600160a01b031990911681179091556103445f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f546001600160a01b031633146102c15760405163118cdaa760e01b81523360048201526024016102f7565b6103b1816104a0565b60405163f2fde38b60e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063f2fde38b906024015f604051808303815f87803b158015610411575f5ffd5b505af1158015610423573d5f5f3e3d5ffd5b505060405163f2fde38b60e01b81526001600160a01b0384811660048301527f000000000000000000000000000000000000000000000000000000000000000016925063f2fde38b91506024015f604051808303815f87803b158015610487575f5ffd5b505af1158015610499573d5f5f3e3d5ffd5b5050505050565b600180546001600160a01b0319169055610309815f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610513575f5ffd5b81356001600160a01b0381168114610529575f5ffd5b939250505056fea26469706673582212205c167df9d2cf3a57266ea27992ff77656faf813eb23a0acc2b09702b9717166b64736f6c634300081c003360a06040526004805460ff1916600117905534801561001c575f5ffd5b506040516127cc3803806127cc83398101604081905261003b916101ef565b836001600160a01b03811661006a57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b610073816100cc565b506001600160a01b03811661009d57604051631e4fbdf760e01b81525f6004820152602401610061565b60026100a984826102f9565b5060036100b683826102f9565b506001600160a01b0316608052506103b3915050565b600180546001600160a01b03191690556100e5816100e8565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b038116811461014d575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610175575f5ffd5b81516001600160401b0381111561018e5761018e610152565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101bc576101bc610152565b6040528181528382016020018510156101d3575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f5f60808587031215610202575f5ffd5b61020b85610137565b60208601519094506001600160401b03811115610226575f5ffd5b61023287828801610166565b604087015190945090506001600160401b0381111561024f575f5ffd5b61025b87828801610166565b92505061026a60608601610137565b905092959194509250565b600181811c9082168061028957607f821691505b6020821081036102a757634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156102f457805f5260205f20601f840160051c810160208510156102d25750805b601f840160051c820191505b818110156102f1575f81556001016102de565b50505b505050565b81516001600160401b0381111561031257610312610152565b610326816103208454610275565b846102ad565b6020601f821160018114610358575f83156103415750848201515b5f19600385901b1c1916600184901b1784556102f1565b5f84815260208120601f198516915b828110156103875787850151825560209485019460019092019101610367565b50848210156103a457868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6080516123ec6103e05f395f8181610244015281816104c0015281816105fb015261066701526123ec5ff3fe608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c8063783cec80116100935780639a06d92e116100635780639a06d92e1461028e578063d611d6c8146102a1578063e30c3978146102b6578063f2fde38b146102c7575f5ffd5b8063783cec801461022f57806379ba5097146102375780637b1039991461023f5780638da5cb5b1461027e575f5ffd5b80633b7fdb73116100ce5780633b7fdb731461013c5780634869fe261461015157806351b42b001461021f578063715018a614610227575f5ffd5b806302fb0c5e146100f4578063220e81621461011657806337a0701a1461012b575b5f5ffd5b6004546101019060ff1681565b60405190151581526020015b60405180910390f35b610129610124366004610a39565b6102da565b005b60065460405190815260200161010d565b610144610429565b60405161010d9190610a59565b6101d961015f366004610a39565b60408051608080820183525f808352602080840182905283850182905260609384018290526001600160a01b039586168252600581529084902084519283018552805460ff811615158452610100900486169183019190915260018101548516938201939093526002909201549092169181019190915290565b60405161010d91908151151581526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b6101296104b5565b61012961053f565b610144610550565b61012961055d565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161010d565b5f546001600160a01b0316610266565b61026661029c366004610a8e565b6105a1565b6102a96108a5565b60405161010d9190610b12565b6001546001600160a01b0316610266565b6101296102d5366004610a39565b610905565b6102e2610975565b6001600160a01b0381165f908152600560205260409020805460ff1661032a576040516282d79d60e41b81526001600160a01b03831660048201526024015b60405180910390fd5b60028101548154604051635730e2d760e11b81526001600160a01b036101009092048216600482015291169063ae61c5ae906024015f604051808303815f87803b158015610376575f5ffd5b505af1158015610388573d5f5f3e3d5ffd5b5050505060018101548154604051635730e2d760e11b81526001600160a01b036101009092048216600482015291169063ae61c5ae906024015f604051808303815f87803b1580156103d8575f5ffd5b505af19250505080156103e9575060015b50805460ff191681556040516001600160a01b038316907f8b5dde107afbe1f827425373a7c474984b5479bf4889612cf11598c00a2ec58a905f90a25050565b6003805461043690610b5d565b80601f016020809104026020016040519081016040528092919081815260200182805461046290610b5d565b80156104ad5780601f10610484576101008083540402835291602001916104ad565b820191905f5260205f20905b81548152906001019060200180831161049057829003601f168201915b505050505081565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104fd576040516282b42960e81b815260040160405180910390fd5b60045460ff161561053d576004805460ff1916905560405130907f1820619d110aba86833e84536b2ba04234f5cb9e87d61baf7846f14398bcfeee905f90a25b565b610547610975565b61053d5f6109a1565b6002805461043690610b5d565b60015433906001600160a01b031681146105955760405163118cdaa760e01b81526001600160a01b0382166004820152602401610321565b61059e816109a1565b50565b5f6105aa610975565b60045460ff166105cd5760405163e8431ca760e01b815260040160405180910390fd5b6001600160a01b0383166105f657604051631e4fbdf760e01b81525f6004820152602401610321565b5f30837f000000000000000000000000000000000000000000000000000000000000000060405161062690610a04565b6001600160a01b03938416815260208101929092529091166040820152606001604051809103905ff08015801561065f573d5f5f3e3d5ffd5b5090505f30847f000000000000000000000000000000000000000000000000000000000000000060405161069290610a04565b6001600160a01b03938416815260208101929092529091166040820152606001604051809103905ff0801580156106cb573d5f5f3e3d5ffd5b5060405163763f323d60e01b81526001600160a01b0387811660048301529192509082169063763f323d906024015f604051808303815f87803b158015610710575f5ffd5b505af1158015610722573d5f5f3e3d5ffd5b505050505f8282873060405161073790610a11565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103905ff080158015610778573d5f5f3e3d5ffd5b506040805160808101825260018082526001600160a01b03808b166020808501918252898316858701908152898416606087019081528489165f8181526005909452888420975188549551871661010002610100600160a81b0319911515919091166001600160a81b031990961695909517949094178755905186860180549186166001600160a01b031992831617905590516002909601805496909416958116959095179092556006805493840181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f909101805490921681179091559051919550859250907f40ee62d3a0cf66ef791a7a1f9d6d563ec877b394b8f5c097b6238ac82a68c0e290610892908b908b90610b95565b60405180910390a2505050949350505050565b606060068054806020026020016040519081016040528092919081815260200182805480156108fb57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116108dd575b5050505050905090565b61090d610975565b600180546001600160a01b0383166001600160a01b0319909116811790915561093d5f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f546001600160a01b0316331461053d5760405163118cdaa760e01b8152336004820152602401610321565b600180546001600160a01b031916905561059e815f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6114bf80610bc483390190565b6103348061208383390190565b80356001600160a01b0381168114610a34575f5ffd5b919050565b5f60208284031215610a49575f5ffd5b610a5282610a1e565b9392505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f5f5f60608587031215610aa1575f5ffd5b843567ffffffffffffffff811115610ab7575f5ffd5b8501601f81018713610ac7575f5ffd5b803567ffffffffffffffff811115610add575f5ffd5b876020828401011115610aee575f5ffd5b602091820195509350610b02908601610a1e565b9396929550929360400135925050565b602080825282518282018190525f918401906040840190835b81811015610b525783516001600160a01b0316835260209384019390920191600101610b2b565b509095945050505050565b600181811c90821680610b7157607f821691505b602082108103610b8f57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f1916010191905056fe60c06040526005805460ff1916600117905534801561001c575f5ffd5b506040516114bf3803806114bf83398101604081905261003b91610155565b826001600160a01b03811661006957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b610072816100cf565b506001600160a01b03811661009a57604051634a100d5960e01b815260040160405180910390fd5b815f036100ba576040516302f2d9e160e21b815260040160405180910390fd5b6001600160a01b031660805260a0525061018e565b600180546001600160a01b03191690556100e8816100eb565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114610150575f5ffd5b919050565b5f5f5f60608486031215610167575f5ffd5b6101708461013a565b9250602084015191506101856040850161013a565b90509250925092565b60805160a0516112ed6101d25f395f81816101dd01528181610281015281816107dc01528181610818015261084601525f818161020c015261038501526112ed5ff3fe608060405234801561000f575f5ffd5b5060043610610148575f3560e01c80637b103999116100bf578063b0b578cd11610079578063b0b578cd146102b8578063ce29e0af146102c0578063cf8ab76b146102d3578063e30c3978146102f4578063e8b348a014610305578063f2fde38b14610318575f5ffd5b80637b103999146102075780638da5cb5b146102465780639ba7da9214610256578063a7d270561461025f578063adc4e1d91461027f578063ae61c5ae146102a5575f5ffd5b80634c7f807d116101105780634c7f807d1461019f5780636c6071aa146101a8578063715018a6146101bd578063763f323d146101c55780637924294e146101d857806379ba5097146101ff575f5ffd5b80632929883d1461014c5780632a20d66b1461016757806331933916146101715780633212dd70146101795780633ef1fc3614610196575b5f5ffd5b61015461032b565b6040519081526020015b60405180910390f35b61016f610365565b005b610154610407565b6005546101869060ff1681565b604051901515815260200161015e565b61015460045481565b61015460025481565b6101b061042d565b60405161015e9190610f0c565b61016f610439565b61016f6101d3366004610f57565b61044a565b6101547f000000000000000000000000000000000000000000000000000000000000000081565b61016f610501565b61022e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161015e565b5f546001600160a01b031661022e565b61015460035481565b61027261026d366004610f7d565b610545565b60405161015e9190610fc2565b7f0000000000000000000000000000000000000000000000000000000000000000610154565b61016f6102b3366004610f57565b610662565b610154610714565b61016f6102ce366004610fd4565b610756565b6102e66102e1366004611042565b610966565b60405161015e929190611062565b6001546001600160a01b031661022e565b610186610313366004610f57565b610bb3565b61016f610326366004610f57565b610bdb565b5f6004545f1480610340575060035460045411155b1561035e576040516324f9528560e11b815260040160405180910390fd5b5060035490565b5f546001600160a01b031633148015906103a85750336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614155b156103c5576040516282b42960e81b815260040160405180910390fd5b60055460ff1615610405576005805460ff1916905560405130907f9dadce7d1fbc48896c5ad91bd8a16a125e4170bd2a6c7dc06799659b5cc2e99c905f90a25b565b5f6003546004541161041857505f90565b6003546004546104289190611117565b905090565b60606104286008610c4b565b610441610c5e565b6104055f610c8a565b610452610c5e565b5f546001600160a01b03166001600160a01b0316816001600160a01b03160361048e576040516301f4baf360e11b815260040160405180910390fd5b5f61049a600883610ca3565b9050806104ca57604051632d8c876360e11b81526001600160a01b03831660048201526024015b60405180910390fd5b6040516001600160a01b038316907f466d40d3c5afb07f32aa87fa68d587f144c6fee2dfb883b3363937d5427e0442905f90a25050565b60015433906001600160a01b031681146105395760405163118cdaa760e01b81526001600160a01b03821660048201526024016104c1565b61054281610c8a565b50565b60606004545f03610569576040516324f9528560e11b815260040160405180910390fd5b600454821061059657600480546040516377ca6c2160e11b815291820184905260248201526044016104c1565b6003548210156105c757600354604051631f288e2560e31b81526104c1918491600401918252602082015260400190565b5f82815260066020526040902080546105df9061112a565b80601f016020809104026020016040519081016040528092919081815260200182805461060b9061112a565b80156106565780601f1061062d57610100808354040283529160200191610656565b820191905f5260205f20905b81548152906001019060200180831161063957829003601f168201915b50505050509050919050565b61066a610c5e565b5f546001600160a01b03166001600160a01b0316816001600160a01b0316036106a6576040516301f4baf360e11b815260040160405180910390fd5b5f6106b2600883610cb7565b9050806106dd57604051636a96952f60e01b81526001600160a01b03831660048201526024016104c1565b6040516001600160a01b038316907f215ef528757ca84646fb5c401012a31bcbf1f99487a51e57a57a0c0afa0d3dd2905f90a25050565b5f6004545f1480610729575060035460045411155b15610747576040516324f9528560e11b815260040160405180910390fd5b60016004546104289190611117565b60055460ff16610779576040516390f5d9a760e01b815260040160405180910390fd5b5f546001600160a01b0316331480159061079b5750610799600833610ccb565b155b156107b8576040516282b42960e81b815260040160405180910390fd5b805f8190036107da57604051630b8fc7cd60e21b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008111156108445760405163116bd21f60e21b8152600481018290527f000000000000000000000000000000000000000000000000000000000000000060248201526044016104c1565b7f0000000000000000000000000000000000000000000000000000000000000000816002546108739190611162565b1180156108835750600454600354105b156108e85760075f60035481526020019081526020015f205460025f8282546108ac9190611117565b90915550506003545f9081526006602052604081206108ca91610ec2565b600380545f9081526007602052604081205580546001019055610844565b6004545f8181526006602052604090206109038486836111d5565b505f81815260076020526040812083905560028054849290610926908490611162565b9091555050600480546001019055604051819030907fa2a2541c43b1972c43c639076a3bef6240e27c11817c7b20a4caab0db3e4f697905f90a350505050565b6060806004545f0361098b576040516324f9528560e11b815260040160405180910390fd5b6003548410156109bc57600354604051631f288e2560e31b81526104c1918691600401918252602082015260400190565b60045484106109e957600480546040516377ca6c2160e11b815291820186905260248201526044016104c1565b5f846004546109f89190611117565b905080841115610a255760405163bb1cb70b60e01b815260048101859052602481018290526044016104c1565b8367ffffffffffffffff811115610a3e57610a3e611175565b604051908082528060200260200182016040528015610a7157816020015b6060815260200190600190039081610a5c5790505b5092508367ffffffffffffffff811115610a8d57610a8d611175565b604051908082528060200260200182016040528015610ab6578160200160208202803683370190505b5091505f5b84811015610baa575f610ace8288611162565b5f818152600660205260409020805491925090610aea9061112a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b169061112a565b8015610b615780601f10610b3857610100808354040283529160200191610b61565b820191905f5260205f20905b815481529060010190602001808311610b4457829003601f168201915b5050505050858381518110610b7857610b7861128f565b602002602001018190525080848381518110610b9657610b9661128f565b602090810291909101015250600101610abb565b50509250929050565b5f80546001600160a01b0383811691161480610bd55750610bd5600883610ccb565b92915050565b610be3610c5e565b600180546001600160a01b0383166001600160a01b03199091168117909155610c135f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60605f610c5783610cec565b9392505050565b5f546001600160a01b031633146104055760405163118cdaa760e01b81523360048201526024016104c1565b600180546001600160a01b031916905561054281610d44565b5f610c57836001600160a01b038416610d93565b5f610c57836001600160a01b038416610ddf565b6001600160a01b0381165f9081526001830160205260408120541515610c57565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561065657602002820191905f5260205f20905b815481526020019060010190808311610d255750505050509050919050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f818152600183016020526040812054610dd857508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610bd5565b505f610bd5565b5f8181526001830160205260408120548015610eb9575f610e01600183611117565b85549091505f90610e1490600190611117565b9050808214610e73575f865f018281548110610e3257610e3261128f565b905f5260205f200154905080875f018481548110610e5257610e5261128f565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080610e8457610e846112a3565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610bd5565b5f915050610bd5565b508054610ece9061112a565b5f825580601f10610edd575050565b601f0160209004905f5260205f209081019061054291905b80821115610f08575f8155600101610ef5565b5090565b602080825282518282018190525f918401906040840190835b81811015610f4c5783516001600160a01b0316835260209384019390920191600101610f25565b509095945050505050565b5f60208284031215610f67575f5ffd5b81356001600160a01b0381168114610c57575f5ffd5b5f60208284031215610f8d575f5ffd5b5035919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610c576020830184610f94565b5f5f60208385031215610fe5575f5ffd5b823567ffffffffffffffff811115610ffb575f5ffd5b8301601f8101851361100b575f5ffd5b803567ffffffffffffffff811115611021575f5ffd5b856020828401011115611032575f5ffd5b6020919091019590945092505050565b5f5f60408385031215611053575f5ffd5b50508035926020909101359150565b5f604082016040835280855180835260608501915060608160051b8601019250602087015f5b828110156110b957605f198786030184526110a4858351610f94565b94506020938401939190910190600101611088565b5050505082810360208401528084518083526020830191506020860192505f5b818110156110f75783518352602093840193909201916001016110d9565b50909695505050505050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610bd557610bd5611103565b600181811c9082168061113e57607f821691505b60208210810361115c57634e487b7160e01b5f52602260045260245ffd5b50919050565b80820180821115610bd557610bd5611103565b634e487b7160e01b5f52604160045260245ffd5b601f8211156111d057805f5260205f20601f840160051c810160208510156111ae5750805b601f840160051c820191505b818110156111cd575f81556001016111ba565b50505b505050565b67ffffffffffffffff8311156111ed576111ed611175565b611201836111fb835461112a565b83611189565b5f601f841160018114611232575f851561121b5750838201355b5f19600387901b1c1916600186901b1783556111cd565b5f83815260208120601f198716915b828110156112615786850135825560209485019460019092019101611241565b508682101561127d575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220b5aba89e2383af65925a0a3588b2894561865509b56096b726d8120603bc74ad64736f6c634300081c0033610100604052348015610010575f5ffd5b5060405161033438038061033483398101604081905261002f91610108565b6001600160a01b0384166100565760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03831661007d5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0382166100a45760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381166100cb5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0393841660805291831660a052821660c0521660e052610159565b80516001600160a01b0381168114610103575f5ffd5b919050565b5f5f5f5f6080858703121561011b575f5ffd5b610124856100ed565b9350610132602086016100ed565b9250610140604086016100ed565b915061014e606086016100ed565b905092959194509250565b60805160a05160c05160e05161019e6101965f395f606901525f60d301525f818160ac015261011d01525f818160f70152610146015261019e5ff3fe608060405234801561000f575f5ffd5b5060043610610060575f3560e01c806329e7ef2d1461006457806367055564146100a75780638c72c54e146100ce578063b61db084146100f5578063d106542b1461011b578063f5bae62914610141575b5f5ffd5b61008b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b61008b7f000000000000000000000000000000000000000000000000000000000000000081565b61008b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000061008b565b7f000000000000000000000000000000000000000000000000000000000000000061008b565b61008b7f00000000000000000000000000000000000000000000000000000000000000008156fea26469706673582212202ff90bf7e722fcc2acc3910365f69fec85473b4b720d18b9f0e8130bc3b3aa7a64736f6c634300081c0033a2646970667358221220ed1e21ad9c8eb820cee78982d7eff329c75282814849d892aed09070dd7a2eac64736f6c634300081c0033a2646970667358221220947efce87b2c58206821815b105da1c182fa57dca5d171b3719c7255f513151864736f6c634300081c0033"
}
diff --git a/packages/core/abi/SmartClawsAgent.json b/packages/core/abi/SmartClawsAgent.json
index 580a49f..bf0cc0f 100644
--- a/packages/core/abi/SmartClawsAgent.json
+++ b/packages/core/abi/SmartClawsAgent.json
@@ -248,5 +248,5 @@
"type": "function"
}
],
- "bytecode": "0x60e06040526001805460ff60a01b1916600160a01b179055348015610022575f5ffd5b506040516108303803806108308339810160408190526100419161022d565b836001600160a01b03811661007057604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b610079816100e7565b506001600160a01b038316158061009757506001600160a01b038216155b806100a957506001600160a01b038116155b156100c957604051631e4fbdf760e01b81525f6004820152602401610067565b6001600160a01b0392831660a05290821660c052166080525061027e565b6100f0816101a7565b60a05160405163f2fde38b60e01b81526001600160a01b0383811660048301529091169063f2fde38b906024015f604051808303815f87803b158015610134575f5ffd5b505af1158015610146573d5f5f3e3d5ffd5b505060c05160405163f2fde38b60e01b81526001600160a01b038581166004830152909116925063f2fde38b91506024015f604051808303815f87803b15801561018e575f5ffd5b505af11580156101a0573d5f5f3e3d5ffd5b5050505050565b600180546001600160a01b03191690556101c0816101c3565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114610228575f5ffd5b919050565b5f5f5f5f60808587031215610240575f5ffd5b61024985610212565b935061025760208601610212565b925061026560408601610212565b915061027360608601610212565b905092959194509250565b60805160a05160c0516105666102ca5f395f818160ed01528181610196015261044401525f8181610170015281816101e301526103d001525f818161013c015261021001526105665ff3fe608060405234801561000f575f5ffd5b50600436106100b1575f3560e01c80638da5cb5b1161006e5780638da5cb5b1461015e578063b61db0841461016e578063d106542b14610194578063e30c3978146101ba578063f2fde38b146101cb578063f5bae629146101de575f5ffd5b806302fb0c5e146100b557806351b42b00146100de57806367055564146100e8578063715018a61461012757806379ba50971461012f5780637b10399914610137575b5f5ffd5b6001546100c990600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b6100e6610205565b005b61010f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100d5565b6100e66102b0565b6100e66102c3565b61010f7f000000000000000000000000000000000000000000000000000000000000000081565b5f546001600160a01b031661010f565b7f000000000000000000000000000000000000000000000000000000000000000061010f565b7f000000000000000000000000000000000000000000000000000000000000000061010f565b6001546001600160a01b031661010f565b6100e66101d9366004610503565b61030c565b61010f7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461024d576040516282b42960e81b815260040160405180910390fd5b600154600160a01b900460ff166102775760405163232990cb60e01b815260040160405180910390fd5b6001805460ff60a01b1916905560405130907fa58c733780f5c1527d6106ff1e731cbf2e9ffc0eb11ad399ca33ea55f057ddf4905f90a2565b6102b861037c565b6102c15f6103a8565b565b60015433906001600160a01b031681146103005760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b610309816103a8565b50565b61031461037c565b600180546001600160a01b0383166001600160a01b031990911681179091556103445f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f546001600160a01b031633146102c15760405163118cdaa760e01b81523360048201526024016102f7565b6103b1816104a0565b60405163f2fde38b60e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063f2fde38b906024015f604051808303815f87803b158015610411575f5ffd5b505af1158015610423573d5f5f3e3d5ffd5b505060405163f2fde38b60e01b81526001600160a01b0384811660048301527f000000000000000000000000000000000000000000000000000000000000000016925063f2fde38b91506024015f604051808303815f87803b158015610487575f5ffd5b505af1158015610499573d5f5f3e3d5ffd5b5050505050565b600180546001600160a01b0319169055610309815f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610513575f5ffd5b81356001600160a01b0381168114610529575f5ffd5b939250505056fea264697066735822122009a66e90c44b94249f2291617a50d405bc7ab9840584bec8b20e1e007744c28364736f6c634300081c0033"
+ "bytecode": "0x60e06040526001805460ff60a01b1916600160a01b179055348015610022575f5ffd5b506040516108303803806108308339810160408190526100419161022d565b836001600160a01b03811661007057604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b610079816100e7565b506001600160a01b038316158061009757506001600160a01b038216155b806100a957506001600160a01b038116155b156100c957604051631e4fbdf760e01b81525f6004820152602401610067565b6001600160a01b0392831660a05290821660c052166080525061027e565b6100f0816101a7565b60a05160405163f2fde38b60e01b81526001600160a01b0383811660048301529091169063f2fde38b906024015f604051808303815f87803b158015610134575f5ffd5b505af1158015610146573d5f5f3e3d5ffd5b505060c05160405163f2fde38b60e01b81526001600160a01b038581166004830152909116925063f2fde38b91506024015f604051808303815f87803b15801561018e575f5ffd5b505af11580156101a0573d5f5f3e3d5ffd5b5050505050565b600180546001600160a01b03191690556101c0816101c3565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114610228575f5ffd5b919050565b5f5f5f5f60808587031215610240575f5ffd5b61024985610212565b935061025760208601610212565b925061026560408601610212565b915061027360608601610212565b905092959194509250565b60805160a05160c0516105666102ca5f395f818160ed01528181610196015261044401525f8181610170015281816101e301526103d001525f818161013c015261021001526105665ff3fe608060405234801561000f575f5ffd5b50600436106100b1575f3560e01c80638da5cb5b1161006e5780638da5cb5b1461015e578063b61db0841461016e578063d106542b14610194578063e30c3978146101ba578063f2fde38b146101cb578063f5bae629146101de575f5ffd5b806302fb0c5e146100b557806351b42b00146100de57806367055564146100e8578063715018a61461012757806379ba50971461012f5780637b10399914610137575b5f5ffd5b6001546100c990600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b6100e6610205565b005b61010f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100d5565b6100e66102b0565b6100e66102c3565b61010f7f000000000000000000000000000000000000000000000000000000000000000081565b5f546001600160a01b031661010f565b7f000000000000000000000000000000000000000000000000000000000000000061010f565b7f000000000000000000000000000000000000000000000000000000000000000061010f565b6001546001600160a01b031661010f565b6100e66101d9366004610503565b61030c565b61010f7f000000000000000000000000000000000000000000000000000000000000000081565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461024d576040516282b42960e81b815260040160405180910390fd5b600154600160a01b900460ff166102775760405163232990cb60e01b815260040160405180910390fd5b6001805460ff60a01b1916905560405130907fa58c733780f5c1527d6106ff1e731cbf2e9ffc0eb11ad399ca33ea55f057ddf4905f90a2565b6102b861037c565b6102c15f6103a8565b565b60015433906001600160a01b031681146103005760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b610309816103a8565b50565b61031461037c565b600180546001600160a01b0383166001600160a01b031990911681179091556103445f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f546001600160a01b031633146102c15760405163118cdaa760e01b81523360048201526024016102f7565b6103b1816104a0565b60405163f2fde38b60e01b81526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063f2fde38b906024015f604051808303815f87803b158015610411575f5ffd5b505af1158015610423573d5f5f3e3d5ffd5b505060405163f2fde38b60e01b81526001600160a01b0384811660048301527f000000000000000000000000000000000000000000000000000000000000000016925063f2fde38b91506024015f604051808303815f87803b158015610487575f5ffd5b505af1158015610499573d5f5f3e3d5ffd5b5050505050565b600180546001600160a01b0319169055610309815f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610513575f5ffd5b81356001600160a01b0381168114610529575f5ffd5b939250505056fea26469706673582212205c167df9d2cf3a57266ea27992ff77656faf813eb23a0acc2b09702b9717166b64736f6c634300081c0033"
}
diff --git a/packages/core/abi/SmartClawsChannel.json b/packages/core/abi/SmartClawsChannel.json
index 5b0ba6d..d1d4a9b 100644
--- a/packages/core/abi/SmartClawsChannel.json
+++ b/packages/core/abi/SmartClawsChannel.json
@@ -570,5 +570,5 @@
"type": "function"
}
],
- "bytecode": "0x60c06040526005805460ff1916600117905534801561001c575f5ffd5b506040516114d43803806114d483398101604081905261003b91610155565b826001600160a01b03811661006957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b610072816100cf565b506001600160a01b03811661009a57604051634a100d5960e01b815260040160405180910390fd5b815f036100ba576040516302f2d9e160e21b815260040160405180910390fd5b6001600160a01b031660805260a0525061018e565b600180546001600160a01b03191690556100e8816100eb565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114610150575f5ffd5b919050565b5f5f5f60608486031215610167575f5ffd5b6101708461013a565b9250602084015191506101856040850161013a565b90509250925092565b60805160a0516113026101d25f395f81816101dd01528181610281015281816107dc01528181610818015261084601525f818161020c015261038501526113025ff3fe608060405234801561000f575f5ffd5b5060043610610148575f3560e01c80637b103999116100bf578063b0b578cd11610079578063b0b578cd146102b8578063ce29e0af146102c0578063cf8ab76b146102d3578063e30c3978146102f4578063e8b348a014610305578063f2fde38b14610318575f5ffd5b80637b103999146102075780638da5cb5b146102465780639ba7da9214610256578063a7d270561461025f578063adc4e1d91461027f578063ae61c5ae146102a5575f5ffd5b80634c7f807d116101105780634c7f807d1461019f5780636c6071aa146101a8578063715018a6146101bd578063763f323d146101c55780637924294e146101d857806379ba5097146101ff575f5ffd5b80632929883d1461014c5780632a20d66b1461016757806331933916146101715780633212dd70146101795780633ef1fc3614610196575b5f5ffd5b61015461032b565b6040519081526020015b60405180910390f35b61016f610365565b005b610154610407565b6005546101869060ff1681565b604051901515815260200161015e565b61015460045481565b61015460025481565b6101b061042d565b60405161015e9190610f0c565b61016f610439565b61016f6101d3366004610f57565b61044a565b6101547f000000000000000000000000000000000000000000000000000000000000000081565b61016f610501565b61022e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161015e565b5f546001600160a01b031661022e565b61015460035481565b61027261026d366004610f7d565b610545565b60405161015e9190610fd7565b7f0000000000000000000000000000000000000000000000000000000000000000610154565b61016f6102b3366004610f57565b610662565b610154610714565b61016f6102ce366004610fe9565b610756565b6102e66102e1366004611057565b610966565b60405161015e929190611077565b6001546001600160a01b031661022e565b610186610313366004610f57565b610bb3565b61016f610326366004610f57565b610bdb565b5f6004545f1480610340575060035460045411155b1561035e576040516324f9528560e11b815260040160405180910390fd5b5060035490565b5f546001600160a01b031633148015906103a85750336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614155b156103c5576040516282b42960e81b815260040160405180910390fd5b60055460ff1615610405576005805460ff1916905560405130907f9dadce7d1fbc48896c5ad91bd8a16a125e4170bd2a6c7dc06799659b5cc2e99c905f90a25b565b5f6003546004541161041857505f90565b600354600454610428919061112c565b905090565b60606104286008610c4b565b610441610c5e565b6104055f610c8a565b610452610c5e565b5f546001600160a01b03166001600160a01b0316816001600160a01b03160361048e576040516301f4baf360e11b815260040160405180910390fd5b5f61049a600883610ca3565b9050806104ca57604051632d8c876360e11b81526001600160a01b03831660048201526024015b60405180910390fd5b6040516001600160a01b038316907f466d40d3c5afb07f32aa87fa68d587f144c6fee2dfb883b3363937d5427e0442905f90a25050565b60015433906001600160a01b031681146105395760405163118cdaa760e01b81526001600160a01b03821660048201526024016104c1565b61054281610c8a565b50565b60606004545f03610569576040516324f9528560e11b815260040160405180910390fd5b600454821061059657600480546040516377ca6c2160e11b815291820184905260248201526044016104c1565b6003548210156105c757600354604051631f288e2560e31b81526104c1918491600401918252602082015260400190565b5f82815260066020526040902080546105df9061113f565b80601f016020809104026020016040519081016040528092919081815260200182805461060b9061113f565b80156106565780601f1061062d57610100808354040283529160200191610656565b820191905f5260205f20905b81548152906001019060200180831161063957829003601f168201915b50505050509050919050565b61066a610c5e565b5f546001600160a01b03166001600160a01b0316816001600160a01b0316036106a6576040516301f4baf360e11b815260040160405180910390fd5b5f6106b2600883610cb7565b9050806106dd57604051636a96952f60e01b81526001600160a01b03831660048201526024016104c1565b6040516001600160a01b038316907f215ef528757ca84646fb5c401012a31bcbf1f99487a51e57a57a0c0afa0d3dd2905f90a25050565b5f6004545f1480610729575060035460045411155b15610747576040516324f9528560e11b815260040160405180910390fd5b6001600454610428919061112c565b60055460ff16610779576040516390f5d9a760e01b815260040160405180910390fd5b5f546001600160a01b0316331480159061079b5750610799600833610ccb565b155b156107b8576040516282b42960e81b815260040160405180910390fd5b805f8190036107da57604051630b8fc7cd60e21b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008111156108445760405163116bd21f60e21b8152600481018290527f000000000000000000000000000000000000000000000000000000000000000060248201526044016104c1565b7f0000000000000000000000000000000000000000000000000000000000000000816002546108739190611177565b1180156108835750600454600354105b156108e85760075f60035481526020019081526020015f205460025f8282546108ac919061112c565b90915550506003545f9081526006602052604081206108ca91610ec2565b600380545f9081526007602052604081205580546001019055610844565b6004545f8181526006602052604090206109038486836111ea565b505f81815260076020526040812083905560028054849290610926908490611177565b9091555050600480546001019055604051819030907fa2a2541c43b1972c43c639076a3bef6240e27c11817c7b20a4caab0db3e4f697905f90a350505050565b6060806004545f0361098b576040516324f9528560e11b815260040160405180910390fd5b6003548410156109bc57600354604051631f288e2560e31b81526104c1918691600401918252602082015260400190565b60045484106109e957600480546040516377ca6c2160e11b815291820186905260248201526044016104c1565b5f846004546109f8919061112c565b905080841115610a255760405163bb1cb70b60e01b815260048101859052602481018290526044016104c1565b8367ffffffffffffffff811115610a3e57610a3e61118a565b604051908082528060200260200182016040528015610a7157816020015b6060815260200190600190039081610a5c5790505b5092508367ffffffffffffffff811115610a8d57610a8d61118a565b604051908082528060200260200182016040528015610ab6578160200160208202803683370190505b5091505f5b84811015610baa575f610ace8288611177565b5f818152600660205260409020805491925090610aea9061113f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b169061113f565b8015610b615780601f10610b3857610100808354040283529160200191610b61565b820191905f5260205f20905b815481529060010190602001808311610b4457829003601f168201915b5050505050858381518110610b7857610b786112a4565b602002602001018190525080848381518110610b9657610b966112a4565b602090810291909101015250600101610abb565b50509250929050565b5f80546001600160a01b0383811691161480610bd55750610bd5600883610ccb565b92915050565b610be3610c5e565b600180546001600160a01b0383166001600160a01b03199091168117909155610c135f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60605f610c5783610cec565b9392505050565b5f546001600160a01b031633146104055760405163118cdaa760e01b81523360048201526024016104c1565b600180546001600160a01b031916905561054281610d44565b5f610c57836001600160a01b038416610d93565b5f610c57836001600160a01b038416610ddf565b6001600160a01b0381165f9081526001830160205260408120541515610c57565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561065657602002820191905f5260205f20905b815481526020019060010190808311610d255750505050509050919050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f818152600183016020526040812054610dd857508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610bd5565b505f610bd5565b5f8181526001830160205260408120548015610eb9575f610e0160018361112c565b85549091505f90610e149060019061112c565b9050808214610e73575f865f018281548110610e3257610e326112a4565b905f5260205f200154905080875f018481548110610e5257610e526112a4565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080610e8457610e846112b8565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610bd5565b5f915050610bd5565b508054610ece9061113f565b5f825580601f10610edd575050565b601f0160209004905f5260205f209081019061054291905b80821115610f08575f8155600101610ef5565b5090565b602080825282518282018190525f918401906040840190835b81811015610f4c5783516001600160a01b0316835260209384019390920191600101610f25565b509095945050505050565b5f60208284031215610f67575f5ffd5b81356001600160a01b0381168114610c57575f5ffd5b5f60208284031215610f8d575f5ffd5b5035919050565b5f81518084525f5b81811015610fb857602081850181015186830182015201610f9c565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f610c576020830184610f94565b5f5f60208385031215610ffa575f5ffd5b823567ffffffffffffffff811115611010575f5ffd5b8301601f81018513611020575f5ffd5b803567ffffffffffffffff811115611036575f5ffd5b856020828401011115611047575f5ffd5b6020919091019590945092505050565b5f5f60408385031215611068575f5ffd5b50508035926020909101359150565b5f604082016040835280855180835260608501915060608160051b8601019250602087015f5b828110156110ce57605f198786030184526110b9858351610f94565b9450602093840193919091019060010161109d565b5050505082810360208401528084518083526020830191506020860192505f5b8181101561110c5783518352602093840193909201916001016110ee565b50909695505050505050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610bd557610bd5611118565b600181811c9082168061115357607f821691505b60208210810361117157634e487b7160e01b5f52602260045260245ffd5b50919050565b80820180821115610bd557610bd5611118565b634e487b7160e01b5f52604160045260245ffd5b601f8211156111e557805f5260205f20601f840160051c810160208510156111c35750805b601f840160051c820191505b818110156111e2575f81556001016111cf565b50505b505050565b67ffffffffffffffff8311156112025761120261118a565b61121683611210835461113f565b8361119e565b5f601f841160018114611247575f85156112305750838201355b5f19600387901b1c1916600186901b1783556111e2565b5f83815260208120601f198716915b828110156112765786850135825560209485019460019092019101611256565b5086821015611292575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220529a0aa1554bed0205b03663020c41541f7929176c3ddd5a3f6f7e5954cd007264736f6c634300081c0033"
+ "bytecode": "0x60c06040526005805460ff1916600117905534801561001c575f5ffd5b506040516114bf3803806114bf83398101604081905261003b91610155565b826001600160a01b03811661006957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b610072816100cf565b506001600160a01b03811661009a57604051634a100d5960e01b815260040160405180910390fd5b815f036100ba576040516302f2d9e160e21b815260040160405180910390fd5b6001600160a01b031660805260a0525061018e565b600180546001600160a01b03191690556100e8816100eb565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114610150575f5ffd5b919050565b5f5f5f60608486031215610167575f5ffd5b6101708461013a565b9250602084015191506101856040850161013a565b90509250925092565b60805160a0516112ed6101d25f395f81816101dd01528181610281015281816107dc01528181610818015261084601525f818161020c015261038501526112ed5ff3fe608060405234801561000f575f5ffd5b5060043610610148575f3560e01c80637b103999116100bf578063b0b578cd11610079578063b0b578cd146102b8578063ce29e0af146102c0578063cf8ab76b146102d3578063e30c3978146102f4578063e8b348a014610305578063f2fde38b14610318575f5ffd5b80637b103999146102075780638da5cb5b146102465780639ba7da9214610256578063a7d270561461025f578063adc4e1d91461027f578063ae61c5ae146102a5575f5ffd5b80634c7f807d116101105780634c7f807d1461019f5780636c6071aa146101a8578063715018a6146101bd578063763f323d146101c55780637924294e146101d857806379ba5097146101ff575f5ffd5b80632929883d1461014c5780632a20d66b1461016757806331933916146101715780633212dd70146101795780633ef1fc3614610196575b5f5ffd5b61015461032b565b6040519081526020015b60405180910390f35b61016f610365565b005b610154610407565b6005546101869060ff1681565b604051901515815260200161015e565b61015460045481565b61015460025481565b6101b061042d565b60405161015e9190610f0c565b61016f610439565b61016f6101d3366004610f57565b61044a565b6101547f000000000000000000000000000000000000000000000000000000000000000081565b61016f610501565b61022e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161015e565b5f546001600160a01b031661022e565b61015460035481565b61027261026d366004610f7d565b610545565b60405161015e9190610fc2565b7f0000000000000000000000000000000000000000000000000000000000000000610154565b61016f6102b3366004610f57565b610662565b610154610714565b61016f6102ce366004610fd4565b610756565b6102e66102e1366004611042565b610966565b60405161015e929190611062565b6001546001600160a01b031661022e565b610186610313366004610f57565b610bb3565b61016f610326366004610f57565b610bdb565b5f6004545f1480610340575060035460045411155b1561035e576040516324f9528560e11b815260040160405180910390fd5b5060035490565b5f546001600160a01b031633148015906103a85750336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614155b156103c5576040516282b42960e81b815260040160405180910390fd5b60055460ff1615610405576005805460ff1916905560405130907f9dadce7d1fbc48896c5ad91bd8a16a125e4170bd2a6c7dc06799659b5cc2e99c905f90a25b565b5f6003546004541161041857505f90565b6003546004546104289190611117565b905090565b60606104286008610c4b565b610441610c5e565b6104055f610c8a565b610452610c5e565b5f546001600160a01b03166001600160a01b0316816001600160a01b03160361048e576040516301f4baf360e11b815260040160405180910390fd5b5f61049a600883610ca3565b9050806104ca57604051632d8c876360e11b81526001600160a01b03831660048201526024015b60405180910390fd5b6040516001600160a01b038316907f466d40d3c5afb07f32aa87fa68d587f144c6fee2dfb883b3363937d5427e0442905f90a25050565b60015433906001600160a01b031681146105395760405163118cdaa760e01b81526001600160a01b03821660048201526024016104c1565b61054281610c8a565b50565b60606004545f03610569576040516324f9528560e11b815260040160405180910390fd5b600454821061059657600480546040516377ca6c2160e11b815291820184905260248201526044016104c1565b6003548210156105c757600354604051631f288e2560e31b81526104c1918491600401918252602082015260400190565b5f82815260066020526040902080546105df9061112a565b80601f016020809104026020016040519081016040528092919081815260200182805461060b9061112a565b80156106565780601f1061062d57610100808354040283529160200191610656565b820191905f5260205f20905b81548152906001019060200180831161063957829003601f168201915b50505050509050919050565b61066a610c5e565b5f546001600160a01b03166001600160a01b0316816001600160a01b0316036106a6576040516301f4baf360e11b815260040160405180910390fd5b5f6106b2600883610cb7565b9050806106dd57604051636a96952f60e01b81526001600160a01b03831660048201526024016104c1565b6040516001600160a01b038316907f215ef528757ca84646fb5c401012a31bcbf1f99487a51e57a57a0c0afa0d3dd2905f90a25050565b5f6004545f1480610729575060035460045411155b15610747576040516324f9528560e11b815260040160405180910390fd5b60016004546104289190611117565b60055460ff16610779576040516390f5d9a760e01b815260040160405180910390fd5b5f546001600160a01b0316331480159061079b5750610799600833610ccb565b155b156107b8576040516282b42960e81b815260040160405180910390fd5b805f8190036107da57604051630b8fc7cd60e21b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008111156108445760405163116bd21f60e21b8152600481018290527f000000000000000000000000000000000000000000000000000000000000000060248201526044016104c1565b7f0000000000000000000000000000000000000000000000000000000000000000816002546108739190611162565b1180156108835750600454600354105b156108e85760075f60035481526020019081526020015f205460025f8282546108ac9190611117565b90915550506003545f9081526006602052604081206108ca91610ec2565b600380545f9081526007602052604081205580546001019055610844565b6004545f8181526006602052604090206109038486836111d5565b505f81815260076020526040812083905560028054849290610926908490611162565b9091555050600480546001019055604051819030907fa2a2541c43b1972c43c639076a3bef6240e27c11817c7b20a4caab0db3e4f697905f90a350505050565b6060806004545f0361098b576040516324f9528560e11b815260040160405180910390fd5b6003548410156109bc57600354604051631f288e2560e31b81526104c1918691600401918252602082015260400190565b60045484106109e957600480546040516377ca6c2160e11b815291820186905260248201526044016104c1565b5f846004546109f89190611117565b905080841115610a255760405163bb1cb70b60e01b815260048101859052602481018290526044016104c1565b8367ffffffffffffffff811115610a3e57610a3e611175565b604051908082528060200260200182016040528015610a7157816020015b6060815260200190600190039081610a5c5790505b5092508367ffffffffffffffff811115610a8d57610a8d611175565b604051908082528060200260200182016040528015610ab6578160200160208202803683370190505b5091505f5b84811015610baa575f610ace8288611162565b5f818152600660205260409020805491925090610aea9061112a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b169061112a565b8015610b615780601f10610b3857610100808354040283529160200191610b61565b820191905f5260205f20905b815481529060010190602001808311610b4457829003601f168201915b5050505050858381518110610b7857610b7861128f565b602002602001018190525080848381518110610b9657610b9661128f565b602090810291909101015250600101610abb565b50509250929050565b5f80546001600160a01b0383811691161480610bd55750610bd5600883610ccb565b92915050565b610be3610c5e565b600180546001600160a01b0383166001600160a01b03199091168117909155610c135f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60605f610c5783610cec565b9392505050565b5f546001600160a01b031633146104055760405163118cdaa760e01b81523360048201526024016104c1565b600180546001600160a01b031916905561054281610d44565b5f610c57836001600160a01b038416610d93565b5f610c57836001600160a01b038416610ddf565b6001600160a01b0381165f9081526001830160205260408120541515610c57565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561065657602002820191905f5260205f20905b815481526020019060010190808311610d255750505050509050919050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f818152600183016020526040812054610dd857508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610bd5565b505f610bd5565b5f8181526001830160205260408120548015610eb9575f610e01600183611117565b85549091505f90610e1490600190611117565b9050808214610e73575f865f018281548110610e3257610e3261128f565b905f5260205f200154905080875f018481548110610e5257610e5261128f565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080610e8457610e846112a3565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610bd5565b5f915050610bd5565b508054610ece9061112a565b5f825580601f10610edd575050565b601f0160209004905f5260205f209081019061054291905b80821115610f08575f8155600101610ef5565b5090565b602080825282518282018190525f918401906040840190835b81811015610f4c5783516001600160a01b0316835260209384019390920191600101610f25565b509095945050505050565b5f60208284031215610f67575f5ffd5b81356001600160a01b0381168114610c57575f5ffd5b5f60208284031215610f8d575f5ffd5b5035919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610c576020830184610f94565b5f5f60208385031215610fe5575f5ffd5b823567ffffffffffffffff811115610ffb575f5ffd5b8301601f8101851361100b575f5ffd5b803567ffffffffffffffff811115611021575f5ffd5b856020828401011115611032575f5ffd5b6020919091019590945092505050565b5f5f60408385031215611053575f5ffd5b50508035926020909101359150565b5f604082016040835280855180835260608501915060608160051b8601019250602087015f5b828110156110b957605f198786030184526110a4858351610f94565b94506020938401939190910190600101611088565b5050505082810360208401528084518083526020830191506020860192505f5b818110156110f75783518352602093840193909201916001016110d9565b50909695505050505050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610bd557610bd5611103565b600181811c9082168061113e57607f821691505b60208210810361115c57634e487b7160e01b5f52602260045260245ffd5b50919050565b80820180821115610bd557610bd5611103565b634e487b7160e01b5f52604160045260245ffd5b601f8211156111d057805f5260205f20601f840160051c810160208510156111ae5750805b601f840160051c820191505b818110156111cd575f81556001016111ba565b50505b505050565b67ffffffffffffffff8311156111ed576111ed611175565b611201836111fb835461112a565b83611189565b5f601f841160018114611232575f851561121b5750838201355b5f19600387901b1c1916600186901b1783556111cd565b5f83815260208120601f198716915b828110156112615786850135825560209485019460019092019101611241565b508682101561127d575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220b5aba89e2383af65925a0a3588b2894561865509b56096b726d8120603bc74ad64736f6c634300081c0033"
}
diff --git a/packages/core/abi/SmartClawsDevice.json b/packages/core/abi/SmartClawsDevice.json
index 20492c2..1c2b421 100644
--- a/packages/core/abi/SmartClawsDevice.json
+++ b/packages/core/abi/SmartClawsDevice.json
@@ -110,5 +110,5 @@
"type": "function"
}
],
- "bytecode": "0x610100604052348015610010575f5ffd5b5060405161033438038061033483398101604081905261002f91610108565b6001600160a01b0384166100565760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03831661007d5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0382166100a45760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381166100cb5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0393841660805291831660a052821660c0521660e052610159565b80516001600160a01b0381168114610103575f5ffd5b919050565b5f5f5f5f6080858703121561011b575f5ffd5b610124856100ed565b9350610132602086016100ed565b9250610140604086016100ed565b915061014e606086016100ed565b905092959194509250565b60805160a05160c05160e05161019e6101965f395f606901525f60d301525f818160ac015261011d01525f818160f70152610146015261019e5ff3fe608060405234801561000f575f5ffd5b5060043610610060575f3560e01c806329e7ef2d1461006457806367055564146100a75780638c72c54e146100ce578063b61db084146100f5578063d106542b1461011b578063f5bae62914610141575b5f5ffd5b61008b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b61008b7f000000000000000000000000000000000000000000000000000000000000000081565b61008b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000061008b565b7f000000000000000000000000000000000000000000000000000000000000000061008b565b61008b7f00000000000000000000000000000000000000000000000000000000000000008156fea2646970667358221220ed204b916a188187be4b5f5107f062498136c9b26b5af45732c1999cabb8135b64736f6c634300081c0033"
+ "bytecode": "0x610100604052348015610010575f5ffd5b5060405161033438038061033483398101604081905261002f91610108565b6001600160a01b0384166100565760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03831661007d5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0382166100a45760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381166100cb5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0393841660805291831660a052821660c0521660e052610159565b80516001600160a01b0381168114610103575f5ffd5b919050565b5f5f5f5f6080858703121561011b575f5ffd5b610124856100ed565b9350610132602086016100ed565b9250610140604086016100ed565b915061014e606086016100ed565b905092959194509250565b60805160a05160c05160e05161019e6101965f395f606901525f60d301525f818160ac015261011d01525f818160f70152610146015261019e5ff3fe608060405234801561000f575f5ffd5b5060043610610060575f3560e01c806329e7ef2d1461006457806367055564146100a75780638c72c54e146100ce578063b61db084146100f5578063d106542b1461011b578063f5bae62914610141575b5f5ffd5b61008b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b61008b7f000000000000000000000000000000000000000000000000000000000000000081565b61008b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000061008b565b7f000000000000000000000000000000000000000000000000000000000000000061008b565b61008b7f00000000000000000000000000000000000000000000000000000000000000008156fea26469706673582212202ff90bf7e722fcc2acc3910365f69fec85473b4b720d18b9f0e8130bc3b3aa7a64736f6c634300081c0033"
}
diff --git a/packages/core/abi/SmartClawsDeviceGroup.json b/packages/core/abi/SmartClawsDeviceGroup.json
index 6118d1c..38fbb84 100644
--- a/packages/core/abi/SmartClawsDeviceGroup.json
+++ b/packages/core/abi/SmartClawsDeviceGroup.json
@@ -374,5 +374,5 @@
"type": "function"
}
],
- "bytecode": "0x60a06040526004805460ff1916600117905534801561001c575f5ffd5b5060405161280c38038061280c83398101604081905261003b91610204565b836001600160a01b03811661006a57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b610073816100cc565b506001600160a01b03811661009d57604051631e4fbdf760e01b81525f6004820152602401610061565b60026100a9848261030e565b5060036100b6838261030e565b506001600160a01b0316608052506103c8915050565b600180546001600160a01b03191690556100e5816100e8565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b038116811461014d575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610175575f5ffd5b81516001600160401b0381111561018e5761018e610152565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101bc576101bc610152565b6040528181528382016020018510156101d3575f5ffd5b5f5b828110156101f1576020818601810151838301820152016101d5565b505f918101602001919091529392505050565b5f5f5f5f60808587031215610217575f5ffd5b61022085610137565b60208601519094506001600160401b0381111561023b575f5ffd5b61024787828801610166565b604087015190945090506001600160401b03811115610264575f5ffd5b61027087828801610166565b92505061027f60608601610137565b905092959194509250565b600181811c9082168061029e57607f821691505b6020821081036102bc57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561030957805f5260205f20601f840160051c810160208510156102e75750805b601f840160051c820191505b81811015610306575f81556001016102f3565b50505b505050565b81516001600160401b0381111561032757610327610152565b61033b81610335845461028a565b846102c2565b6020601f82116001811461036d575f83156103565750848201515b5f19600385901b1c1916600184901b178455610306565b5f84815260208120601f198516915b8281101561039c578785015182556020948501946001909201910161037c565b50848210156103b957868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6080516124176103f55f395f8181610244015281816104c0015281816105fb015261066701526124175ff3fe608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c8063783cec80116100935780639a06d92e116100635780639a06d92e1461028e578063d611d6c8146102a1578063e30c3978146102b6578063f2fde38b146102c7575f5ffd5b8063783cec801461022f57806379ba5097146102375780637b1039991461023f5780638da5cb5b1461027e575f5ffd5b80633b7fdb73116100ce5780633b7fdb731461013c5780634869fe261461015157806351b42b001461021f578063715018a614610227575f5ffd5b806302fb0c5e146100f4578063220e81621461011657806337a0701a1461012b575b5f5ffd5b6004546101019060ff1681565b60405190151581526020015b60405180910390f35b610129610124366004610a39565b6102da565b005b60065460405190815260200161010d565b610144610429565b60405161010d9190610a59565b6101d961015f366004610a39565b60408051608080820183525f808352602080840182905283850182905260609384018290526001600160a01b039586168252600581529084902084519283018552805460ff811615158452610100900486169183019190915260018101548516938201939093526002909201549092169181019190915290565b60405161010d91908151151581526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b6101296104b5565b61012961053f565b610144610550565b61012961055d565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161010d565b5f546001600160a01b0316610266565b61026661029c366004610aa4565b6105a1565b6102a96108a5565b60405161010d9190610b28565b6001546001600160a01b0316610266565b6101296102d5366004610a39565b610905565b6102e2610975565b6001600160a01b0381165f908152600560205260409020805460ff1661032a576040516282d79d60e41b81526001600160a01b03831660048201526024015b60405180910390fd5b60028101548154604051635730e2d760e11b81526001600160a01b036101009092048216600482015291169063ae61c5ae906024015f604051808303815f87803b158015610376575f5ffd5b505af1158015610388573d5f5f3e3d5ffd5b5050505060018101548154604051635730e2d760e11b81526001600160a01b036101009092048216600482015291169063ae61c5ae906024015f604051808303815f87803b1580156103d8575f5ffd5b505af19250505080156103e9575060015b50805460ff191681556040516001600160a01b038316907f8b5dde107afbe1f827425373a7c474984b5479bf4889612cf11598c00a2ec58a905f90a25050565b6003805461043690610b73565b80601f016020809104026020016040519081016040528092919081815260200182805461046290610b73565b80156104ad5780601f10610484576101008083540402835291602001916104ad565b820191905f5260205f20905b81548152906001019060200180831161049057829003601f168201915b505050505081565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104fd576040516282b42960e81b815260040160405180910390fd5b60045460ff161561053d576004805460ff1916905560405130907f1820619d110aba86833e84536b2ba04234f5cb9e87d61baf7846f14398bcfeee905f90a25b565b610547610975565b61053d5f6109a1565b6002805461043690610b73565b60015433906001600160a01b031681146105955760405163118cdaa760e01b81526001600160a01b0382166004820152602401610321565b61059e816109a1565b50565b5f6105aa610975565b60045460ff166105cd5760405163e8431ca760e01b815260040160405180910390fd5b6001600160a01b0383166105f657604051631e4fbdf760e01b81525f6004820152602401610321565b5f30837f000000000000000000000000000000000000000000000000000000000000000060405161062690610a04565b6001600160a01b03938416815260208101929092529091166040820152606001604051809103905ff08015801561065f573d5f5f3e3d5ffd5b5090505f30847f000000000000000000000000000000000000000000000000000000000000000060405161069290610a04565b6001600160a01b03938416815260208101929092529091166040820152606001604051809103905ff0801580156106cb573d5f5f3e3d5ffd5b5060405163763f323d60e01b81526001600160a01b0387811660048301529192509082169063763f323d906024015f604051808303815f87803b158015610710575f5ffd5b505af1158015610722573d5f5f3e3d5ffd5b505050505f8282873060405161073790610a11565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103905ff080158015610778573d5f5f3e3d5ffd5b506040805160808101825260018082526001600160a01b03808b166020808501918252898316858701908152898416606087019081528489165f8181526005909452888420975188549551871661010002610100600160a81b0319911515919091166001600160a81b031990961695909517949094178755905186860180549186166001600160a01b031992831617905590516002909601805496909416958116959095179092556006805493840181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f909101805490921681179091559051919550859250907f40ee62d3a0cf66ef791a7a1f9d6d563ec877b394b8f5c097b6238ac82a68c0e290610892908b908b90610bab565b60405180910390a2505050949350505050565b606060068054806020026020016040519081016040528092919081815260200182805480156108fb57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116108dd575b5050505050905090565b61090d610975565b600180546001600160a01b0383166001600160a01b0319909116811790915561093d5f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f546001600160a01b0316331461053d5760405163118cdaa760e01b8152336004820152602401610321565b600180546001600160a01b031916905561059e815f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6114d480610bda83390190565b610334806120ae83390190565b80356001600160a01b0381168114610a34575f5ffd5b919050565b5f60208284031215610a49575f5ffd5b610a5282610a1e565b9392505050565b602081525f82518060208401525f5b81811015610a855760208186018101516040868401015201610a68565b505f604082850101526040601f19601f83011684010191505092915050565b5f5f5f5f60608587031215610ab7575f5ffd5b843567ffffffffffffffff811115610acd575f5ffd5b8501601f81018713610add575f5ffd5b803567ffffffffffffffff811115610af3575f5ffd5b876020828401011115610b04575f5ffd5b602091820195509350610b18908601610a1e565b9396929550929360400135925050565b602080825282518282018190525f918401906040840190835b81811015610b685783516001600160a01b0316835260209384019390920191600101610b41565b509095945050505050565b600181811c90821680610b8757607f821691505b602082108103610ba557634e487b7160e01b5f52602260045260245ffd5b50919050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f1916010191905056fe60c06040526005805460ff1916600117905534801561001c575f5ffd5b506040516114d43803806114d483398101604081905261003b91610155565b826001600160a01b03811661006957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b610072816100cf565b506001600160a01b03811661009a57604051634a100d5960e01b815260040160405180910390fd5b815f036100ba576040516302f2d9e160e21b815260040160405180910390fd5b6001600160a01b031660805260a0525061018e565b600180546001600160a01b03191690556100e8816100eb565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114610150575f5ffd5b919050565b5f5f5f60608486031215610167575f5ffd5b6101708461013a565b9250602084015191506101856040850161013a565b90509250925092565b60805160a0516113026101d25f395f81816101dd01528181610281015281816107dc01528181610818015261084601525f818161020c015261038501526113025ff3fe608060405234801561000f575f5ffd5b5060043610610148575f3560e01c80637b103999116100bf578063b0b578cd11610079578063b0b578cd146102b8578063ce29e0af146102c0578063cf8ab76b146102d3578063e30c3978146102f4578063e8b348a014610305578063f2fde38b14610318575f5ffd5b80637b103999146102075780638da5cb5b146102465780639ba7da9214610256578063a7d270561461025f578063adc4e1d91461027f578063ae61c5ae146102a5575f5ffd5b80634c7f807d116101105780634c7f807d1461019f5780636c6071aa146101a8578063715018a6146101bd578063763f323d146101c55780637924294e146101d857806379ba5097146101ff575f5ffd5b80632929883d1461014c5780632a20d66b1461016757806331933916146101715780633212dd70146101795780633ef1fc3614610196575b5f5ffd5b61015461032b565b6040519081526020015b60405180910390f35b61016f610365565b005b610154610407565b6005546101869060ff1681565b604051901515815260200161015e565b61015460045481565b61015460025481565b6101b061042d565b60405161015e9190610f0c565b61016f610439565b61016f6101d3366004610f57565b61044a565b6101547f000000000000000000000000000000000000000000000000000000000000000081565b61016f610501565b61022e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161015e565b5f546001600160a01b031661022e565b61015460035481565b61027261026d366004610f7d565b610545565b60405161015e9190610fd7565b7f0000000000000000000000000000000000000000000000000000000000000000610154565b61016f6102b3366004610f57565b610662565b610154610714565b61016f6102ce366004610fe9565b610756565b6102e66102e1366004611057565b610966565b60405161015e929190611077565b6001546001600160a01b031661022e565b610186610313366004610f57565b610bb3565b61016f610326366004610f57565b610bdb565b5f6004545f1480610340575060035460045411155b1561035e576040516324f9528560e11b815260040160405180910390fd5b5060035490565b5f546001600160a01b031633148015906103a85750336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614155b156103c5576040516282b42960e81b815260040160405180910390fd5b60055460ff1615610405576005805460ff1916905560405130907f9dadce7d1fbc48896c5ad91bd8a16a125e4170bd2a6c7dc06799659b5cc2e99c905f90a25b565b5f6003546004541161041857505f90565b600354600454610428919061112c565b905090565b60606104286008610c4b565b610441610c5e565b6104055f610c8a565b610452610c5e565b5f546001600160a01b03166001600160a01b0316816001600160a01b03160361048e576040516301f4baf360e11b815260040160405180910390fd5b5f61049a600883610ca3565b9050806104ca57604051632d8c876360e11b81526001600160a01b03831660048201526024015b60405180910390fd5b6040516001600160a01b038316907f466d40d3c5afb07f32aa87fa68d587f144c6fee2dfb883b3363937d5427e0442905f90a25050565b60015433906001600160a01b031681146105395760405163118cdaa760e01b81526001600160a01b03821660048201526024016104c1565b61054281610c8a565b50565b60606004545f03610569576040516324f9528560e11b815260040160405180910390fd5b600454821061059657600480546040516377ca6c2160e11b815291820184905260248201526044016104c1565b6003548210156105c757600354604051631f288e2560e31b81526104c1918491600401918252602082015260400190565b5f82815260066020526040902080546105df9061113f565b80601f016020809104026020016040519081016040528092919081815260200182805461060b9061113f565b80156106565780601f1061062d57610100808354040283529160200191610656565b820191905f5260205f20905b81548152906001019060200180831161063957829003601f168201915b50505050509050919050565b61066a610c5e565b5f546001600160a01b03166001600160a01b0316816001600160a01b0316036106a6576040516301f4baf360e11b815260040160405180910390fd5b5f6106b2600883610cb7565b9050806106dd57604051636a96952f60e01b81526001600160a01b03831660048201526024016104c1565b6040516001600160a01b038316907f215ef528757ca84646fb5c401012a31bcbf1f99487a51e57a57a0c0afa0d3dd2905f90a25050565b5f6004545f1480610729575060035460045411155b15610747576040516324f9528560e11b815260040160405180910390fd5b6001600454610428919061112c565b60055460ff16610779576040516390f5d9a760e01b815260040160405180910390fd5b5f546001600160a01b0316331480159061079b5750610799600833610ccb565b155b156107b8576040516282b42960e81b815260040160405180910390fd5b805f8190036107da57604051630b8fc7cd60e21b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008111156108445760405163116bd21f60e21b8152600481018290527f000000000000000000000000000000000000000000000000000000000000000060248201526044016104c1565b7f0000000000000000000000000000000000000000000000000000000000000000816002546108739190611177565b1180156108835750600454600354105b156108e85760075f60035481526020019081526020015f205460025f8282546108ac919061112c565b90915550506003545f9081526006602052604081206108ca91610ec2565b600380545f9081526007602052604081205580546001019055610844565b6004545f8181526006602052604090206109038486836111ea565b505f81815260076020526040812083905560028054849290610926908490611177565b9091555050600480546001019055604051819030907fa2a2541c43b1972c43c639076a3bef6240e27c11817c7b20a4caab0db3e4f697905f90a350505050565b6060806004545f0361098b576040516324f9528560e11b815260040160405180910390fd5b6003548410156109bc57600354604051631f288e2560e31b81526104c1918691600401918252602082015260400190565b60045484106109e957600480546040516377ca6c2160e11b815291820186905260248201526044016104c1565b5f846004546109f8919061112c565b905080841115610a255760405163bb1cb70b60e01b815260048101859052602481018290526044016104c1565b8367ffffffffffffffff811115610a3e57610a3e61118a565b604051908082528060200260200182016040528015610a7157816020015b6060815260200190600190039081610a5c5790505b5092508367ffffffffffffffff811115610a8d57610a8d61118a565b604051908082528060200260200182016040528015610ab6578160200160208202803683370190505b5091505f5b84811015610baa575f610ace8288611177565b5f818152600660205260409020805491925090610aea9061113f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b169061113f565b8015610b615780601f10610b3857610100808354040283529160200191610b61565b820191905f5260205f20905b815481529060010190602001808311610b4457829003601f168201915b5050505050858381518110610b7857610b786112a4565b602002602001018190525080848381518110610b9657610b966112a4565b602090810291909101015250600101610abb565b50509250929050565b5f80546001600160a01b0383811691161480610bd55750610bd5600883610ccb565b92915050565b610be3610c5e565b600180546001600160a01b0383166001600160a01b03199091168117909155610c135f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60605f610c5783610cec565b9392505050565b5f546001600160a01b031633146104055760405163118cdaa760e01b81523360048201526024016104c1565b600180546001600160a01b031916905561054281610d44565b5f610c57836001600160a01b038416610d93565b5f610c57836001600160a01b038416610ddf565b6001600160a01b0381165f9081526001830160205260408120541515610c57565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561065657602002820191905f5260205f20905b815481526020019060010190808311610d255750505050509050919050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f818152600183016020526040812054610dd857508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610bd5565b505f610bd5565b5f8181526001830160205260408120548015610eb9575f610e0160018361112c565b85549091505f90610e149060019061112c565b9050808214610e73575f865f018281548110610e3257610e326112a4565b905f5260205f200154905080875f018481548110610e5257610e526112a4565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080610e8457610e846112b8565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610bd5565b5f915050610bd5565b508054610ece9061113f565b5f825580601f10610edd575050565b601f0160209004905f5260205f209081019061054291905b80821115610f08575f8155600101610ef5565b5090565b602080825282518282018190525f918401906040840190835b81811015610f4c5783516001600160a01b0316835260209384019390920191600101610f25565b509095945050505050565b5f60208284031215610f67575f5ffd5b81356001600160a01b0381168114610c57575f5ffd5b5f60208284031215610f8d575f5ffd5b5035919050565b5f81518084525f5b81811015610fb857602081850181015186830182015201610f9c565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f610c576020830184610f94565b5f5f60208385031215610ffa575f5ffd5b823567ffffffffffffffff811115611010575f5ffd5b8301601f81018513611020575f5ffd5b803567ffffffffffffffff811115611036575f5ffd5b856020828401011115611047575f5ffd5b6020919091019590945092505050565b5f5f60408385031215611068575f5ffd5b50508035926020909101359150565b5f604082016040835280855180835260608501915060608160051b8601019250602087015f5b828110156110ce57605f198786030184526110b9858351610f94565b9450602093840193919091019060010161109d565b5050505082810360208401528084518083526020830191506020860192505f5b8181101561110c5783518352602093840193909201916001016110ee565b50909695505050505050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610bd557610bd5611118565b600181811c9082168061115357607f821691505b60208210810361117157634e487b7160e01b5f52602260045260245ffd5b50919050565b80820180821115610bd557610bd5611118565b634e487b7160e01b5f52604160045260245ffd5b601f8211156111e557805f5260205f20601f840160051c810160208510156111c35750805b601f840160051c820191505b818110156111e2575f81556001016111cf565b50505b505050565b67ffffffffffffffff8311156112025761120261118a565b61121683611210835461113f565b8361119e565b5f601f841160018114611247575f85156112305750838201355b5f19600387901b1c1916600186901b1783556111e2565b5f83815260208120601f198716915b828110156112765786850135825560209485019460019092019101611256565b5086821015611292575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220529a0aa1554bed0205b03663020c41541f7929176c3ddd5a3f6f7e5954cd007264736f6c634300081c0033610100604052348015610010575f5ffd5b5060405161033438038061033483398101604081905261002f91610108565b6001600160a01b0384166100565760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03831661007d5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0382166100a45760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381166100cb5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0393841660805291831660a052821660c0521660e052610159565b80516001600160a01b0381168114610103575f5ffd5b919050565b5f5f5f5f6080858703121561011b575f5ffd5b610124856100ed565b9350610132602086016100ed565b9250610140604086016100ed565b915061014e606086016100ed565b905092959194509250565b60805160a05160c05160e05161019e6101965f395f606901525f60d301525f818160ac015261011d01525f818160f70152610146015261019e5ff3fe608060405234801561000f575f5ffd5b5060043610610060575f3560e01c806329e7ef2d1461006457806367055564146100a75780638c72c54e146100ce578063b61db084146100f5578063d106542b1461011b578063f5bae62914610141575b5f5ffd5b61008b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b61008b7f000000000000000000000000000000000000000000000000000000000000000081565b61008b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000061008b565b7f000000000000000000000000000000000000000000000000000000000000000061008b565b61008b7f00000000000000000000000000000000000000000000000000000000000000008156fea2646970667358221220ed204b916a188187be4b5f5107f062498136c9b26b5af45732c1999cabb8135b64736f6c634300081c0033a2646970667358221220cc98e4fcb8897f4e0f6164b29b69cb8d56fe98af407c33da2eab0962189f058b64736f6c634300081c0033"
+ "bytecode": "0x60a06040526004805460ff1916600117905534801561001c575f5ffd5b506040516127cc3803806127cc83398101604081905261003b916101ef565b836001600160a01b03811661006a57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b610073816100cc565b506001600160a01b03811661009d57604051631e4fbdf760e01b81525f6004820152602401610061565b60026100a984826102f9565b5060036100b683826102f9565b506001600160a01b0316608052506103b3915050565b600180546001600160a01b03191690556100e5816100e8565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b038116811461014d575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610175575f5ffd5b81516001600160401b0381111561018e5761018e610152565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101bc576101bc610152565b6040528181528382016020018510156101d3575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f5f60808587031215610202575f5ffd5b61020b85610137565b60208601519094506001600160401b03811115610226575f5ffd5b61023287828801610166565b604087015190945090506001600160401b0381111561024f575f5ffd5b61025b87828801610166565b92505061026a60608601610137565b905092959194509250565b600181811c9082168061028957607f821691505b6020821081036102a757634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156102f457805f5260205f20601f840160051c810160208510156102d25750805b601f840160051c820191505b818110156102f1575f81556001016102de565b50505b505050565b81516001600160401b0381111561031257610312610152565b610326816103208454610275565b846102ad565b6020601f821160018114610358575f83156103415750848201515b5f19600385901b1c1916600184901b1784556102f1565b5f84815260208120601f198516915b828110156103875787850151825560209485019460019092019101610367565b50848210156103a457868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6080516123ec6103e05f395f8181610244015281816104c0015281816105fb015261066701526123ec5ff3fe608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c8063783cec80116100935780639a06d92e116100635780639a06d92e1461028e578063d611d6c8146102a1578063e30c3978146102b6578063f2fde38b146102c7575f5ffd5b8063783cec801461022f57806379ba5097146102375780637b1039991461023f5780638da5cb5b1461027e575f5ffd5b80633b7fdb73116100ce5780633b7fdb731461013c5780634869fe261461015157806351b42b001461021f578063715018a614610227575f5ffd5b806302fb0c5e146100f4578063220e81621461011657806337a0701a1461012b575b5f5ffd5b6004546101019060ff1681565b60405190151581526020015b60405180910390f35b610129610124366004610a39565b6102da565b005b60065460405190815260200161010d565b610144610429565b60405161010d9190610a59565b6101d961015f366004610a39565b60408051608080820183525f808352602080840182905283850182905260609384018290526001600160a01b039586168252600581529084902084519283018552805460ff811615158452610100900486169183019190915260018101548516938201939093526002909201549092169181019190915290565b60405161010d91908151151581526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b6101296104b5565b61012961053f565b610144610550565b61012961055d565b6102667f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161010d565b5f546001600160a01b0316610266565b61026661029c366004610a8e565b6105a1565b6102a96108a5565b60405161010d9190610b12565b6001546001600160a01b0316610266565b6101296102d5366004610a39565b610905565b6102e2610975565b6001600160a01b0381165f908152600560205260409020805460ff1661032a576040516282d79d60e41b81526001600160a01b03831660048201526024015b60405180910390fd5b60028101548154604051635730e2d760e11b81526001600160a01b036101009092048216600482015291169063ae61c5ae906024015f604051808303815f87803b158015610376575f5ffd5b505af1158015610388573d5f5f3e3d5ffd5b5050505060018101548154604051635730e2d760e11b81526001600160a01b036101009092048216600482015291169063ae61c5ae906024015f604051808303815f87803b1580156103d8575f5ffd5b505af19250505080156103e9575060015b50805460ff191681556040516001600160a01b038316907f8b5dde107afbe1f827425373a7c474984b5479bf4889612cf11598c00a2ec58a905f90a25050565b6003805461043690610b5d565b80601f016020809104026020016040519081016040528092919081815260200182805461046290610b5d565b80156104ad5780601f10610484576101008083540402835291602001916104ad565b820191905f5260205f20905b81548152906001019060200180831161049057829003601f168201915b505050505081565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146104fd576040516282b42960e81b815260040160405180910390fd5b60045460ff161561053d576004805460ff1916905560405130907f1820619d110aba86833e84536b2ba04234f5cb9e87d61baf7846f14398bcfeee905f90a25b565b610547610975565b61053d5f6109a1565b6002805461043690610b5d565b60015433906001600160a01b031681146105955760405163118cdaa760e01b81526001600160a01b0382166004820152602401610321565b61059e816109a1565b50565b5f6105aa610975565b60045460ff166105cd5760405163e8431ca760e01b815260040160405180910390fd5b6001600160a01b0383166105f657604051631e4fbdf760e01b81525f6004820152602401610321565b5f30837f000000000000000000000000000000000000000000000000000000000000000060405161062690610a04565b6001600160a01b03938416815260208101929092529091166040820152606001604051809103905ff08015801561065f573d5f5f3e3d5ffd5b5090505f30847f000000000000000000000000000000000000000000000000000000000000000060405161069290610a04565b6001600160a01b03938416815260208101929092529091166040820152606001604051809103905ff0801580156106cb573d5f5f3e3d5ffd5b5060405163763f323d60e01b81526001600160a01b0387811660048301529192509082169063763f323d906024015f604051808303815f87803b158015610710575f5ffd5b505af1158015610722573d5f5f3e3d5ffd5b505050505f8282873060405161073790610a11565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103905ff080158015610778573d5f5f3e3d5ffd5b506040805160808101825260018082526001600160a01b03808b166020808501918252898316858701908152898416606087019081528489165f8181526005909452888420975188549551871661010002610100600160a81b0319911515919091166001600160a81b031990961695909517949094178755905186860180549186166001600160a01b031992831617905590516002909601805496909416958116959095179092556006805493840181559091527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f909101805490921681179091559051919550859250907f40ee62d3a0cf66ef791a7a1f9d6d563ec877b394b8f5c097b6238ac82a68c0e290610892908b908b90610b95565b60405180910390a2505050949350505050565b606060068054806020026020016040519081016040528092919081815260200182805480156108fb57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116108dd575b5050505050905090565b61090d610975565b600180546001600160a01b0383166001600160a01b0319909116811790915561093d5f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f546001600160a01b0316331461053d5760405163118cdaa760e01b8152336004820152602401610321565b600180546001600160a01b031916905561059e815f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6114bf80610bc483390190565b6103348061208383390190565b80356001600160a01b0381168114610a34575f5ffd5b919050565b5f60208284031215610a49575f5ffd5b610a5282610a1e565b9392505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f5f5f60608587031215610aa1575f5ffd5b843567ffffffffffffffff811115610ab7575f5ffd5b8501601f81018713610ac7575f5ffd5b803567ffffffffffffffff811115610add575f5ffd5b876020828401011115610aee575f5ffd5b602091820195509350610b02908601610a1e565b9396929550929360400135925050565b602080825282518282018190525f918401906040840190835b81811015610b525783516001600160a01b0316835260209384019390920191600101610b2b565b509095945050505050565b600181811c90821680610b7157607f821691505b602082108103610b8f57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208152816020820152818360408301375f818301604090810191909152601f909201601f1916010191905056fe60c06040526005805460ff1916600117905534801561001c575f5ffd5b506040516114bf3803806114bf83398101604081905261003b91610155565b826001600160a01b03811661006957604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b610072816100cf565b506001600160a01b03811661009a57604051634a100d5960e01b815260040160405180910390fd5b815f036100ba576040516302f2d9e160e21b815260040160405180910390fd5b6001600160a01b031660805260a0525061018e565b600180546001600160a01b03191690556100e8816100eb565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114610150575f5ffd5b919050565b5f5f5f60608486031215610167575f5ffd5b6101708461013a565b9250602084015191506101856040850161013a565b90509250925092565b60805160a0516112ed6101d25f395f81816101dd01528181610281015281816107dc01528181610818015261084601525f818161020c015261038501526112ed5ff3fe608060405234801561000f575f5ffd5b5060043610610148575f3560e01c80637b103999116100bf578063b0b578cd11610079578063b0b578cd146102b8578063ce29e0af146102c0578063cf8ab76b146102d3578063e30c3978146102f4578063e8b348a014610305578063f2fde38b14610318575f5ffd5b80637b103999146102075780638da5cb5b146102465780639ba7da9214610256578063a7d270561461025f578063adc4e1d91461027f578063ae61c5ae146102a5575f5ffd5b80634c7f807d116101105780634c7f807d1461019f5780636c6071aa146101a8578063715018a6146101bd578063763f323d146101c55780637924294e146101d857806379ba5097146101ff575f5ffd5b80632929883d1461014c5780632a20d66b1461016757806331933916146101715780633212dd70146101795780633ef1fc3614610196575b5f5ffd5b61015461032b565b6040519081526020015b60405180910390f35b61016f610365565b005b610154610407565b6005546101869060ff1681565b604051901515815260200161015e565b61015460045481565b61015460025481565b6101b061042d565b60405161015e9190610f0c565b61016f610439565b61016f6101d3366004610f57565b61044a565b6101547f000000000000000000000000000000000000000000000000000000000000000081565b61016f610501565b61022e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161015e565b5f546001600160a01b031661022e565b61015460035481565b61027261026d366004610f7d565b610545565b60405161015e9190610fc2565b7f0000000000000000000000000000000000000000000000000000000000000000610154565b61016f6102b3366004610f57565b610662565b610154610714565b61016f6102ce366004610fd4565b610756565b6102e66102e1366004611042565b610966565b60405161015e929190611062565b6001546001600160a01b031661022e565b610186610313366004610f57565b610bb3565b61016f610326366004610f57565b610bdb565b5f6004545f1480610340575060035460045411155b1561035e576040516324f9528560e11b815260040160405180910390fd5b5060035490565b5f546001600160a01b031633148015906103a85750336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614155b156103c5576040516282b42960e81b815260040160405180910390fd5b60055460ff1615610405576005805460ff1916905560405130907f9dadce7d1fbc48896c5ad91bd8a16a125e4170bd2a6c7dc06799659b5cc2e99c905f90a25b565b5f6003546004541161041857505f90565b6003546004546104289190611117565b905090565b60606104286008610c4b565b610441610c5e565b6104055f610c8a565b610452610c5e565b5f546001600160a01b03166001600160a01b0316816001600160a01b03160361048e576040516301f4baf360e11b815260040160405180910390fd5b5f61049a600883610ca3565b9050806104ca57604051632d8c876360e11b81526001600160a01b03831660048201526024015b60405180910390fd5b6040516001600160a01b038316907f466d40d3c5afb07f32aa87fa68d587f144c6fee2dfb883b3363937d5427e0442905f90a25050565b60015433906001600160a01b031681146105395760405163118cdaa760e01b81526001600160a01b03821660048201526024016104c1565b61054281610c8a565b50565b60606004545f03610569576040516324f9528560e11b815260040160405180910390fd5b600454821061059657600480546040516377ca6c2160e11b815291820184905260248201526044016104c1565b6003548210156105c757600354604051631f288e2560e31b81526104c1918491600401918252602082015260400190565b5f82815260066020526040902080546105df9061112a565b80601f016020809104026020016040519081016040528092919081815260200182805461060b9061112a565b80156106565780601f1061062d57610100808354040283529160200191610656565b820191905f5260205f20905b81548152906001019060200180831161063957829003601f168201915b50505050509050919050565b61066a610c5e565b5f546001600160a01b03166001600160a01b0316816001600160a01b0316036106a6576040516301f4baf360e11b815260040160405180910390fd5b5f6106b2600883610cb7565b9050806106dd57604051636a96952f60e01b81526001600160a01b03831660048201526024016104c1565b6040516001600160a01b038316907f215ef528757ca84646fb5c401012a31bcbf1f99487a51e57a57a0c0afa0d3dd2905f90a25050565b5f6004545f1480610729575060035460045411155b15610747576040516324f9528560e11b815260040160405180910390fd5b60016004546104289190611117565b60055460ff16610779576040516390f5d9a760e01b815260040160405180910390fd5b5f546001600160a01b0316331480159061079b5750610799600833610ccb565b155b156107b8576040516282b42960e81b815260040160405180910390fd5b805f8190036107da57604051630b8fc7cd60e21b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000008111156108445760405163116bd21f60e21b8152600481018290527f000000000000000000000000000000000000000000000000000000000000000060248201526044016104c1565b7f0000000000000000000000000000000000000000000000000000000000000000816002546108739190611162565b1180156108835750600454600354105b156108e85760075f60035481526020019081526020015f205460025f8282546108ac9190611117565b90915550506003545f9081526006602052604081206108ca91610ec2565b600380545f9081526007602052604081205580546001019055610844565b6004545f8181526006602052604090206109038486836111d5565b505f81815260076020526040812083905560028054849290610926908490611162565b9091555050600480546001019055604051819030907fa2a2541c43b1972c43c639076a3bef6240e27c11817c7b20a4caab0db3e4f697905f90a350505050565b6060806004545f0361098b576040516324f9528560e11b815260040160405180910390fd5b6003548410156109bc57600354604051631f288e2560e31b81526104c1918691600401918252602082015260400190565b60045484106109e957600480546040516377ca6c2160e11b815291820186905260248201526044016104c1565b5f846004546109f89190611117565b905080841115610a255760405163bb1cb70b60e01b815260048101859052602481018290526044016104c1565b8367ffffffffffffffff811115610a3e57610a3e611175565b604051908082528060200260200182016040528015610a7157816020015b6060815260200190600190039081610a5c5790505b5092508367ffffffffffffffff811115610a8d57610a8d611175565b604051908082528060200260200182016040528015610ab6578160200160208202803683370190505b5091505f5b84811015610baa575f610ace8288611162565b5f818152600660205260409020805491925090610aea9061112a565b80601f0160208091040260200160405190810160405280929190818152602001828054610b169061112a565b8015610b615780601f10610b3857610100808354040283529160200191610b61565b820191905f5260205f20905b815481529060010190602001808311610b4457829003601f168201915b5050505050858381518110610b7857610b7861128f565b602002602001018190525080848381518110610b9657610b9661128f565b602090810291909101015250600101610abb565b50509250929050565b5f80546001600160a01b0383811691161480610bd55750610bd5600883610ccb565b92915050565b610be3610c5e565b600180546001600160a01b0383166001600160a01b03199091168117909155610c135f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60605f610c5783610cec565b9392505050565b5f546001600160a01b031633146104055760405163118cdaa760e01b81523360048201526024016104c1565b600180546001600160a01b031916905561054281610d44565b5f610c57836001600160a01b038416610d93565b5f610c57836001600160a01b038416610ddf565b6001600160a01b0381165f9081526001830160205260408120541515610c57565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561065657602002820191905f5260205f20905b815481526020019060010190808311610d255750505050509050919050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f818152600183016020526040812054610dd857508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610bd5565b505f610bd5565b5f8181526001830160205260408120548015610eb9575f610e01600183611117565b85549091505f90610e1490600190611117565b9050808214610e73575f865f018281548110610e3257610e3261128f565b905f5260205f200154905080875f018481548110610e5257610e5261128f565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080610e8457610e846112a3565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610bd5565b5f915050610bd5565b508054610ece9061112a565b5f825580601f10610edd575050565b601f0160209004905f5260205f209081019061054291905b80821115610f08575f8155600101610ef5565b5090565b602080825282518282018190525f918401906040840190835b81811015610f4c5783516001600160a01b0316835260209384019390920191600101610f25565b509095945050505050565b5f60208284031215610f67575f5ffd5b81356001600160a01b0381168114610c57575f5ffd5b5f60208284031215610f8d575f5ffd5b5035919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610c576020830184610f94565b5f5f60208385031215610fe5575f5ffd5b823567ffffffffffffffff811115610ffb575f5ffd5b8301601f8101851361100b575f5ffd5b803567ffffffffffffffff811115611021575f5ffd5b856020828401011115611032575f5ffd5b6020919091019590945092505050565b5f5f60408385031215611053575f5ffd5b50508035926020909101359150565b5f604082016040835280855180835260608501915060608160051b8601019250602087015f5b828110156110b957605f198786030184526110a4858351610f94565b94506020938401939190910190600101611088565b5050505082810360208401528084518083526020830191506020860192505f5b818110156110f75783518352602093840193909201916001016110d9565b50909695505050505050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610bd557610bd5611103565b600181811c9082168061113e57607f821691505b60208210810361115c57634e487b7160e01b5f52602260045260245ffd5b50919050565b80820180821115610bd557610bd5611103565b634e487b7160e01b5f52604160045260245ffd5b601f8211156111d057805f5260205f20601f840160051c810160208510156111ae5750805b601f840160051c820191505b818110156111cd575f81556001016111ba565b50505b505050565b67ffffffffffffffff8311156111ed576111ed611175565b611201836111fb835461112a565b83611189565b5f601f841160018114611232575f851561121b5750838201355b5f19600387901b1c1916600186901b1783556111cd565b5f83815260208120601f198716915b828110156112615786850135825560209485019460019092019101611241565b508682101561127d575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220b5aba89e2383af65925a0a3588b2894561865509b56096b726d8120603bc74ad64736f6c634300081c0033610100604052348015610010575f5ffd5b5060405161033438038061033483398101604081905261002f91610108565b6001600160a01b0384166100565760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b03831661007d5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0382166100a45760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381166100cb5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0393841660805291831660a052821660c0521660e052610159565b80516001600160a01b0381168114610103575f5ffd5b919050565b5f5f5f5f6080858703121561011b575f5ffd5b610124856100ed565b9350610132602086016100ed565b9250610140604086016100ed565b915061014e606086016100ed565b905092959194509250565b60805160a05160c05160e05161019e6101965f395f606901525f60d301525f818160ac015261011d01525f818160f70152610146015261019e5ff3fe608060405234801561000f575f5ffd5b5060043610610060575f3560e01c806329e7ef2d1461006457806367055564146100a75780638c72c54e146100ce578063b61db084146100f5578063d106542b1461011b578063f5bae62914610141575b5f5ffd5b61008b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b61008b7f000000000000000000000000000000000000000000000000000000000000000081565b61008b7f000000000000000000000000000000000000000000000000000000000000000081565b7f000000000000000000000000000000000000000000000000000000000000000061008b565b7f000000000000000000000000000000000000000000000000000000000000000061008b565b61008b7f00000000000000000000000000000000000000000000000000000000000000008156fea26469706673582212202ff90bf7e722fcc2acc3910365f69fec85473b4b720d18b9f0e8130bc3b3aa7a64736f6c634300081c0033a2646970667358221220ed1e21ad9c8eb820cee78982d7eff329c75282814849d892aed09070dd7a2eac64736f6c634300081c0033"
}
diff --git a/packages/core/biome.json b/packages/core/biome.json
deleted file mode 100644
index 441a94e..0000000
--- a/packages/core/biome.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "$schema": "https://biomejs.dev/schemas/2.4.9/schema.json",
- "assist": {
- "actions": {
- "source": { "organizeImports": "on" }
- }
- },
- "linter": {
- "enabled": true,
- "rules": { "recommended": true }
- },
- "formatter": {
- "enabled": true,
- "indentStyle": "space",
- "indentWidth": 2,
- "lineWidth": 100
- }
-}
diff --git a/packages/core/package.json b/packages/core/package.json
index b8d20de..06bd9a4 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -1,6 +1,6 @@
{
"name": "@smartclaws/core",
- "version": "0.2.0",
+ "version": "0.3.0",
"type": "module",
"exports": {
".": "./src/index.ts",
diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json
index d2cb497..8f557b3 100644
--- a/packages/core/tsconfig.json
+++ b/packages/core/tsconfig.json
@@ -1,13 +1,9 @@
{
+ "extends": "../../tsconfig.base.json",
"compilerOptions": {
- "target": "ES2022",
"module": "NodeNext",
"moduleResolution": "NodeNext",
- "strict": true,
- "skipLibCheck": true,
- "resolveJsonModule": true,
- "allowImportingTsExtensions": true,
- "noEmit": true
+ "allowImportingTsExtensions": true
},
"include": ["src"]
}
diff --git a/packages/dashboard/biome.json b/packages/dashboard/biome.json
deleted file mode 100644
index 441a94e..0000000
--- a/packages/dashboard/biome.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "$schema": "https://biomejs.dev/schemas/2.4.9/schema.json",
- "assist": {
- "actions": {
- "source": { "organizeImports": "on" }
- }
- },
- "linter": {
- "enabled": true,
- "rules": { "recommended": true }
- },
- "formatter": {
- "enabled": true,
- "indentStyle": "space",
- "indentWidth": 2,
- "lineWidth": 100
- }
-}
diff --git a/packages/dashboard/package.json b/packages/dashboard/package.json
index 5de00e3..6ec826d 100644
--- a/packages/dashboard/package.json
+++ b/packages/dashboard/package.json
@@ -1,7 +1,7 @@
{
"name": "@smartclaws/dashboard",
"private": true,
- "version": "0.2.0",
+ "version": "0.3.0",
"type": "module",
"scripts": {
"dev": "vite",
diff --git a/packages/dashboard/src/components/shared/channel-view.tsx b/packages/dashboard/src/components/shared/channel-view.tsx
index c775034..b8b85a2 100644
--- a/packages/dashboard/src/components/shared/channel-view.tsx
+++ b/packages/dashboard/src/components/shared/channel-view.tsx
@@ -1,4 +1,4 @@
-import { ChevronRight, Database, Hash, MessageSquare } from "lucide-react";
+import { ChevronsDown, ChevronRight, Database, Hash, Loader2, MessageSquare } from "lucide-react";
import { type ReactNode, useState } from "react";
import type { Address } from "viem";
import { EmptyState } from "@/components/shared/empty-state";
@@ -97,7 +97,7 @@ interface ChannelViewProps {
}
export function ChannelView({ address }: ChannelViewProps) {
- const { messages, messageCount, maxCapacity, totalBytes, isLoading } = useChannelMessages(address);
+ const { messages, messageCount, maxCapacity, totalBytes, isLoading, isLoadingMore, canLoadMore, loadMore } = useChannelMessages(address);
const [expanded, setExpanded] = useState>(new Set());
const toggleExpand = (key: string) => {
@@ -170,6 +170,37 @@ export function ChannelView({ address }: ChannelViewProps) {
+ {messageCount !== undefined && messages.length > 0 && (
+