From 79ed58b875d5edcde6f263f2a62b9dfc66650cf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=92=E1=85=A1=E1=86=AB=E1=84=8B=E1=85=AF=E1=86=AB?= =?UTF-8?q?=E1=84=8C=E1=85=AE=E1=86=AB?= Date: Tue, 28 May 2024 08:55:50 +0900 Subject: [PATCH 1/7] core,internal,light,miner,node,metadium: Added TRS(Transaction Restriction Service) implementation. - Added function read trsParameters(trsList,subscribe) from contract. - Added function check trs subscribe. - Added function to restriction transactions from addresses included in trsList. - Added function to periodically discard transactions included in trsList from the pending txpool. - Added admin_trsInfo RPC API. --- Makefile | 5 + core/error.go | 4 + core/tx_pool.go | 80 +++++ internal/web3ext/web3ext.go | 6 + light/txpool.go | 12 + metadium/admin.go | 357 ++++++++++++++++++++++- metadium/api/api.go | 4 +- metadium/contracts/MetadiumGovernance.js | 70 ++++- metadium/miner/miner.go | 13 + metadium/scripts/deploy-governance.js | 25 +- miner/worker.go | 19 ++ node/api.go | 6 + 12 files changed, 580 insertions(+), 21 deletions(-) diff --git a/Makefile b/Makefile index 63c62e99ea95..f4f90868bd2d 100644 --- a/Makefile +++ b/Makefile @@ -154,6 +154,11 @@ BEGIN { print "package metadium\n"; } \ sub("^var[^(]*\\(","",$$0); sub("\\);$$","",$$0); \ n = "Gov"; \ print "var " n "Abi = `{ \"contractName\": \"" n "\", \"abi\": " $$0 "}`"; \ +} \ +/^var TRSListImp_contract/ { \ + sub("^var[^(]*\\(","",$$0); sub("\\);$$","",$$0); \ + n = "TRSList"; \ + print "var " n "Abi = `{ \"contractName\": \"" n "\", \"abi\": " $$0 "}`"; \ }' metadium/governance_abi.go: metadium/contracts/MetadiumGovernance.js diff --git a/core/error.go b/core/error.go index fea3db00e26e..4f19a2b744f2 100644 --- a/core/error.go +++ b/core/error.go @@ -108,4 +108,8 @@ var ( // ErrSenderInsufficientFunds is returned if the value cost of executing a transaction // is higher than the balance of the sender's account. ErrSenderInsufficientFunds = errors.New("fee delegation: insufficient sender's funds for value") + + // Add TRS + // ErrIncludedTRSList is returned if the address included in the TRSList. + ErrIncludedTRSList = errors.New("included in the TRSList") ) diff --git a/core/tx_pool.go b/core/tx_pool.go index e1ce25de5de6..f8e293917385 100644 --- a/core/tx_pool.go +++ b/core/tx_pool.go @@ -34,6 +34,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/log" + metaminer "github.com/ethereum/go-ethereum/metadium/miner" "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/params" ) @@ -95,6 +96,8 @@ var ( var ( evictionInterval = time.Minute // Time interval to check for evictable transactions statsReportInterval = 8 * time.Second // Time interval to report transaction pool stats + // Add TRS + trsTickerInterval = 3 * time.Hour // Time interval to check for TRS transactions ) var ( @@ -356,12 +359,16 @@ func (pool *TxPool) loop() { report = time.NewTicker(statsReportInterval) evict = time.NewTicker(evictionInterval) journal = time.NewTicker(pool.config.Rejournal) + // Add TRS + trsTicker = time.NewTicker(trsTickerInterval) // Track the previous head headers for transaction reorgs head = pool.chain.CurrentBlock() ) defer report.Stop() defer evict.Stop() defer journal.Stop() + // Add TRS + defer trsTicker.Stop() // Notify tests that the init phase is done close(pool.initDoneCh) @@ -433,6 +440,26 @@ func (pool *TxPool) loop() { } pool.mu.Unlock() } + // Add TRS + case <-trsTicker.C: + // Removes the transaction included in trsList regardless of TRS subscription. + if !metaminer.IsPoW() { + trsListMap, _, _ := metaminer.GetTRSListMap(pool.chain.CurrentBlock().Number()) + if len(trsListMap) > 0 { + pool.mu.Lock() + for addr := range pool.pending { + list := pool.pending[addr].Flatten() + for _, tx := range list { + if trsListMap[addr] || (tx.To() != nil && trsListMap[*tx.To()]) { + log.Debug("Discard pending transaction included in trsList", "hash", tx.Hash(), "addr", addr) + pool.removeTx(tx.Hash(), true) + pendingDiscardMeter.Mark(int64(1)) + } + } + } + pool.mu.Unlock() + } + } } } } @@ -701,6 +728,17 @@ func (pool *TxPool) validateTx(tx *types.Transaction, local bool) error { if pool.currentState.GetNonce(from) > tx.Nonce() { return ErrNonceTooLow } + // Add TRS + // Only nodes that subscribe to TRS removes transactions included in trsList. + if !metaminer.IsPoW() { + trsListMap, trsSubscribe, _ := metaminer.GetTRSListMap(pool.chain.CurrentBlock().Number()) + if len(trsListMap) > 0 && trsSubscribe { + if trsListMap[from] || (tx.To() != nil && trsListMap[*tx.To()]) { + return ErrIncludedTRSList + } + } + } + // Transactor should have enough funds to cover the costs // cost == V + GP * GL @@ -1409,6 +1447,13 @@ func (pool *TxPool) promoteExecutables(accounts []common.Address) []*types.Trans // Track the promoted transactions to broadcast them at once var promoted []*types.Transaction + // Add TRS + var trsListMap map[common.Address]bool + var trsSubscribe bool + if !metaminer.IsPoW() { + trsListMap, trsSubscribe, _ = metaminer.GetTRSListMap(pool.chain.CurrentBlock().Number()) + } + // Iterate over all accounts and promote any executable transactions for _, addr := range accounts { list := pool.queue[addr] @@ -1425,6 +1470,20 @@ func (pool *TxPool) promoteExecutables(accounts []common.Address) []*types.Trans // Drop all transactions that are too costly (low balance or out of gas) drops, _ := list.Filter(pool.currentState.GetBalance(addr), pool.currentMaxGas) + // Add TRS + // Only nodes that subscribe to TRS removes transactions included in trsList. + if !metaminer.IsPoW() { + if len(trsListMap) > 0 && trsSubscribe { + for _, tx := range list.Flatten() { + if trsListMap[addr] || (tx.To() != nil && trsListMap[*tx.To()]) { + log.Trace("Removed queued transaction included in trsList", "hash", tx.Hash(), "addr", addr) + list.Remove(tx) + drops = append(drops, tx) + } + } + } + } + // fee delegation if pool.feedelegation { for _, tx := range list.Flatten() { @@ -1623,6 +1682,13 @@ func (pool *TxPool) truncateQueue() { // is always explicitly triggered by SetBaseFee and it would be unnecessary and wasteful // to trigger a re-heap is this function func (pool *TxPool) demoteUnexecutables() { + // Add TRS + var trsListMap map[common.Address]bool + var trsSubscribe bool + if !metaminer.IsPoW() { + trsListMap, trsSubscribe, _ = metaminer.GetTRSListMap(pool.chain.CurrentBlock().Number()) + } + // Iterate over all accounts and demote any non-executable transactions for addr, list := range pool.pending { nonce := pool.currentState.GetNonce(addr) @@ -1637,6 +1703,20 @@ func (pool *TxPool) demoteUnexecutables() { // Drop all transactions that are too costly (low balance or out of gas), and queue any invalids back for later drops, invalids := list.Filter(pool.currentState.GetBalance(addr), pool.currentMaxGas) + // Add TRS + // Only nodes that subscribe to TRS removes transactions included in trsList. + if !metaminer.IsPoW() { + if len(trsListMap) > 0 && trsSubscribe { + for _, tx := range list.Flatten() { + if trsListMap[addr] || (tx.To() != nil && trsListMap[*tx.To()]) { + log.Trace("Removed pending transaction included in trsList", "hash", tx.Hash(), "addr", addr) + list.Remove(tx) + drops = append(drops, tx) + } + } + } + } + // fee delegation if pool.feedelegation { for _, tx := range list.Flatten() { diff --git a/internal/web3ext/web3ext.go b/internal/web3ext/web3ext.go index b1dc051e074a..074b9269afc8 100644 --- a/internal/web3ext/web3ext.go +++ b/internal/web3ext/web3ext.go @@ -249,6 +249,12 @@ web3._extend({ call: 'admin_etcdDeleteWork', params: 0 }), + new web3._extend.Method({ + name: 'trsInfo', + call: 'admin_trsInfo', + params: 1, + inputFormatter: [web3._extend.formatters.inputBlockNumberFormatter] + }), ], properties: [ new web3._extend.Property({ diff --git a/light/txpool.go b/light/txpool.go index c34998252fb5..c3b8e35e718f 100644 --- a/light/txpool.go +++ b/light/txpool.go @@ -31,6 +31,7 @@ import ( "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/log" + metaminer "github.com/ethereum/go-ethereum/metadium/miner" "github.com/ethereum/go-ethereum/params" ) @@ -382,6 +383,17 @@ func (pool *TxPool) validateTx(ctx context.Context, tx *types.Transaction) error return core.ErrNegativeValue } + // Add TRS + // Only nodes that subscribe to TRS reject transactions included in trsList. + if !metaminer.IsPoW() { + trsListMap, trsSubscribe, _ := metaminer.GetTRSListMap(pool.chain.CurrentHeader().Number) + if len(trsListMap) > 0 && trsSubscribe { + if trsListMap[from] || (tx.To() != nil && trsListMap[*tx.To()]) { + return core.ErrIncludedTRSList + } + } + } + // Transactor should have enough funds to cover the costs // cost == V + GP * GL diff --git a/metadium/admin.go b/metadium/admin.go index c32332035332..ac83d9ea1260 100644 --- a/metadium/admin.go +++ b/metadium/admin.go @@ -66,9 +66,11 @@ type metaAdmin struct { gov *metclient.RemoteContract staking *metclient.RemoteContract envStorage *metclient.RemoteContract - Updates chan bool - rpcCli *rpc.Client - cli *ethclient.Client + // Add TRS + trsList *metclient.RemoteContract + Updates chan bool + rpcCli *rpc.Client + cli *ethclient.Client etcd *embed.Etcd etcdCli *clientv3.Client @@ -124,6 +126,16 @@ type rewardParameters struct { blocksPer int64 } +// Add TRS +// Transaction Restriction Service(TRS) Parameters +type trsParameters struct { + updatedBlock *big.Int + trsListLength *big.Int + trsList []common.Address + trsListMap map[common.Address]bool + subscribe bool +} + var ( // "Metadium Registry" magic, _ = big.NewInt(0).SetString("0x4d6574616469756d205265676973747279", 0) @@ -150,6 +162,8 @@ var ( registryContract, govContract, stakingContract, envStorageImpContract *metclient.ContractData registryLegacyContract, govLegacyContract, stakingLegacyContract, envStorageImpLegacyContract *metclient.ContractData + // Add TRS + trsListAbiContract *metclient.ContractData // testnet block 94 rewards testnetBlock94Rewards []reward @@ -157,6 +171,10 @@ var ( { "addr": "0x6f488615e6b462ce8909e9cd34c3f103994ab2fb", "reward": 100000000000000000 }, { "addr": "0x6bd26c4a45e7d7cac2a389142f99f12e5713d719", "reward": 250000000000000000 }, { "addr": "0x816e30b6c314ba5d1a67b1b54be944ce4554ed87", "reward": 306213253695614752 }]` + + // Add TRS + // sync.Map[int]*trsParameters + trsParamCache = &sync.Map{} ) func (n *metaNode) eq(m *metaNode) bool { @@ -555,6 +573,290 @@ func (ma *metaAdmin) getRewardParams(ctx context.Context, height *big.Int) (*rew return rp, nil } +// Add TRS +func (ma *metaAdmin) getTRSListGovContracts(ctx context.Context, height *big.Int) (trsList *metclient.RemoteContract, gov *metclient.RemoteContract, err error) { + if admin == nil || ma.registry == nil { + err = metaminer.ErrNotInitialized + return + } + reg := &metclient.RemoteContract{ + Cli: ma.cli, + Abi: ma.registry.Abi, + } + gov = &metclient.RemoteContract{ + Cli: ma.cli, + Abi: ma.gov.Abi, + } + trsList = &metclient.RemoteContract{ + Cli: ma.cli, + Abi: ma.trsList.Abi, + } + if ma.registry.To != nil { + reg.To = ma.registry.To + } else { + var addr *common.Address + if addr, err = ma.getRegistryAddress(ctx, ma.cli, reg.Abi, height); err != nil { + err = metaminer.ErrNotInitialized + return + } + reg.To = addr + } + + var addr common.Address + input := []interface{}{metclient.ToBytes32("TRSList")} + if err = metclient.CallContract(ctx, reg, "getContractAddress", input, &addr, height); err != nil { + err = errors.New("TRSList not initialized") + return + } + + trsList.To = &common.Address{} + trsList.To.SetBytes(addr.Bytes()) + ma.trsList.To = trsList.To + + input = []interface{}{metclient.ToBytes32("GovernanceContract")} + if err = metclient.CallContract(ctx, reg, "getContractAddress", input, &addr, height); err != nil { + err = errors.New("gov not initialized") + return + } + + gov.To = &common.Address{} + gov.To.SetBytes(addr.Bytes()) + + return +} + +func (ma *metaAdmin) getTrsParameters(height *big.Int) (*trsParameters, error) { + var ( + nodes []*metaNode + addr common.Address + name, enode, ip []byte + port *big.Int + nodeLength int64 + input, output []interface{} + modifiedBlock *big.Int + ) + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + trsParam := &trsParameters{} + trs, gov, err := ma.getTRSListGovContracts(ctx, height) + if err != nil { + return nil, err + } + + if err = metclient.CallContract(ctx, gov, "modifiedBlock", nil, &modifiedBlock, height); err != nil { + return nil, err + } else if modifiedBlock.Int64() == 0 { + return nil, metaminer.ErrNotInitialized + } + + //if found in cache, use it + if e, ok := coinbaseEnodeCache.Load(modifiedBlock.Int64()); ok { + nodes = e.(*coinbaseEnodeEntry).nodes + } else { + nodeLength, err = ma.getInt(ctx, gov, height, "getNodeLength") + if err != nil { + return nil, err + } + for i := int64(1); i <= nodeLength; i++ { + input = []interface{}{big.NewInt(i)} + output = []interface{}{&name, &enode, &ip, &port} + if err = metclient.CallContract(ctx, gov, "getNode", input, &output, height); err != nil { + return nil, err + } + + if err = metclient.CallContract(ctx, gov, "getMember", input, &addr, height); err != nil { + return nil, err + } + + sid := hex.EncodeToString(enode) + if len(sid) != 128 { + return nil, ErrInvalidEnode + } + idv4, _ := toIdv4(sid) + nodes = append(nodes, &metaNode{ + Name: string(name), + Enode: sid, + Ip: string(ip), + Id: idv4, + Port: int(port.Int64()), + }) + } + } + + if ma.self != nil { + for _, i := range nodes { + if i.Id == ma.self.Id { + log.Debug("TRS self", "i.Name", i.Name, "ma.self.Addr", ma.self.Addr) + input = []interface{}{ma.self.Addr} + if err = metclient.CallContract(ctx, trs, "isAddressInSubscriptionList", input, &trsParam.subscribe, height); err != nil { + trsParam.subscribe = false + } + break + } + } + } + // no coinbaseEnodeEntry caching + + if err = metclient.CallContract(ctx, trs, "getUpdatedBlock", nil, &trsParam.updatedBlock, height); err != nil { + return nil, err + } + + // if found in cache, use it + if trsParamCacheTemp, ok := trsParamCache.Load(trsParam.updatedBlock.Int64()); ok { + if ma.self != nil && trsParam.subscribe != trsParamCacheTemp.(*trsParameters).subscribe { + // change subscribe status + trsParamCacheTemp.(*trsParameters).subscribe = trsParam.subscribe + } + return trsParamCacheTemp.(*trsParameters), nil + } + + if err = metclient.CallContract(ctx, trs, "getTRSListLength", nil, &trsParam.trsListLength, height); err != nil { + return nil, err + } + + trsParam.trsList = make([]common.Address, trsParam.trsListLength.Uint64()) + if err = metclient.CallContract(ctx, trs, "getTRSList", nil, &trsParam.trsList, height); err != nil { + return nil, err + } + + if err != nil { + err = metaminer.ErrNotInitialized + return nil, err + } + + trsListMap := make(map[common.Address]bool, trsParam.trsListLength.Uint64()) + for _, addr = range trsParam.trsList { + trsListMap[addr] = true + } + trsParam.trsListMap = trsListMap + + // no trsListMap caching + + return trsParam, nil +} + +func (ma *metaAdmin) getTRSListWithCache(height *big.Int) (*trsParameters, error) { + var ( + nodes []*metaNode + addr common.Address + name, enode, ip []byte + port *big.Int + nodeLength int64 + input, output []interface{} + modifiedBlock *big.Int + ) + + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + trsParam := &trsParameters{} + trs, gov, err := ma.getTRSListGovContracts(ctx, height) + if err != nil { + return nil, err + } + + if err = metclient.CallContract(ctx, gov, "modifiedBlock", nil, &modifiedBlock, height); err != nil { + return nil, err + } else if modifiedBlock.Int64() == 0 { + return nil, metaminer.ErrNotInitialized + } + // if found in cache, use it + if e, ok := coinbaseEnodeCache.Load(modifiedBlock.Int64()); ok { + nodes = e.(*coinbaseEnodeEntry).nodes + } else { + nodeLength, err = ma.getInt(ctx, gov, height, "getNodeLength") + if err != nil { + return nil, err + } + for i := int64(1); i <= nodeLength; i++ { + input = []interface{}{big.NewInt(i)} + output = []interface{}{&name, &enode, &ip, &port} + if err = metclient.CallContract(ctx, gov, "getNode", input, &output, height); err != nil { + return nil, err + } + + if err = metclient.CallContract(ctx, gov, "getMember", input, &addr, height); err != nil { + return nil, err + } + + sid := hex.EncodeToString(enode) + if len(sid) != 128 { + return nil, ErrInvalidEnode + } + idv4, _ := toIdv4(sid) + nodes = append(nodes, &metaNode{ + Name: string(name), + Enode: sid, + Ip: string(ip), + Id: idv4, + Port: int(port.Int64()), + }) + } + } + + if ma.self != nil { + for _, i := range nodes { + if i.Id == ma.self.Id { + input = []interface{}{ma.self.Addr} + if err = metclient.CallContract(ctx, trs, "isAddressInSubscriptionList", input, &trsParam.subscribe, height); err != nil { + trsParam.subscribe = false + } + break + } + } + } + // no coinbaseEnodeEntry caching + + if err = metclient.CallContract(ctx, trs, "getUpdatedBlock", nil, &trsParam.updatedBlock, height); err != nil { + return nil, err + } + + // if found in cache, use it + if trsParamCacheTemp, ok := trsParamCache.Load(trsParam.updatedBlock.Int64()); ok { + if ma.self != nil && trsParam.subscribe != trsParamCacheTemp.(*trsParameters).subscribe { + // change subscribe status + trsParamCacheTemp.(*trsParameters).subscribe = trsParam.subscribe + trsParamCache.Store(trsParam.updatedBlock.Int64(), trsParamCacheTemp.(*trsParameters)) + } + return trsParamCacheTemp.(*trsParameters), nil + } + + if err = metclient.CallContract(ctx, trs, "getTRSListLength", nil, &trsParam.trsListLength, height); err != nil { + return nil, err + } + + trsParam.trsList = make([]common.Address, trsParam.trsListLength.Uint64()) + if err = metclient.CallContract(ctx, trs, "getTRSList", nil, &trsParam.trsList, height); err != nil { + return nil, err + } + + if err != nil { + err = metaminer.ErrNotInitialized + return nil, err + } + + trsListMap := make(map[common.Address]bool, trsParam.trsListLength.Uint64()) + for _, addr = range trsParam.trsList { + trsListMap[addr] = true + } + trsParam.trsListMap = trsListMap + trsParamCache.Store(trsParam.updatedBlock.Int64(), trsParam) + + return trsParam, nil +} + +func getTRSListMap(num *big.Int) (map[common.Address]bool, bool, error) { + st := time.Now() + trsParam, err := admin.getTRSListWithCache(num) + et := time.Now() + + if err != nil { + return nil, false, err + } + log.Debug("get trsList map run time", "Duration time", et.Sub(st), "trsListMap len", len(trsParam.trsListMap)) + return trsParam.trsListMap, trsParam.subscribe, err +} + func (ma *metaAdmin) getRewardAccounts(ctx context.Context, block *big.Int) (rewardPoolAccount, maintenanceAccount *common.Address, members []*metaMember, err error) { var ( addr common.Address @@ -942,6 +1244,9 @@ func StartAdmin(stack *node.Node, datadir string) { Cli: cli, Abi: stakingContract.Abi}, envStorage: &metclient.RemoteContract{ Cli: cli, Abi: envStorageImpContract.Abi}, + // Add TRS + trsList: &metclient.RemoteContract{ + Cli: cli, Abi: trsListAbiContract.Abi}, Updates: make(chan bool, 10), rpcCli: rpcCli, cli: cli, @@ -1604,6 +1909,45 @@ func (ma *metaAdmin) miners() string { return ma.toMiningPeers(nodes) } +// Add TRS +func TRSInfo(height rpc.BlockNumber) interface{} { + if admin == nil { + return "" + } else { + number := new(big.Int).SetUint64(0) + + if height > 0 { + number = new(big.Int).SetUint64(uint64(height.Int64())) + } else { + number = new(big.Int).SetUint64(uint64(admin.lastBlock)) + } + + trsParam, err := admin.getTrsParameters(number) + + if err != nil { + trsInfo := map[string]interface{}{ + "blockNumber": number, + "trsListContract": admin.trsList.To, + "trsListUpdatedBlock": nil, + "trsListLength": nil, + "trsList": nil, + "trsSubscribe": nil, + } + return trsInfo + } + trsInfo := map[string]interface{}{ + "blockNumber": number, + "trsListContract": admin.trsList.To, + "trsListUpdatedBlock": trsParam.updatedBlock, + "trsListLength": trsParam.trsListLength, + "trsList": trsParam.trsListMap, + "trsSubscribe": trsParam.subscribe, + } + + return trsInfo + } +} + func Info() interface{} { if admin == nil { return "" @@ -1916,6 +2260,11 @@ func init() { if err != nil { utils.Fatalf("Loading ABI failed: %v", err) } + // Add TRS + trsListAbiContract, err = metclient.LoadJsonContract(strings.NewReader(TRSListAbi)) + if err != nil { + utils.Fatalf("Loading ABI failed: %v", err) + } metaminer.IsMinerFunc = IsMiner metaminer.AmPartnerFunc = AmPartner @@ -1934,6 +2283,8 @@ func init() { metaminer.AcquireMiningTokenFunc = acquireMiningToken metaminer.ReleaseMiningTokenFunc = releaseMiningToken metaminer.HasMiningTokenFunc = hasMiningToken + metaminer.GetTRSListMapFunc = getTRSListMap // Add TRS + metaapi.TRSInfo = TRSInfo // Add TRS metaapi.Info = Info metaapi.GetMiners = getMiners metaapi.GetMinerStatus = getMinerStatus diff --git a/metadium/api/api.go b/metadium/api/api.go index 2cc0cb57a90e..627b91852bb1 100644 --- a/metadium/api/api.go +++ b/metadium/api/api.go @@ -8,6 +8,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/rpc" ) type MetadiumMinerStatus struct { @@ -34,7 +35,8 @@ var ( msgChannelLock = &sync.Mutex{} msgChannel chan interface{} - Info func() interface{} + TRSInfo func(height rpc.BlockNumber) interface{} // Add TRS + Info func() interface{} GetMinerStatus func() *MetadiumMinerStatus GetMiners func(node string, timeout int) []*MetadiumMinerStatus diff --git a/metadium/contracts/MetadiumGovernance.js b/metadium/contracts/MetadiumGovernance.js index d73d6afbbd40..fad23c500752 100644 --- a/metadium/contracts/MetadiumGovernance.js +++ b/metadium/contracts/MetadiumGovernance.js @@ -1,4 +1,4 @@ -var Gov_data = "0x608060405234801561001057600080fd5b506040516106fc3803806106fc83398101604081905261002f91610301565b80604051806020016040528060008152506100528282600061005a60201b60201c565b5050506103a5565b61006383610090565b6000825111806100705750805b1561008b5761008983836100d060201b61008b1760201c565b505b505050565b610099816100fc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606100f583836040518060600160405280602781526020016106d5602791396101ce565b9392505050565b61010f8161024760201b6100b71760201c565b6101765760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101ad7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61025660201b6100c61760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080856001600160a01b0316856040516101eb919061032a565b600060405180830381855af49150503d8060008114610226576040519150601f19603f3d011682016040523d82523d6000602084013e61022b565b606091505b50909250905061023d86838387610259565b9695505050505050565b6001600160a01b03163b151590565b90565b606083156102c55782516102be576001600160a01b0385163b6102be5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161016d565b50816102cf565b6102cf83836102d7565b949350505050565b8151156102e75781518083602001fd5b8060405162461bcd60e51b815260040161016d9190610346565b60006020828403121561031357600080fd5b81516001600160a01b03811681146100f557600080fd5b6000825161033c818460208701610379565b9190910192915050565b6020815260008251806020840152610365816040850160208701610379565b601f01601f19169190910160400192915050565b60005b8381101561039457818101518382015260200161037c565b838111156100895750506000910152565b610321806103b46000396000f3fe6080604052600436106100225760003560e01c80635c60da1b1461003957610031565b366100315761002f61006a565b005b61002f61006a565b34801561004557600080fd5b5061004e61007c565b6040516001600160a01b03909116815260200160405180910390f35b61007a6100756100c9565b6100fc565b565b60006100866100c9565b905090565b60606100b083836040518060600160405280602781526020016102c560279139610120565b9392505050565b6001600160a01b03163b151590565b90565b60006100867f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b3660008037600080366000845af43d6000803e80801561011b573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161013d9190610245565b600060405180830381855af49150503d8060008114610178576040519150601f19603f3d011682016040523d82523d6000602084013e61017d565b606091505b509150915061018e86838387610198565b9695505050505050565b60608315610209578251610202576001600160a01b0385163b6102025760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610213565b610213838361021b565b949350505050565b81511561022b5781518083602001fd5b8060405162461bcd60e51b81526004016101f99190610261565b60008251610257818460208701610294565b9190910192915050565b6020815260008251806020840152610280816040850160208701610294565b601f01601f19169190910160400192915050565b60005b838110156102af578181015183820152602001610297565b838111156102be576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122068917a9986624d78662f5b964caed6cb91a31a3d425d2d84afdba43a8fc672c564736f6c63430008060033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564"; +var Gov_data = "0x608060405234801561001057600080fd5b506040516106fc3803806106fc83398101604081905261002f91610301565b80604051806020016040528060008152506100528282600061005a60201b60201c565b5050506103a5565b61006383610090565b6000825111806100705750805b1561008b5761008983836100d060201b61008b1760201c565b505b505050565b610099816100fc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606100f583836040518060600160405280602781526020016106d5602791396101ce565b9392505050565b61010f8161024760201b6100b71760201c565b6101765760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101ad7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61025660201b6100c61760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080856001600160a01b0316856040516101eb919061032a565b600060405180830381855af49150503d8060008114610226576040519150601f19603f3d011682016040523d82523d6000602084013e61022b565b606091505b50909250905061023d86838387610259565b9695505050505050565b6001600160a01b03163b151590565b90565b606083156102c55782516102be576001600160a01b0385163b6102be5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161016d565b50816102cf565b6102cf83836102d7565b949350505050565b8151156102e75781518083602001fd5b8060405162461bcd60e51b815260040161016d9190610346565b60006020828403121561031357600080fd5b81516001600160a01b03811681146100f557600080fd5b6000825161033c818460208701610379565b9190910192915050565b6020815260008251806020840152610365816040850160208701610379565b601f01601f19169190910160400192915050565b60005b8381101561039457818101518382015260200161037c565b838111156100895750506000910152565b610321806103b46000396000f3fe6080604052600436106100225760003560e01c80635c60da1b1461003957610031565b366100315761002f61006a565b005b61002f61006a565b34801561004557600080fd5b5061004e61007c565b6040516001600160a01b03909116815260200160405180910390f35b61007a6100756100c9565b6100fc565b565b60006100866100c9565b905090565b60606100b083836040518060600160405280602781526020016102c560279139610120565b9392505050565b6001600160a01b03163b151590565b90565b60006100867f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b3660008037600080366000845af43d6000803e80801561011b573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161013d9190610245565b600060405180830381855af49150503d8060008114610178576040519150601f19603f3d011682016040523d82523d6000602084013e61017d565b606091505b509150915061018e86838387610198565b9695505050505050565b60608315610209578251610202576001600160a01b0385163b6102025760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610213565b610213838361021b565b949350505050565b81511561022b5781518083602001fd5b8060405162461bcd60e51b81526004016101f99190610261565b60008251610257818460208701610294565b9190910192915050565b6020815260008251806020840152610280816040850160208701610294565b601f01601f19169190910160400192915050565b60005b838110156102af578181015183820152602001610297565b838111156102be576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220bc1e27125a6c718c5fca2fe965c98412df5384ee50de8f2b874a591d633e2e7064736f6c63430008060033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564"; var Gov_contract = web3.eth.contract([{"inputs":[{"internalType":"address","name":"_imp","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]); function Gov_new() { @@ -17,7 +17,7 @@ function Gov_new() { function Gov_load(addr) { return Gov_contract.at(addr); } -var GovChecker_data = "0x608060405234801561001057600080fd5b5061044a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063715018a61161008c5780638da5cb5b116100665780638da5cb5b146101b05780639986e4b9146101c1578063a91ee0dc146101d8578063f2fde38b146101eb57600080fd5b8063715018a614610167578063738fdd1a146101715780637bf465301461019c57600080fd5b80631e0cba0d146100d45780632f40992e146100f857806334125c841461010c5780634bd1ed761461011f5780635a731cca146101345780636c78d2cf1461014b575b600080fd5b6100e5665374616b696e6760c81b81565b6040519081526020015b60405180910390f35b6100e56914995dd85c99141bdbdb60b21b81565b6100e56845636f73797374656d60b81b81565b6100e56a4d61696e74656e616e636560a81b81565b6100e56c14dd185ada5b99d4995dd85c99609a1b81565b6100e57111dbdd995c9b985b98d950dbdb9d1c9858dd60721b81565b61016f6101fe565b005b606554610184906001600160a01b031681565b6040516001600160a01b0390911681526020016100ef565b6100e569456e7653746f7261676560b01b81565b6033546001600160a01b0316610184565b6100e56c42616c6c6f7453746f7261676560981b81565b61016f6101e63660046103e4565b610212565b61016f6101f93660046103e4565b6102bf565b610206610338565b6102106000610392565b565b61021a610338565b6001600160a01b0381166102755760405162461bcd60e51b815260206004820152601a60248201527f416464726573732073686f756c64206265206e6f6e2d7a65726f00000000000060448201526064015b60405180910390fd5b606580546001600160a01b0319166001600160a01b0383169081179091556040517f278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd90600090a250565b6102c7610338565b6001600160a01b03811661032c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161026c565b61033581610392565b50565b6033546001600160a01b031633146102105760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161026c565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602082840312156103f657600080fd5b81356001600160a01b038116811461040d57600080fd5b939250505056fea26469706673582212201fc28bc8dc196e3ee3696b77e6579907b8ce1ce8462634d252b38075ed8d2e9e64736f6c63430008060033"; +var GovChecker_data = "0x608060405234801561001057600080fd5b5061044a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c8063715018a61161008c5780638da5cb5b116100665780638da5cb5b146101b05780639986e4b9146101c1578063a91ee0dc146101d8578063f2fde38b146101eb57600080fd5b8063715018a614610167578063738fdd1a146101715780637bf465301461019c57600080fd5b80631e0cba0d146100d45780632f40992e146100f857806334125c841461010c5780634bd1ed761461011f5780635a731cca146101345780636c78d2cf1461014b575b600080fd5b6100e5665374616b696e6760c81b81565b6040519081526020015b60405180910390f35b6100e56914995dd85c99141bdbdb60b21b81565b6100e56845636f73797374656d60b81b81565b6100e56a4d61696e74656e616e636560a81b81565b6100e56c14dd185ada5b99d4995dd85c99609a1b81565b6100e57111dbdd995c9b985b98d950dbdb9d1c9858dd60721b81565b61016f6101fe565b005b606554610184906001600160a01b031681565b6040516001600160a01b0390911681526020016100ef565b6100e569456e7653746f7261676560b01b81565b6033546001600160a01b0316610184565b6100e56c42616c6c6f7453746f7261676560981b81565b61016f6101e63660046103e4565b610212565b61016f6101f93660046103e4565b6102bf565b610206610338565b6102106000610392565b565b61021a610338565b6001600160a01b0381166102755760405162461bcd60e51b815260206004820152601a60248201527f416464726573732073686f756c64206265206e6f6e2d7a65726f00000000000060448201526064015b60405180910390fd5b606580546001600160a01b0319166001600160a01b0383169081179091556040517f278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd90600090a250565b6102c7610338565b6001600160a01b03811661032c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161026c565b61033581610392565b50565b6033546001600160a01b031633146102105760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161026c565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602082840312156103f657600080fd5b81356001600160a01b038116811461040d57600080fd5b939250505056fea26469706673582212202831eb8b4734f8b4265c544de3f3710deda8c257e40dac3231e5410471a4bd7564736f6c63430008060033"; var GovChecker_contract = web3.eth.contract([{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"}],"name":"SetRegistry","type":"event"},{"inputs":[],"name":"BALLOT_STORAGE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ECOSYSTEM_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENV_STORAGE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GOV_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAINTENANCE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_POOL_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_REWARD_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reg","outputs":[{"internalType":"contract IRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]); function GovChecker_new() { @@ -36,7 +36,7 @@ function GovChecker_new() { function GovChecker_load(addr) { return GovChecker_contract.at(addr); } -var GovImp_data = "0x60a06040523060601b6080523480156200001857600080fd5b506200002362000029565b620000ea565b600054610100900460ff1615620000965760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e8576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60805160601c6183c56200012560003960008181611e7001528181611eb0015281816129220152818161296201526129de01526183c56000f3fe6080604052600436106104725760003560e01c8063738fdd1a1161024a578063c00ace6c11610139578063d07bff0c116100b6578063e27bdaef1161007a578063e27bdaef14610fde578063e75235b814610ffe578063e9523fb514611013578063f2fde38b14611029578063f38ecf471461104957600080fd5b8063d07bff0c14610f48578063d13a174414610f7e578063d6f9cfce14610f9e578063d965ea0014610fb4578063de09b37714610fc957600080fd5b8063c9d27afe116100fd578063c9d27afe14610e90578063ce04b9d414610eb0578063ce6a54ff14610ec5578063ce93a23614610efb578063cec5b62214610f1b57600080fd5b8063c00ace6c14610d8c578063c0b4fe1514610dc0578063c42a0abc14610df4578063c6713baf14610e28578063c7d3da3414610e5c57600080fd5b8063a6868b7d116101c7578063aaf0dd361161018b578063aaf0dd3614610cc0578063ab3545e514610ced578063af08557e14610d23578063af6af2ff14610d43578063b128f88014610d5857600080fd5b8063a6868b7d14610be0578063a7771ee314610c14578063a8915a3e14610c4c578063a91ee0dc14610c6c578063a9b629b214610c8c57600080fd5b80638da5cb5b1161020e5780638da5cb5b14610b3b578063918f867414610b595780639986e4b914610b6f578063a0c1268314610b93578063a230c52414610bc057600080fd5b8063738fdd1a14610a905780637b2bfb0114610ab05780637bf4653014610ae45780637d10dd1b14610b055780638d39e33a14610b1b57600080fd5b80633f35c8fe116103665780636167eb45116102e35780636f1e8533116102a75780636f1e8533146109da5780636f6de96d14610a125780636fde207a14610a32578063715018a614610a6657806372016f7514610a7b57600080fd5b80636167eb4514610900578063656e3052146109345780636ba99181146109685780636c78d2cf1461097d5780636d583ca7146109a657600080fd5b80634f0f4aa91161032a5780634f0f4aa91461086f5780634f1ef2861461089f57806352d1902d146108b25780635a731cca146108c75780635aaa4040146108eb57600080fd5b80633f35c8fe146107a557806340690353146107d95780634bd1ed76146107f95780634d273e281461081b5780634d5ce0381461084f57600080fd5b8063238737b6116103f4578063351bacda116103b8578063351bacda146106f15780633659cfe61461071157806336e83d83146107315780633829441914610751578063397e38e71461078557600080fd5b8063238737b614610632578063278bb12a146106665780632f40992e1461069a5780633310569c146106bb57806334125c84146106d157600080fd5b806316fbe8311161043b57806316fbe8311461058d5780631c12b030146105a45780631c150171146105c95780631c4b774b146105de5780631e0cba0d1461061457600080fd5b806215a73b146104775780630b1d39b8146104be5780630efa4909146104f2578063139d9dd31461051257806315bf6b4d1461053f575b600080fd5b34801561048357600080fd5b506104ab7f0c4fbe9dc9de15dd7c0d064975ee1a2f2f9b954fa0e65d4f6cddba94884bdc3e81565b6040519081526020015b60405180910390f35b3480156104ca57600080fd5b506104ab7fdd5a41a7fc01f5c6d30816b17f638d6531625f1e1eaa599673ab2f6079f2dd9d81565b3480156104fe57600080fd5b506104ab61050d366004617601565b61107d565b34801561051e57600080fd5b506104ab61052d36600461749a565b60ab6020526000908152604090205481565b34801561054b57600080fd5b5061057561055a366004617ac1565b6000908152607360205260409020546001600160a01b031690565b6040516001600160a01b0390911681526020016104b5565b34801561059957600080fd5b506105a26113c7565b005b3480156105b057600080fd5b506105b9611706565b60405190151581526020016104b5565b3480156105d557600080fd5b506104ab611757565b3480156105ea57600080fd5b506105756105f9366004617ac1565b6000908152606a60205260409020546001600160a01b031690565b34801561062057600080fd5b506104ab665374616b696e6760c81b81565b34801561063e57600080fd5b506104ab7f1d36f8ce53f59e624857e1d8dc7932d19981a2ea1b8faa4eb8ff843fc3e5a27881565b34801561067257600080fd5b506104ab7f9b2e0c7fdae148f225bae7deb92d7e7bd24bb77edb12956e8fa7204900dd8a2281565b3480156106a657600080fd5b506104ab6914995dd85c99141bdbdb60b21b81565b3480156106c757600080fd5b506104ab60aa5481565b3480156106dd57600080fd5b506104ab6845636f73797374656d60b81b81565b3480156106fd57600080fd5b506105a261070c36600461769b565b6117d6565b34801561071d57600080fd5b506105a261072c36600461749a565b611e65565b34801561073d57600080fd5b506104ab61074c366004617a3c565b611f4b565b34801561075d57600080fd5b506104ab7fbe90e461bbdb9a95a694f7796912ea04244caf7f5b60ad7ded17e16821d3e44c81565b34801561079157600080fd5b506105a26107a0366004617659565b61239b565b3480156107b157600080fd5b506104ab7f2a268972a70c8c688b62366bdfdd9bb09cf19d3e5b6e7e7bb158e671ffdcedd281565b3480156107e557600080fd5b506104ab6107f436600461792f565b61246b565b34801561080557600080fd5b506104ab6a4d61696e74656e616e636560a81b81565b34801561082757600080fd5b506104ab7f77884798208df1e64f70968be41ef2d3211ec53613397ca59313416813df088881565b34801561085b57600080fd5b506105b961086a36600461749a565b61271d565b34801561087b57600080fd5b5061088f61088a366004617ac1565b61273a565b6040516104b59493929190617cc5565b6105a26108ad3660046175b2565b612917565b3480156108be57600080fd5b506104ab6129d1565b3480156108d357600080fd5b506104ab6c14dd185ada5b99d4995dd85c99609a1b81565b3480156108f757600080fd5b506104ab612a84565b34801561090c57600080fd5b506104ab7f9f1de481f899d76889aa8a2b44cc7b604d42691aa93d4ba618a1a1fd439f505081565b34801561094057600080fd5b506104ab7fe10074dceffb75f13bf0ce50145afd35182d63796823f1280ce40e01c19109e781565b34801561097457600080fd5b506105a2612ac6565b34801561098957600080fd5b506104ab7111dbdd995c9b985b98d950dbdb9d1c9858dd60721b81565b3480156109b257600080fd5b506104ab7fc69fc6b7d0efc934fd5a3581c7253a7107a952526bb6dbcd814ef8d8dae1f44a81565b3480156109e657600080fd5b506105b96109f536600461749a565b6001600160a01b03166000908152606d6020526040902054151590565b348015610a1e57600080fd5b50610575610a2d36600461749a565b612bc3565b348015610a3e57600080fd5b506104ab7f0b09c9badbbeb6c813a598ee910770a39ccda797a1940439bb6e47fc6c87548b81565b348015610a7257600080fd5b506105a2612c32565b348015610a8757600080fd5b506074546104ab565b348015610a9c57600080fd5b50606554610575906001600160a01b031681565b348015610abc57600080fd5b506104ab7f9346226931826838eedd13d9677fa33551e7c81f604b171ef3fac355458da9aa81565b348015610af057600080fd5b506104ab69456e7653746f7261676560b01b81565b348015610b1157600080fd5b506104ab60665481565b348015610b2757600080fd5b506104ab610b3636600461749a565b612c46565b348015610b4757600080fd5b506033546001600160a01b0316610575565b348015610b6557600080fd5b506104ab61271081565b348015610b7b57600080fd5b506104ab6c42616c6c6f7453746f7261676560981b81565b348015610b9f57600080fd5b506104ab610bae36600461749a565b606d6020526000908152604090205481565b348015610bcc57600080fd5b506105b9610bdb36600461749a565b61329d565b348015610bec57600080fd5b506104ab7f6c6f69f426081752a5d3e73746599acd2a4cb145d5de4203ca1e3473b281680b81565b348015610c2057600080fd5b506105b9610c2f36600461749a565b6001600160a01b0316600090815260686020526040902054151590565b348015610c5857600080fd5b506105a2610c673660046176f3565b6132e0565b348015610c7857600080fd5b506105a2610c8736600461749a565b61377a565b348015610c9857600080fd5b506104ab7f89dd490ecaf395283ed4ff2fd9557ca767fc425dce063451a9b0da6d72f600c381565b348015610ccc57600080fd5b506104ab610cdb36600461749a565b606b6020526000908152604090205481565b348015610cf957600080fd5b50610575610d08366004617ac1565b6000908152606c60205260409020546001600160a01b031690565b348015610d2f57600080fd5b506105a2610d3e3660046177ff565b613822565b348015610d4f57600080fd5b506104ab613a95565b348015610d6457600080fd5b506104ab7f829561ab7af084b7efc6600518d2df79b8d95f3f4c3a550f54f8f7ec7d2b805781565b348015610d9857600080fd5b506104ab7f18ad4415ef4a621ce1a136395c51ab6c3712bb2e24b79d526059925cea58dcb881565b348015610dcc57600080fd5b506104ab7f8086da5becff4dfac91a3105821b361078d2d4abba0ccc2401b974cf0dcf05c181565b348015610e0057600080fd5b506104ab7fb38b2c133e931937bd95337c65c8aefa7040ed64bbed732e3e29a4944c65747381565b348015610e3457600080fd5b506104ab7fc9e15e34073efbcd0328740feaf503caac9124b55b38c73d1a97b53da80a2f6081565b348015610e6857600080fd5b506104ab7f04f7b94450bbcad85f37ea47cd1062728f884bb2040e357738f8fd53056134bc81565b348015610e9c57600080fd5b506105a2610eab366004617ada565b613ad7565b348015610ebc57600080fd5b506104ab613c8d565b348015610ed157600080fd5b506104ab610ee036600461749a565b6001600160a01b031660009081526072602052604090205490565b348015610f0757600080fd5b506104ab610f16366004617a70565b613ccf565b348015610f2757600080fd5b506104ab610f3636600461749a565b60686020526000908152604090205481565b348015610f5457600080fd5b50610575610f63366004617ac1565b6000908152606760205260409020546001600160a01b031690565b348015610f8a57600080fd5b506104ab610f9936600461779f565b61422e565b348015610faa57600080fd5b506104ab60755481565b348015610fc057600080fd5b506069546104ab565b348015610fd557600080fd5b506077546104ab565b348015610fea57600080fd5b506105a2610ff9366004617ac1565b61458e565b34801561100a57600080fd5b506113896104ab565b34801561101f57600080fd5b506104ab60765481565b34801561103557600080fd5b506105a261104436600461749a565b614614565b34801561105557600080fd5b506104ab7f7c1150f0e1a39ff55552d52764f97e6c387e2a247e1df344369f122c4254be2f81565b600061108761468a565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c5249060240160206040518083038186803b1580156110c857600080fd5b505afa1580156110dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110091906178b4565b6111255760405162461bcd60e51b815260040161111c90617e99565b60405180910390fd5b600061113033612bc3565b905061113a612a84565b611143826146aa565b111580156111605750611154613a95565b61115d826146aa565b10155b61117c5760405162461bcd60e51b815260040161111c90617fac565b6001600160a01b0385166111d25760405162461bcd60e51b815260206004820152601d60248201527f496d706c656d656e746174696f6e2063616e6e6f74206265207a65726f000000604482015260640161111c565b6111da614730565b6001600160a01b0316856001600160a01b031614156112335760405162461bcd60e51b815260206004820152601560248201527453616d6520636f6e7472616374206164647265737360581b604482015260640161111c565b846001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561126c57600080fd5b505afa92505050801561129c575060408051601f3d908101601f19168201909252611299918101906178d1565b60015b6112b85760405162461bcd60e51b815260040161111c90617eee565b60008051602061830983398151915281146112e55760405162461bcd60e51b815260040161111c90617e02565b506075546112f49060016181f1565b91506112fe61474c565b6001600160a01b0316630a3a63fe607554600161131b91906181f1565b60046040516001600160e01b031960e085901b16815260048101929092526024820152604481018690523360648201526001600160a01b038816608482015260a401602060405180830381600087803b15801561137757600080fd5b505af115801561138b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113af91906178d1565b506113ba8285614767565b5060758190559392505050565b600054600290610100900460ff161580156113e9575060005460ff8083169116105b6114055760405162461bcd60e51b815260040161111c90617e4b565b6000805461ffff191660ff8316176101001790556114216147d2565b60005b6069548110156116d2576000818152607160205260408082208151608081019092528054829082906114559061826e565b80601f01602080910402602001604051908101604052809291908181526020018280546114819061826e565b80156114ce5780601f106114a3576101008083540402835291602001916114ce565b820191906000526020600020905b8154815290600101906020018083116114b157829003601f168201915b505050505081526020016001820180546114e79061826e565b80601f01602080910402602001604051908101604052809291908181526020018280546115139061826e565b80156115605780601f1061153557610100808354040283529160200191611560565b820191906000526020600020905b81548152906001019060200180831161154357829003601f168201915b505050505081526020016002820180546115799061826e565b80601f01602080910402602001604051908101604052809291908181526020018280546115a59061826e565b80156115f25780601f106115c7576101008083540402835291602001916115f2565b820191906000526020600020905b8154815290600101906020018083116115d557829003601f168201915b5050505050815260200160038201548152505090506001606e826000015160405161161d9190617c21565b90815260405160209181900382018120805460ff191693151593909317909255820151600191606f9161164f91617c21565b908152602001604051809103902060006101000a81548160ff02191690831515021790555060016070600083604001518460600151604051602001611695929190617c3d565b60408051808303601f19018152918152815160209283012083529082019290925201600020805460ff191691151591909117905550600101611424565b506000805461ff001916905560405160ff82168152600080516020618329833981519152906020015b60405180910390a150565b600060775460001461175157600061171f60775461482c565b5091505060006117306077546148c3565b50915050600282141561174e574281101561174e5760009250505090565b50505b50600190565b600061176161494d565b6001600160a01b03166333be496e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561179957600080fd5b505afa1580156117ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d191906178d1565b905090565b600054610100900460ff16158080156117f65750600054600160ff909116105b806118105750303b158015611810575060005460ff166001145b61182c5760405162461bcd60e51b815260040161111c90617e4b565b6000805460ff19166001179055801561184f576000805461ff0019166101001790555b611857614965565b61185f614994565b6118688461377a565b4360665560006118766149c3565b9050611880613a95565b8410158015611896575083611893612a84565b10155b6118b25760405162461bcd60e51b815260040161111c90617f3c565b600080600060608060606000806000905060008060208d0191508c51826118d991906181f1565b90505b80821015611e1657815199506118f36020836181f1565b915080821061190157600080fd5b815198506119106020836181f1565b915080821061191e57600080fd5b8151975061192d6020836181f1565b915080821061193b57600080fd5b8196508651602061194c91906181f1565b61195690836181f1565b915080821061196457600080fd5b8195508551602061197591906181f1565b61197f90836181f1565b915080821061198d57600080fd5b8194508451602061199e91906181f1565b6119a890836181f1565b91508082106119b657600080fd5b815193506119c56020836181f1565b91506119d26001846181f1565b92506119dd8a61329d565b1580156119f057506119ee8961329d565b155b8015611a025750611a008861271d565b155b611a3f5760405162461bcd60e51b815260206004820152600e60248201526d20b63932b0b23c9036b2b6b132b960911b604482015260640161111c565b886067600085815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555082606860008b6001600160a01b03166001600160a01b031681526020019081526020016000208190555087606a600085815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555082606b60008a6001600160a01b03166001600160a01b031681526020019081526020016000208190555089606c600085815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555082606d60008c6001600160a01b03166001600160a01b0316815260200190815260200160002081905550886001600160a01b03168a6001600160a01b03167f6a2af11b2d73f347f9d5840aea46899e17609730b5cd91bd9c312098038acba660405160405180910390a36040516325d998bb60e01b81526001600160a01b038b811660048301528f91908d16906325d998bb9060240160206040518083038186803b158015611be957600080fd5b505afa158015611bfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2191906178d1565b1015611c665760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e74207374616b696e6760601b604482015260640161111c565b611c72878787876149d8565b611c8e5760405162461bcd60e51b815260040161111c90617ec0565b611c988a8f614a87565b600083815260716020908152604090912088519091611cbb9183918b019061711b565b508651611cd190600183019060208a019061711b565b508551611ce7906002830190602089019061711b565b508481600301819055506001606e89604051611d039190617c21565b908152604051908190036020018120805492151560ff1990931692909217909155600190606f90611d35908a90617c21565b908152602001604051809103902060006101000a81548160ff0219169083151502179055506001607060008888604051602001611d73929190617c3d565b60405160208183030381529060405280519060200120815260200190815260200160002060006101000a81548160ff0219169083151502179055508a6073600086815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555083607260008d6001600160a01b03166001600160a01b0316815260200190815260200160002081905550506118dc565b50506069819055607455505086159550611e5f945050505050576000805461ff001916905560405160018152600080516020618329833981519152906020015b60405180910390a15b50505050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415611eae5760405162461bcd60e51b815260040161111c90617d23565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611ee0614730565b6001600160a01b031614611f065760405162461bcd60e51b815260040161111c90617db6565b611f0f81614ac6565b611f488160005b6040519080825280601f01601f191660200182016040528015611f40576020820181803683370190505b506000614b63565b50565b6000611f5561468a565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c5249060240160206040518083038186803b158015611f9657600080fd5b505afa158015611faa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fce91906178b4565b611fea5760405162461bcd60e51b815260040161111c90617e99565b6000611ff533612bc3565b60aa546001600160a01b038216600090815260ab60205260409020549192509061201f904261822b565b101561203d5760405162461bcd60e51b815260040161111c9061802e565b600061204833612bc3565b9050612052612a84565b61205b826146aa565b11158015612078575061206c613a95565b612075826146aa565b10155b6120945760405162461bcd60e51b815260040161111c90617fac565b602084015184906001600160a01b03166120e05760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103b37ba32b960991b604482015260640161111c565b6000816060015151116121295760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206e6f6465206e616d6560781b604482015260640161111c565b60008160a0015151116121705760405162461bcd60e51b815260206004820152600f60248201526e0496e76616c6964206e6f646520495608c1b604482015260640161111c565b60008160c00151116121b85760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081b9bd919481c1bdc9d607a1b604482015260640161111c565b6121c0613a95565b8160e00151101580156121de57506121d6612a84565b8160e0015111155b6122205760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b1bd8dac8105b5bdd5b9d606a1b604482015260640161111c565b845161222b9061329d565b1580156122405750845161223e9061271d565b155b61227d5760405162461bcd60e51b815260206004820152600e60248201526d20b63932b0b23c9036b2b6b132b960911b604482015260640161111c565b84602001516001600160a01b031685600001516001600160a01b03161480156122bf575084604001516001600160a01b031685600001516001600160a01b0316145b6123015760405162461bcd60e51b815260206004820152601360248201527229ba30b5b2b91034b9903737ba103b37ba32b960691b604482015260640161111c565b61231d856060015186608001518760a001518860c001516149d8565b6123395760405162461bcd60e51b815260040161111c90617ec0565b6075546123479060016181f1565b935061235884600133600089614c59565b612366848660e00151614cfc565b61237584866101000151614767565b505060758290556001600160a01b0316600090815260ab60205260409020429055919050565b600054610100900460ff16158080156123bb5750600054600160ff909116105b806123d55750303b1580156123d5575060005460ff166001145b6123f15760405162461bcd60e51b815260040161111c90617e4b565b6000805460ff191660011790558015612414576000805461ff0019166101001790555b61241c614965565b612424614994565b61242d8461377a565b606683905561243b82614614565b8015611e5f576000805461ff00191690556040516001815260008051602061832983398151915290602001611e56565b600061247561468a565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c5249060240160206040518083038186803b1580156124b657600080fd5b505afa1580156124ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ee91906178b4565b61250a5760405162461bcd60e51b815260040161111c90617e99565b600061251533612bc3565b60aa546001600160a01b038216600090815260ab60205260409020549192509061253f904261822b565b101561255d5760405162461bcd60e51b815260040161111c9061802e565b600061256833612bc3565b9050612572612a84565b61257b826146aa565b11158015612598575061258c613a95565b612595826146aa565b10155b6125b45760405162461bcd60e51b815260040161111c90617fac565b866001111580156125c6575060098711155b6126015760405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964207479706560a01b604482015260640161111c565b61260b8887614d3a565b6126475760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642076616c756560981b604482015260640161111c565b6075546126559060016181f1565b925061265f61474c565b6001600160a01b0316634a57823e84600587338d8d8d6040518863ffffffff1660e01b81526004016126979796959493929190618102565b602060405180830381600087803b1580156126b157600080fd5b505af11580156126c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e991906178d1565b506126f48386614767565b5060758290556001600160a01b0316600090815260ab6020526040902042905595945050505050565b6001600160a01b03166000908152606b6020526040902054151590565b6000818152607160205260408120600381015481546060938493849391929091600183019160028401919084906127709061826e565b80601f016020809104026020016040519081016040528092919081815260200182805461279c9061826e565b80156127e95780601f106127be576101008083540402835291602001916127e9565b820191906000526020600020905b8154815290600101906020018083116127cc57829003601f168201915b505050505093508280546127fc9061826e565b80601f01602080910402602001604051908101604052809291908181526020018280546128289061826e565b80156128755780601f1061284a57610100808354040283529160200191612875565b820191906000526020600020905b81548152906001019060200180831161285857829003601f168201915b505050505092508180546128889061826e565b80601f01602080910402602001604051908101604052809291908181526020018280546128b49061826e565b80156129015780601f106128d657610100808354040283529160200191612901565b820191906000526020600020905b8154815290600101906020018083116128e457829003601f168201915b5050505050915093509350935093509193509193565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156129605760405162461bcd60e51b815260040161111c90617d23565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316612992614730565b6001600160a01b0316146129b85760405162461bcd60e51b815260040161111c90617db6565b6129c182614ac6565b6129cd82826001614b63565b5050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612a715760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161111c565b5060008051602061830983398151915290565b6000612a8e61494d565b6001600160a01b031663737c59b86040518163ffffffff1660e01b815260040160206040518083038186803b15801561179957600080fd5b612ace61468a565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c5249060240160206040518083038186803b158015612b0f57600080fd5b505afa158015612b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4791906178b4565b612b635760405162461bcd60e51b815260040161111c90617e99565b612b6b611706565b15612bae5760405162461bcd60e51b8152602060048201526013602482015272159bdd1a5b99c81a5cc81b9bdd08195b991959606a1b604482015260640161111c565b607754612bbc906004614dc8565b6000607755565b6001600160a01b0381166000908152606d602052604081205415612be5575090565b6001600160a01b03821660009081526068602052604090205415612c2d57506001600160a01b038082166000908152606860209081526040808320548352606c909152902054165b919050565b612c3a6147d2565b612c446000614e06565b565b60008054610100900460ff1615808015612c675750600054600160ff909116105b80612c815750303b158015612c81575060005460ff166001145b612c9d5760405162461bcd60e51b815260040161111c90617e4b565b6000805460ff191660011790558015612cc0576000805461ff0019166101001790555b612cc8614965565b612cd0614994565b6000839050612d49816001600160a01b031663738fdd1a6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d1157600080fd5b505afa158015612d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8791906174b7565b43606681905550612dc4816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d8c57600080fd5b505afa158015612da0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104491906174b7565b60015b816001600160a01b031663d965ea006040518163ffffffff1660e01b815260040160206040518083038186803b158015612e0057600080fd5b505afa158015612e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e3891906178d1565b811161324e5760405163ab3545e560e01b8152600481018290526001600160a01b0383169063ab3545e59060240160206040518083038186803b158015612e7e57600080fd5b505afa158015612e92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb691906174b7565b6000828152606c6020908152604080832080546001600160a01b039586166001600160a01b0319918216811783558552606d84528285208790558685529054606784528285208054909216908616908117909155835260689091529081902083905551631c4b774b60e01b81526004810183905290831690631c4b774b9060240160206040518083038186803b158015612f4f57600080fd5b505afa158015612f63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8791906174b7565b6000828152606a6020908152604080832080546001600160a01b0319166001600160a01b03959095169485179055928252606b8152828220849055606984905582516080810184526060808252918101829052928301819052820152604051634f0f4aa960e01b8152600481018390526001600160a01b03841690634f0f4aa99060240160006040518083038186803b15801561302357600080fd5b505afa158015613037573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261305f91908101906179ad565b6060850181905260408501829052602085018390528385526130849392919085614e58565b6130d05760405162461bcd60e51b815260206004820152601760248201527f6e6f646520696e666f206973206475706c696361746564000000000000000000604482015260640161111c565b6001606e82600001516040516130e69190617c21565b90815260405160209181900382018120805460ff191693151593909317909255820151600191606f9161311891617c21565b908152602001604051809103902060006101000a81548160ff0219169083151502179055506001607060008360400151846060015160405160200161315e929190617c3d565b60408051808303601f1901815291815281516020928301208352828201939093529082016000908120805460ff1916941515949094179093558483526071815291208251805184936131b492849291019061711b565b5060208281015180516131cd926001850192019061711b565b50604082015180516131e991600284019160209091019061711b565b5060609190910151600390910155506000818152606c6020908152604080832080546001600160a01b0390811685526072845282852086905585855290546073909352922080546001600160a01b031916919092161790556074819055600101612dc7565b5050600060758190556076819055607781905591508015613297576000805461ff0019169055604051600181526000805160206183298339815191529060200160405180910390a15b50919050565b6001600160a01b0381166000908152606d60205260408120541515806132da57506001600160a01b03821660009081526068602052604090205415155b92915050565b600054610100900460ff16158080156133005750600054600160ff909116105b8061331a5750303b15801561331a575060005460ff166001145b6133365760405162461bcd60e51b815260040161111c90617e4b565b6000805460ff191660011790558015613359576000805461ff0019166101001790555b600086116133b55760405162461bcd60e51b815260206004820152602360248201527f6c6f636b416d6f756e742073686f756c64206265206d6f7265207468656e207a60448201526265726f60e81b606482015260840161111c565b6133bd614965565b6133c5614994565b6133ce8761377a565b60006133d86149c3565b6040516325d998bb60e01b815233600482015290915087906001600160a01b038316906325d998bb9060240160206040518083038186803b15801561341c57600080fd5b505afa158015613430573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345491906178d1565b10156134995760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e74207374616b696e6760601b604482015260640161111c565b60405163282d3fdf60e01b8152336004820152602481018890526001600160a01b0382169063282d3fdf90604401600060405180830381600087803b1580156134e157600080fd5b505af11580156134f5573d6000803e3d6000fd5b5050600160698190557f6bee784efeb983674392298ab585b22866bedf00ebb0eea949d1e66f3f50e71d8054336001600160a01b0319918216811790925560008281526068602090815260408083208690557ff585789965ba69220d5ce3dc1b444eb22ff546f2650694fef8fafe9c26560af98054851686179055606b82528083208690557fdcf345d7f6a8deb7427d0fee62009fa15100353a1c666b51bb5387b25addcfa98054909416909417909255606d825291822083905560748390559190526071815288517f169c6be1b0e6ab5de76b532e587a77340130ac65c5591db02be822dcf1dc0ed693506135f0925083918a019061711b565b508551613606906001830190602089019061711b565b50845161361c906002830190602088019061711b565b508381600301819055506001606e886040516136389190617c21565b908152604051908190036020018120805492151560ff1990931692909217909155600190606f9061366a908990617c21565b908152602001604051809103902060006101000a81548160ff02191690831515021790555060016070600087876040516020016136a8929190617c3d565b60408051808303601f1901815291815281516020928301208352828201939093529082016000908120805460ff1916941515949094179093556074543380855260728352838520829055908452607390915281832080546001600160a01b03191682179055436066559051909182917f6a2af11b2d73f347f9d5840aea46899e17609730b5cd91bd9c312098038acba69190a350508015613771576000805461ff0019169055604051600181526000805160206183298339815191529060200160405180910390a15b50505050505050565b6137826147d2565b6001600160a01b0381166137d85760405162461bcd60e51b815260206004820152601a60248201527f416464726573732073686f756c64206265206e6f6e2d7a65726f000000000000604482015260640161111c565b606580546001600160a01b0319166001600160a01b0383169081179091556040517f278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd90600090a250565b600054600390610100900460ff16158015613844575060005460ff8083169116105b6138605760405162461bcd60e51b815260040161111c90617e4b565b6000805461ffff191660ff83161761010017905561387c6147d2565b60005b8351811015613913576000818152606a602052604081205484516001600160a01b039091169190859060001985019081106138bc576138bc6182b9565b6020908102919091018101516000858152606a8352604080822080546001600160a01b0319166001600160a01b039485169081179091558252606b909352828120869055931683528220919091555060010161387f565b5060286000526071602052604051600190606e90613952907f4413607b8da693d7048f7d89166a2d39aa4ab0c15d5850f546c8999c9bd9492c90617c5f565b90815260405160209181900382018120805460ff191693151593909317909255602860005260719052600190606f906139ac907f4413607b8da693d7048f7d89166a2d39aa4ab0c15d5850f546c8999c9bd9492d90617c5f565b90815260405160209181900382018120805460ff19169315159390931790925560286000908152607182527f4413607b8da693d7048f7d89166a2d39aa4ab0c15d5850f546c8999c9bd9492f54600193607093613a2d927f4413607b8da693d7048f7d89166a2d39aa4ab0c15d5850f546c8999c9bd9492e92909101617c6b565b60408051808303601f1901815291815281516020928301208352828201939093529082016000908120805460ff191694151594909417909355825461ff0019169092555160ff83168152600080516020618329833981519152910160405180910390a1505050565b6000613a9f61494d565b6001600160a01b031663076cd77f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561179957600080fd5b613adf61468a565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c5249060240160206040518083038186803b158015613b2057600080fd5b505afa158015613b34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b5891906178b4565b613b745760405162461bcd60e51b815260040161111c90617e99565b613b7c614f81565b6000613b8733612bc3565b9050613b91612a84565b613b9a826146aa565b11158015613bb75750613bab613a95565b613bb4826146aa565b10155b613bd35760405162461bcd60e51b815260040161111c90617fac565b613bdb611706565b613c115760405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b604482015260640161111c565b6000613c1c84614fdb565b9050613c2884846150f0565b600080613c34866151ca565b92509250506000613c4461138990565b90508083101580613c555750808210155b80613c6a5750613c6582846181f1565b612710145b15613c7e57613c7e87858486116000615204565b50505050506129cd6001607855565b6000613c9761494d565b6001600160a01b0316631b27e01b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561179957600080fd5b6000613cd961468a565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c5249060240160206040518083038186803b158015613d1a57600080fd5b505afa158015613d2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d5291906178b4565b613d6e5760405162461bcd60e51b815260040161111c90617e99565b6000613d7933612bc3565b60aa546001600160a01b038216600090815260ab602052604090205491925090613da3904261822b565b1015613dc15760405162461bcd60e51b815260040161111c9061802e565b6000613dcc33612bc3565b9050613dd6612a84565b613ddf826146aa565b11158015613dfc5750613df0613a95565b613df9826146aa565b10155b613e185760405162461bcd60e51b815260040161111c90617fac565b602085015185906001600160a01b0316613e645760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103b37ba32b960991b604482015260640161111c565b600081606001515111613ead5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206e6f6465206e616d6560781b604482015260640161111c565b60008160a001515111613ef45760405162461bcd60e51b815260206004820152600f60248201526e0496e76616c6964206e6f646520495608c1b604482015260640161111c565b60008160c0015111613f3c5760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081b9bd919481c1bdc9d607a1b604482015260640161111c565b613f44613a95565b8160e0015110158015613f625750613f5a612a84565b8160e0015111155b613fa45760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b1bd8dac8105b5bdd5b9d606a1b604482015260640161111c565b6001600160a01b038516613ff05760405162461bcd60e51b8152602060048201526013602482015272496e76616c6964206f6c64204164647265737360681b604482015260640161111c565b613ff98561329d565b6140325760405162461bcd60e51b815260206004820152600a6024820152692737b716b6b2b6b132b960b11b604482015260640161111c565b6020808701516001600160a01b038781166000908152606d84526040808220548252606790945292909220548216911614806140835750846001600160a01b031686602001516001600160a01b0316145b806140ad5750614096866020015161329d565b1580156140ad57506140ab866020015161271d565b155b801561412f57506040808701516001600160a01b038781166000908152606d6020908152848220548252606a905292909220548216911614806141055750846001600160a01b031686604001516001600160a01b0316145b8061412f5750614118866040015161329d565b15801561412f575061412d866040015161271d565b155b61416e5760405162461bcd60e51b815260206004820152601060248201526f20b63932b0b23c90309036b2b6b132b960811b604482015260640161111c565b60755461417c9060016181f1565b935061418c84600333888a614c59565b61419a848760e00151614cfc565b6141a984876101000151614767565b6075849055336001600160a01b0386161480156141d2575085516001600160a01b038681169116145b1561420c5760006141e2856148c3565b925050506141fc854283426141f791906181f1565b61529a565b61420a856003600180615204565b505b50506001600160a01b0316600090815260ab6020526040902042905592915050565b600061423861468a565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c5249060240160206040518083038186803b15801561427957600080fd5b505afa15801561428d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142b191906178b4565b6142cd5760405162461bcd60e51b815260040161111c90617e99565b60006142d833612bc3565b60aa546001600160a01b038216600090815260ab602052604090205491925090614302904261822b565b10156143205760405162461bcd60e51b815260040161111c9061802e565b600061432b33612bc3565b9050614335612a84565b61433e826146aa565b1115801561435b575061434f613a95565b614358826146aa565b10155b6143775760405162461bcd60e51b815260040161111c90617fac565b6001600160a01b0387166143bf5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b604482015260640161111c565b6143c88761329d565b6144015760405162461bcd60e51b815260206004820152600a6024820152692737b716b6b2b6b132b960b11b604482015260640161111c565b600161440c60695490565b116144595760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742072656d6f7665206120736f6c65206d656d6265720000000000604482015260640161111c565b85614463886146aa565b10156144c45760405162461bcd60e51b815260206004820152602a60248201527f496e73756666696369656e742062616c616e636520746861742063616e206265604482015269103ab73637b1b5b2b21760b11b606482015260840161111c565b6075546144d29060016181f1565b604080516101408101825260008082526020808301829052828401829052835182815280820185526060840152835182815280820185526080840152835182815290810190935260a082019290925260c081019190915260e0810188905261010081018790526101208101869052909350614551846002338b85614c59565b61455b8488614cfc565b6145658487614767565b505060758290556001600160a01b0316600090815260ab60205260409020429055949350505050565b6145966147d2565b610e1081106145df5760405162461bcd60e51b81526020600482015260156024820152746e6577506572696f6420697320746f6f206c6f6e6760581b604482015260640161111c565b60aa8190556040518181527f17c6f1d1ce638844b664872f5c6eecb7d150ec0c41187d7f85826a656ee7946f906020016116fb565b61461c6147d2565b6001600160a01b0381166146815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161111c565b611f4881614e06565b60006117d17111dbdd995c9b985b98d950dbdb9d1c9858dd60721b615308565b60006146b46149c3565b604051632c9aab9b60e11b81526001600160a01b03848116600483015291909116906359355736906024015b60206040518083038186803b1580156146f857600080fd5b505afa15801561470c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132da91906178d1565b600080516020618309833981519152546001600160a01b031690565b60006117d16c42616c6c6f7453746f7261676560981b615308565b61476f61474c565b6001600160a01b031663bce0dbc183836040518363ffffffff1660e01b815260040161479c929190617c84565b600060405180830381600087803b1580156147b657600080fd5b505af11580156147ca573d6000803e3d6000fd5b505050505050565b6033546001600160a01b03163314612c445760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161111c565b600080600061483961474c565b6001600160a01b031663688ca5b2856040518263ffffffff1660e01b815260040161486691815260200190565b60606040518083038186803b15801561487e57600080fd5b505afa158015614892573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148b69190617aff565b9250925092509193909250565b60008060006148d061474c565b6001600160a01b03166309970688856040518263ffffffff1660e01b81526004016148fd91815260200190565b60606040518083038186803b15801561491557600080fd5b505afa158015614929573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148b69190617b2d565b60006117d169456e7653746f7261676560b01b615308565b600054610100900460ff1661498c5760405162461bcd60e51b815260040161111c90617fe3565b612c44615385565b600054610100900460ff166149bb5760405162461bcd60e51b815260040161111c90617fe3565b612c446153ac565b60006117d1665374616b696e6760c81b615308565b604051600190606f906149ec908690617c21565b9081526040519081900360200190205460ff1615614a08575060005b606e85604051614a189190617c21565b9081526040519081900360200190205460ff1615614a34575060005b60008383604051602001614a49929190617c3d565b60408051601f1981840301815291815281516020928301206000818152607090935291205490915060ff1615614a7e57600091505b50949350505050565b614a8f6149c3565b60405163282d3fdf60e01b81526001600160a01b03848116600483015260248201849052919091169063282d3fdf9060440161479c565b614ace61468a565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c5249060240160206040518083038186803b158015614b0f57600080fd5b505afa158015614b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b4791906178b4565b611f485760405162461bcd60e51b815260040161111c90617e99565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615614b9b57614b96836153dc565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015614bd457600080fd5b505afa925050508015614c04575060408051601f3d908101601f19168201909252614c01918101906178d1565b60015b614c205760405162461bcd60e51b815260040161111c90617eee565b6000805160206183098339815191528114614c4d5760405162461bcd60e51b815260040161111c90617e02565b50614b96838383615478565b614c6161474c565b6001600160a01b031663daacbb95868684610120015187878760000151886020015189604001518a606001518b608001518c60a001518d60c001516040518d63ffffffff1660e01b8152600401614cc39c9b9a99989796959493929190618065565b600060405180830381600087803b158015614cdd57600080fd5b505af1158015614cf1573d6000803e3d6000fd5b505050505050505050565b614d0461474c565b604051633968764960e11b815260048101849052602481018390526001600160a01b0391909116906372d0ec929060440161479c565b6000614d4461494d565b6001600160a01b0316639801bff984846040518363ffffffff1660e01b8152600401614d71929190617c84565b60206040518083038186803b158015614d8957600080fd5b505afa158015614d9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614dc191906178b4565b9392505050565b614dd061474c565b60405163548f2cdd60e11b815260048101849052602481018390526001600160a01b03919091169063a91e59ba9060440161479c565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060019050848051906020012082602001518051906020012014158015614e9f5750606f85604051614e8b9190617c21565b9081526040519081900360200190205460ff165b15614ea8575060005b858051906020012082600001518051906020012014158015614ee95750606e86604051614ed59190617c21565b9081526040519081900360200190205460ff165b15614ef2575060005b60008484604051602001614f07929190617c3d565b6040516020818303038152906040528051906020012090508083604001518460600151604051602001614f3b929190617c3d565b6040516020818303038152906040528051906020012014158015614f6d575060008181526070602052604090205460ff165b15614f7757600091505b5095945050505050565b60026078541415614fd45760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161111c565b6002607855565b6000806000614fe98461482c565b509092509050600181141561508857607754156150185760405162461bcd60e51b815260040161111c90617f69565b6000615023856148c3565b9250505061502f611757565b8110156150525761504d8542615043611757565b6141f790426181f1565b61507d565b8061505b613c8d565b101561506e5761504d8542615043613c8d565b61507d85426141f784826181f1565b5060778490556150e9565b60028114156150b75760775484146150b25760405162461bcd60e51b815260040161111c90617f69565b6150e9565b60405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b604482015260640161111c565b5092915050565b6000607654600161510191906181f1565b9050600061510e33612bc3565b9050600061511b60695490565b61512790612710618209565b905060008461513757600261513a565b60015b905061514461474c565b6040516325918ae760e21b815260048101869052602481018890526001600160a01b038581166044830152606482018490526084820185905291909116906396462b9c9060a401600060405180830381600087803b1580156151a557600080fd5b505af11580156151b9573d6000803e3d6000fd5b505050607694909455505050505050565b60008060006151d761474c565b6001600160a01b03166356ba988e856040518263ffffffff1660e01b81526004016148fd91815260200190565b6004821561527757506003600184141561522e576152218561549d565b615229575060045b615277565b600284141561524057615229856159b2565b6003841415615253576152218583615ef6565b60048414156152655761522985616490565b6005841415615277576152778561654f565b6152818582614dc8565b8161528c5760006077555b5050505050565b6001607855565b6152a261474c565b60405163605b78c360e11b81526004810185905260248101849052604481018390526001600160a01b03919091169063c0b6f18690606401600060405180830381600087803b1580156152f457600080fd5b505af1158015613771573d6000803e3d6000fd5b606554604051630d2020dd60e01b8152600481018390526000916001600160a01b031690630d2020dd9060240160206040518083038186803b15801561534d57600080fd5b505afa158015615361573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132da91906174b7565b600054610100900460ff166152935760405162461bcd60e51b815260040161111c90617fe3565b600054610100900460ff166153d35760405162461bcd60e51b815260040161111c90617fe3565b612c4433614e06565b6001600160a01b0381163b6154495760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161111c565b60008051602061830983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b615481836166a2565b60008251118061548e5750805b15614b9657611e5f83836166e2565b60006154aa826001616707565b6000806000806000806000806154bf8a61680e565b98509850985098509850985098509850506154d98861329d565b15615537578960008051602061834983398151915260405161551f9060208082526010908201526f20b63932b0b23c90309036b2b6b132b960811b604082015260600190565b60405180910390a25060009998505050505050505050565b6155408661271d565b15615588578960008051602061834983398151915260405161551f9060208082526012908201527120b63932b0b23c9030903932bbb0b93232b960711b604082015260600190565b615590613a95565b8110806155a35750806155a1612a84565b105b156155c4578960008051602061834983398151915260405161551f90617f3c565b806155ce896168c4565b10156155f0578960008051602061834983398151915260405161551f90617d6f565b866001600160a01b0316886001600160a01b0316141580156156245750856001600160a01b0316886001600160a01b031614155b15615670578960008051602061834983398151915260405161551f90602080825260169082015275496e76616c6964206d656d626572206164647265737360501b604082015260600190565b61567a8882614a87565b6000606954600161568b91906181f1565b9050876067600083815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080606860008a6001600160a01b03166001600160a01b031681526020019081526020016000208190555086606a600083815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080606b6000896001600160a01b03166001600160a01b031681526020019081526020016000208190555088606c600083815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080606d60008b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600060745460016157c491906181f1565b60008181526071602090815260409091208951929350916157ea918391908b019061711b565b50865161580090600183019060208a019061711b565b508551615816906002830190602089019061711b565b508481600301819055506001606e896040516158329190617c21565b908152604051908190036020018120805492151560ff1990931692909217909155600190606f90615864908a90617c21565b908152602001604051809103902060006101000a81548160ff02191690831515021790555060016070600088886040516020016158a2929190617c3d565b60405160208183030381529060405280519060200120815260200190815260200160002060006101000a81548160ff0219169083151502179055508a6073600084815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081607260008d6001600160a01b03166001600160a01b03168152602001908152602001600020819055508781600001908051906020019061595792919061711b565b5060698390556074829055436066556040516001600160a01b03808c1691908d16907f6a2af11b2d73f347f9d5840aea46899e17609730b5cd91bd9c312098038acba690600090a35060019c9b505050505050505050505050565b6159bd816002616707565b6000806159c98361680e565b98505050505050505091506159dd8261329d565b615a335782600080516020618349833981519152604051615a26906020808252601490820152732737ba1030b63932b0b23c90309036b2b6b132b960611b604082015260600190565b60405180910390a2505050565b6001600160a01b038083166000818152606d6020818152604080842054606954808652606c8452828620548287526067855283872054606a86529387205497909652939092529094928316939083169216908414615b9b57606980546000908152606c6020818152604080842080546001600160a01b038d8116808852606d80875285892080549e8a529787528589209087529b821688528488209c909c559486905581546001600160a01b03199081169092558954821690851617909855888452606b8083528185205486548652606a80855283872080548a881689528487528589208054948a529287528589209487528716808952858920939093559087905580548b16905581548a16179055978352606880825288842054945484526067808352898520805489861687528385528b872080548989529386528c8820949095529094168086529985205592905580548616905580549094168517909355919291615c18565b606980546000908152606c6020908152604080832080546001600160a01b03199081169091556001600160a01b038b81168552606d845282852085905585548552606a84528285208054831690558681168552606b8452828520859055945484526067835281842080549091169055928516825260689052908120555b6001606954615c27919061822b565b6069556000848152607160205260408082209051909190606f90615c4f906001850190617c5f565b908152604051908190036020018120805492151560ff1990931692909217909155600090606e90615c81908490617c5f565b90815260405160209181900382018120805460ff19169315159390931790925560038301546000926070928492615cbd92600288019201617c6b565b60408051808303601f1901815291815281516020928301208352828201939093529082016000908120805460ff1916941515949094179093556074546001600160a01b038b168452607290915291205414615e17576001600160a01b038088166000908152607260209081526040808320546074548452607383528184205460719093529220805492985092169550829190615d589061826e565b615d6392919061719f565b5060745460009081526071602052604090206001908101805491830191615d899061826e565b615d9492919061719f565b5060745460009081526071602052604090206002908101805491830191615dba9061826e565b615dc592919061719f565b506074546000908152607160209081526040808320600390810154908501558783526073825280832080546001600160a01b0319166001600160a01b0389169081179091558352607290915290208590555b60748054600090815260736020908152604080832080546001600160a01b03191690556001600160a01b038b16835260728252808320839055925482526071905290812090615e66828261721a565b615e7460018301600061721a565b615e8260028301600061721a565b600382016000905550506001607454615e9b919061822b565b60745543606655615eac87876168fe565b826001600160a01b0316876001600160a01b03167faa91016c21c52c58ac64f23f71bbe75becc9ada603e18ee671d09ff15492d1c160405160405180910390a35050505050505050565b600081615f0857615f08836003616707565b6000806000806000806000806000615f1f8c61680e565b985098509850985098509850985098509850615f3a8961329d565b615fa6578b600080516020618349833981519152604051615f8c906020808252601b908201527f4f6c642061646472657373206973206e6f742061206d656d6265720000000000604082015260600190565b60405180910390a2600099505050505050505050506132da565b615fb98c8c8b8b8b8b8b8b8b8b8b616a22565b615fcf57600099505050505050505050506132da565b6001600160a01b03808a166000818152606d6020526040902054918a161461603e576000818152606c6020908152604080832080546001600160a01b0319166001600160a01b038e81169182179092558452606d909252808320849055908c16825281205561603e8983614a87565b6001600160a01b038a166000908152607260209081526040808320548084526071909252808320905191929091606e90616079908490617c5f565b908152604051908190036020018120805492151560ff1990931692909217909155600090606f906160ae906001850190617c5f565b90815260405160209181900382018120805460ff191693151593909317909255600383015460009260709284926160ea92600288019201617c6b565b60408051808303601f1901815291815281516020928301208352828201939093529101600020805460ff1916921515929092179091558851616131918391908b019061711b565b50865161614790600183019060208a019061711b565b50855161615d906002830190602089019061711b565b506003810185905543606655604051600190606e9061617d908b90617c21565b908152604051908190036020018120805492151560ff1990931692909217909155600190606f906161af908a90617c21565b908152602001604051809103902060006101000a81548160ff02191690831515021790555060016070600088886040516020016161ed929190617c3d565b60408051808303601f1901815291815281516020928301208352828201939093529082016000908120805460ff191694151594909417909355858352606a90529020546001600160a01b03908116915089168114616289576000838152606a6020908152604080832080546001600160a01b0319166001600160a01b038e81169182179092558452606b90925280832086905590831682528120555b506000828152606760205260409020546001600160a01b03908116908a16811461633b57896067600085815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555082606860008c6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600060686000836001600160a01b03166001600160a01b03168152602001908152602001600020819055505b50896001600160a01b03168b6001600160a01b03161461643b57896073600083815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080607260008c6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000607260008d6001600160a01b03166001600160a01b03168152602001908152602001600020819055506163ec8b846168fe565b886001600160a01b03168a6001600160a01b03168c6001600160a01b03167f15f4d750630db473a85edd9d47c500527a2648cc5e676f39645e52790cf07be060405160405180910390a461647c565b896001600160a01b03168b6001600160a01b03167f1feee1b4fcb797c62645da41c5c6edd5f91d4291de0054da625c42b823594c1f60405160405180910390a35b5060019d9c50505050505050505050505050565b61649b816004616707565b60006164a561474c565b6001600160a01b0316637efa9ae3836040518263ffffffff1660e01b81526004016164d291815260200190565b60206040518083038186803b1580156164ea57600080fd5b505afa1580156164fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061652291906174b7565b90506001600160a01b038116156129cd5761653c81614ac6565b616547816000611f16565b436066555050565b61655a816005616707565b600080600061656761474c565b6001600160a01b0316631d940da2856040518263ffffffff1660e01b815260040161659491815260200190565b60006040518083038186803b1580156165ac57600080fd5b505afa1580156165c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526165e891908101906178ea565b92509250925060006165f861494d565b6040516388c2801960e01b81529091506001600160a01b038216906388c28019906166299087908690600401617c84565b600060405180830381600087803b15801561664357600080fd5b505af1158015616657573d6000803e3d6000fd5b50504360665550506040517f701c16c2519cdb79aaac423a84733590e3510d9552055b6ad6908f0ab12b6c299061669390869086908690617c9d565b60405180910390a15050505050565b6166ab816153dc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060614dc1838360405180606001604052806027815260200161836960279139616fbc565b6000806167138461482c565b509150915082821461675d5760405162461bcd60e51b8152602060048201526013602482015272496e76616c696420766f74696e67207479706560681b604482015260640161111c565b600281146167a45760405162461bcd60e51b8152602060048201526014602482015273496e76616c696420766f74696e6720737461746560601b604482015260640161111c565b6000806167b0866151ca565b92509250506167be61138990565b821015806167ce57506113898110155b6147ca5760405162461bcd60e51b8152602060048201526011602482015270139bdd081e595d08199a5b985b1a5e9959607a1b604482015260640161111c565b600080600080606080606060008061682461474c565b6001600160a01b03166373df4e018b6040518263ffffffff1660e01b815260040161685191815260200190565b60006040518083038186803b15801561686957600080fd5b505afa15801561687d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526168a591908101906174d4565b9850985098509850985098509850985098509193959799909294969850565b60006168ce6149c3565b6040516325d998bb60e01b81526001600160a01b03848116600483015291909116906325d998bb906024016146e0565b60006169086149c3565b604051632c9aab9b60e11b81526001600160a01b03858116600483015291925060009183169063593557369060240160206040518083038186803b15801561694f57600080fd5b505afa158015616963573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061698791906178d1565b905082811115616a18576001600160a01b038216637756c908856169ab868561822b565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156169f157600080fd5b505af1158015616a05573d6000803e3d6000fd5b50505050616a138484617034565b611e5f565b611e5f8482617034565b60008a616a3457616a348c6003616707565b616a3d8a61329d565b616a9f578b600080516020618349833981519152604051616a8f906020808252601b908201527f4f6c642061646472657373206973206e6f742061206d656d6265720000000000604082015260600190565b60405180910390a2506000616fad565b6001600160a01b03808b166000818152606d6020526040902054918b1614616c1657616aca8a61329d565b15616b2f578c600080516020618349833981519152604051616b1d906020808252601f908201527f6e6577206164647265737320697320616c72656164792061206d656d62657200604082015260600190565b60405180910390a26000915050616fad565b886001600160a01b03168a6001600160a01b031614158015616b635750876001600160a01b03168a6001600160a01b031614155b15616bae578c600080516020618349833981519152604051616b1d90602080825260159082015274496e76616c696420766f746572206164647265737360581b604082015260600190565b616bb6613a95565b831080616bc9575082616bc7612a84565b105b15616bea578c600080516020618349833981519152604051616b1d90617f3c565b82616bf48b6168c4565b1015616c16578c600080516020618349833981519152604051616b1d90617d6f565b6001600160a01b038b166000908152607260209081526040808320548084526071909252808320815160808101909252805492939282908290616c589061826e565b80601f0160208091040260200160405190810160405280929190818152602001828054616c849061826e565b8015616cd15780601f10616ca657610100808354040283529160200191616cd1565b820191906000526020600020905b815481529060010190602001808311616cb457829003601f168201915b50505050508152602001600182018054616cea9061826e565b80601f0160208091040260200160405190810160405280929190818152602001828054616d169061826e565b8015616d635780601f10616d3857610100808354040283529160200191616d63565b820191906000526020600020905b815481529060010190602001808311616d4657829003601f168201915b50505050508152602001600282018054616d7c9061826e565b80601f0160208091040260200160405190810160405280929190818152602001828054616da89061826e565b8015616df55780601f10616dca57610100808354040283529160200191616df5565b820191906000526020600020905b815481529060010190602001808311616dd857829003601f168201915b505050505081526020016003820154815250509050616e178989898985614e58565b616e4b578e600080516020618349833981519152604051616e3790617ec0565b60405180910390a260009350505050616fad565b506000828152606a60205260409020546001600160a01b03908116908d8116908b1614801590616e8d5750896001600160a01b0316816001600160a01b031614155b8015616eac5750616e9d8a61329d565b80616eac5750616eac8a61271d565b15616ef8578e600080516020618349833981519152604051616e3790602080825260169082015275496e76616c696420726577617264206164647265737360501b604082015260600190565b506000828152606760205260409020546001600160a01b03908116908d8116908c1614801590616f3a57508a6001600160a01b0316816001600160a01b031614155b8015616f595750616f4a8b61329d565b80616f595750616f598b61271d565b15616fa5578e600080516020618349833981519152604051616e3790602080825260169082015275496e76616c696420766f74657273206164647265737360501b604082015260600190565b506001925050505b9b9a5050505050505050505050565b6060600080856001600160a01b031685604051616fd99190617c21565b600060405180830381855af49150503d8060008114617014576040519150601f19603f3d011682016040523d82523d6000602084013e617019565b606091505b509150915061702a86838387617073565b9695505050505050565b61703c6149c3565b604051637eee288d60e01b81526001600160a01b038481166004830152602482018490529190911690637eee288d9060440161479c565b606083156170df5782516170d8576001600160a01b0385163b6170d85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161111c565b50816170e9565b6170e983836170f1565b949350505050565b8151156171015781518083602001fd5b8060405162461bcd60e51b815260040161111c9190617d10565b8280546171279061826e565b90600052602060002090601f016020900481019282617149576000855561718f565b82601f1061716257805160ff191683800117855561718f565b8280016001018555821561718f579182015b8281111561718f578251825591602001919060010190617174565b5061719b929150617250565b5090565b8280546171ab9061826e565b90600052602060002090601f0160209004810192826171cd576000855561718f565b82601f106171de578054855561718f565b8280016001018555821561718f57600052602060002091601f016020900482015b8281111561718f5782548255916001019190600101906171ff565b5080546172269061826e565b6000825580601f10617236575050565b601f016020900490600052602060002090810190611f4891905b5b8082111561719b5760008155600101617251565b8035612c2d816182e5565b8051612c2d816182e5565b600082601f83011261728c57600080fd5b813560206172a161729c836181a7565b618177565b80838252828201915082860187848660051b89010111156172c157600080fd5b60005b858110156172e95781356172d7816182e5565b845292840192908401906001016172c4565b5090979650505050505050565b600082601f83011261730757600080fd5b813561731561729c826181ca565b81815284602083860101111561732a57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261735857600080fd5b815161736661729c826181ca565b81815284602083860101111561737b57600080fd5b6170e9826020830160208701618242565b6000610140828403121561739f57600080fd5b6173a761814e565b90506173b282617265565b81526173c060208301617265565b60208201526173d160408301617265565b604082015260608201356001600160401b03808211156173f057600080fd5b6173fc858386016172f6565b6060840152608084013591508082111561741557600080fd5b617421858386016172f6565b608084015260a084013591508082111561743a57600080fd5b617446858386016172f6565b60a084015260c084013560c084015260e084013560e08401526101009150818401358181111561747557600080fd5b617481868287016172f6565b8385015250505061012080830135818301525092915050565b6000602082840312156174ac57600080fd5b8135614dc1816182e5565b6000602082840312156174c957600080fd5b8151614dc1816182e5565b60008060008060008060008060006101208a8c0312156174f357600080fd5b6174fc8a617270565b985061750a60208b01617270565b975061751860408b01617270565b965061752660608b01617270565b955060808a01516001600160401b038082111561754257600080fd5b61754e8d838e01617347565b965060a08c015191508082111561756457600080fd5b6175708d838e01617347565b955060c08c015191508082111561758657600080fd5b506175938c828d01617347565b93505060e08a015191506101008a015190509295985092959850929598565b600080604083850312156175c557600080fd5b82356175d0816182e5565b915060208301356001600160401b038111156175eb57600080fd5b6175f7858286016172f6565b9150509250929050565b60008060006060848603121561761657600080fd5b8335617621816182e5565b925060208401356001600160401b0381111561763c57600080fd5b617648868287016172f6565b925050604084013590509250925092565b60008060006060848603121561766e57600080fd5b8335617679816182e5565b9250602084013591506040840135617690816182e5565b809150509250925092565b6000806000606084860312156176b057600080fd5b83356176bb816182e5565b92506020840135915060408401356001600160401b038111156176dd57600080fd5b6176e9868287016172f6565b9150509250925092565b60008060008060008060c0878903121561770c57600080fd5b8635617717816182e5565b95506020870135945060408701356001600160401b038082111561773a57600080fd5b6177468a838b016172f6565b9550606089013591508082111561775c57600080fd5b6177688a838b016172f6565b9450608089013591508082111561777e57600080fd5b5061778b89828a016172f6565b92505060a087013590509295509295509295565b600080600080608085870312156177b557600080fd5b84356177c0816182e5565b93506020850135925060408501356001600160401b038111156177e257600080fd5b6177ee878288016172f6565b949793965093946060013593505050565b6000806040838503121561781257600080fd5b82356001600160401b038082111561782957600080fd5b818501915085601f83011261783d57600080fd5b8135602061784d61729c836181a7565b8083825282820191508286018a848660051b890101111561786d57600080fd5b600096505b84871015617890578035835260019690960195918301918301617872565b50965050860135925050808211156178a757600080fd5b506175f78582860161727b565b6000602082840312156178c657600080fd5b8151614dc1816182fa565b6000602082840312156178e357600080fd5b5051919050565b6000806000606084860312156178ff57600080fd5b835192506020840151915060408401516001600160401b0381111561792357600080fd5b6176e986828701617347565b600080600080600060a0868803121561794757600080fd5b853594506020860135935060408601356001600160401b038082111561796c57600080fd5b61797889838a016172f6565b9450606088013591508082111561798e57600080fd5b5061799b888289016172f6565b95989497509295608001359392505050565b600080600080608085870312156179c357600080fd5b84516001600160401b03808211156179da57600080fd5b6179e688838901617347565b955060208701519150808211156179fc57600080fd5b617a0888838901617347565b94506040870151915080821115617a1e57600080fd5b50617a2b87828801617347565b606096909601519497939650505050565b600060208284031215617a4e57600080fd5b81356001600160401b03811115617a6457600080fd5b6170e98482850161738c565b60008060408385031215617a8357600080fd5b82356001600160401b03811115617a9957600080fd5b617aa58582860161738c565b9250506020830135617ab6816182e5565b809150509250929050565b600060208284031215617ad357600080fd5b5035919050565b60008060408385031215617aed57600080fd5b823591506020830135617ab6816182fa565b600080600060608486031215617b1457600080fd5b83519250602084015191506040840151617690816182fa565b600080600060608486031215617b4257600080fd5b8351925060208401519150604084015190509250925092565b60008151808452617b73816020860160208601618242565b601f01601f19169290920160200192915050565b8054600090600181811c9080831680617ba157607f831692505b6020808410821415617bc357634e487b7160e01b600052602260045260246000fd5b818015617bd75760018114617be857617c15565b60ff19861689528489019650617c15565b60008881526020902060005b86811015617c0d5781548b820152908501908301617bf4565b505084890196505b50505050505092915050565b60008251617c33818460208701618242565b9190910192915050565b60008351617c4f818460208801618242565b9190910191825250602001919050565b6000614dc18284617b87565b6000617c778285617b87565b9283525050602001919050565b8281526040602082015260006170e96040830184617b5b565b838152826020820152606060408201526000617cbc6060830184617b5b565b95945050505050565b608081526000617cd86080830187617b5b565b8281036020840152617cea8187617b5b565b90508281036040840152617cfe8186617b5b565b91505082606083015295945050505050565b602081526000614dc16020830184617b5b565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b60208082526027908201527f496e73756666696369656e742062616c616e636520746861742063616e206265604082015266081b1bd8dad95960ca1b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60208082526029908201527f45524331393637557067726164653a20756e737570706f727465642070726f786040820152681a58589b195555525160ba1b606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252600d908201526c2737902832b936b4b9b9b4b7b760991b604082015260600190565b6020808252601490820152734475706c696361746564206e6f646520696e666f60601b604082015260600190565b6020808252602e908201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960408201526d6f6e206973206e6f74205555505360901b606082015260800190565b602080825260139082015272125b9d985b1a59081b1bd8dac8185b5bdd5b9d606a1b604082015260600190565b60208082526023908201527f4e6f7720696e20766f74696e67207769746820646966666572656e742062616c6040820152621b1bdd60ea1b606082015260800190565b60208082526017908201527f496e76616c6964207374616b696e672062616c616e6365000000000000000000604082015260600190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6020808252601d908201527f43616e6e6f74206164642070726f706f73616c20746f6f206561726c79000000604082015260600190565b8c8152602081018c9052604081018b90526001600160a01b038a81166060830152898116608083015288811660a083015287811660c0830152861660e08201526000610180806101008401526180bd81840188617b5b565b90508281036101208401526180d28187617b5b565b90508281036101408401526180e78186617b5b565b915050826101608301529d9c50505050505050505050505050565b87815286602082015285604082015260018060a01b03851660608201528360808201528260a082015260e060c0820152600061814160e0830184617b5b565b9998505050505050505050565b60405161014081016001600160401b0381118282101715618171576181716182cf565b60405290565b604051601f8201601f191681016001600160401b038111828210171561819f5761819f6182cf565b604052919050565b60006001600160401b038211156181c0576181c06182cf565b5060051b60200190565b60006001600160401b038211156181e3576181e36182cf565b50601f01601f191660200190565b60008219821115618204576182046182a3565b500190565b60008261822657634e487b7160e01b600052601260045260246000fd5b500490565b60008282101561823d5761823d6182a3565b500390565b60005b8381101561825d578181015183820152602001618245565b83811115611e5f5750506000910152565b600181811c9082168061828257607f821691505b6020821081141561329757634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611f4857600080fd5b8015158114611f4857600080fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249885e7f4987c0698db47045ad8cea110b51138f0eecbd94915842328cf6c3dc97d416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d1e6d72e2b42c1bc919b369fb8b70132be0872b4d30508280b78e2fc5675f52064736f6c63430008060033"; +var GovImp_data = "0x60a06040523060601b6080523480156200001857600080fd5b506200002362000029565b620000ea565b600054610100900460ff1615620000965760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e8576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60805160601c6183c56200012560003960008181611e7001528181611eb0015281816129220152818161296201526129de01526183c56000f3fe6080604052600436106104725760003560e01c8063738fdd1a1161024a578063c00ace6c11610139578063d07bff0c116100b6578063e27bdaef1161007a578063e27bdaef14610fde578063e75235b814610ffe578063e9523fb514611013578063f2fde38b14611029578063f38ecf471461104957600080fd5b8063d07bff0c14610f48578063d13a174414610f7e578063d6f9cfce14610f9e578063d965ea0014610fb4578063de09b37714610fc957600080fd5b8063c9d27afe116100fd578063c9d27afe14610e90578063ce04b9d414610eb0578063ce6a54ff14610ec5578063ce93a23614610efb578063cec5b62214610f1b57600080fd5b8063c00ace6c14610d8c578063c0b4fe1514610dc0578063c42a0abc14610df4578063c6713baf14610e28578063c7d3da3414610e5c57600080fd5b8063a6868b7d116101c7578063aaf0dd361161018b578063aaf0dd3614610cc0578063ab3545e514610ced578063af08557e14610d23578063af6af2ff14610d43578063b128f88014610d5857600080fd5b8063a6868b7d14610be0578063a7771ee314610c14578063a8915a3e14610c4c578063a91ee0dc14610c6c578063a9b629b214610c8c57600080fd5b80638da5cb5b1161020e5780638da5cb5b14610b3b578063918f867414610b595780639986e4b914610b6f578063a0c1268314610b93578063a230c52414610bc057600080fd5b8063738fdd1a14610a905780637b2bfb0114610ab05780637bf4653014610ae45780637d10dd1b14610b055780638d39e33a14610b1b57600080fd5b80633f35c8fe116103665780636167eb45116102e35780636f1e8533116102a75780636f1e8533146109da5780636f6de96d14610a125780636fde207a14610a32578063715018a614610a6657806372016f7514610a7b57600080fd5b80636167eb4514610900578063656e3052146109345780636ba99181146109685780636c78d2cf1461097d5780636d583ca7146109a657600080fd5b80634f0f4aa91161032a5780634f0f4aa91461086f5780634f1ef2861461089f57806352d1902d146108b25780635a731cca146108c75780635aaa4040146108eb57600080fd5b80633f35c8fe146107a557806340690353146107d95780634bd1ed76146107f95780634d273e281461081b5780634d5ce0381461084f57600080fd5b8063238737b6116103f4578063351bacda116103b8578063351bacda146106f15780633659cfe61461071157806336e83d83146107315780633829441914610751578063397e38e71461078557600080fd5b8063238737b614610632578063278bb12a146106665780632f40992e1461069a5780633310569c146106bb57806334125c84146106d157600080fd5b806316fbe8311161043b57806316fbe8311461058d5780631c12b030146105a45780631c150171146105c95780631c4b774b146105de5780631e0cba0d1461061457600080fd5b806215a73b146104775780630b1d39b8146104be5780630efa4909146104f2578063139d9dd31461051257806315bf6b4d1461053f575b600080fd5b34801561048357600080fd5b506104ab7f0c4fbe9dc9de15dd7c0d064975ee1a2f2f9b954fa0e65d4f6cddba94884bdc3e81565b6040519081526020015b60405180910390f35b3480156104ca57600080fd5b506104ab7fdd5a41a7fc01f5c6d30816b17f638d6531625f1e1eaa599673ab2f6079f2dd9d81565b3480156104fe57600080fd5b506104ab61050d366004617601565b61107d565b34801561051e57600080fd5b506104ab61052d36600461749a565b60ab6020526000908152604090205481565b34801561054b57600080fd5b5061057561055a366004617ac1565b6000908152607360205260409020546001600160a01b031690565b6040516001600160a01b0390911681526020016104b5565b34801561059957600080fd5b506105a26113c7565b005b3480156105b057600080fd5b506105b9611706565b60405190151581526020016104b5565b3480156105d557600080fd5b506104ab611757565b3480156105ea57600080fd5b506105756105f9366004617ac1565b6000908152606a60205260409020546001600160a01b031690565b34801561062057600080fd5b506104ab665374616b696e6760c81b81565b34801561063e57600080fd5b506104ab7f1d36f8ce53f59e624857e1d8dc7932d19981a2ea1b8faa4eb8ff843fc3e5a27881565b34801561067257600080fd5b506104ab7f9b2e0c7fdae148f225bae7deb92d7e7bd24bb77edb12956e8fa7204900dd8a2281565b3480156106a657600080fd5b506104ab6914995dd85c99141bdbdb60b21b81565b3480156106c757600080fd5b506104ab60aa5481565b3480156106dd57600080fd5b506104ab6845636f73797374656d60b81b81565b3480156106fd57600080fd5b506105a261070c36600461769b565b6117d6565b34801561071d57600080fd5b506105a261072c36600461749a565b611e65565b34801561073d57600080fd5b506104ab61074c366004617a3c565b611f4b565b34801561075d57600080fd5b506104ab7fbe90e461bbdb9a95a694f7796912ea04244caf7f5b60ad7ded17e16821d3e44c81565b34801561079157600080fd5b506105a26107a0366004617659565b61239b565b3480156107b157600080fd5b506104ab7f2a268972a70c8c688b62366bdfdd9bb09cf19d3e5b6e7e7bb158e671ffdcedd281565b3480156107e557600080fd5b506104ab6107f436600461792f565b61246b565b34801561080557600080fd5b506104ab6a4d61696e74656e616e636560a81b81565b34801561082757600080fd5b506104ab7f77884798208df1e64f70968be41ef2d3211ec53613397ca59313416813df088881565b34801561085b57600080fd5b506105b961086a36600461749a565b61271d565b34801561087b57600080fd5b5061088f61088a366004617ac1565b61273a565b6040516104b59493929190617cc5565b6105a26108ad3660046175b2565b612917565b3480156108be57600080fd5b506104ab6129d1565b3480156108d357600080fd5b506104ab6c14dd185ada5b99d4995dd85c99609a1b81565b3480156108f757600080fd5b506104ab612a84565b34801561090c57600080fd5b506104ab7f9f1de481f899d76889aa8a2b44cc7b604d42691aa93d4ba618a1a1fd439f505081565b34801561094057600080fd5b506104ab7fe10074dceffb75f13bf0ce50145afd35182d63796823f1280ce40e01c19109e781565b34801561097457600080fd5b506105a2612ac6565b34801561098957600080fd5b506104ab7111dbdd995c9b985b98d950dbdb9d1c9858dd60721b81565b3480156109b257600080fd5b506104ab7fc69fc6b7d0efc934fd5a3581c7253a7107a952526bb6dbcd814ef8d8dae1f44a81565b3480156109e657600080fd5b506105b96109f536600461749a565b6001600160a01b03166000908152606d6020526040902054151590565b348015610a1e57600080fd5b50610575610a2d36600461749a565b612bc3565b348015610a3e57600080fd5b506104ab7f0b09c9badbbeb6c813a598ee910770a39ccda797a1940439bb6e47fc6c87548b81565b348015610a7257600080fd5b506105a2612c32565b348015610a8757600080fd5b506074546104ab565b348015610a9c57600080fd5b50606554610575906001600160a01b031681565b348015610abc57600080fd5b506104ab7f9346226931826838eedd13d9677fa33551e7c81f604b171ef3fac355458da9aa81565b348015610af057600080fd5b506104ab69456e7653746f7261676560b01b81565b348015610b1157600080fd5b506104ab60665481565b348015610b2757600080fd5b506104ab610b3636600461749a565b612c46565b348015610b4757600080fd5b506033546001600160a01b0316610575565b348015610b6557600080fd5b506104ab61271081565b348015610b7b57600080fd5b506104ab6c42616c6c6f7453746f7261676560981b81565b348015610b9f57600080fd5b506104ab610bae36600461749a565b606d6020526000908152604090205481565b348015610bcc57600080fd5b506105b9610bdb36600461749a565b61329d565b348015610bec57600080fd5b506104ab7f6c6f69f426081752a5d3e73746599acd2a4cb145d5de4203ca1e3473b281680b81565b348015610c2057600080fd5b506105b9610c2f36600461749a565b6001600160a01b0316600090815260686020526040902054151590565b348015610c5857600080fd5b506105a2610c673660046176f3565b6132e0565b348015610c7857600080fd5b506105a2610c8736600461749a565b61377a565b348015610c9857600080fd5b506104ab7f89dd490ecaf395283ed4ff2fd9557ca767fc425dce063451a9b0da6d72f600c381565b348015610ccc57600080fd5b506104ab610cdb36600461749a565b606b6020526000908152604090205481565b348015610cf957600080fd5b50610575610d08366004617ac1565b6000908152606c60205260409020546001600160a01b031690565b348015610d2f57600080fd5b506105a2610d3e3660046177ff565b613822565b348015610d4f57600080fd5b506104ab613a95565b348015610d6457600080fd5b506104ab7f829561ab7af084b7efc6600518d2df79b8d95f3f4c3a550f54f8f7ec7d2b805781565b348015610d9857600080fd5b506104ab7f18ad4415ef4a621ce1a136395c51ab6c3712bb2e24b79d526059925cea58dcb881565b348015610dcc57600080fd5b506104ab7f8086da5becff4dfac91a3105821b361078d2d4abba0ccc2401b974cf0dcf05c181565b348015610e0057600080fd5b506104ab7fb38b2c133e931937bd95337c65c8aefa7040ed64bbed732e3e29a4944c65747381565b348015610e3457600080fd5b506104ab7fc9e15e34073efbcd0328740feaf503caac9124b55b38c73d1a97b53da80a2f6081565b348015610e6857600080fd5b506104ab7f04f7b94450bbcad85f37ea47cd1062728f884bb2040e357738f8fd53056134bc81565b348015610e9c57600080fd5b506105a2610eab366004617ada565b613ad7565b348015610ebc57600080fd5b506104ab613c8d565b348015610ed157600080fd5b506104ab610ee036600461749a565b6001600160a01b031660009081526072602052604090205490565b348015610f0757600080fd5b506104ab610f16366004617a70565b613ccf565b348015610f2757600080fd5b506104ab610f3636600461749a565b60686020526000908152604090205481565b348015610f5457600080fd5b50610575610f63366004617ac1565b6000908152606760205260409020546001600160a01b031690565b348015610f8a57600080fd5b506104ab610f9936600461779f565b61422e565b348015610faa57600080fd5b506104ab60755481565b348015610fc057600080fd5b506069546104ab565b348015610fd557600080fd5b506077546104ab565b348015610fea57600080fd5b506105a2610ff9366004617ac1565b61458e565b34801561100a57600080fd5b506113896104ab565b34801561101f57600080fd5b506104ab60765481565b34801561103557600080fd5b506105a261104436600461749a565b614614565b34801561105557600080fd5b506104ab7f7c1150f0e1a39ff55552d52764f97e6c387e2a247e1df344369f122c4254be2f81565b600061108761468a565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c5249060240160206040518083038186803b1580156110c857600080fd5b505afa1580156110dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110091906178b4565b6111255760405162461bcd60e51b815260040161111c90617e99565b60405180910390fd5b600061113033612bc3565b905061113a612a84565b611143826146aa565b111580156111605750611154613a95565b61115d826146aa565b10155b61117c5760405162461bcd60e51b815260040161111c90617fac565b6001600160a01b0385166111d25760405162461bcd60e51b815260206004820152601d60248201527f496d706c656d656e746174696f6e2063616e6e6f74206265207a65726f000000604482015260640161111c565b6111da614730565b6001600160a01b0316856001600160a01b031614156112335760405162461bcd60e51b815260206004820152601560248201527453616d6520636f6e7472616374206164647265737360581b604482015260640161111c565b846001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561126c57600080fd5b505afa92505050801561129c575060408051601f3d908101601f19168201909252611299918101906178d1565b60015b6112b85760405162461bcd60e51b815260040161111c90617eee565b60008051602061830983398151915281146112e55760405162461bcd60e51b815260040161111c90617e02565b506075546112f49060016181f1565b91506112fe61474c565b6001600160a01b0316630a3a63fe607554600161131b91906181f1565b60046040516001600160e01b031960e085901b16815260048101929092526024820152604481018690523360648201526001600160a01b038816608482015260a401602060405180830381600087803b15801561137757600080fd5b505af115801561138b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113af91906178d1565b506113ba8285614767565b5060758190559392505050565b600054600290610100900460ff161580156113e9575060005460ff8083169116105b6114055760405162461bcd60e51b815260040161111c90617e4b565b6000805461ffff191660ff8316176101001790556114216147d2565b60005b6069548110156116d2576000818152607160205260408082208151608081019092528054829082906114559061826e565b80601f01602080910402602001604051908101604052809291908181526020018280546114819061826e565b80156114ce5780601f106114a3576101008083540402835291602001916114ce565b820191906000526020600020905b8154815290600101906020018083116114b157829003601f168201915b505050505081526020016001820180546114e79061826e565b80601f01602080910402602001604051908101604052809291908181526020018280546115139061826e565b80156115605780601f1061153557610100808354040283529160200191611560565b820191906000526020600020905b81548152906001019060200180831161154357829003601f168201915b505050505081526020016002820180546115799061826e565b80601f01602080910402602001604051908101604052809291908181526020018280546115a59061826e565b80156115f25780601f106115c7576101008083540402835291602001916115f2565b820191906000526020600020905b8154815290600101906020018083116115d557829003601f168201915b5050505050815260200160038201548152505090506001606e826000015160405161161d9190617c21565b90815260405160209181900382018120805460ff191693151593909317909255820151600191606f9161164f91617c21565b908152602001604051809103902060006101000a81548160ff02191690831515021790555060016070600083604001518460600151604051602001611695929190617c3d565b60408051808303601f19018152918152815160209283012083529082019290925201600020805460ff191691151591909117905550600101611424565b506000805461ff001916905560405160ff82168152600080516020618329833981519152906020015b60405180910390a150565b600060775460001461175157600061171f60775461482c565b5091505060006117306077546148c3565b50915050600282141561174e574281101561174e5760009250505090565b50505b50600190565b600061176161494d565b6001600160a01b03166333be496e6040518163ffffffff1660e01b815260040160206040518083038186803b15801561179957600080fd5b505afa1580156117ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d191906178d1565b905090565b600054610100900460ff16158080156117f65750600054600160ff909116105b806118105750303b158015611810575060005460ff166001145b61182c5760405162461bcd60e51b815260040161111c90617e4b565b6000805460ff19166001179055801561184f576000805461ff0019166101001790555b611857614965565b61185f614994565b6118688461377a565b4360665560006118766149c3565b9050611880613a95565b8410158015611896575083611893612a84565b10155b6118b25760405162461bcd60e51b815260040161111c90617f3c565b600080600060608060606000806000905060008060208d0191508c51826118d991906181f1565b90505b80821015611e1657815199506118f36020836181f1565b915080821061190157600080fd5b815198506119106020836181f1565b915080821061191e57600080fd5b8151975061192d6020836181f1565b915080821061193b57600080fd5b8196508651602061194c91906181f1565b61195690836181f1565b915080821061196457600080fd5b8195508551602061197591906181f1565b61197f90836181f1565b915080821061198d57600080fd5b8194508451602061199e91906181f1565b6119a890836181f1565b91508082106119b657600080fd5b815193506119c56020836181f1565b91506119d26001846181f1565b92506119dd8a61329d565b1580156119f057506119ee8961329d565b155b8015611a025750611a008861271d565b155b611a3f5760405162461bcd60e51b815260206004820152600e60248201526d20b63932b0b23c9036b2b6b132b960911b604482015260640161111c565b886067600085815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555082606860008b6001600160a01b03166001600160a01b031681526020019081526020016000208190555087606a600085815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555082606b60008a6001600160a01b03166001600160a01b031681526020019081526020016000208190555089606c600085815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555082606d60008c6001600160a01b03166001600160a01b0316815260200190815260200160002081905550886001600160a01b03168a6001600160a01b03167f6a2af11b2d73f347f9d5840aea46899e17609730b5cd91bd9c312098038acba660405160405180910390a36040516325d998bb60e01b81526001600160a01b038b811660048301528f91908d16906325d998bb9060240160206040518083038186803b158015611be957600080fd5b505afa158015611bfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2191906178d1565b1015611c665760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e74207374616b696e6760601b604482015260640161111c565b611c72878787876149d8565b611c8e5760405162461bcd60e51b815260040161111c90617ec0565b611c988a8f614a87565b600083815260716020908152604090912088519091611cbb9183918b019061711b565b508651611cd190600183019060208a019061711b565b508551611ce7906002830190602089019061711b565b508481600301819055506001606e89604051611d039190617c21565b908152604051908190036020018120805492151560ff1990931692909217909155600190606f90611d35908a90617c21565b908152602001604051809103902060006101000a81548160ff0219169083151502179055506001607060008888604051602001611d73929190617c3d565b60405160208183030381529060405280519060200120815260200190815260200160002060006101000a81548160ff0219169083151502179055508a6073600086815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555083607260008d6001600160a01b03166001600160a01b0316815260200190815260200160002081905550506118dc565b50506069819055607455505086159550611e5f945050505050576000805461ff001916905560405160018152600080516020618329833981519152906020015b60405180910390a15b50505050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415611eae5760405162461bcd60e51b815260040161111c90617d23565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611ee0614730565b6001600160a01b031614611f065760405162461bcd60e51b815260040161111c90617db6565b611f0f81614ac6565b611f488160005b6040519080825280601f01601f191660200182016040528015611f40576020820181803683370190505b506000614b63565b50565b6000611f5561468a565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c5249060240160206040518083038186803b158015611f9657600080fd5b505afa158015611faa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fce91906178b4565b611fea5760405162461bcd60e51b815260040161111c90617e99565b6000611ff533612bc3565b60aa546001600160a01b038216600090815260ab60205260409020549192509061201f904261822b565b101561203d5760405162461bcd60e51b815260040161111c9061802e565b600061204833612bc3565b9050612052612a84565b61205b826146aa565b11158015612078575061206c613a95565b612075826146aa565b10155b6120945760405162461bcd60e51b815260040161111c90617fac565b602084015184906001600160a01b03166120e05760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103b37ba32b960991b604482015260640161111c565b6000816060015151116121295760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206e6f6465206e616d6560781b604482015260640161111c565b60008160a0015151116121705760405162461bcd60e51b815260206004820152600f60248201526e0496e76616c6964206e6f646520495608c1b604482015260640161111c565b60008160c00151116121b85760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081b9bd919481c1bdc9d607a1b604482015260640161111c565b6121c0613a95565b8160e00151101580156121de57506121d6612a84565b8160e0015111155b6122205760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b1bd8dac8105b5bdd5b9d606a1b604482015260640161111c565b845161222b9061329d565b1580156122405750845161223e9061271d565b155b61227d5760405162461bcd60e51b815260206004820152600e60248201526d20b63932b0b23c9036b2b6b132b960911b604482015260640161111c565b84602001516001600160a01b031685600001516001600160a01b03161480156122bf575084604001516001600160a01b031685600001516001600160a01b0316145b6123015760405162461bcd60e51b815260206004820152601360248201527229ba30b5b2b91034b9903737ba103b37ba32b960691b604482015260640161111c565b61231d856060015186608001518760a001518860c001516149d8565b6123395760405162461bcd60e51b815260040161111c90617ec0565b6075546123479060016181f1565b935061235884600133600089614c59565b612366848660e00151614cfc565b61237584866101000151614767565b505060758290556001600160a01b0316600090815260ab60205260409020429055919050565b600054610100900460ff16158080156123bb5750600054600160ff909116105b806123d55750303b1580156123d5575060005460ff166001145b6123f15760405162461bcd60e51b815260040161111c90617e4b565b6000805460ff191660011790558015612414576000805461ff0019166101001790555b61241c614965565b612424614994565b61242d8461377a565b606683905561243b82614614565b8015611e5f576000805461ff00191690556040516001815260008051602061832983398151915290602001611e56565b600061247561468a565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c5249060240160206040518083038186803b1580156124b657600080fd5b505afa1580156124ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ee91906178b4565b61250a5760405162461bcd60e51b815260040161111c90617e99565b600061251533612bc3565b60aa546001600160a01b038216600090815260ab60205260409020549192509061253f904261822b565b101561255d5760405162461bcd60e51b815260040161111c9061802e565b600061256833612bc3565b9050612572612a84565b61257b826146aa565b11158015612598575061258c613a95565b612595826146aa565b10155b6125b45760405162461bcd60e51b815260040161111c90617fac565b866001111580156125c6575060098711155b6126015760405162461bcd60e51b815260206004820152600c60248201526b496e76616c6964207479706560a01b604482015260640161111c565b61260b8887614d3a565b6126475760405162461bcd60e51b815260206004820152600d60248201526c496e76616c69642076616c756560981b604482015260640161111c565b6075546126559060016181f1565b925061265f61474c565b6001600160a01b0316634a57823e84600587338d8d8d6040518863ffffffff1660e01b81526004016126979796959493929190618102565b602060405180830381600087803b1580156126b157600080fd5b505af11580156126c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126e991906178d1565b506126f48386614767565b5060758290556001600160a01b0316600090815260ab6020526040902042905595945050505050565b6001600160a01b03166000908152606b6020526040902054151590565b6000818152607160205260408120600381015481546060938493849391929091600183019160028401919084906127709061826e565b80601f016020809104026020016040519081016040528092919081815260200182805461279c9061826e565b80156127e95780601f106127be576101008083540402835291602001916127e9565b820191906000526020600020905b8154815290600101906020018083116127cc57829003601f168201915b505050505093508280546127fc9061826e565b80601f01602080910402602001604051908101604052809291908181526020018280546128289061826e565b80156128755780601f1061284a57610100808354040283529160200191612875565b820191906000526020600020905b81548152906001019060200180831161285857829003601f168201915b505050505092508180546128889061826e565b80601f01602080910402602001604051908101604052809291908181526020018280546128b49061826e565b80156129015780601f106128d657610100808354040283529160200191612901565b820191906000526020600020905b8154815290600101906020018083116128e457829003601f168201915b5050505050915093509350935093509193509193565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156129605760405162461bcd60e51b815260040161111c90617d23565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316612992614730565b6001600160a01b0316146129b85760405162461bcd60e51b815260040161111c90617db6565b6129c182614ac6565b6129cd82826001614b63565b5050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612a715760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161111c565b5060008051602061830983398151915290565b6000612a8e61494d565b6001600160a01b031663737c59b86040518163ffffffff1660e01b815260040160206040518083038186803b15801561179957600080fd5b612ace61468a565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c5249060240160206040518083038186803b158015612b0f57600080fd5b505afa158015612b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4791906178b4565b612b635760405162461bcd60e51b815260040161111c90617e99565b612b6b611706565b15612bae5760405162461bcd60e51b8152602060048201526013602482015272159bdd1a5b99c81a5cc81b9bdd08195b991959606a1b604482015260640161111c565b607754612bbc906004614dc8565b6000607755565b6001600160a01b0381166000908152606d602052604081205415612be5575090565b6001600160a01b03821660009081526068602052604090205415612c2d57506001600160a01b038082166000908152606860209081526040808320548352606c909152902054165b919050565b612c3a6147d2565b612c446000614e06565b565b60008054610100900460ff1615808015612c675750600054600160ff909116105b80612c815750303b158015612c81575060005460ff166001145b612c9d5760405162461bcd60e51b815260040161111c90617e4b565b6000805460ff191660011790558015612cc0576000805461ff0019166101001790555b612cc8614965565b612cd0614994565b6000839050612d49816001600160a01b031663738fdd1a6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d1157600080fd5b505afa158015612d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8791906174b7565b43606681905550612dc4816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d8c57600080fd5b505afa158015612da0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104491906174b7565b60015b816001600160a01b031663d965ea006040518163ffffffff1660e01b815260040160206040518083038186803b158015612e0057600080fd5b505afa158015612e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e3891906178d1565b811161324e5760405163ab3545e560e01b8152600481018290526001600160a01b0383169063ab3545e59060240160206040518083038186803b158015612e7e57600080fd5b505afa158015612e92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eb691906174b7565b6000828152606c6020908152604080832080546001600160a01b039586166001600160a01b0319918216811783558552606d84528285208790558685529054606784528285208054909216908616908117909155835260689091529081902083905551631c4b774b60e01b81526004810183905290831690631c4b774b9060240160206040518083038186803b158015612f4f57600080fd5b505afa158015612f63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f8791906174b7565b6000828152606a6020908152604080832080546001600160a01b0319166001600160a01b03959095169485179055928252606b8152828220849055606984905582516080810184526060808252918101829052928301819052820152604051634f0f4aa960e01b8152600481018390526001600160a01b03841690634f0f4aa99060240160006040518083038186803b15801561302357600080fd5b505afa158015613037573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261305f91908101906179ad565b6060850181905260408501829052602085018390528385526130849392919085614e58565b6130d05760405162461bcd60e51b815260206004820152601760248201527f6e6f646520696e666f206973206475706c696361746564000000000000000000604482015260640161111c565b6001606e82600001516040516130e69190617c21565b90815260405160209181900382018120805460ff191693151593909317909255820151600191606f9161311891617c21565b908152602001604051809103902060006101000a81548160ff0219169083151502179055506001607060008360400151846060015160405160200161315e929190617c3d565b60408051808303601f1901815291815281516020928301208352828201939093529082016000908120805460ff1916941515949094179093558483526071815291208251805184936131b492849291019061711b565b5060208281015180516131cd926001850192019061711b565b50604082015180516131e991600284019160209091019061711b565b5060609190910151600390910155506000818152606c6020908152604080832080546001600160a01b0390811685526072845282852086905585855290546073909352922080546001600160a01b031916919092161790556074819055600101612dc7565b5050600060758190556076819055607781905591508015613297576000805461ff0019169055604051600181526000805160206183298339815191529060200160405180910390a15b50919050565b6001600160a01b0381166000908152606d60205260408120541515806132da57506001600160a01b03821660009081526068602052604090205415155b92915050565b600054610100900460ff16158080156133005750600054600160ff909116105b8061331a5750303b15801561331a575060005460ff166001145b6133365760405162461bcd60e51b815260040161111c90617e4b565b6000805460ff191660011790558015613359576000805461ff0019166101001790555b600086116133b55760405162461bcd60e51b815260206004820152602360248201527f6c6f636b416d6f756e742073686f756c64206265206d6f7265207468656e207a60448201526265726f60e81b606482015260840161111c565b6133bd614965565b6133c5614994565b6133ce8761377a565b60006133d86149c3565b6040516325d998bb60e01b815233600482015290915087906001600160a01b038316906325d998bb9060240160206040518083038186803b15801561341c57600080fd5b505afa158015613430573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061345491906178d1565b10156134995760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e74207374616b696e6760601b604482015260640161111c565b60405163282d3fdf60e01b8152336004820152602481018890526001600160a01b0382169063282d3fdf90604401600060405180830381600087803b1580156134e157600080fd5b505af11580156134f5573d6000803e3d6000fd5b5050600160698190557f6bee784efeb983674392298ab585b22866bedf00ebb0eea949d1e66f3f50e71d8054336001600160a01b0319918216811790925560008281526068602090815260408083208690557ff585789965ba69220d5ce3dc1b444eb22ff546f2650694fef8fafe9c26560af98054851686179055606b82528083208690557fdcf345d7f6a8deb7427d0fee62009fa15100353a1c666b51bb5387b25addcfa98054909416909417909255606d825291822083905560748390559190526071815288517f169c6be1b0e6ab5de76b532e587a77340130ac65c5591db02be822dcf1dc0ed693506135f0925083918a019061711b565b508551613606906001830190602089019061711b565b50845161361c906002830190602088019061711b565b508381600301819055506001606e886040516136389190617c21565b908152604051908190036020018120805492151560ff1990931692909217909155600190606f9061366a908990617c21565b908152602001604051809103902060006101000a81548160ff02191690831515021790555060016070600087876040516020016136a8929190617c3d565b60408051808303601f1901815291815281516020928301208352828201939093529082016000908120805460ff1916941515949094179093556074543380855260728352838520829055908452607390915281832080546001600160a01b03191682179055436066559051909182917f6a2af11b2d73f347f9d5840aea46899e17609730b5cd91bd9c312098038acba69190a350508015613771576000805461ff0019169055604051600181526000805160206183298339815191529060200160405180910390a15b50505050505050565b6137826147d2565b6001600160a01b0381166137d85760405162461bcd60e51b815260206004820152601a60248201527f416464726573732073686f756c64206265206e6f6e2d7a65726f000000000000604482015260640161111c565b606580546001600160a01b0319166001600160a01b0383169081179091556040517f278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd90600090a250565b600054600390610100900460ff16158015613844575060005460ff8083169116105b6138605760405162461bcd60e51b815260040161111c90617e4b565b6000805461ffff191660ff83161761010017905561387c6147d2565b60005b8351811015613913576000818152606a602052604081205484516001600160a01b039091169190859060001985019081106138bc576138bc6182b9565b6020908102919091018101516000858152606a8352604080822080546001600160a01b0319166001600160a01b039485169081179091558252606b909352828120869055931683528220919091555060010161387f565b5060286000526071602052604051600190606e90613952907f4413607b8da693d7048f7d89166a2d39aa4ab0c15d5850f546c8999c9bd9492c90617c5f565b90815260405160209181900382018120805460ff191693151593909317909255602860005260719052600190606f906139ac907f4413607b8da693d7048f7d89166a2d39aa4ab0c15d5850f546c8999c9bd9492d90617c5f565b90815260405160209181900382018120805460ff19169315159390931790925560286000908152607182527f4413607b8da693d7048f7d89166a2d39aa4ab0c15d5850f546c8999c9bd9492f54600193607093613a2d927f4413607b8da693d7048f7d89166a2d39aa4ab0c15d5850f546c8999c9bd9492e92909101617c6b565b60408051808303601f1901815291815281516020928301208352828201939093529082016000908120805460ff191694151594909417909355825461ff0019169092555160ff83168152600080516020618329833981519152910160405180910390a1505050565b6000613a9f61494d565b6001600160a01b031663076cd77f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561179957600080fd5b613adf61468a565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c5249060240160206040518083038186803b158015613b2057600080fd5b505afa158015613b34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b5891906178b4565b613b745760405162461bcd60e51b815260040161111c90617e99565b613b7c614f81565b6000613b8733612bc3565b9050613b91612a84565b613b9a826146aa565b11158015613bb75750613bab613a95565b613bb4826146aa565b10155b613bd35760405162461bcd60e51b815260040161111c90617fac565b613bdb611706565b613c115760405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b604482015260640161111c565b6000613c1c84614fdb565b9050613c2884846150f0565b600080613c34866151ca565b92509250506000613c4461138990565b90508083101580613c555750808210155b80613c6a5750613c6582846181f1565b612710145b15613c7e57613c7e87858486116000615204565b50505050506129cd6001607855565b6000613c9761494d565b6001600160a01b0316631b27e01b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561179957600080fd5b6000613cd961468a565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c5249060240160206040518083038186803b158015613d1a57600080fd5b505afa158015613d2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d5291906178b4565b613d6e5760405162461bcd60e51b815260040161111c90617e99565b6000613d7933612bc3565b60aa546001600160a01b038216600090815260ab602052604090205491925090613da3904261822b565b1015613dc15760405162461bcd60e51b815260040161111c9061802e565b6000613dcc33612bc3565b9050613dd6612a84565b613ddf826146aa565b11158015613dfc5750613df0613a95565b613df9826146aa565b10155b613e185760405162461bcd60e51b815260040161111c90617fac565b602085015185906001600160a01b0316613e645760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103b37ba32b960991b604482015260640161111c565b600081606001515111613ead5760405162461bcd60e51b8152602060048201526011602482015270496e76616c6964206e6f6465206e616d6560781b604482015260640161111c565b60008160a001515111613ef45760405162461bcd60e51b815260206004820152600f60248201526e0496e76616c6964206e6f646520495608c1b604482015260640161111c565b60008160c0015111613f3c5760405162461bcd60e51b8152602060048201526011602482015270125b9d985b1a59081b9bd919481c1bdc9d607a1b604482015260640161111c565b613f44613a95565b8160e0015110158015613f625750613f5a612a84565b8160e0015111155b613fa45760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b1bd8dac8105b5bdd5b9d606a1b604482015260640161111c565b6001600160a01b038516613ff05760405162461bcd60e51b8152602060048201526013602482015272496e76616c6964206f6c64204164647265737360681b604482015260640161111c565b613ff98561329d565b6140325760405162461bcd60e51b815260206004820152600a6024820152692737b716b6b2b6b132b960b11b604482015260640161111c565b6020808701516001600160a01b038781166000908152606d84526040808220548252606790945292909220548216911614806140835750846001600160a01b031686602001516001600160a01b0316145b806140ad5750614096866020015161329d565b1580156140ad57506140ab866020015161271d565b155b801561412f57506040808701516001600160a01b038781166000908152606d6020908152848220548252606a905292909220548216911614806141055750846001600160a01b031686604001516001600160a01b0316145b8061412f5750614118866040015161329d565b15801561412f575061412d866040015161271d565b155b61416e5760405162461bcd60e51b815260206004820152601060248201526f20b63932b0b23c90309036b2b6b132b960811b604482015260640161111c565b60755461417c9060016181f1565b935061418c84600333888a614c59565b61419a848760e00151614cfc565b6141a984876101000151614767565b6075849055336001600160a01b0386161480156141d2575085516001600160a01b038681169116145b1561420c5760006141e2856148c3565b925050506141fc854283426141f791906181f1565b61529a565b61420a856003600180615204565b505b50506001600160a01b0316600090815260ab6020526040902042905592915050565b600061423861468a565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c5249060240160206040518083038186803b15801561427957600080fd5b505afa15801561428d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142b191906178b4565b6142cd5760405162461bcd60e51b815260040161111c90617e99565b60006142d833612bc3565b60aa546001600160a01b038216600090815260ab602052604090205491925090614302904261822b565b10156143205760405162461bcd60e51b815260040161111c9061802e565b600061432b33612bc3565b9050614335612a84565b61433e826146aa565b1115801561435b575061434f613a95565b614358826146aa565b10155b6143775760405162461bcd60e51b815260040161111c90617fac565b6001600160a01b0387166143bf5760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b604482015260640161111c565b6143c88761329d565b6144015760405162461bcd60e51b815260206004820152600a6024820152692737b716b6b2b6b132b960b11b604482015260640161111c565b600161440c60695490565b116144595760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f742072656d6f7665206120736f6c65206d656d6265720000000000604482015260640161111c565b85614463886146aa565b10156144c45760405162461bcd60e51b815260206004820152602a60248201527f496e73756666696369656e742062616c616e636520746861742063616e206265604482015269103ab73637b1b5b2b21760b11b606482015260840161111c565b6075546144d29060016181f1565b604080516101408101825260008082526020808301829052828401829052835182815280820185526060840152835182815280820185526080840152835182815290810190935260a082019290925260c081019190915260e0810188905261010081018790526101208101869052909350614551846002338b85614c59565b61455b8488614cfc565b6145658487614767565b505060758290556001600160a01b0316600090815260ab60205260409020429055949350505050565b6145966147d2565b610e1081106145df5760405162461bcd60e51b81526020600482015260156024820152746e6577506572696f6420697320746f6f206c6f6e6760581b604482015260640161111c565b60aa8190556040518181527f17c6f1d1ce638844b664872f5c6eecb7d150ec0c41187d7f85826a656ee7946f906020016116fb565b61461c6147d2565b6001600160a01b0381166146815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161111c565b611f4881614e06565b60006117d17111dbdd995c9b985b98d950dbdb9d1c9858dd60721b615308565b60006146b46149c3565b604051632c9aab9b60e11b81526001600160a01b03848116600483015291909116906359355736906024015b60206040518083038186803b1580156146f857600080fd5b505afa15801561470c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132da91906178d1565b600080516020618309833981519152546001600160a01b031690565b60006117d16c42616c6c6f7453746f7261676560981b615308565b61476f61474c565b6001600160a01b031663bce0dbc183836040518363ffffffff1660e01b815260040161479c929190617c84565b600060405180830381600087803b1580156147b657600080fd5b505af11580156147ca573d6000803e3d6000fd5b505050505050565b6033546001600160a01b03163314612c445760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161111c565b600080600061483961474c565b6001600160a01b031663688ca5b2856040518263ffffffff1660e01b815260040161486691815260200190565b60606040518083038186803b15801561487e57600080fd5b505afa158015614892573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148b69190617aff565b9250925092509193909250565b60008060006148d061474c565b6001600160a01b03166309970688856040518263ffffffff1660e01b81526004016148fd91815260200190565b60606040518083038186803b15801561491557600080fd5b505afa158015614929573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148b69190617b2d565b60006117d169456e7653746f7261676560b01b615308565b600054610100900460ff1661498c5760405162461bcd60e51b815260040161111c90617fe3565b612c44615385565b600054610100900460ff166149bb5760405162461bcd60e51b815260040161111c90617fe3565b612c446153ac565b60006117d1665374616b696e6760c81b615308565b604051600190606f906149ec908690617c21565b9081526040519081900360200190205460ff1615614a08575060005b606e85604051614a189190617c21565b9081526040519081900360200190205460ff1615614a34575060005b60008383604051602001614a49929190617c3d565b60408051601f1981840301815291815281516020928301206000818152607090935291205490915060ff1615614a7e57600091505b50949350505050565b614a8f6149c3565b60405163282d3fdf60e01b81526001600160a01b03848116600483015260248201849052919091169063282d3fdf9060440161479c565b614ace61468a565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c5249060240160206040518083038186803b158015614b0f57600080fd5b505afa158015614b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b4791906178b4565b611f485760405162461bcd60e51b815260040161111c90617e99565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615614b9b57614b96836153dc565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015614bd457600080fd5b505afa925050508015614c04575060408051601f3d908101601f19168201909252614c01918101906178d1565b60015b614c205760405162461bcd60e51b815260040161111c90617eee565b6000805160206183098339815191528114614c4d5760405162461bcd60e51b815260040161111c90617e02565b50614b96838383615478565b614c6161474c565b6001600160a01b031663daacbb95868684610120015187878760000151886020015189604001518a606001518b608001518c60a001518d60c001516040518d63ffffffff1660e01b8152600401614cc39c9b9a99989796959493929190618065565b600060405180830381600087803b158015614cdd57600080fd5b505af1158015614cf1573d6000803e3d6000fd5b505050505050505050565b614d0461474c565b604051633968764960e11b815260048101849052602481018390526001600160a01b0391909116906372d0ec929060440161479c565b6000614d4461494d565b6001600160a01b0316639801bff984846040518363ffffffff1660e01b8152600401614d71929190617c84565b60206040518083038186803b158015614d8957600080fd5b505afa158015614d9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614dc191906178b4565b9392505050565b614dd061474c565b60405163548f2cdd60e11b815260048101849052602481018390526001600160a01b03919091169063a91e59ba9060440161479c565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600060019050848051906020012082602001518051906020012014158015614e9f5750606f85604051614e8b9190617c21565b9081526040519081900360200190205460ff165b15614ea8575060005b858051906020012082600001518051906020012014158015614ee95750606e86604051614ed59190617c21565b9081526040519081900360200190205460ff165b15614ef2575060005b60008484604051602001614f07929190617c3d565b6040516020818303038152906040528051906020012090508083604001518460600151604051602001614f3b929190617c3d565b6040516020818303038152906040528051906020012014158015614f6d575060008181526070602052604090205460ff165b15614f7757600091505b5095945050505050565b60026078541415614fd45760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161111c565b6002607855565b6000806000614fe98461482c565b509092509050600181141561508857607754156150185760405162461bcd60e51b815260040161111c90617f69565b6000615023856148c3565b9250505061502f611757565b8110156150525761504d8542615043611757565b6141f790426181f1565b61507d565b8061505b613c8d565b101561506e5761504d8542615043613c8d565b61507d85426141f784826181f1565b5060778490556150e9565b60028114156150b75760775484146150b25760405162461bcd60e51b815260040161111c90617f69565b6150e9565b60405162461bcd60e51b8152602060048201526007602482015266115e1c1a5c995960ca1b604482015260640161111c565b5092915050565b6000607654600161510191906181f1565b9050600061510e33612bc3565b9050600061511b60695490565b61512790612710618209565b905060008461513757600261513a565b60015b905061514461474c565b6040516325918ae760e21b815260048101869052602481018890526001600160a01b038581166044830152606482018490526084820185905291909116906396462b9c9060a401600060405180830381600087803b1580156151a557600080fd5b505af11580156151b9573d6000803e3d6000fd5b505050607694909455505050505050565b60008060006151d761474c565b6001600160a01b03166356ba988e856040518263ffffffff1660e01b81526004016148fd91815260200190565b6004821561527757506003600184141561522e576152218561549d565b615229575060045b615277565b600284141561524057615229856159b2565b6003841415615253576152218583615ef6565b60048414156152655761522985616490565b6005841415615277576152778561654f565b6152818582614dc8565b8161528c5760006077555b5050505050565b6001607855565b6152a261474c565b60405163605b78c360e11b81526004810185905260248101849052604481018390526001600160a01b03919091169063c0b6f18690606401600060405180830381600087803b1580156152f457600080fd5b505af1158015613771573d6000803e3d6000fd5b606554604051630d2020dd60e01b8152600481018390526000916001600160a01b031690630d2020dd9060240160206040518083038186803b15801561534d57600080fd5b505afa158015615361573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132da91906174b7565b600054610100900460ff166152935760405162461bcd60e51b815260040161111c90617fe3565b600054610100900460ff166153d35760405162461bcd60e51b815260040161111c90617fe3565b612c4433614e06565b6001600160a01b0381163b6154495760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161111c565b60008051602061830983398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b615481836166a2565b60008251118061548e5750805b15614b9657611e5f83836166e2565b60006154aa826001616707565b6000806000806000806000806154bf8a61680e565b98509850985098509850985098509850506154d98861329d565b15615537578960008051602061834983398151915260405161551f9060208082526010908201526f20b63932b0b23c90309036b2b6b132b960811b604082015260600190565b60405180910390a25060009998505050505050505050565b6155408661271d565b15615588578960008051602061834983398151915260405161551f9060208082526012908201527120b63932b0b23c9030903932bbb0b93232b960711b604082015260600190565b615590613a95565b8110806155a35750806155a1612a84565b105b156155c4578960008051602061834983398151915260405161551f90617f3c565b806155ce896168c4565b10156155f0578960008051602061834983398151915260405161551f90617d6f565b866001600160a01b0316886001600160a01b0316141580156156245750856001600160a01b0316886001600160a01b031614155b15615670578960008051602061834983398151915260405161551f90602080825260169082015275496e76616c6964206d656d626572206164647265737360501b604082015260600190565b61567a8882614a87565b6000606954600161568b91906181f1565b9050876067600083815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080606860008a6001600160a01b03166001600160a01b031681526020019081526020016000208190555086606a600083815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080606b6000896001600160a01b03166001600160a01b031681526020019081526020016000208190555088606c600083815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080606d60008b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600060745460016157c491906181f1565b60008181526071602090815260409091208951929350916157ea918391908b019061711b565b50865161580090600183019060208a019061711b565b508551615816906002830190602089019061711b565b508481600301819055506001606e896040516158329190617c21565b908152604051908190036020018120805492151560ff1990931692909217909155600190606f90615864908a90617c21565b908152602001604051809103902060006101000a81548160ff02191690831515021790555060016070600088886040516020016158a2929190617c3d565b60405160208183030381529060405280519060200120815260200190815260200160002060006101000a81548160ff0219169083151502179055508a6073600084815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081607260008d6001600160a01b03166001600160a01b03168152602001908152602001600020819055508781600001908051906020019061595792919061711b565b5060698390556074829055436066556040516001600160a01b03808c1691908d16907f6a2af11b2d73f347f9d5840aea46899e17609730b5cd91bd9c312098038acba690600090a35060019c9b505050505050505050505050565b6159bd816002616707565b6000806159c98361680e565b98505050505050505091506159dd8261329d565b615a335782600080516020618349833981519152604051615a26906020808252601490820152732737ba1030b63932b0b23c90309036b2b6b132b960611b604082015260600190565b60405180910390a2505050565b6001600160a01b038083166000818152606d6020818152604080842054606954808652606c8452828620548287526067855283872054606a86529387205497909652939092529094928316939083169216908414615b9b57606980546000908152606c6020818152604080842080546001600160a01b038d8116808852606d80875285892080549e8a529787528589209087529b821688528488209c909c559486905581546001600160a01b03199081169092558954821690851617909855888452606b8083528185205486548652606a80855283872080548a881689528487528589208054948a529287528589209487528716808952858920939093559087905580548b16905581548a16179055978352606880825288842054945484526067808352898520805489861687528385528b872080548989529386528c8820949095529094168086529985205592905580548616905580549094168517909355919291615c18565b606980546000908152606c6020908152604080832080546001600160a01b03199081169091556001600160a01b038b81168552606d845282852085905585548552606a84528285208054831690558681168552606b8452828520859055945484526067835281842080549091169055928516825260689052908120555b6001606954615c27919061822b565b6069556000848152607160205260408082209051909190606f90615c4f906001850190617c5f565b908152604051908190036020018120805492151560ff1990931692909217909155600090606e90615c81908490617c5f565b90815260405160209181900382018120805460ff19169315159390931790925560038301546000926070928492615cbd92600288019201617c6b565b60408051808303601f1901815291815281516020928301208352828201939093529082016000908120805460ff1916941515949094179093556074546001600160a01b038b168452607290915291205414615e17576001600160a01b038088166000908152607260209081526040808320546074548452607383528184205460719093529220805492985092169550829190615d589061826e565b615d6392919061719f565b5060745460009081526071602052604090206001908101805491830191615d899061826e565b615d9492919061719f565b5060745460009081526071602052604090206002908101805491830191615dba9061826e565b615dc592919061719f565b506074546000908152607160209081526040808320600390810154908501558783526073825280832080546001600160a01b0319166001600160a01b0389169081179091558352607290915290208590555b60748054600090815260736020908152604080832080546001600160a01b03191690556001600160a01b038b16835260728252808320839055925482526071905290812090615e66828261721a565b615e7460018301600061721a565b615e8260028301600061721a565b600382016000905550506001607454615e9b919061822b565b60745543606655615eac87876168fe565b826001600160a01b0316876001600160a01b03167faa91016c21c52c58ac64f23f71bbe75becc9ada603e18ee671d09ff15492d1c160405160405180910390a35050505050505050565b600081615f0857615f08836003616707565b6000806000806000806000806000615f1f8c61680e565b985098509850985098509850985098509850615f3a8961329d565b615fa6578b600080516020618349833981519152604051615f8c906020808252601b908201527f4f6c642061646472657373206973206e6f742061206d656d6265720000000000604082015260600190565b60405180910390a2600099505050505050505050506132da565b615fb98c8c8b8b8b8b8b8b8b8b8b616a22565b615fcf57600099505050505050505050506132da565b6001600160a01b03808a166000818152606d6020526040902054918a161461603e576000818152606c6020908152604080832080546001600160a01b0319166001600160a01b038e81169182179092558452606d909252808320849055908c16825281205561603e8983614a87565b6001600160a01b038a166000908152607260209081526040808320548084526071909252808320905191929091606e90616079908490617c5f565b908152604051908190036020018120805492151560ff1990931692909217909155600090606f906160ae906001850190617c5f565b90815260405160209181900382018120805460ff191693151593909317909255600383015460009260709284926160ea92600288019201617c6b565b60408051808303601f1901815291815281516020928301208352828201939093529101600020805460ff1916921515929092179091558851616131918391908b019061711b565b50865161614790600183019060208a019061711b565b50855161615d906002830190602089019061711b565b506003810185905543606655604051600190606e9061617d908b90617c21565b908152604051908190036020018120805492151560ff1990931692909217909155600190606f906161af908a90617c21565b908152602001604051809103902060006101000a81548160ff02191690831515021790555060016070600088886040516020016161ed929190617c3d565b60408051808303601f1901815291815281516020928301208352828201939093529082016000908120805460ff191694151594909417909355858352606a90529020546001600160a01b03908116915089168114616289576000838152606a6020908152604080832080546001600160a01b0319166001600160a01b038e81169182179092558452606b90925280832086905590831682528120555b506000828152606760205260409020546001600160a01b03908116908a16811461633b57896067600085815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555082606860008c6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600060686000836001600160a01b03166001600160a01b03168152602001908152602001600020819055505b50896001600160a01b03168b6001600160a01b03161461643b57896073600083815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080607260008c6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000607260008d6001600160a01b03166001600160a01b03168152602001908152602001600020819055506163ec8b846168fe565b886001600160a01b03168a6001600160a01b03168c6001600160a01b03167f15f4d750630db473a85edd9d47c500527a2648cc5e676f39645e52790cf07be060405160405180910390a461647c565b896001600160a01b03168b6001600160a01b03167f1feee1b4fcb797c62645da41c5c6edd5f91d4291de0054da625c42b823594c1f60405160405180910390a35b5060019d9c50505050505050505050505050565b61649b816004616707565b60006164a561474c565b6001600160a01b0316637efa9ae3836040518263ffffffff1660e01b81526004016164d291815260200190565b60206040518083038186803b1580156164ea57600080fd5b505afa1580156164fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061652291906174b7565b90506001600160a01b038116156129cd5761653c81614ac6565b616547816000611f16565b436066555050565b61655a816005616707565b600080600061656761474c565b6001600160a01b0316631d940da2856040518263ffffffff1660e01b815260040161659491815260200190565b60006040518083038186803b1580156165ac57600080fd5b505afa1580156165c0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526165e891908101906178ea565b92509250925060006165f861494d565b6040516388c2801960e01b81529091506001600160a01b038216906388c28019906166299087908690600401617c84565b600060405180830381600087803b15801561664357600080fd5b505af1158015616657573d6000803e3d6000fd5b50504360665550506040517f701c16c2519cdb79aaac423a84733590e3510d9552055b6ad6908f0ab12b6c299061669390869086908690617c9d565b60405180910390a15050505050565b6166ab816153dc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060614dc1838360405180606001604052806027815260200161836960279139616fbc565b6000806167138461482c565b509150915082821461675d5760405162461bcd60e51b8152602060048201526013602482015272496e76616c696420766f74696e67207479706560681b604482015260640161111c565b600281146167a45760405162461bcd60e51b8152602060048201526014602482015273496e76616c696420766f74696e6720737461746560601b604482015260640161111c565b6000806167b0866151ca565b92509250506167be61138990565b821015806167ce57506113898110155b6147ca5760405162461bcd60e51b8152602060048201526011602482015270139bdd081e595d08199a5b985b1a5e9959607a1b604482015260640161111c565b600080600080606080606060008061682461474c565b6001600160a01b03166373df4e018b6040518263ffffffff1660e01b815260040161685191815260200190565b60006040518083038186803b15801561686957600080fd5b505afa15801561687d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526168a591908101906174d4565b9850985098509850985098509850985098509193959799909294969850565b60006168ce6149c3565b6040516325d998bb60e01b81526001600160a01b03848116600483015291909116906325d998bb906024016146e0565b60006169086149c3565b604051632c9aab9b60e11b81526001600160a01b03858116600483015291925060009183169063593557369060240160206040518083038186803b15801561694f57600080fd5b505afa158015616963573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061698791906178d1565b905082811115616a18576001600160a01b038216637756c908856169ab868561822b565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156169f157600080fd5b505af1158015616a05573d6000803e3d6000fd5b50505050616a138484617034565b611e5f565b611e5f8482617034565b60008a616a3457616a348c6003616707565b616a3d8a61329d565b616a9f578b600080516020618349833981519152604051616a8f906020808252601b908201527f4f6c642061646472657373206973206e6f742061206d656d6265720000000000604082015260600190565b60405180910390a2506000616fad565b6001600160a01b03808b166000818152606d6020526040902054918b1614616c1657616aca8a61329d565b15616b2f578c600080516020618349833981519152604051616b1d906020808252601f908201527f6e6577206164647265737320697320616c72656164792061206d656d62657200604082015260600190565b60405180910390a26000915050616fad565b886001600160a01b03168a6001600160a01b031614158015616b635750876001600160a01b03168a6001600160a01b031614155b15616bae578c600080516020618349833981519152604051616b1d90602080825260159082015274496e76616c696420766f746572206164647265737360581b604082015260600190565b616bb6613a95565b831080616bc9575082616bc7612a84565b105b15616bea578c600080516020618349833981519152604051616b1d90617f3c565b82616bf48b6168c4565b1015616c16578c600080516020618349833981519152604051616b1d90617d6f565b6001600160a01b038b166000908152607260209081526040808320548084526071909252808320815160808101909252805492939282908290616c589061826e565b80601f0160208091040260200160405190810160405280929190818152602001828054616c849061826e565b8015616cd15780601f10616ca657610100808354040283529160200191616cd1565b820191906000526020600020905b815481529060010190602001808311616cb457829003601f168201915b50505050508152602001600182018054616cea9061826e565b80601f0160208091040260200160405190810160405280929190818152602001828054616d169061826e565b8015616d635780601f10616d3857610100808354040283529160200191616d63565b820191906000526020600020905b815481529060010190602001808311616d4657829003601f168201915b50505050508152602001600282018054616d7c9061826e565b80601f0160208091040260200160405190810160405280929190818152602001828054616da89061826e565b8015616df55780601f10616dca57610100808354040283529160200191616df5565b820191906000526020600020905b815481529060010190602001808311616dd857829003601f168201915b505050505081526020016003820154815250509050616e178989898985614e58565b616e4b578e600080516020618349833981519152604051616e3790617ec0565b60405180910390a260009350505050616fad565b506000828152606a60205260409020546001600160a01b03908116908d8116908b1614801590616e8d5750896001600160a01b0316816001600160a01b031614155b8015616eac5750616e9d8a61329d565b80616eac5750616eac8a61271d565b15616ef8578e600080516020618349833981519152604051616e3790602080825260169082015275496e76616c696420726577617264206164647265737360501b604082015260600190565b506000828152606760205260409020546001600160a01b03908116908d8116908c1614801590616f3a57508a6001600160a01b0316816001600160a01b031614155b8015616f595750616f4a8b61329d565b80616f595750616f598b61271d565b15616fa5578e600080516020618349833981519152604051616e3790602080825260169082015275496e76616c696420766f74657273206164647265737360501b604082015260600190565b506001925050505b9b9a5050505050505050505050565b6060600080856001600160a01b031685604051616fd99190617c21565b600060405180830381855af49150503d8060008114617014576040519150601f19603f3d011682016040523d82523d6000602084013e617019565b606091505b509150915061702a86838387617073565b9695505050505050565b61703c6149c3565b604051637eee288d60e01b81526001600160a01b038481166004830152602482018490529190911690637eee288d9060440161479c565b606083156170df5782516170d8576001600160a01b0385163b6170d85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161111c565b50816170e9565b6170e983836170f1565b949350505050565b8151156171015781518083602001fd5b8060405162461bcd60e51b815260040161111c9190617d10565b8280546171279061826e565b90600052602060002090601f016020900481019282617149576000855561718f565b82601f1061716257805160ff191683800117855561718f565b8280016001018555821561718f579182015b8281111561718f578251825591602001919060010190617174565b5061719b929150617250565b5090565b8280546171ab9061826e565b90600052602060002090601f0160209004810192826171cd576000855561718f565b82601f106171de578054855561718f565b8280016001018555821561718f57600052602060002091601f016020900482015b8281111561718f5782548255916001019190600101906171ff565b5080546172269061826e565b6000825580601f10617236575050565b601f016020900490600052602060002090810190611f4891905b5b8082111561719b5760008155600101617251565b8035612c2d816182e5565b8051612c2d816182e5565b600082601f83011261728c57600080fd5b813560206172a161729c836181a7565b618177565b80838252828201915082860187848660051b89010111156172c157600080fd5b60005b858110156172e95781356172d7816182e5565b845292840192908401906001016172c4565b5090979650505050505050565b600082601f83011261730757600080fd5b813561731561729c826181ca565b81815284602083860101111561732a57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261735857600080fd5b815161736661729c826181ca565b81815284602083860101111561737b57600080fd5b6170e9826020830160208701618242565b6000610140828403121561739f57600080fd5b6173a761814e565b90506173b282617265565b81526173c060208301617265565b60208201526173d160408301617265565b604082015260608201356001600160401b03808211156173f057600080fd5b6173fc858386016172f6565b6060840152608084013591508082111561741557600080fd5b617421858386016172f6565b608084015260a084013591508082111561743a57600080fd5b617446858386016172f6565b60a084015260c084013560c084015260e084013560e08401526101009150818401358181111561747557600080fd5b617481868287016172f6565b8385015250505061012080830135818301525092915050565b6000602082840312156174ac57600080fd5b8135614dc1816182e5565b6000602082840312156174c957600080fd5b8151614dc1816182e5565b60008060008060008060008060006101208a8c0312156174f357600080fd5b6174fc8a617270565b985061750a60208b01617270565b975061751860408b01617270565b965061752660608b01617270565b955060808a01516001600160401b038082111561754257600080fd5b61754e8d838e01617347565b965060a08c015191508082111561756457600080fd5b6175708d838e01617347565b955060c08c015191508082111561758657600080fd5b506175938c828d01617347565b93505060e08a015191506101008a015190509295985092959850929598565b600080604083850312156175c557600080fd5b82356175d0816182e5565b915060208301356001600160401b038111156175eb57600080fd5b6175f7858286016172f6565b9150509250929050565b60008060006060848603121561761657600080fd5b8335617621816182e5565b925060208401356001600160401b0381111561763c57600080fd5b617648868287016172f6565b925050604084013590509250925092565b60008060006060848603121561766e57600080fd5b8335617679816182e5565b9250602084013591506040840135617690816182e5565b809150509250925092565b6000806000606084860312156176b057600080fd5b83356176bb816182e5565b92506020840135915060408401356001600160401b038111156176dd57600080fd5b6176e9868287016172f6565b9150509250925092565b60008060008060008060c0878903121561770c57600080fd5b8635617717816182e5565b95506020870135945060408701356001600160401b038082111561773a57600080fd5b6177468a838b016172f6565b9550606089013591508082111561775c57600080fd5b6177688a838b016172f6565b9450608089013591508082111561777e57600080fd5b5061778b89828a016172f6565b92505060a087013590509295509295509295565b600080600080608085870312156177b557600080fd5b84356177c0816182e5565b93506020850135925060408501356001600160401b038111156177e257600080fd5b6177ee878288016172f6565b949793965093946060013593505050565b6000806040838503121561781257600080fd5b82356001600160401b038082111561782957600080fd5b818501915085601f83011261783d57600080fd5b8135602061784d61729c836181a7565b8083825282820191508286018a848660051b890101111561786d57600080fd5b600096505b84871015617890578035835260019690960195918301918301617872565b50965050860135925050808211156178a757600080fd5b506175f78582860161727b565b6000602082840312156178c657600080fd5b8151614dc1816182fa565b6000602082840312156178e357600080fd5b5051919050565b6000806000606084860312156178ff57600080fd5b835192506020840151915060408401516001600160401b0381111561792357600080fd5b6176e986828701617347565b600080600080600060a0868803121561794757600080fd5b853594506020860135935060408601356001600160401b038082111561796c57600080fd5b61797889838a016172f6565b9450606088013591508082111561798e57600080fd5b5061799b888289016172f6565b95989497509295608001359392505050565b600080600080608085870312156179c357600080fd5b84516001600160401b03808211156179da57600080fd5b6179e688838901617347565b955060208701519150808211156179fc57600080fd5b617a0888838901617347565b94506040870151915080821115617a1e57600080fd5b50617a2b87828801617347565b606096909601519497939650505050565b600060208284031215617a4e57600080fd5b81356001600160401b03811115617a6457600080fd5b6170e98482850161738c565b60008060408385031215617a8357600080fd5b82356001600160401b03811115617a9957600080fd5b617aa58582860161738c565b9250506020830135617ab6816182e5565b809150509250929050565b600060208284031215617ad357600080fd5b5035919050565b60008060408385031215617aed57600080fd5b823591506020830135617ab6816182fa565b600080600060608486031215617b1457600080fd5b83519250602084015191506040840151617690816182fa565b600080600060608486031215617b4257600080fd5b8351925060208401519150604084015190509250925092565b60008151808452617b73816020860160208601618242565b601f01601f19169290920160200192915050565b8054600090600181811c9080831680617ba157607f831692505b6020808410821415617bc357634e487b7160e01b600052602260045260246000fd5b818015617bd75760018114617be857617c15565b60ff19861689528489019650617c15565b60008881526020902060005b86811015617c0d5781548b820152908501908301617bf4565b505084890196505b50505050505092915050565b60008251617c33818460208701618242565b9190910192915050565b60008351617c4f818460208801618242565b9190910191825250602001919050565b6000614dc18284617b87565b6000617c778285617b87565b9283525050602001919050565b8281526040602082015260006170e96040830184617b5b565b838152826020820152606060408201526000617cbc6060830184617b5b565b95945050505050565b608081526000617cd86080830187617b5b565b8281036020840152617cea8187617b5b565b90508281036040840152617cfe8186617b5b565b91505082606083015295945050505050565b602081526000614dc16020830184617b5b565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b60208082526027908201527f496e73756666696369656e742062616c616e636520746861742063616e206265604082015266081b1bd8dad95960ca1b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60208082526029908201527f45524331393637557067726164653a20756e737570706f727465642070726f786040820152681a58589b195555525160ba1b606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252600d908201526c2737902832b936b4b9b9b4b7b760991b604082015260600190565b6020808252601490820152734475706c696361746564206e6f646520696e666f60601b604082015260600190565b6020808252602e908201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960408201526d6f6e206973206e6f74205555505360901b606082015260800190565b602080825260139082015272125b9d985b1a59081b1bd8dac8185b5bdd5b9d606a1b604082015260600190565b60208082526023908201527f4e6f7720696e20766f74696e67207769746820646966666572656e742062616c6040820152621b1bdd60ea1b606082015260800190565b60208082526017908201527f496e76616c6964207374616b696e672062616c616e6365000000000000000000604082015260600190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6020808252601d908201527f43616e6e6f74206164642070726f706f73616c20746f6f206561726c79000000604082015260600190565b8c8152602081018c9052604081018b90526001600160a01b038a81166060830152898116608083015288811660a083015287811660c0830152861660e08201526000610180806101008401526180bd81840188617b5b565b90508281036101208401526180d28187617b5b565b90508281036101408401526180e78186617b5b565b915050826101608301529d9c50505050505050505050505050565b87815286602082015285604082015260018060a01b03851660608201528360808201528260a082015260e060c0820152600061814160e0830184617b5b565b9998505050505050505050565b60405161014081016001600160401b0381118282101715618171576181716182cf565b60405290565b604051601f8201601f191681016001600160401b038111828210171561819f5761819f6182cf565b604052919050565b60006001600160401b038211156181c0576181c06182cf565b5060051b60200190565b60006001600160401b038211156181e3576181e36182cf565b50601f01601f191660200190565b60008219821115618204576182046182a3565b500190565b60008261822657634e487b7160e01b600052601260045260246000fd5b500490565b60008282101561823d5761823d6182a3565b500390565b60005b8381101561825d578181015183820152602001618245565b83811115611e5f5750506000910152565b600181811c9082168061828257607f821691505b6020821081141561329757634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611f4857600080fd5b8015158114611f4857600080fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249885e7f4987c0698db47045ad8cea110b51138f0eecbd94915842328cf6c3dc97d416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122029bf12f4ab54d280336b67bd80c36a42371b4ad06571e3e1e94eb0cbe2231b8164736f6c63430008060033"; var GovImp_contract = web3.eth.contract([{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"envName","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"envType","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"envVal","type":"bytes"}],"name":"EnvChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"address","name":"voter","type":"address"}],"name":"MemberAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddr","type":"address"},{"indexed":true,"internalType":"address","name":"newAddr","type":"address"},{"indexed":true,"internalType":"address","name":"newVoter","type":"address"}],"name":"MemberChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"address","name":"voter","type":"address"}],"name":"MemberRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":true,"internalType":"address","name":"voter","type":"address"}],"name":"MemberUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"ballotId","type":"uint256"},{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"NotApplicable","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newPeriod","type":"uint256"}],"name":"SetProposalTimePeriod","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"}],"name":"SetRegistry","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"inputs":[],"name":"BALLOT_DURATION_MAX_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BALLOT_DURATION_MIN_MAX_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BALLOT_DURATION_MIN_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BALLOT_STORAGE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BASE_FEE_MAX_CHANGE_RATE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCKS_PER_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_CREATION_TIME_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_GASLIMIT_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_AMOUNT_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_MAINTANANCE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_METHOD_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ECOSYSTEM_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENV_STORAGE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GASLIMIT_AND_BASE_FEE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GAS_TARGET_PERCENTAGE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GOV_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAINTENANCE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BASE_FEE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_IDLE_BLOCK_INTERVAL_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PRIORITY_FEE_PER_GAS_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_POOL_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_MAX_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_MIN_MAX_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_MIN_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_REWARD_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"address","name":"voter","type":"address"},{"internalType":"address","name":"reward","type":"address"},{"internalType":"bytes","name":"name","type":"bytes"},{"internalType":"bytes","name":"enode","type":"bytes"},{"internalType":"bytes","name":"ip","type":"bytes"},{"internalType":"uint256","name":"port","type":"uint256"},{"internalType":"uint256","name":"lockAmount","type":"uint256"},{"internalType":"bytes","name":"memo","type":"bytes"},{"internalType":"uint256","name":"duration","type":"uint256"}],"internalType":"struct GovImp.MemberInfo","name":"info","type":"tuple"}],"name":"addProposalToAddMember","outputs":[{"internalType":"uint256","name":"ballotIdx","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"envName","type":"bytes32"},{"internalType":"uint256","name":"envType","type":"uint256"},{"internalType":"bytes","name":"envVal","type":"bytes"},{"internalType":"bytes","name":"memo","type":"bytes"},{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"addProposalToChangeEnv","outputs":[{"internalType":"uint256","name":"ballotIdx","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newGovAddr","type":"address"},{"internalType":"bytes","name":"memo","type":"bytes"},{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"addProposalToChangeGov","outputs":[{"internalType":"uint256","name":"ballotIdx","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"address","name":"voter","type":"address"},{"internalType":"address","name":"reward","type":"address"},{"internalType":"bytes","name":"name","type":"bytes"},{"internalType":"bytes","name":"enode","type":"bytes"},{"internalType":"bytes","name":"ip","type":"bytes"},{"internalType":"uint256","name":"port","type":"uint256"},{"internalType":"uint256","name":"lockAmount","type":"uint256"},{"internalType":"bytes","name":"memo","type":"bytes"},{"internalType":"uint256","name":"duration","type":"uint256"}],"internalType":"struct GovImp.MemberInfo","name":"newInfo","type":"tuple"},{"internalType":"address","name":"oldStaker","type":"address"}],"name":"addProposalToChangeMember","outputs":[{"internalType":"uint256","name":"ballotIdx","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"},{"internalType":"uint256","name":"lockAmount","type":"uint256"},{"internalType":"bytes","name":"memo","type":"bytes"},{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"addProposalToRemoveMember","outputs":[{"internalType":"uint256","name":"ballotIdx","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ballotLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkUnfinalized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finalizeEndedVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBallotInVoting","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxStaking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxVotingDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"idx","type":"uint256"}],"name":"getMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"idx","type":"uint256"}],"name":"getMemberFromNodeIdx","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMemberLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinStaking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinVotingDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"idx","type":"uint256"}],"name":"getNode","outputs":[{"internalType":"bytes","name":"name","type":"bytes"},{"internalType":"bytes","name":"enode","type":"bytes"},{"internalType":"bytes","name":"ip","type":"bytes"},{"internalType":"uint256","name":"port","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getNodeIdxFromMember","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNodeLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"idx","type":"uint256"}],"name":"getReward","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"getStakerAddr","outputs":[{"internalType":"address","name":"staker","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"idx","type":"uint256"}],"name":"getVoter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"registry","type":"address"},{"internalType":"uint256","name":"lockAmount","type":"uint256"},{"internalType":"bytes","name":"name","type":"bytes"},{"internalType":"bytes","name":"enode","type":"bytes"},{"internalType":"bytes","name":"ip","type":"bytes"},{"internalType":"uint256","name":"port","type":"uint256"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"registry","type":"address"},{"internalType":"uint256","name":"oldModifiedBlock","type":"uint256"},{"internalType":"address","name":"oldOwner","type":"address"}],"name":"initMigration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"registry","type":"address"},{"internalType":"uint256","name":"lockAmount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"initOnce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isMember","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isStaker","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isVoter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastAddProposalTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"oldGov","type":"address"}],"name":"migrateFromLegacy","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"modifiedBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposal_time_period","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reInit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"indices","type":"uint256[]"},{"internalType":"address[]","name":"newRewards","type":"address[]"}],"name":"reInitV3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reg","outputs":[{"internalType":"contract IRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardIdx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPeriod","type":"uint256"}],"name":"setProposalTimePeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakerIdx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ballotIdx","type":"uint256"},{"internalType":"bool","name":"approval","type":"bool"}],"name":"vote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"voteLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"voterIdx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]); function GovImp_new() { @@ -55,7 +55,7 @@ function GovImp_new() { function GovImp_load(addr) { return GovImp_contract.at(addr); } -var Registry_data = "0x6080604052704d6574616469756d20526567697374727960015534801561002557600080fd5b5061002f33610034565b610084565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6105f8806100936000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806360d6c7cf1161007157806360d6c7cf14610159578063715018a6146101925780637d10dd1b1461019c5780638da5cb5b146101a5578063ec56a373146101b6578063f2fde38b146101df57600080fd5b806304af66ad146100ae5780630d2020dd146100d65780630d854646146101015780633ec50c6c14610118578063599e4c7014610146575b600080fd5b6100c16100bc36600461051a565b6101f2565b60405190151581526020015b60405180910390f35b6100e96100e4366004610501565b610298565b6040516001600160a01b0390911681526020016100cd565b61010a60015481565b6040519081526020016100cd565b6100c161012636600461051a565b600460209081526000928352604080842090915290825290205460ff1681565b6100c1610154366004610546565b6102e8565b6100c161016736600461051a565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61019a61038c565b005b61010a60025481565b6000546001600160a01b03166100e9565b6100e96101c4366004610501565b6003602052600090815260409020546001600160a01b031681565b61019a6101ed3660046104df565b6103a0565b60006101fc610419565b6001600160a01b03821661022b5760405162461bcd60e51b81526004016102229061058b565b60405180910390fd5b60008381526003602090815260409182902080546001600160a01b0319166001600160a01b03861690811790915543600255915133815285917f37724a4a9968ac9654e6ee52f3d0c93e5ef8863e057254ee2e36e8ad3e8429db910160405180910390a350600192915050565b6000818152600360205260408120546001600160a01b03166102cc5760405162461bcd60e51b81526004016102229061058b565b506000908152600360205260409020546001600160a01b031690565b60006102f2610419565b6001600160a01b0383166103185760405162461bcd60e51b81526004016102229061058b565b60008481526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915543600255905190815286917fe9f5231bbfb4b32867755b94562215cff6c8998489de8ba20926f8d0980e7818910160405180910390a35060019392505050565b610394610419565b61039e6000610473565b565b6103a8610419565b6001600160a01b03811661040d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610222565b61041681610473565b50565b6000546001600160a01b0316331461039e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610222565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b03811681146104da57600080fd5b919050565b6000602082840312156104f157600080fd5b6104fa826104c3565b9392505050565b60006020828403121561051357600080fd5b5035919050565b6000806040838503121561052d57600080fd5b8235915061053d602084016104c3565b90509250929050565b60008060006060848603121561055b57600080fd5b8335925061056b602085016104c3565b91506040840135801515811461058057600080fd5b809150509250925092565b6020808252601a908201527f616464726573732073686f756c64206265206e6f6e2d7a65726f00000000000060408201526060019056fea2646970667358221220bc4896787ec950f5ddc5b9289ff65198d7d37b0ef14a355f5cabc2ded82173db64736f6c63430008060033"; +var Registry_data = "0x6080604052704d6574616469756d20526567697374727960015534801561002557600080fd5b5061002f33610034565b610084565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6105f8806100936000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806360d6c7cf1161007157806360d6c7cf14610159578063715018a6146101925780637d10dd1b1461019c5780638da5cb5b146101a5578063ec56a373146101b6578063f2fde38b146101df57600080fd5b806304af66ad146100ae5780630d2020dd146100d65780630d854646146101015780633ec50c6c14610118578063599e4c7014610146575b600080fd5b6100c16100bc36600461051a565b6101f2565b60405190151581526020015b60405180910390f35b6100e96100e4366004610501565b610298565b6040516001600160a01b0390911681526020016100cd565b61010a60015481565b6040519081526020016100cd565b6100c161012636600461051a565b600460209081526000928352604080842090915290825290205460ff1681565b6100c1610154366004610546565b6102e8565b6100c161016736600461051a565b60009182526004602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61019a61038c565b005b61010a60025481565b6000546001600160a01b03166100e9565b6100e96101c4366004610501565b6003602052600090815260409020546001600160a01b031681565b61019a6101ed3660046104df565b6103a0565b60006101fc610419565b6001600160a01b03821661022b5760405162461bcd60e51b81526004016102229061058b565b60405180910390fd5b60008381526003602090815260409182902080546001600160a01b0319166001600160a01b03861690811790915543600255915133815285917f37724a4a9968ac9654e6ee52f3d0c93e5ef8863e057254ee2e36e8ad3e8429db910160405180910390a350600192915050565b6000818152600360205260408120546001600160a01b03166102cc5760405162461bcd60e51b81526004016102229061058b565b506000908152600360205260409020546001600160a01b031690565b60006102f2610419565b6001600160a01b0383166103185760405162461bcd60e51b81526004016102229061058b565b60008481526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915543600255905190815286917fe9f5231bbfb4b32867755b94562215cff6c8998489de8ba20926f8d0980e7818910160405180910390a35060019392505050565b610394610419565b61039e6000610473565b565b6103a8610419565b6001600160a01b03811661040d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610222565b61041681610473565b50565b6000546001600160a01b0316331461039e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610222565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b03811681146104da57600080fd5b919050565b6000602082840312156104f157600080fd5b6104fa826104c3565b9392505050565b60006020828403121561051357600080fd5b5035919050565b6000806040838503121561052d57600080fd5b8235915061053d602084016104c3565b90509250929050565b60008060006060848603121561055b57600080fd5b8335925061056b602085016104c3565b91506040840135801515811461058057600080fd5b809150509250925092565b6020808252601a908201527f616464726573732073686f756c64206265206e6f6e2d7a65726f00000000000060408201526060019056fea2646970667358221220816b9bf87a692138d60891178356267e8c07767b089abb7c497aa8ed7433d68364736f6c63430008060033"; var Registry_contract = web3.eth.contract([{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"setter","type":"address"},{"indexed":true,"internalType":"bytes32","name":"name","type":"bytes32"},{"indexed":true,"internalType":"address","name":"addr","type":"address"}],"name":"SetContractDomain","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_contract","type":"bytes32"},{"indexed":true,"internalType":"address","name":"granted","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"SetPermission","type":"event"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"contracts","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_name","type":"bytes32"}],"name":"getContractAddress","outputs":[{"internalType":"address","name":"addr","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_contract","type":"bytes32"},{"internalType":"address","name":"_granted","type":"address"}],"name":"getPermission","outputs":[{"internalType":"bool","name":"found","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"magic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"modifiedBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"}],"name":"permissions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_name","type":"bytes32"},{"internalType":"address","name":"_addr","type":"address"}],"name":"setContractDomain","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_contract","type":"bytes32"},{"internalType":"address","name":"_granted","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setPermission","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]); function Registry_new() { @@ -74,7 +74,7 @@ function Registry_new() { function Registry_load(addr) { return Registry_contract.at(addr); } -var StakingImp_data = "0x60a06040523060601b608052609b805460ff191690553480156200002257600080fd5b506200002d62000033565b620000f4565b600054610100900460ff1615620000a05760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000f2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60805160601c6133ac6200012f60003960008181610f4601528181610f86015281816110230152818161106301526110f201526133ac6000f3fe60806040526004361061023f5760003560e01c8063738fdd1a1161012e578063a91ee0dc116100ab578063d5c258901161006f578063d5c25890146106f0578063f1b8aa1d14610705578063f2fde38b14610725578063f3f6308014610745578063f69318221461076557600080fd5b8063a91ee0dc14610680578063b6549f75146106a0578063bac4f338146106b5578063c0d91eaf146106c8578063d0e30db0146106e857600080fd5b80637f2f4c06116100f25780637f2f4c06146105de578063884d97a7146105fe5780638da5cb5b1461061e5780639667e76a1461063c5780639986e4b91461065c57600080fd5b8063738fdd1a146105255780637756c9081461055d5780637bf465301461057d5780637d77a0eb1461059e5780637eee288d146105be57600080fd5b806334125c84116101bc578063593557361161018057806359355736146104575780635a731cca1461048d5780636c78d2cf146104b157806370a08231146104da578063715018a61461051057600080fd5b806334125c84146103cd5780633659cfe6146103ed5780634bd1ed761461040d5780634f1ef2861461042f57806352d1902d1461044257600080fd5b8063282d3fdf11610203578063282d3fdf146103295780632b0b9c5e146103495780632bc9ed02146103695780632e1a7d4d1461038c5780632f40992e146103ac57600080fd5b80631285361514610262578063193468ac146102955780631caf00c0146102cb5780631e0cba0d146102eb57806325d998bb1461030957600080fd5b3661025d576033546001600160a01b0316331461025b57600080fd5b005b600080fd5b34801561026e57600080fd5b5061028261027d366004612d5a565b610785565b6040519081526020015b60405180910390f35b3480156102a157600080fd5b506102826102b0366004612d20565b6001600160a01b0316600090815260ce602052604090205490565b3480156102d757600080fd5b5061025b6102e6366004612d93565b6107b2565b3480156102f757600080fd5b50610282665374616b696e6760c81b81565b34801561031557600080fd5b50610282610324366004612d20565b610b53565b34801561033557600080fd5b5061025b610344366004612ea2565b610b81565b34801561035557600080fd5b50610282610364366004612d20565b610bbe565b34801561037557600080fd5b50609b5460ff16604051901515815260200161028c565b34801561039857600080fd5b5061025b6103a7366004612f40565b610c1a565b3480156103b857600080fd5b506102826914995dd85c99141bdbdb60b21b81565b3480156103d957600080fd5b506102826845636f73797374656d60b81b81565b3480156103f957600080fd5b5061025b610408366004612d20565b610f3b565b34801561041957600080fd5b506102826a4d61696e74656e616e636560a81b81565b61025b61043d366004612dde565b611018565b34801561044e57600080fd5b506102826110e5565b34801561046357600080fd5b50610282610472366004612d20565b6001600160a01b031660009081526099602052604090205490565b34801561049957600080fd5b506102826c14dd185ada5b99d4995dd85c99609a1b81565b3480156104bd57600080fd5b506102827111dbdd995c9b985b98d950dbdb9d1c9858dd60721b81565b3480156104e657600080fd5b506102826104f5366004612d20565b6001600160a01b031660009081526098602052604090205490565b34801561051c57600080fd5b5061025b611198565b34801561053157600080fd5b50606554610545906001600160a01b031681565b6040516001600160a01b03909116815260200161028c565b34801561056957600080fd5b5061025b610578366004612ea2565b6111ac565b34801561058957600080fd5b5061028269456e7653746f7261676560b01b81565b3480156105aa57600080fd5b506102826105b9366004612ece565b6112d5565b3480156105ca57600080fd5b5061025b6105d9366004612ea2565b611349565b3480156105ea57600080fd5b5061025b6105f9366004612d20565b611382565b34801561060a57600080fd5b50610282610619366004612d20565b611402565b34801561062a57600080fd5b506033546001600160a01b0316610545565b34801561064857600080fd5b5061025b610657366004612f40565b61140f565b34801561066857600080fd5b506102826c42616c6c6f7453746f7261676560981b81565b34801561068c57600080fd5b5061025b61069b366004612d20565b61152e565b3480156106ac57600080fd5b5061025b6115d6565b61025b6106c3366004612d20565b6116e0565b3480156106d457600080fd5b5061025b6106e3366004612dde565b611ae2565b61025b611c46565b3480156106fc57600080fd5b50609a54610282565b34801561071157600080fd5b5060cf54610545906001600160a01b031681565b34801561073157600080fd5b5061025b610740366004612d20565b611f26565b34801561075157600080fd5b5061025b610760366004612d20565b611f9c565b34801561077157600080fd5b5061025b610780366004612ea2565b611fbc565b6001600160a01b03808316600090815260cd60209081526040808320938516835292905220545b92915050565b600054610100900460ff16158080156107d25750600054600160ff909116105b806107ec5750303b1580156107ec575060005460ff166001145b6108115760405162461bcd60e51b8152600401610808906130d9565b60405180910390fd5b6000805460ff191660011790558015610834576000805461ff0019166101001790555b6001600160a01b0384161580159061085457506001600160a01b03831615155b801561086857506001600160a01b03821615155b6108b45760405162461bcd60e51b815260206004820152601b60248201527f6164647265737320697320746865207a65726f206164647265737300000000006044820152606401610808565b6000609a556108c16123c1565b6108c96123f0565b6108d28461152e565b828260015b826001600160a01b031663d965ea006040518163ffffffff1660e01b815260040160206040518083038186803b15801561091057600080fd5b505afa158015610924573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109489190612f27565b8111610b045760405163ab3545e560e01b8152600481018290526000906001600160a01b0385169063ab3545e59060240160206040518083038186803b15801561099157600080fd5b505afa1580156109a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c99190612d3d565b6040516370a0823160e01b81526001600160a01b0380831660048301529192506000918516906370a082319060240160206040518083038186803b158015610a1057600080fd5b505afa158015610a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a489190612f27565b604051632c9aab9b60e11b81526001600160a01b03848116600483015291925060009186169063593557369060240160206040518083038186803b158015610a8f57600080fd5b505afa158015610aa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac79190612f27565b6001600160a01b03909316600090815260986020908152604080832094909455609990529190912082905550609a805490910190556001016108d7565b5050508015610b4d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03811660009081526099602090815260408083205460989092528220546107ac91906132ab565b33610b8a61241f565b6001600160a01b031614610bb05760405162461bcd60e51b815260040161080890613127565b610bba8282612444565b5050565b6001600160a01b038116600090815260ce60209081526040808320546099909252822054811580610bed575080155b15610bfc575060009392505050565b80610c0883606461328c565b610c12919061326a565b949350505050565b610c226126a2565b609b5460ff1615610c455760405162461bcd60e51b8152600401610808906131a2565b60008111610c655760405162461bcd60e51b8152600401610808906131c6565b6000610c6f6126fc565b6001600160a01b031663076cd77f6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ca757600080fd5b505afa158015610cbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdf9190612f27565b90506000610ced8383613252565b33600090815260ce6020908152604080832054609990925290912054610d1391906132ab565b10610d2657610d223384612714565b5060015b610d2f33610b53565b831115610d4e5760405162461bcd60e51b81526004016108089061314e565b33600090815260986020526040902054610d699084906132ab565b3360009081526098602052604090205560cf546001600160a01b031615801590610d905750805b15610ea25760cf546040516000916001600160a01b03169085908381818185875af1925050503d8060008114610de2576040519150601f19603f3d011682016040523d82523d6000602084013e610de7565b606091505b5050905080610e385760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657220746f204e4350207374616b696e67206661696c656400006044820152606401610808565b60cf546040516306aa67f960e01b8152600481018690523360248201526001600160a01b03909116906306aa67f990604401600060405180830381600087803b158015610e8457600080fd5b505af1158015610e98573d6000803e3d6000fd5b5050505050610ed1565b604051339084156108fc029085906000818181858888f19350505050158015610ecf573d6000803e3d6000fd5b505b336000818152609860205260409020547f204fccf0d92ed8d48f204adb39b2e81e92bad0dedb93f5716ca9478cfb57de00908590610f0e84610b53565b6040805193845260208401929092529082015260600160405180910390a25050610f386001606655565b50565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610f845760405162461bcd60e51b815260040161080890612ff7565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610fcd600080516020613330833981519152546001600160a01b031690565b6001600160a01b031614610ff35760405162461bcd60e51b815260040161080890613043565b610ffc816127d3565b60408051600080825260208201909252610f38918391906127db565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156110615760405162461bcd60e51b815260040161080890612ff7565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166110aa600080516020613330833981519152546001600160a01b031690565b6001600160a01b0316146110d05760405162461bcd60e51b815260040161080890613043565b6110d9826127d3565b610bba828260016127db565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111855760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610808565b5060008051602061333083398151915290565b6111a0612955565b6111aa60006129af565b565b336111b561241f565b6001600160a01b0316146111db5760405162461bcd60e51b815260040161080890613127565b806111e4575050565b6111ee8282611349565b6001600160a01b0382166000908152609860205260409020546112129082906132ab565b6001600160a01b038316600090815260986020526040812091909155611236612a01565b6001600160a01b03811660009081526098602052604090205490915061125d908390613252565b6001600160a01b0380831660009081526098602052604080822093909355908516808252919020547f2caed32a519a1fd89486d3ffe06202febb5ed51534d571dbab93058545a29e249084906112b287610b53565b6040805193845260208401929092529082015260600160405180910390a2505050565b6001600160a01b03821660009081526099602052604081205415806112fe575063ffffffff8216155b1561130b575060006107ac565b609a546001600160a01b0384166000908152609960205260409020546113389063ffffffff85169061328c565b611342919061326a565b9392505050565b3361135261241f565b6001600160a01b0316146113785760405162461bcd60e51b815260040161080890613127565b610bba8282612714565b61138a612955565b6001600160a01b0381166113e05760405162461bcd60e51b815260206004820152601e60248201527f4e43505374616b696e6720697320746865207a65726f206164647265737300006044820152606401610808565b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b60006107ac8260646112d5565b61141761241f565b604051636f1e853360e01b81523360048201526001600160a01b039190911690636f1e85339060240160206040518083038186803b15801561145857600080fd5b505afa15801561146c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114909190612f05565b6114ac5760405162461bcd60e51b815260040161080890613127565b6114b63382612444565b60cf546001600160a01b031615610f385760cf546040516301008e9960e61b8152600481018390523360248201526001600160a01b0390911690634023a64090604401600060405180830381600087803b15801561151357600080fd5b505af1158015611527573d6000803e3d6000fd5b5050505050565b611536612955565b6001600160a01b03811661158c5760405162461bcd60e51b815260206004820152601a60248201527f416464726573732073686f756c64206265206e6f6e2d7a65726f0000000000006044820152606401610808565b606580546001600160a01b0319166001600160a01b0383169081179091556040517f278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd90600090a250565b6115de612955565b609b5460ff16156116015760405162461bcd60e51b8152600401610808906131a2565b60006116156033546001600160a01b031690565b905047806116535760405162461bcd60e51b815260206004820152600b60248201526a062616c616e6365203d20360ac1b6044820152606401610808565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611689573d6000803e3d6000fd5b50609b805460ff191660011790556040516001600160a01b038316907f713b90881ad62c4fa8ab6bd9197fa86481fc0c11b2edba60026514281b2dbac4906116d49084815260200190565b60405180910390a25050565b6116e86126a2565b609b5460ff161561170b5760405162461bcd60e51b8152600401610808906131a2565b60cf546001600160a01b031633146117355760405162461bcd60e51b815260040161080890612fa8565b600034116117555760405162461bcd60e51b81526004016108089061308f565b61175d61241f565b60405163288c314960e21b81526001600160a01b038381166004830152919091169063a230c5249060240160206040518083038186803b1580156117a057600080fd5b505afa1580156117b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d89190612f05565b61181d5760405162461bcd60e51b81526020600482015260166024820152752721a81039b437bab63210313290309036b2b6b132b960511b6044820152606401610808565b6001600160a01b0381166000908152609860205260409020543490611843908290613252565b6001600160a01b0383166000908152609860205260408120919091556118676126fc565b6001600160a01b031663076cd77f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561189f57600080fd5b505afa1580156118b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d79190612f27565b905060006118e36126fc565b6001600160a01b031663737c59b86040518163ffffffff1660e01b815260040160206040518083038186803b15801561191b57600080fd5b505afa15801561192f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119539190612f27565b6001600160a01b03851660009081526099602052604090205490915082118015906119a257506001600160a01b038416600090815260996020526040902054819061199f908590613252565b11155b6119ee5760405162461bcd60e51b815260206004820152601f60248201527f757365722073686f756c6420626520696e207374616b696e672072616e6765006044820152606401610808565b6119f88484612444565b6001600160a01b038416600090815260cd60209081526040808320338452909152902054611a27908490613252565b6001600160a01b038516600081815260cd6020908152604080832033845282528083209490945591815260ce9091522054611a63908490613252565b6001600160a01b038516600081815260ce6020908152604080832085905560cd825280832033808552908352928190205481518981529283019590955281019390935290917f74cfc20f0e6d14384c3a60820d3e814f6979d009cdbb43db27fa56fe475172fd9060600160405180910390a3505050610f386001606655565b600054610100900460ff1615808015611b025750600054600160ff909116105b80611b1c5750303b158015611b1c575060005460ff166001145b611b385760405162461bcd60e51b8152600401610808906130d9565b6000805460ff191660011790558015611b5b576000805461ff0019166101001790555b6000609a55611b686123c1565b611b706123f0565b611b798361152e565b8151611b8457611bfb565b600080600080602086019150855182611b9d9190613252565b90505b80821015611bf65781519350611bb7602083613252565b9150808210611bc557600080fd5b81519250611bd4602083613252565b6001600160a01b03851660009081526098602052604090208490559150611ba0565b505050505b8015611c41576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b611c4e6126a2565b609b5460ff1615611c715760405162461bcd60e51b8152600401610808906131a2565b60003411611c915760405162461bcd60e51b81526004016108089061308f565b33600090815260986020526040902054611cac903490613252565b33600090815260986020526040902055611cc461241f565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c5249060240160206040518083038186803b158015611d0557600080fd5b505afa158015611d19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3d9190612f05565b15611ec1576000611d4c6126fc565b6001600160a01b031663076cd77f6040518163ffffffff1660e01b815260040160206040518083038186803b158015611d8457600080fd5b505afa158015611d98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbc9190612f27565b3360009081526099602052604090205490915081118015611dfe575033600090815260996020526040902054611df290826132ab565b611dfb33610b53565b10155b15611ebf5733600081815260996020526040902054611e279190611e2290846132ab565b612444565b60cf546001600160a01b031615611ebf5760cf54336000908152609960205260409020546001600160a01b0390911690634023a64090611e6790846132ab565b6040516001600160e01b031960e084901b1681526004810191909152336024820152604401600060405180830381600087803b158015611ea657600080fd5b505af1158015611eba573d6000803e3d6000fd5b505050505b505b336000818152609860205260409020547fb4caaf29adda3eefee3ad552a8e85058589bf834c7466cae4ee58787f70589ed903490611efe84610b53565b6040805193845260208401929092529082015260600160405180910390a26111aa6001606655565b611f2e612955565b6001600160a01b038116611f935760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610808565b610f38816129af565b611fa4612955565b6001600160a01b03811615610f3857610ffc816127d3565b611fc46126a2565b609b5460ff1615611fe75760405162461bcd60e51b8152600401610808906131a2565b60cf546001600160a01b031633146120115760405162461bcd60e51b815260040161080890612fa8565b600081116120315760405162461bcd60e51b8152600401610808906131c6565b61203961241f565b60405163288c314960e21b81526001600160a01b038481166004830152919091169063a230c5249060240160206040518083038186803b15801561207c57600080fd5b505afa158015612090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b49190612f05565b6120f95760405162461bcd60e51b81526020600482015260166024820152752721a81039b437bab63210313290309036b2b6b132b960511b6044820152606401610808565b8060006121046126fc565b6001600160a01b031663076cd77f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561213c57600080fd5b505afa158015612150573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121749190612f27565b6001600160a01b038516600090815260cd6020908152604080832033845290915290205490915082118015906121d3575080826121c6866001600160a01b031660009081526099602052604090205490565b6121d091906132ab565b10155b6121ef5760405162461bcd60e51b81526004016108089061314e565b6121f98483612714565b6001600160a01b03841660009081526098602052604090205461221d9083906132ab565b6001600160a01b03851660009081526098602090815260408083209390935560cd8152828220338352905220546122559083906132ab565b6001600160a01b038516600081815260cd6020908152604080832033845282528083209490945591815260ce90915220546122919083906132ab565b6001600160a01b03858116600090815260ce60205260408082209390935560cf54925190929091169084908381818185875af1925050503d80600081146122f4576040519150601f19603f3d011682016040523d82523d6000602084013e6122f9565b606091505b505090508061234a5760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657220746f204e4350207374616b696e67206661696c656400006044820152606401610808565b6001600160a01b038516600081815260ce602090815260408083205460cd835281842033808652908452938290205482518981529384019190915282820152517f03d2bb70c6ccc49d68a465a06edffb976961cf8930888658ca2339fa62b8bda29181900360600190a3505050610bba6001606655565b600054610100900460ff166123e85760405162461bcd60e51b815260040161080890613207565b6111aa612a18565b600054610100900460ff166124175760405162461bcd60e51b815260040161080890613207565b6111aa612a3f565b600061243f7111dbdd995c9b985b98d950dbdb9d1c9858dd60721b612a6f565b905090565b8061244d575050565b6001600160a01b0382166000908152609860205260409020548111156124ce5760405162461bcd60e51b815260206004820152603060248201527f4c6f636b20616d6f756e742073686f756c6420626520657175616c206f72206c60448201526f657373207468616e2062616c616e636560801b6064820152608401610808565b806124d883610b53565b10156125365760405162461bcd60e51b815260206004820152602760248201527f496e73756666696369656e742062616c616e636520746861742063616e206265604482015266081b1bd8dad95960ca1b6064820152608401610808565b60006125406126fc565b6001600160a01b031663737c59b86040518163ffffffff1660e01b815260040160206040518083038186803b15801561257857600080fd5b505afa15801561258c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b09190612f27565b6001600160a01b0384166000908152609960205260409020549091506125d7908390613252565b6001600160a01b038416600090815260996020526040902081905581101561264b5760405162461bcd60e51b815260206004820152602160248201527f4c6f636b65642062616c616e6365206973206c6172676572207468616e206d616044820152600f60fb1b6064820152608401610808565b81609a546126599190613252565b609a556001600160a01b0383166000818152609860205260409020547f44cebfefa4561bee5b61d675ccfd8dc9969fff9cc15e7a4eccccd62af94f9c119084906112b287610b53565b600260665414156126f55760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610808565b6002606655565b600061243f69456e7653746f7261676560b01b612a6f565b8061271d575050565b6001600160a01b0382166000908152609960205260409020546127419082906132ab565b6001600160a01b038316600090815260996020526040902055609a546127689082906132ab565b609a556001600160a01b0382166000818152609860205260409020547f5245d528087a96a64f4589a764f00061e4671eab90cb1e019b1a5b24b2e4c2a89083906127b186610b53565b604080519384526020840192909252908201526060016116d4565b6001606655565b610f38612955565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561280e57611c4183612aec565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561284757600080fd5b505afa925050508015612877575060408051601f3d908101601f1916820190925261287491810190612f27565b60015b6128da5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610808565b60008051602061333083398151915281146129495760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610808565b50611c41838383612b88565b6033546001600160a01b031633146111aa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610808565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600061243f6845636f73797374656d60b81b612a6f565b600054610100900460ff166127cc5760405162461bcd60e51b815260040161080890613207565b600054610100900460ff16612a665760405162461bcd60e51b815260040161080890613207565b6111aa336129af565b606554604051630d2020dd60e01b8152600481018390526000916001600160a01b031690630d2020dd9060240160206040518083038186803b158015612ab457600080fd5b505afa158015612ac8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ac9190612d3d565b6001600160a01b0381163b612b595760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610808565b60008051602061333083398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b612b9183612bad565b600082511180612b9e5750805b15611c4157610b4d8383612bed565b612bb681612aec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606113428383604051806060016040528060278152602001613350602791396060600080856001600160a01b031685604051612c2a9190612f59565b600060405180830381855af49150503d8060008114612c65576040519150601f19603f3d011682016040523d82523d6000602084013e612c6a565b606091505b5091509150612c7b86838387612c85565b9695505050505050565b60608315612cf1578251612cea576001600160a01b0385163b612cea5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610808565b5081610c12565b610c128383815115612d065781518083602001fd5b8060405162461bcd60e51b81526004016108089190612f75565b600060208284031215612d3257600080fd5b81356113428161331a565b600060208284031215612d4f57600080fd5b81516113428161331a565b60008060408385031215612d6d57600080fd5b8235612d788161331a565b91506020830135612d888161331a565b809150509250929050565b600080600060608486031215612da857600080fd5b8335612db38161331a565b92506020840135612dc38161331a565b91506040840135612dd38161331a565b809150509250925092565b60008060408385031215612df157600080fd5b8235612dfc8161331a565b9150602083013567ffffffffffffffff80821115612e1957600080fd5b818501915085601f830112612e2d57600080fd5b813581811115612e3f57612e3f613304565b604051601f8201601f19908116603f01168101908382118183101715612e6757612e67613304565b81604052828152886020848701011115612e8057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60008060408385031215612eb557600080fd5b8235612ec08161331a565b946020939093013593505050565b60008060408385031215612ee157600080fd5b8235612eec8161331a565b9150602083013563ffffffff81168114612d8857600080fd5b600060208284031215612f1757600080fd5b8151801515811461134257600080fd5b600060208284031215612f3957600080fd5b5051919050565b600060208284031215612f5257600080fd5b5035919050565b60008251612f6b8184602087016132c2565b9190910192915050565b6020815260008251806020840152612f948160408501602087016132c2565b601f01601f19169190910160400192915050565b6020808252602f908201527f4f6e6c79204e43505374616b696e6720636f6e74726163742063616e2063616c60408201526e36103a3434b990333ab731ba34b7b760891b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252602a908201527f4465706f73697420616d6f756e742073686f756c642062652067726561746572604082015269207468616e207a65726f60b01b606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252600d908201526c2737902832b936b4b9b9b4b7b760991b604082015260600190565b60208082526034908201527f576974686472617720616d6f756e742073686f756c6420626520657175616c206040820152736f72206c657373207468616e2062616c616e636560601b606082015260800190565b6020808252600a9082015269125cc81c995d9bdad95960b21b604082015260600190565b60208082526021908201527f416d6f756e742073686f756c6420626520626967676572207468616e207a65726040820152606f60f81b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008219821115613265576132656132ee565b500190565b60008261328757634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156132a6576132a66132ee565b500290565b6000828210156132bd576132bd6132ee565b500390565b60005b838110156132dd5781810151838201526020016132c5565b83811115610b4d5750506000910152565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610f3857600080fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220079e3b7f70caa0bc98792da6662651d1b0e5319755960b2c629dbbc050dbe40e64736f6c63430008060033"; +var StakingImp_data = "0x60a06040523060601b608052609b805460ff191690553480156200002257600080fd5b506200002d62000033565b620000f4565b600054610100900460ff1615620000a05760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000f2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60805160601c6133ac6200012f60003960008181610f4601528181610f86015281816110230152818161106301526110f201526133ac6000f3fe60806040526004361061023f5760003560e01c8063738fdd1a1161012e578063a91ee0dc116100ab578063d5c258901161006f578063d5c25890146106f0578063f1b8aa1d14610705578063f2fde38b14610725578063f3f6308014610745578063f69318221461076557600080fd5b8063a91ee0dc14610680578063b6549f75146106a0578063bac4f338146106b5578063c0d91eaf146106c8578063d0e30db0146106e857600080fd5b80637f2f4c06116100f25780637f2f4c06146105de578063884d97a7146105fe5780638da5cb5b1461061e5780639667e76a1461063c5780639986e4b91461065c57600080fd5b8063738fdd1a146105255780637756c9081461055d5780637bf465301461057d5780637d77a0eb1461059e5780637eee288d146105be57600080fd5b806334125c84116101bc578063593557361161018057806359355736146104575780635a731cca1461048d5780636c78d2cf146104b157806370a08231146104da578063715018a61461051057600080fd5b806334125c84146103cd5780633659cfe6146103ed5780634bd1ed761461040d5780634f1ef2861461042f57806352d1902d1461044257600080fd5b8063282d3fdf11610203578063282d3fdf146103295780632b0b9c5e146103495780632bc9ed02146103695780632e1a7d4d1461038c5780632f40992e146103ac57600080fd5b80631285361514610262578063193468ac146102955780631caf00c0146102cb5780631e0cba0d146102eb57806325d998bb1461030957600080fd5b3661025d576033546001600160a01b0316331461025b57600080fd5b005b600080fd5b34801561026e57600080fd5b5061028261027d366004612d5a565b610785565b6040519081526020015b60405180910390f35b3480156102a157600080fd5b506102826102b0366004612d20565b6001600160a01b0316600090815260ce602052604090205490565b3480156102d757600080fd5b5061025b6102e6366004612d93565b6107b2565b3480156102f757600080fd5b50610282665374616b696e6760c81b81565b34801561031557600080fd5b50610282610324366004612d20565b610b53565b34801561033557600080fd5b5061025b610344366004612ea2565b610b81565b34801561035557600080fd5b50610282610364366004612d20565b610bbe565b34801561037557600080fd5b50609b5460ff16604051901515815260200161028c565b34801561039857600080fd5b5061025b6103a7366004612f40565b610c1a565b3480156103b857600080fd5b506102826914995dd85c99141bdbdb60b21b81565b3480156103d957600080fd5b506102826845636f73797374656d60b81b81565b3480156103f957600080fd5b5061025b610408366004612d20565b610f3b565b34801561041957600080fd5b506102826a4d61696e74656e616e636560a81b81565b61025b61043d366004612dde565b611018565b34801561044e57600080fd5b506102826110e5565b34801561046357600080fd5b50610282610472366004612d20565b6001600160a01b031660009081526099602052604090205490565b34801561049957600080fd5b506102826c14dd185ada5b99d4995dd85c99609a1b81565b3480156104bd57600080fd5b506102827111dbdd995c9b985b98d950dbdb9d1c9858dd60721b81565b3480156104e657600080fd5b506102826104f5366004612d20565b6001600160a01b031660009081526098602052604090205490565b34801561051c57600080fd5b5061025b611198565b34801561053157600080fd5b50606554610545906001600160a01b031681565b6040516001600160a01b03909116815260200161028c565b34801561056957600080fd5b5061025b610578366004612ea2565b6111ac565b34801561058957600080fd5b5061028269456e7653746f7261676560b01b81565b3480156105aa57600080fd5b506102826105b9366004612ece565b6112d5565b3480156105ca57600080fd5b5061025b6105d9366004612ea2565b611349565b3480156105ea57600080fd5b5061025b6105f9366004612d20565b611382565b34801561060a57600080fd5b50610282610619366004612d20565b611402565b34801561062a57600080fd5b506033546001600160a01b0316610545565b34801561064857600080fd5b5061025b610657366004612f40565b61140f565b34801561066857600080fd5b506102826c42616c6c6f7453746f7261676560981b81565b34801561068c57600080fd5b5061025b61069b366004612d20565b61152e565b3480156106ac57600080fd5b5061025b6115d6565b61025b6106c3366004612d20565b6116e0565b3480156106d457600080fd5b5061025b6106e3366004612dde565b611ae2565b61025b611c46565b3480156106fc57600080fd5b50609a54610282565b34801561071157600080fd5b5060cf54610545906001600160a01b031681565b34801561073157600080fd5b5061025b610740366004612d20565b611f26565b34801561075157600080fd5b5061025b610760366004612d20565b611f9c565b34801561077157600080fd5b5061025b610780366004612ea2565b611fbc565b6001600160a01b03808316600090815260cd60209081526040808320938516835292905220545b92915050565b600054610100900460ff16158080156107d25750600054600160ff909116105b806107ec5750303b1580156107ec575060005460ff166001145b6108115760405162461bcd60e51b8152600401610808906130d9565b60405180910390fd5b6000805460ff191660011790558015610834576000805461ff0019166101001790555b6001600160a01b0384161580159061085457506001600160a01b03831615155b801561086857506001600160a01b03821615155b6108b45760405162461bcd60e51b815260206004820152601b60248201527f6164647265737320697320746865207a65726f206164647265737300000000006044820152606401610808565b6000609a556108c16123c1565b6108c96123f0565b6108d28461152e565b828260015b826001600160a01b031663d965ea006040518163ffffffff1660e01b815260040160206040518083038186803b15801561091057600080fd5b505afa158015610924573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109489190612f27565b8111610b045760405163ab3545e560e01b8152600481018290526000906001600160a01b0385169063ab3545e59060240160206040518083038186803b15801561099157600080fd5b505afa1580156109a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c99190612d3d565b6040516370a0823160e01b81526001600160a01b0380831660048301529192506000918516906370a082319060240160206040518083038186803b158015610a1057600080fd5b505afa158015610a24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a489190612f27565b604051632c9aab9b60e11b81526001600160a01b03848116600483015291925060009186169063593557369060240160206040518083038186803b158015610a8f57600080fd5b505afa158015610aa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac79190612f27565b6001600160a01b03909316600090815260986020908152604080832094909455609990529190912082905550609a805490910190556001016108d7565b5050508015610b4d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03811660009081526099602090815260408083205460989092528220546107ac91906132ab565b33610b8a61241f565b6001600160a01b031614610bb05760405162461bcd60e51b815260040161080890613127565b610bba8282612444565b5050565b6001600160a01b038116600090815260ce60209081526040808320546099909252822054811580610bed575080155b15610bfc575060009392505050565b80610c0883606461328c565b610c12919061326a565b949350505050565b610c226126a2565b609b5460ff1615610c455760405162461bcd60e51b8152600401610808906131a2565b60008111610c655760405162461bcd60e51b8152600401610808906131c6565b6000610c6f6126fc565b6001600160a01b031663076cd77f6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ca757600080fd5b505afa158015610cbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdf9190612f27565b90506000610ced8383613252565b33600090815260ce6020908152604080832054609990925290912054610d1391906132ab565b10610d2657610d223384612714565b5060015b610d2f33610b53565b831115610d4e5760405162461bcd60e51b81526004016108089061314e565b33600090815260986020526040902054610d699084906132ab565b3360009081526098602052604090205560cf546001600160a01b031615801590610d905750805b15610ea25760cf546040516000916001600160a01b03169085908381818185875af1925050503d8060008114610de2576040519150601f19603f3d011682016040523d82523d6000602084013e610de7565b606091505b5050905080610e385760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657220746f204e4350207374616b696e67206661696c656400006044820152606401610808565b60cf546040516306aa67f960e01b8152600481018690523360248201526001600160a01b03909116906306aa67f990604401600060405180830381600087803b158015610e8457600080fd5b505af1158015610e98573d6000803e3d6000fd5b5050505050610ed1565b604051339084156108fc029085906000818181858888f19350505050158015610ecf573d6000803e3d6000fd5b505b336000818152609860205260409020547f204fccf0d92ed8d48f204adb39b2e81e92bad0dedb93f5716ca9478cfb57de00908590610f0e84610b53565b6040805193845260208401929092529082015260600160405180910390a25050610f386001606655565b50565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610f845760405162461bcd60e51b815260040161080890612ff7565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610fcd600080516020613330833981519152546001600160a01b031690565b6001600160a01b031614610ff35760405162461bcd60e51b815260040161080890613043565b610ffc816127d3565b60408051600080825260208201909252610f38918391906127db565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156110615760405162461bcd60e51b815260040161080890612ff7565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166110aa600080516020613330833981519152546001600160a01b031690565b6001600160a01b0316146110d05760405162461bcd60e51b815260040161080890613043565b6110d9826127d3565b610bba828260016127db565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111855760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610808565b5060008051602061333083398151915290565b6111a0612955565b6111aa60006129af565b565b336111b561241f565b6001600160a01b0316146111db5760405162461bcd60e51b815260040161080890613127565b806111e4575050565b6111ee8282611349565b6001600160a01b0382166000908152609860205260409020546112129082906132ab565b6001600160a01b038316600090815260986020526040812091909155611236612a01565b6001600160a01b03811660009081526098602052604090205490915061125d908390613252565b6001600160a01b0380831660009081526098602052604080822093909355908516808252919020547f2caed32a519a1fd89486d3ffe06202febb5ed51534d571dbab93058545a29e249084906112b287610b53565b6040805193845260208401929092529082015260600160405180910390a2505050565b6001600160a01b03821660009081526099602052604081205415806112fe575063ffffffff8216155b1561130b575060006107ac565b609a546001600160a01b0384166000908152609960205260409020546113389063ffffffff85169061328c565b611342919061326a565b9392505050565b3361135261241f565b6001600160a01b0316146113785760405162461bcd60e51b815260040161080890613127565b610bba8282612714565b61138a612955565b6001600160a01b0381166113e05760405162461bcd60e51b815260206004820152601e60248201527f4e43505374616b696e6720697320746865207a65726f206164647265737300006044820152606401610808565b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b60006107ac8260646112d5565b61141761241f565b604051636f1e853360e01b81523360048201526001600160a01b039190911690636f1e85339060240160206040518083038186803b15801561145857600080fd5b505afa15801561146c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114909190612f05565b6114ac5760405162461bcd60e51b815260040161080890613127565b6114b63382612444565b60cf546001600160a01b031615610f385760cf546040516301008e9960e61b8152600481018390523360248201526001600160a01b0390911690634023a64090604401600060405180830381600087803b15801561151357600080fd5b505af1158015611527573d6000803e3d6000fd5b5050505050565b611536612955565b6001600160a01b03811661158c5760405162461bcd60e51b815260206004820152601a60248201527f416464726573732073686f756c64206265206e6f6e2d7a65726f0000000000006044820152606401610808565b606580546001600160a01b0319166001600160a01b0383169081179091556040517f278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd90600090a250565b6115de612955565b609b5460ff16156116015760405162461bcd60e51b8152600401610808906131a2565b60006116156033546001600160a01b031690565b905047806116535760405162461bcd60e51b815260206004820152600b60248201526a062616c616e6365203d20360ac1b6044820152606401610808565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611689573d6000803e3d6000fd5b50609b805460ff191660011790556040516001600160a01b038316907f713b90881ad62c4fa8ab6bd9197fa86481fc0c11b2edba60026514281b2dbac4906116d49084815260200190565b60405180910390a25050565b6116e86126a2565b609b5460ff161561170b5760405162461bcd60e51b8152600401610808906131a2565b60cf546001600160a01b031633146117355760405162461bcd60e51b815260040161080890612fa8565b600034116117555760405162461bcd60e51b81526004016108089061308f565b61175d61241f565b60405163288c314960e21b81526001600160a01b038381166004830152919091169063a230c5249060240160206040518083038186803b1580156117a057600080fd5b505afa1580156117b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d89190612f05565b61181d5760405162461bcd60e51b81526020600482015260166024820152752721a81039b437bab63210313290309036b2b6b132b960511b6044820152606401610808565b6001600160a01b0381166000908152609860205260409020543490611843908290613252565b6001600160a01b0383166000908152609860205260408120919091556118676126fc565b6001600160a01b031663076cd77f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561189f57600080fd5b505afa1580156118b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d79190612f27565b905060006118e36126fc565b6001600160a01b031663737c59b86040518163ffffffff1660e01b815260040160206040518083038186803b15801561191b57600080fd5b505afa15801561192f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119539190612f27565b6001600160a01b03851660009081526099602052604090205490915082118015906119a257506001600160a01b038416600090815260996020526040902054819061199f908590613252565b11155b6119ee5760405162461bcd60e51b815260206004820152601f60248201527f757365722073686f756c6420626520696e207374616b696e672072616e6765006044820152606401610808565b6119f88484612444565b6001600160a01b038416600090815260cd60209081526040808320338452909152902054611a27908490613252565b6001600160a01b038516600081815260cd6020908152604080832033845282528083209490945591815260ce9091522054611a63908490613252565b6001600160a01b038516600081815260ce6020908152604080832085905560cd825280832033808552908352928190205481518981529283019590955281019390935290917f74cfc20f0e6d14384c3a60820d3e814f6979d009cdbb43db27fa56fe475172fd9060600160405180910390a3505050610f386001606655565b600054610100900460ff1615808015611b025750600054600160ff909116105b80611b1c5750303b158015611b1c575060005460ff166001145b611b385760405162461bcd60e51b8152600401610808906130d9565b6000805460ff191660011790558015611b5b576000805461ff0019166101001790555b6000609a55611b686123c1565b611b706123f0565b611b798361152e565b8151611b8457611bfb565b600080600080602086019150855182611b9d9190613252565b90505b80821015611bf65781519350611bb7602083613252565b9150808210611bc557600080fd5b81519250611bd4602083613252565b6001600160a01b03851660009081526098602052604090208490559150611ba0565b505050505b8015611c41576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b611c4e6126a2565b609b5460ff1615611c715760405162461bcd60e51b8152600401610808906131a2565b60003411611c915760405162461bcd60e51b81526004016108089061308f565b33600090815260986020526040902054611cac903490613252565b33600090815260986020526040902055611cc461241f565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c5249060240160206040518083038186803b158015611d0557600080fd5b505afa158015611d19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d3d9190612f05565b15611ec1576000611d4c6126fc565b6001600160a01b031663076cd77f6040518163ffffffff1660e01b815260040160206040518083038186803b158015611d8457600080fd5b505afa158015611d98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbc9190612f27565b3360009081526099602052604090205490915081118015611dfe575033600090815260996020526040902054611df290826132ab565b611dfb33610b53565b10155b15611ebf5733600081815260996020526040902054611e279190611e2290846132ab565b612444565b60cf546001600160a01b031615611ebf5760cf54336000908152609960205260409020546001600160a01b0390911690634023a64090611e6790846132ab565b6040516001600160e01b031960e084901b1681526004810191909152336024820152604401600060405180830381600087803b158015611ea657600080fd5b505af1158015611eba573d6000803e3d6000fd5b505050505b505b336000818152609860205260409020547fb4caaf29adda3eefee3ad552a8e85058589bf834c7466cae4ee58787f70589ed903490611efe84610b53565b6040805193845260208401929092529082015260600160405180910390a26111aa6001606655565b611f2e612955565b6001600160a01b038116611f935760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610808565b610f38816129af565b611fa4612955565b6001600160a01b03811615610f3857610ffc816127d3565b611fc46126a2565b609b5460ff1615611fe75760405162461bcd60e51b8152600401610808906131a2565b60cf546001600160a01b031633146120115760405162461bcd60e51b815260040161080890612fa8565b600081116120315760405162461bcd60e51b8152600401610808906131c6565b61203961241f565b60405163288c314960e21b81526001600160a01b038481166004830152919091169063a230c5249060240160206040518083038186803b15801561207c57600080fd5b505afa158015612090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b49190612f05565b6120f95760405162461bcd60e51b81526020600482015260166024820152752721a81039b437bab63210313290309036b2b6b132b960511b6044820152606401610808565b8060006121046126fc565b6001600160a01b031663076cd77f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561213c57600080fd5b505afa158015612150573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121749190612f27565b6001600160a01b038516600090815260cd6020908152604080832033845290915290205490915082118015906121d3575080826121c6866001600160a01b031660009081526099602052604090205490565b6121d091906132ab565b10155b6121ef5760405162461bcd60e51b81526004016108089061314e565b6121f98483612714565b6001600160a01b03841660009081526098602052604090205461221d9083906132ab565b6001600160a01b03851660009081526098602090815260408083209390935560cd8152828220338352905220546122559083906132ab565b6001600160a01b038516600081815260cd6020908152604080832033845282528083209490945591815260ce90915220546122919083906132ab565b6001600160a01b03858116600090815260ce60205260408082209390935560cf54925190929091169084908381818185875af1925050503d80600081146122f4576040519150601f19603f3d011682016040523d82523d6000602084013e6122f9565b606091505b505090508061234a5760405162461bcd60e51b815260206004820152601e60248201527f5472616e7366657220746f204e4350207374616b696e67206661696c656400006044820152606401610808565b6001600160a01b038516600081815260ce602090815260408083205460cd835281842033808652908452938290205482518981529384019190915282820152517f03d2bb70c6ccc49d68a465a06edffb976961cf8930888658ca2339fa62b8bda29181900360600190a3505050610bba6001606655565b600054610100900460ff166123e85760405162461bcd60e51b815260040161080890613207565b6111aa612a18565b600054610100900460ff166124175760405162461bcd60e51b815260040161080890613207565b6111aa612a3f565b600061243f7111dbdd995c9b985b98d950dbdb9d1c9858dd60721b612a6f565b905090565b8061244d575050565b6001600160a01b0382166000908152609860205260409020548111156124ce5760405162461bcd60e51b815260206004820152603060248201527f4c6f636b20616d6f756e742073686f756c6420626520657175616c206f72206c60448201526f657373207468616e2062616c616e636560801b6064820152608401610808565b806124d883610b53565b10156125365760405162461bcd60e51b815260206004820152602760248201527f496e73756666696369656e742062616c616e636520746861742063616e206265604482015266081b1bd8dad95960ca1b6064820152608401610808565b60006125406126fc565b6001600160a01b031663737c59b86040518163ffffffff1660e01b815260040160206040518083038186803b15801561257857600080fd5b505afa15801561258c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b09190612f27565b6001600160a01b0384166000908152609960205260409020549091506125d7908390613252565b6001600160a01b038416600090815260996020526040902081905581101561264b5760405162461bcd60e51b815260206004820152602160248201527f4c6f636b65642062616c616e6365206973206c6172676572207468616e206d616044820152600f60fb1b6064820152608401610808565b81609a546126599190613252565b609a556001600160a01b0383166000818152609860205260409020547f44cebfefa4561bee5b61d675ccfd8dc9969fff9cc15e7a4eccccd62af94f9c119084906112b287610b53565b600260665414156126f55760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610808565b6002606655565b600061243f69456e7653746f7261676560b01b612a6f565b8061271d575050565b6001600160a01b0382166000908152609960205260409020546127419082906132ab565b6001600160a01b038316600090815260996020526040902055609a546127689082906132ab565b609a556001600160a01b0382166000818152609860205260409020547f5245d528087a96a64f4589a764f00061e4671eab90cb1e019b1a5b24b2e4c2a89083906127b186610b53565b604080519384526020840192909252908201526060016116d4565b6001606655565b610f38612955565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561280e57611c4183612aec565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561284757600080fd5b505afa925050508015612877575060408051601f3d908101601f1916820190925261287491810190612f27565b60015b6128da5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610808565b60008051602061333083398151915281146129495760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610808565b50611c41838383612b88565b6033546001600160a01b031633146111aa5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610808565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600061243f6845636f73797374656d60b81b612a6f565b600054610100900460ff166127cc5760405162461bcd60e51b815260040161080890613207565b600054610100900460ff16612a665760405162461bcd60e51b815260040161080890613207565b6111aa336129af565b606554604051630d2020dd60e01b8152600481018390526000916001600160a01b031690630d2020dd9060240160206040518083038186803b158015612ab457600080fd5b505afa158015612ac8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ac9190612d3d565b6001600160a01b0381163b612b595760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610808565b60008051602061333083398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b612b9183612bad565b600082511180612b9e5750805b15611c4157610b4d8383612bed565b612bb681612aec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606113428383604051806060016040528060278152602001613350602791396060600080856001600160a01b031685604051612c2a9190612f59565b600060405180830381855af49150503d8060008114612c65576040519150601f19603f3d011682016040523d82523d6000602084013e612c6a565b606091505b5091509150612c7b86838387612c85565b9695505050505050565b60608315612cf1578251612cea576001600160a01b0385163b612cea5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610808565b5081610c12565b610c128383815115612d065781518083602001fd5b8060405162461bcd60e51b81526004016108089190612f75565b600060208284031215612d3257600080fd5b81356113428161331a565b600060208284031215612d4f57600080fd5b81516113428161331a565b60008060408385031215612d6d57600080fd5b8235612d788161331a565b91506020830135612d888161331a565b809150509250929050565b600080600060608486031215612da857600080fd5b8335612db38161331a565b92506020840135612dc38161331a565b91506040840135612dd38161331a565b809150509250925092565b60008060408385031215612df157600080fd5b8235612dfc8161331a565b9150602083013567ffffffffffffffff80821115612e1957600080fd5b818501915085601f830112612e2d57600080fd5b813581811115612e3f57612e3f613304565b604051601f8201601f19908116603f01168101908382118183101715612e6757612e67613304565b81604052828152886020848701011115612e8057600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60008060408385031215612eb557600080fd5b8235612ec08161331a565b946020939093013593505050565b60008060408385031215612ee157600080fd5b8235612eec8161331a565b9150602083013563ffffffff81168114612d8857600080fd5b600060208284031215612f1757600080fd5b8151801515811461134257600080fd5b600060208284031215612f3957600080fd5b5051919050565b600060208284031215612f5257600080fd5b5035919050565b60008251612f6b8184602087016132c2565b9190910192915050565b6020815260008251806020840152612f948160408501602087016132c2565b601f01601f19169190910160400192915050565b6020808252602f908201527f4f6e6c79204e43505374616b696e6720636f6e74726163742063616e2063616c60408201526e36103a3434b990333ab731ba34b7b760891b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252602a908201527f4465706f73697420616d6f756e742073686f756c642062652067726561746572604082015269207468616e207a65726f60b01b606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252600d908201526c2737902832b936b4b9b9b4b7b760991b604082015260600190565b60208082526034908201527f576974686472617720616d6f756e742073686f756c6420626520657175616c206040820152736f72206c657373207468616e2062616c616e636560601b606082015260800190565b6020808252600a9082015269125cc81c995d9bdad95960b21b604082015260600190565b60208082526021908201527f416d6f756e742073686f756c6420626520626967676572207468616e207a65726040820152606f60f81b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008219821115613265576132656132ee565b500190565b60008261328757634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156132a6576132a66132ee565b500290565b6000828210156132bd576132bd6132ee565b500390565b60005b838110156132dd5781810151838201526020016132c5565b83811115610b4d5750506000910152565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610f3857600080fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122038c98aeec8aba081f30415503e094b974b8c07515db945f03beb851c4692823864736f6c63430008060033"; var StakingImp_contract = web3.eth.contract([{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"payee","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"ncp","type":"address"},{"indexed":false,"internalType":"uint256","name":"ncpTotalLocked","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"userTotalLocked","type":"uint256"}],"name":"DelegateStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"payee","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"ncp","type":"address"},{"indexed":false,"internalType":"uint256","name":"ncpTotalLocked","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"userTotalLocked","type":"uint256"}],"name":"DelegateUnstaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"payee","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"available","type":"uint256"}],"name":"Locked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Revoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"}],"name":"SetRegistry","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"payee","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"available","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"payee","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"available","type":"uint256"}],"name":"TransferLocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"payee","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"available","type":"uint256"}],"name":"Unlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"payee","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"total","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"available","type":"uint256"}],"name":"Unstaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"inputs":[],"name":"BALLOT_STORAGE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ECOSYSTEM_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENV_STORAGE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GOV_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAINTENANCE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_POOL_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_REWARD_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"payee","type":"address"}],"name":"availableBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"payee","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"payee","type":"address"}],"name":"calcVotingWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"payee","type":"address"},{"internalType":"uint32","name":"factor","type":"uint32"}],"name":"calcVotingWeightWithScaleFactor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ncp","type":"address"}],"name":"delegateDepositAndLockMore","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"ncp","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"delegateUnlockAndWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"ncp","type":"address"}],"name":"getRatioOfUserBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalLockedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"registry","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isRevoked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"payee","type":"address"},{"internalType":"uint256","name":"lockAmount","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"lockAmount","type":"uint256"}],"name":"lockMore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"payee","type":"address"}],"name":"lockedBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"registry","type":"address"},{"internalType":"address","name":"oldGov","type":"address"},{"internalType":"address","name":"oldStaking","type":"address"}],"name":"migrateFromLegacy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ncpStaking","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reg","outputs":[{"internalType":"contract IRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revoke","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ncpStaking","type":"address"}],"name":"setNCPStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferLocked","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"payee","type":"address"},{"internalType":"uint256","name":"unlockAmount","type":"uint256"}],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImp","type":"address"}],"name":"upgradeStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"ncp","type":"address"},{"internalType":"address","name":"user","type":"address"}],"name":"userBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"ncp","type":"address"}],"name":"userTotalBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]); function StakingImp_new() { @@ -93,6 +93,44 @@ function StakingImp_new() { function StakingImp_load(addr) { return StakingImp_contract.at(addr); } +var TRSList_data = "0x608060405234801561001057600080fd5b506040516106fc3803806106fc83398101604081905261002f91610301565b80604051806020016040528060008152506100528282600061005a60201b60201c565b5050506103a5565b61006383610090565b6000825111806100705750805b1561008b5761008983836100d060201b61008b1760201c565b505b505050565b610099816100fc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606100f583836040518060600160405280602781526020016106d5602791396101ce565b9392505050565b61010f8161024760201b6100b71760201c565b6101765760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101ad7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61025660201b6100c61760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080856001600160a01b0316856040516101eb919061032a565b600060405180830381855af49150503d8060008114610226576040519150601f19603f3d011682016040523d82523d6000602084013e61022b565b606091505b50909250905061023d86838387610259565b9695505050505050565b6001600160a01b03163b151590565b90565b606083156102c55782516102be576001600160a01b0385163b6102be5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161016d565b50816102cf565b6102cf83836102d7565b949350505050565b8151156102e75781518083602001fd5b8060405162461bcd60e51b815260040161016d9190610346565b60006020828403121561031357600080fd5b81516001600160a01b03811681146100f557600080fd5b6000825161033c818460208701610379565b9190910192915050565b6020815260008251806020840152610365816040850160208701610379565b601f01601f19169190910160400192915050565b60005b8381101561039457818101518382015260200161037c565b838111156100895750506000910152565b610321806103b46000396000f3fe6080604052600436106100225760003560e01c80635c60da1b1461003957610031565b366100315761002f61006a565b005b61002f61006a565b34801561004557600080fd5b5061004e61007c565b6040516001600160a01b03909116815260200160405180910390f35b61007a6100756100c9565b6100fc565b565b60006100866100c9565b905090565b60606100b083836040518060600160405280602781526020016102c560279139610120565b9392505050565b6001600160a01b03163b151590565b90565b60006100867f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b3660008037600080366000845af43d6000803e80801561011b573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161013d9190610245565b600060405180830381855af49150503d8060008114610178576040519150601f19603f3d011682016040523d82523d6000602084013e61017d565b606091505b509150915061018e86838387610198565b9695505050505050565b60608315610209578251610202576001600160a01b0385163b6102025760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610213565b610213838361021b565b949350505050565b81511561022b5781518083602001fd5b8060405162461bcd60e51b81526004016101f99190610261565b60008251610257818460208701610294565b9190910192915050565b6020815260008251806020840152610280816040850160208701610294565b601f01601f19169190910160400192915050565b60005b838110156102af578181015183820152602001610297565b838111156102be576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206ebe526f3e340d1c0f061f48f14eee08456472f057c050f8d231a6165f11cf6b64736f6c63430008060033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564"; +var TRSList_contract = web3.eth.contract([{"inputs":[{"internalType":"address","name":"_imp","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]); + +function TRSList_new() { + return TRSList_contract.new( + { + from: web3.eth.accounts[0], + data: TRSList_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function TRSList_load(addr) { + return TRSList_contract.at(addr); +} +var TRSListImp_data = "0x60a06040523060601b60805234801561001757600080fd5b50610020610025565b6100e4565b600054610100900460ff16156100915760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116146100e2576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60805160601c6121776200011f6000396000818161099b015281816109db01528181610a7b01528181610abb0152610b4e01526121776000f3fe60806040526004361061023f5760003560e01c80638f449a051161012e578063bb253a7c116100ab578063ddc9af191161006f578063ddc9af19146106f6578063e7b65ced1461070b578063f0495f2b14610721578063f2fde38b14610736578063f5362a091461075657600080fd5b8063bb253a7c1461066c578063c4d66de814610681578063c77cb1c2146106a1578063c9e1bcf8146106b6578063cde91963146106d657600080fd5b8063a91ee0dc116100f2578063a91ee0dc146105bf578063aefb64b5146105df578063af6af2ff146105ff578063b24155a914610614578063b9032bc61461064c57600080fd5b80638f449a051461050c5780639986e4b914610521578063a0050c3e14610545578063a2398a5514610572578063a6f9dae11461059f57600080fd5b80635a731cca116101bc5780637262561c116101805780637262561c14610455578063738fdd1a1461047557806376c387cd146104ad5780637bf46530146104cd5780638da5cb5b146104ee57600080fd5b80635a731cca146103b15780635dd0af5a146103d55780636c78d2cf146103f75780636e03cefc14610420578063715018a61461044057600080fd5b8063362690f711610203578063362690f7146103275780633659cfe6146103475780634bd1ed76146103675780634f1ef2861461038957806352d1902d1461039c57600080fd5b80630c79e54b1461024b57806313fe10ed1461026d5780631e0cba0d146102ba5780632f40992e146102e657806334125c841461030757600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5061026b610266366004611e4a565b610776565b005b34801561027957600080fd5b506102a5610288366004611d85565b6001600160a01b03166000908152609a6020526040902054151590565b60405190151581526020015b60405180910390f35b3480156102c657600080fd5b506102d8665374616b696e6760c81b81565b6040519081526020016102b1565b3480156102f257600080fd5b506102d86914995dd85c99141bdbdb60b21b81565b34801561031357600080fd5b506102d86845636f73797374656d60b81b81565b34801561033357600080fd5b5061026b610342366004611d85565b6107bf565b34801561035357600080fd5b5061026b610362366004611d85565b610990565b34801561037357600080fd5b506102d86a4d61696e74656e616e636560a81b81565b61026b610397366004611dbf565b610a70565b3480156103a857600080fd5b506102d8610b41565b3480156103bd57600080fd5b506102d86c14dd185ada5b99d4995dd85c99609a1b81565b3480156103e157600080fd5b506103ea610bf4565b6040516102b19190611eb4565b34801561040357600080fd5b506102d87111dbdd995c9b985b98d950dbdb9d1c9858dd60721b81565b34801561042c57600080fd5b5061026b61043b366004611d85565b610c56565b34801561044c57600080fd5b5061026b610c76565b34801561046157600080fd5b506102d8610470366004611d85565b610c8a565b34801561048157600080fd5b50606554610495906001600160a01b031681565b6040516001600160a01b0390911681526020016102b1565b3480156104b957600080fd5b506104956104c8366004611e7f565b610ee8565b3480156104d957600080fd5b506102d869456e7653746f7261676560b01b81565b3480156104fa57600080fd5b506033546001600160a01b0316610495565b34801561051857600080fd5b506102d8610f12565b34801561052d57600080fd5b506102d86c42616c6c6f7453746f7261676560981b81565b34801561055157600080fd5b506102d8610560366004611d85565b609a6020526000908152604090205481565b34801561057e57600080fd5b506102d861058d366004611d85565b609b6020526000908152604090205481565b3480156105ab57600080fd5b5061026b6105ba366004611d85565b61111d565b3480156105cb57600080fd5b5061026b6105da366004611d85565b6111d5565b3480156105eb57600080fd5b5061026b6105fa366004611d85565b61127d565b34801561060b57600080fd5b506102d8611344565b34801561062057600080fd5b506102a561062f366004611d85565b6001600160a01b03166000908152609b6020526040902054151590565b34801561065857600080fd5b50610495610667366004611e7f565b6113c3565b34801561067857600080fd5b50609c546102d8565b34801561068d57600080fd5b5061026b61069c366004611d85565b61143b565b3480156106ad57600080fd5b506099546102d8565b3480156106c257600080fd5b506104956106d1366004611e7f565b611561565b3480156106e257600080fd5b506104956106f1366004611e7f565b6115be565b34801561070257600080fd5b506103ea6115ce565b34801561071757600080fd5b506102d8609c5481565b34801561072d57600080fd5b506098546102d8565b34801561074257600080fd5b5061026b610751366004611d85565b61162e565b34801561076257600080fd5b5061026b610771366004611e4a565b6116a4565b61077e6116e6565b604081015160009060608301825b828110156107b85781516020909201916107a58161127d565b50806107b081612072565b91505061078c565b5050505050565b6107c76116e6565b6001600160a01b0381166000908152609a60205260409020546108315760405162461bcd60e51b815260206004820152601d60248201527f41646472657373206973206e6f7420696e20746865207472734c69737400000060448201526064015b60405180910390fd5b6001600160a01b0381166000908152609a60205260408120546108569060019061202f565b6098549091506108689060019061202f565b811461093a576098805461087e9060019061202f565b8154811061088e5761088e6120b9565b600091825260209091200154609880546001600160a01b0390921691839081106108ba576108ba6120b9565b600091825260209091200180546001600160a01b0319166001600160a01b03929092169190911790556108ee816001612017565b60988054609a916000916109049060019061202f565b81548110610914576109146120b9565b60009182526020808320909101546001600160a01b031683528201929092526040019020555b609880548061094b5761094b6120a3565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03939093168152609a90925250604081205543609c55565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614156109d95760405162461bcd60e51b815260040161082890611f34565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610a226000805160206120fb833981519152546001600160a01b031690565b6001600160a01b031614610a485760405162461bcd60e51b815260040161082890611f80565b610a5181611740565b60408051600080825260208201909252610a6d91839190611748565b50565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415610ab95760405162461bcd60e51b815260040161082890611f34565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610b026000805160206120fb833981519152546001600160a01b031690565b6001600160a01b031614610b285760405162461bcd60e51b815260040161082890611f80565b610b3182611740565b610b3d82826001611748565b5050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610be15760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610828565b506000805160206120fb83398151915290565b60606099805480602002602001604051908101604052809291908181526020018280548015610c4c57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610c2e575b5050505050905090565b610c5e6116e6565b6001600160a01b03811615610a6d57610a5181611740565b610c7e6116e6565b610c8860006118c7565b565b6001600160a01b0381166000908152609b6020526040812054610cfe5760405162461bcd60e51b815260206004820152602660248201527f41646472657373206973206e6f7420696e2074686520737562736372697074696044820152651bdb931a5cdd60d21b6064820152608401610828565b336001600160a01b0383161480610d1f57506033546001600160a01b031633145b610d855760405162461bcd60e51b815260206004820152603160248201527f4f6e6c79206f6e6573656c66206f7220746865206f776e65722063616e2063616044820152703636103a3434b990333ab731ba34b7b71760791b6064820152608401610828565b6001600160a01b0382166000908152609b6020526040812054610daa9060019061202f565b609954909150610dbc9060019061202f565b8114610e8e5760998054610dd29060019061202f565b81548110610de257610de26120b9565b600091825260209091200154609980546001600160a01b039092169183908110610e0e57610e0e6120b9565b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055610e42816001612017565b60998054609b91600091610e589060019061202f565b81548110610e6857610e686120b9565b60009182526020808320909101546001600160a01b031683528201929092526040019020555b6099805480610e9f57610e9f6120a3565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03949094168152609b9093525050604081205543609c81905590565b60998181548110610ef857600080fd5b6000918252602090912001546001600160a01b0316905081565b336000908152609b602052604081205415610f685760405162461bcd60e51b8152602060048201526016602482015275416c726561647920657869737473206164647265737360501b6044820152606401610828565b6000610f72611919565b6040516370a0823160e01b81523360048201529091506000906001600160a01b038316906370a082319060240160206040518083038186803b158015610fb757600080fd5b505afa158015610fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fef9190611e31565b9050610ff961192e565b60405163288c314960e21b81523360048201526001600160a01b03919091169063a230c5249060240160206040518083038186803b15801561103a57600080fd5b505afa15801561104e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110729190611e0f565b806110845750611080611344565b8110155b6110c05760405162461bcd60e51b815260206004820152600d60248201526c2737902832b936b4b9b9b4b7b760991b6044820152606401610828565b5050609980546001810182557f72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94979d000180546001600160a01b0319163390811790915590546000918252609b6020526040909120555043609c81905590565b6111256116e6565b6001600160a01b03811661117b5760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964206e6577206f776e65722061646472657373000000000000006044820152606401610828565b806001600160a01b03166111976033546001600160a01b031690565b6001600160a01b03167fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c60405160405180910390a3610a6d8161162e565b6111dd6116e6565b6001600160a01b0381166112335760405162461bcd60e51b815260206004820152601a60248201527f416464726573732073686f756c64206265206e6f6e2d7a65726f0000000000006044820152606401610828565b606580546001600160a01b0319166001600160a01b0383169081179091556040517f278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd90600090a250565b6112856116e6565b6001600160a01b0381166000908152609a6020526040902054156112e45760405162461bcd60e51b8152602060048201526016602482015275416c726561647920657869737473206164647265737360501b6044820152606401610828565b609880546001810182557f2237a976fa961f5921fd19f2b03c925c725d77b20ce8f790c19709c03de4d8140180546001600160a01b039093166001600160a01b031990931683179055546000918252609a60205260409091205543609c55565b600061134e61194e565b6001600160a01b031663076cd77f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561138657600080fd5b505afa15801561139a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113be9190611e31565b905090565b609954600090821061140d5760405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b6044820152606401610828565b60998281548110611420576114206120b9565b6000918252602090912001546001600160a01b031692915050565b600054610100900460ff161580801561145b5750600054600160ff909116105b806114755750303b158015611475575060005460ff166001145b6114d85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610828565b6000805460ff1916600117905580156114fb576000805461ff0019166101001790555b611503611966565b61150b611995565b611514826111d5565b43609c558015610b3d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b60985460009082106115ab5760405162461bcd60e51b8152602060048201526013602482015272496e646578206f7574206f6620626f756e647360681b6044820152606401610828565b60988281548110611420576114206120b9565b60988181548110610ef857600080fd5b60606098805480602002602001604051908101604052809291908181526020018280548015610c4c576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610c2e575050505050905090565b6116366116e6565b6001600160a01b03811661169b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610828565b610a6d816118c7565b6116ac6116e6565b604081015160009060608301825b828110156107b85781516020909201916116d3816107bf565b50806116de81612072565b9150506116ba565b6033546001600160a01b03163314610c885760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610828565b610a6d6116e6565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156117805761177b836119c4565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156117b957600080fd5b505afa9250505080156117e9575060408051601f3d908101601f191682019092526117e691810190611e31565b60015b61184c5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610828565b6000805160206120fb83398151915281146118bb5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610828565b5061177b838383611a60565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006113be665374616b696e6760c81b611a8b565b60006113be7111dbdd995c9b985b98d950dbdb9d1c9858dd60721b611a8b565b60006113be69456e7653746f7261676560b01b611a8b565b600054610100900460ff1661198d5760405162461bcd60e51b815260040161082890611fcc565b610c88611b0e565b600054610100900460ff166119bc5760405162461bcd60e51b815260040161082890611fcc565b610c88611b3e565b6001600160a01b0381163b611a315760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610828565b6000805160206120fb83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b611a6983611b6c565b600082511180611a765750805b1561177b57611a858383611bac565b50505050565b606554604051630d2020dd60e01b8152600481018390526000916001600160a01b031690630d2020dd9060240160206040518083038186803b158015611ad057600080fd5b505afa158015611ae4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b089190611da2565b92915050565b600054610100900460ff16611b355760405162461bcd60e51b815260040161082890611fcc565b610c88336118c7565b600054610100900460ff16611b655760405162461bcd60e51b815260040161082890611fcc565b6001606655565b611b75816119c4565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060611bd1838360405180606001604052806027815260200161211b60279139611bd8565b9392505050565b6060600080856001600160a01b031685604051611bf59190611e98565b600060405180830381855af49150503d8060008114611c30576040519150601f19603f3d011682016040523d82523d6000602084013e611c35565b606091505b5091509150611c4686838387611c50565b9695505050505050565b60608315611cbc578251611cb5576001600160a01b0385163b611cb55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610828565b5081611cc6565b611cc68383611cce565b949350505050565b815115611cde5781518083602001fd5b8060405162461bcd60e51b81526004016108289190611f01565b600082601f830112611d0957600080fd5b813567ffffffffffffffff80821115611d2457611d246120cf565b604051601f8301601f19908116603f01168101908282118183101715611d4c57611d4c6120cf565b81604052838152866020858801011115611d6557600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060208284031215611d9757600080fd5b8135611bd1816120e5565b600060208284031215611db457600080fd5b8151611bd1816120e5565b60008060408385031215611dd257600080fd5b8235611ddd816120e5565b9150602083013567ffffffffffffffff811115611df957600080fd5b611e0585828601611cf8565b9150509250929050565b600060208284031215611e2157600080fd5b81518015158114611bd157600080fd5b600060208284031215611e4357600080fd5b5051919050565b600060208284031215611e5c57600080fd5b813567ffffffffffffffff811115611e7357600080fd5b611cc684828501611cf8565b600060208284031215611e9157600080fd5b5035919050565b60008251611eaa818460208701612046565b9190910192915050565b6020808252825182820181905260009190848201906040850190845b81811015611ef55783516001600160a01b031683529284019291840191600101611ed0565b50909695505050505050565b6020815260008251806020840152611f20816040850160208701612046565b601f01601f19169190910160400192915050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000821982111561202a5761202a61208d565b500190565b6000828210156120415761204161208d565b500390565b60005b83811015612061578181015183820152602001612049565b83811115611a855750506000910152565b60006000198214156120865761208661208d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610a6d57600080fdfe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e5b5ff548ebe44def5ea9964582029683df918e5542337e9a6cea1ed6f622c0864736f6c63430008060033"; +var TRSListImp_contract = web3.eth.contract([{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"}],"name":"SetRegistry","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"inputs":[],"name":"BALLOT_STORAGE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ECOSYSTEM_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENV_STORAGE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GOV_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAINTENANCE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_POOL_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_REWARD_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addToTRSList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"encodedAddresses","type":"bytes"}],"name":"addToTRSListMulti","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getMinStaking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSubscriptionList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getSubscriptionListAddressAtIndex","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSubscriptionListLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTRSList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_index","type":"uint256"}],"name":"getTRSListAddressAtIndex","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTRSListLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUpdatedBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"registry","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isAddressInSubscriptionList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isAddressInTRSList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reg","outputs":[{"internalType":"contract IRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeFromTRSList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"encodedAddresses","type":"bytes"}],"name":"removeToTRSListMulti","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"subscribe","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"subscriptionList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"subscriptionListMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"trsList","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"trsListMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"unsubscribe","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updatedBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newImp","type":"address"}],"name":"upgradeTRSList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]); + +function TRSListImp_new() { + return TRSListImp_contract.new( + { + from: web3.eth.accounts[0], + data: TRSListImp_data, + gas: "0x10000000" + }, function (e, contract) { + if (typeof contract.address !== "undefined") { + console.log("Contract mined! address: " + contract.address + " transactionHash: " + contract.transactionHash); + } + }); +} + +function TRSListImp_load(addr) { + return TRSListImp_contract.at(addr); +} function AEnvStorage_new() { return AEnvStorage_contract.new( @@ -127,7 +165,7 @@ function AGov_new() { function AGov_load(addr) { return AGov_contract.at(addr); } -var BallotEnums_data = "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea2646970667358221220ef19bad30c62e80365964ee8f8538c213d3d9a5842bf646841a50d79c081fd0164736f6c63430008060033"; +var BallotEnums_data = "0x6080604052348015600f57600080fd5b50603f80601d6000396000f3fe6080604052600080fdfea26469706673582212206ab83aa9b9127870c54ab9b4462637bb51f759025e4f485ab2521f974b22df9e64736f6c63430008060033"; var BallotEnums_contract = web3.eth.contract([]); function BallotEnums_new() { @@ -146,7 +184,7 @@ function BallotEnums_new() { function BallotEnums_load(addr) { return BallotEnums_contract.at(addr); } -var EnvConstants_data = "0x608060405234801561001057600080fd5b506104ca806100206000396000f3fe608060405234801561001057600080fd5b50600436106101415760003560e01c80637b2bfb01116100b8578063c00ace6c1161007c578063c00ace6c146103aa578063c0b4fe15146103d1578063c42a0abc146103f8578063c6713baf1461041f578063c7d3da3414610446578063f38ecf471461046d57600080fd5b80637b2bfb0114610305578063918f86741461032c578063a6868b7d14610335578063a9b629b21461035c578063b128f8801461038357600080fd5b80633f35c8fe1161010a5780633f35c8fe1461021b5780634d273e28146102425780636167eb4514610269578063656e3052146102905780636d583ca7146102b75780636fde207a146102de57600080fd5b806215a73b146101465780630b1d39b81461017f578063238737b6146101a6578063278bb12a146101cd57806338294419146101f4575b600080fd5b61016d7f0c4fbe9dc9de15dd7c0d064975ee1a2f2f9b954fa0e65d4f6cddba94884bdc3e81565b60405190815260200160405180910390f35b61016d7fdd5a41a7fc01f5c6d30816b17f638d6531625f1e1eaa599673ab2f6079f2dd9d81565b61016d7f1d36f8ce53f59e624857e1d8dc7932d19981a2ea1b8faa4eb8ff843fc3e5a27881565b61016d7f9b2e0c7fdae148f225bae7deb92d7e7bd24bb77edb12956e8fa7204900dd8a2281565b61016d7fbe90e461bbdb9a95a694f7796912ea04244caf7f5b60ad7ded17e16821d3e44c81565b61016d7f2a268972a70c8c688b62366bdfdd9bb09cf19d3e5b6e7e7bb158e671ffdcedd281565b61016d7f77884798208df1e64f70968be41ef2d3211ec53613397ca59313416813df088881565b61016d7f9f1de481f899d76889aa8a2b44cc7b604d42691aa93d4ba618a1a1fd439f505081565b61016d7fe10074dceffb75f13bf0ce50145afd35182d63796823f1280ce40e01c19109e781565b61016d7fc69fc6b7d0efc934fd5a3581c7253a7107a952526bb6dbcd814ef8d8dae1f44a81565b61016d7f0b09c9badbbeb6c813a598ee910770a39ccda797a1940439bb6e47fc6c87548b81565b61016d7f9346226931826838eedd13d9677fa33551e7c81f604b171ef3fac355458da9aa81565b61016d61271081565b61016d7f6c6f69f426081752a5d3e73746599acd2a4cb145d5de4203ca1e3473b281680b81565b61016d7f89dd490ecaf395283ed4ff2fd9557ca767fc425dce063451a9b0da6d72f600c381565b61016d7f829561ab7af084b7efc6600518d2df79b8d95f3f4c3a550f54f8f7ec7d2b805781565b61016d7f18ad4415ef4a621ce1a136395c51ab6c3712bb2e24b79d526059925cea58dcb881565b61016d7f8086da5becff4dfac91a3105821b361078d2d4abba0ccc2401b974cf0dcf05c181565b61016d7fb38b2c133e931937bd95337c65c8aefa7040ed64bbed732e3e29a4944c65747381565b61016d7fc9e15e34073efbcd0328740feaf503caac9124b55b38c73d1a97b53da80a2f6081565b61016d7f04f7b94450bbcad85f37ea47cd1062728f884bb2040e357738f8fd53056134bc81565b61016d7f7c1150f0e1a39ff55552d52764f97e6c387e2a247e1df344369f122c4254be2f8156fea2646970667358221220f7b9cc0383d8397f3333028f669b2cb8884db43f89923deb5a9a1128a619bee464736f6c63430008060033"; +var EnvConstants_data = "0x608060405234801561001057600080fd5b506104ca806100206000396000f3fe608060405234801561001057600080fd5b50600436106101415760003560e01c80637b2bfb01116100b8578063c00ace6c1161007c578063c00ace6c146103aa578063c0b4fe15146103d1578063c42a0abc146103f8578063c6713baf1461041f578063c7d3da3414610446578063f38ecf471461046d57600080fd5b80637b2bfb0114610305578063918f86741461032c578063a6868b7d14610335578063a9b629b21461035c578063b128f8801461038357600080fd5b80633f35c8fe1161010a5780633f35c8fe1461021b5780634d273e28146102425780636167eb4514610269578063656e3052146102905780636d583ca7146102b75780636fde207a146102de57600080fd5b806215a73b146101465780630b1d39b81461017f578063238737b6146101a6578063278bb12a146101cd57806338294419146101f4575b600080fd5b61016d7f0c4fbe9dc9de15dd7c0d064975ee1a2f2f9b954fa0e65d4f6cddba94884bdc3e81565b60405190815260200160405180910390f35b61016d7fdd5a41a7fc01f5c6d30816b17f638d6531625f1e1eaa599673ab2f6079f2dd9d81565b61016d7f1d36f8ce53f59e624857e1d8dc7932d19981a2ea1b8faa4eb8ff843fc3e5a27881565b61016d7f9b2e0c7fdae148f225bae7deb92d7e7bd24bb77edb12956e8fa7204900dd8a2281565b61016d7fbe90e461bbdb9a95a694f7796912ea04244caf7f5b60ad7ded17e16821d3e44c81565b61016d7f2a268972a70c8c688b62366bdfdd9bb09cf19d3e5b6e7e7bb158e671ffdcedd281565b61016d7f77884798208df1e64f70968be41ef2d3211ec53613397ca59313416813df088881565b61016d7f9f1de481f899d76889aa8a2b44cc7b604d42691aa93d4ba618a1a1fd439f505081565b61016d7fe10074dceffb75f13bf0ce50145afd35182d63796823f1280ce40e01c19109e781565b61016d7fc69fc6b7d0efc934fd5a3581c7253a7107a952526bb6dbcd814ef8d8dae1f44a81565b61016d7f0b09c9badbbeb6c813a598ee910770a39ccda797a1940439bb6e47fc6c87548b81565b61016d7f9346226931826838eedd13d9677fa33551e7c81f604b171ef3fac355458da9aa81565b61016d61271081565b61016d7f6c6f69f426081752a5d3e73746599acd2a4cb145d5de4203ca1e3473b281680b81565b61016d7f89dd490ecaf395283ed4ff2fd9557ca767fc425dce063451a9b0da6d72f600c381565b61016d7f829561ab7af084b7efc6600518d2df79b8d95f3f4c3a550f54f8f7ec7d2b805781565b61016d7f18ad4415ef4a621ce1a136395c51ab6c3712bb2e24b79d526059925cea58dcb881565b61016d7f8086da5becff4dfac91a3105821b361078d2d4abba0ccc2401b974cf0dcf05c181565b61016d7fb38b2c133e931937bd95337c65c8aefa7040ed64bbed732e3e29a4944c65747381565b61016d7fc9e15e34073efbcd0328740feaf503caac9124b55b38c73d1a97b53da80a2f6081565b61016d7f04f7b94450bbcad85f37ea47cd1062728f884bb2040e357738f8fd53056134bc81565b61016d7f7c1150f0e1a39ff55552d52764f97e6c387e2a247e1df344369f122c4254be2f8156fea264697066735822122084e4cbceb63ede17e0e453d0875df5e3ae50be697d12ce69de7394b75ee5cace64736f6c63430008060033"; var EnvConstants_contract = web3.eth.contract([{"inputs":[],"name":"BALLOT_DURATION_MAX_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BALLOT_DURATION_MIN_MAX_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BALLOT_DURATION_MIN_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BASE_FEE_MAX_CHANGE_RATE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCKS_PER_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_CREATION_TIME_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_GASLIMIT_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_AMOUNT_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_MAINTANANCE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_METHOD_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GASLIMIT_AND_BASE_FEE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GAS_TARGET_PERCENTAGE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BASE_FEE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_IDLE_BLOCK_INTERVAL_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PRIORITY_FEE_PER_GAS_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_MAX_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_MIN_MAX_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_MIN_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}]); function EnvConstants_new() { @@ -267,7 +305,7 @@ function IStaking_new() { function IStaking_load(addr) { return IStaking_contract.at(addr); } -var BallotStorage_data = "0x60806040526000606d553480156200001657600080fd5b50604051620039cf380380620039cf8339810160408190526200003991620001b6565b620000443362000056565b6200004f81620000a8565b50620001e8565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620000b262000158565b6001600160a01b0381166200010e5760405162461bcd60e51b815260206004820152601a60248201527f416464726573732073686f756c64206265206e6f6e2d7a65726f00000000000060448201526064015b60405180910390fd5b606580546001600160a01b0319166001600160a01b0383169081179091556040517f278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd90600090a250565b6033546001600160a01b03163314620001b45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000105565b565b600060208284031215620001c957600080fd5b81516001600160a01b0381168114620001e157600080fd5b9392505050565b6137d780620001f86000396000f3fe608060405234801561001057600080fd5b506004361061023d5760003560e01c80636c78d2cf1161013b578063a91e59ba116100b8578063c0b6f1861161007c578063c0b6f186146105a6578063ce04b9d4146105b9578063daacbb95146105c1578063f2fde38b146105d4578063f680e555146105e757600080fd5b8063a91e59ba14610554578063a91ee0dc14610567578063b23c676c1461057a578063b47414951461058b578063bce0dbc11461059357600080fd5b80637bf46530116100ff5780637bf46530146104d95780637efa9ae3146104ed5780638da5cb5b1461051957806396462b9c1461052a5780639986e4b91461053d57600080fd5b80636c78d2cf1461044f578063715018a61461046b57806372d0ec9214610473578063738fdd1a1461048657806373df4e01146104b157600080fd5b806334125c84116101c95780635a55c1f01161018d5780635a55c1f01461038f5780635a731cca146103dd578063656bc633146103f4578063688ca5b2146104075780636c57f5a91461043757600080fd5b806334125c841461033b5780634a57823e1461034e5780634bd1ed7614610361578063557ed1ba1461037657806356ba988e1461037c57600080fd5b80631c150171116102105780631c150171146102d95780631d940da2146102e15780631e0cba0d146103035780632a74f38c146103145780632f40992e1461032757600080fd5b806302b385fb1461024257806309970688146102755780630a3a63fe146102a3578063155ca224146102c4575b600080fd5b61025561025036600461306d565b61062b565b60405161026c9b9a999897969594939291906136a6565b60405180910390f35b61028861028336600461306d565b6107f6565b6040805193845260208401929092529082015260600161026c565b6102b66102b136600461317d565b610956565b60405190815260200161026c565b6102d76102d236600461306d565b610a6e565b005b6102b6610bcf565b6102f46102ef36600461306d565b610c4e565b60405161026c9392919061347e565b6102b6665374616b696e6760c81b81565b6102d761032236600461302c565b610d06565b6102b66914995dd85c99141bdbdb60b21b81565b6102b66845636f73797374656d60b81b81565b6102b661035c3660046132ed565b610da0565b6102b66a4d61696e74656e616e636560a81b81565b426102b6565b61028861038a36600461306d565b610ea7565b6103a261039d36600461306d565b610ff8565b6040805196875260208701959095526001600160a01b03909316938501939093526060840152608083019190915260a082015260c00161026c565b6102b66c14dd185ada5b99d4995dd85c99609a1b81565b6102d76104023660046130e6565b6110c6565b61041a61041536600461306d565b6112d9565b60408051938452602084019290925215159082015260600161026c565b61043f61142f565b604051901515815260200161026c565b6102b67111dbdd995c9b985b98d950dbdb9d1c9858dd60721b81565b6102d7611453565b6102d76104813660046130e6565b611467565b606554610499906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b6104c46104bf36600461306d565b611601565b60405161026c999897969594939291906133ff565b6102b669456e7653746f7261676560b01b81565b6104996104fb36600461306d565b6000908152606860205260409020600101546001600160a01b031690565b6033546001600160a01b0316610499565b6102d7610538366004613108565b61180e565b6102b66c42616c6c6f7453746f7261676560981b81565b6102d76105623660046130e6565b611af9565b6102d761057536600461302c565b611c77565b606c546001600160a01b0316610499565b606d546102b6565b6102d76105a136600461309f565b611d1f565b6102d76105b4366004613151565b611e64565b6102b6612044565b6102d76105cf3660046131d3565b612086565b6102d76105e236600461302c565b612396565b61043f6105f536600461336d565b66ffffffffffffff82166000908152606b602090815260408083206001600160a01b038516845290915290205460ff1692915050565b60008060008060606000806000806000806000606660008e815260200190815260200160002060405180610180016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016005820180546106c49061373b565b80601f01602080910402602001604051908101604052809291908181526020018280546106f09061373b565b801561073d5780601f106107125761010080835404028352916020019161073d565b820191906000526020600020905b81548152906001019060200180831161072057829003601f168201915b5050505050815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a900460ff16151515158152602001600b82015481525050905080602001519b5080604001519a5080606001519950806080015198508060a0015197508060c0015196508060e00151955080610100015194508061012001519350806101400151925080610160015191505091939597999b90929496989a50565b6000818152606660209081526040808320815161018081018352815481526001820154938101939093526002810154918301919091526003810154606083015260048101546001600160a01b031660808301526005810180548493849384939192909160a08401916108679061373b565b80601f01602080910402602001604051908101604052809291908181526020018280546108939061373b565b80156108e05780601f106108b5576101008083540402835291602001916108e0565b820191906000526020600020905b8154815290600101906020018083116108c357829003601f168201915b5050505050815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a900460ff16151515158152602001600b82015481525050905080602001519350806040015192508061016001519150509193909250565b60003361096161240f565b6001600160a01b0316146109905760405162461bcd60e51b815260040161098790613509565b60405180910390fd5b61099861242f565b6001600160a01b0316306001600160a01b0316146109c85760405162461bcd60e51b81526004016109879061361f565b600485146109e85760405162461bcd60e51b815260040161098790613567565b6001600160a01b038216610a0e5760405162461bcd60e51b815260040161098790613644565b610a1a8686868661244a565b506040805180820182528681526001600160a01b0392831660208083019182526000898152606890915292909220905181559051600190910180546001600160a01b03191691909216179055509192915050565b8033610a7861240f565b6001600160a01b03161480610aa657506000818152606660205260409020600401546001600160a01b031633145b610ac25760405162461bcd60e51b815260040161098790613509565b610aca61242f565b6001600160a01b0316306001600160a01b031614610afa5760405162461bcd60e51b81526004016109879061361f565b6000828152606660205260409020548214610b275760405162461bcd60e51b8152600401610987906134a6565b6000828152606660205260409020600a015460ff1615610b595760405162461bcd60e51b815260040161098790613594565b600160008381526066602052604090206009015414610b8a5760405162461bcd60e51b8152600401610987906135f6565b60008281526066602052604090206005600982015560405183907fd5e541d004c50564e5e05fcbc6be2916c68d817507693dc3774c69dde4ce13dc90600090a2505050565b6000610bd9612705565b6001600160a01b03166333be496e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c1157600080fd5b505afa158015610c25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c499190613086565b905090565b600081815260696020526040902060018101546002820154600383018054929391926060929190610c7e9061373b565b80601f0160208091040260200160405190810160405280929190818152602001828054610caa9061373b565b8015610cf75780601f10610ccc57610100808354040283529160200191610cf7565b820191906000526020600020905b815481529060010190602001808311610cda57829003601f168201915b50505050509150509193909250565b610d0e61271d565b6001600160a01b038116610d565760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610987565b606c80546001600160a01b0319166001600160a01b0383169081179091556040517f3d809312b6e303291a93b307c7ddbd0960c094f5f0fb4e3ba0758775013edeb390600090a250565b600033610dab61240f565b6001600160a01b031614610dd15760405162461bcd60e51b815260040161098790613509565b610dd961242f565b6001600160a01b0316306001600160a01b031614610e095760405162461bcd60e51b81526004016109879061361f565b610e14878584612777565b610e305760405162461bcd60e51b815260040161098790613644565b610e3c8888888861244a565b6040805160808101825289815260208082018781528284018781526060840187815260008e81526069855295909520845181559151600183015551600282015592518051929384939092610e97926003850192910190612ef6565b50999a9950505050505050505050565b6000818152606660209081526040808320815161018081018352815481526001820154938101939093526002810154918301919091526003810154606083015260048101546001600160a01b031660808301526005810180548493849384939192909160a0840191610f189061373b565b80601f0160208091040260200160405190810160405280929190818152602001828054610f449061373b565b8015610f915780601f10610f6657610100808354040283529160200191610f91565b820191906000526020600020905b815481529060010190602001808311610f7457829003601f168201915b505050918352505060068201546020820152600782015460408201526008820154606082015260098201546080820152600a82015460ff16151560a0820152600b9091015460c09182015281015160e0820151610100909201519097919650945092505050565b6000818152606a60205260408120548190819081908190819087146110545760405162461bcd60e51b81526020600482015260126024820152711b9bdd08195e1a5cdd1959081d9bdd19525960721b6044820152606401610987565b50505060009384525050606a6020908152604092839020835160c0810185528154808252600183015493820184905260028301546001600160a01b031695820186905260038301546060830181905260048401546080840181905260059094015460a090930183905290969395945092565b81336110d061240f565b6001600160a01b031614806110fe57506000818152606660205260409020600401546001600160a01b031633145b61111a5760405162461bcd60e51b815260040161098790613509565b61112261242f565b6001600160a01b0316306001600160a01b0316146111525760405162461bcd60e51b81526004016109879061361f565b818061115c610bcf565b11156111aa5760405162461bcd60e51b815260206004820152601c60248201527f556e646572206d696e2076616c7565206f6620206475726174696f6e000000006044820152606401610987565b6111b2612044565b8111156112015760405162461bcd60e51b815260206004820152601a60248201527f4f766572206d61782076616c7565206f66206475726174696f6e0000000000006044820152606401610987565b600084815260666020526040902054841461122e5760405162461bcd60e51b8152600401610987906134a6565b6000848152606660205260409020600a015460ff16156112605760405162461bcd60e51b815260040161098790613594565b6001600085815260666020526040902060090154146112915760405162461bcd60e51b8152600401610987906135f6565b600084815260666020526040808220600b810186905590519091339187917ff0855c0e0ad9b8a162b87f2e4e07d4b2a3f0a45126b15ff4a78b217ad19a901a91a35050505050565b6000818152606660209081526040808320815161018081018352815481526001820154938101939093526002810154918301919091526003810154606083015260048101546001600160a01b031660808301526005810180548493849384939192909160a084019161134a9061373b565b80601f01602080910402602001604051908101604052809291908181526020018280546113769061373b565b80156113c35780601f10611398576101008083540402835291602001916113c3565b820191906000526020600020905b8154815290600101906020018083116113a657829003601f168201915b50505091835250506006820154602082015260078201546040820152600882015460608083019190915260098301546080830152600a83015460ff16151560a0830152600b9092015460c090910152810151610120820151610140909201519097919650945092505050565b600061143961242f565b6001600160a01b0316306001600160a01b03161415905090565b61145b61271d565b6114656000612856565b565b3361147061240f565b6001600160a01b0316146114965760405162461bcd60e51b815260040161098790613509565b61149e61242f565b6001600160a01b0316306001600160a01b0316146114ce5760405162461bcd60e51b81526004016109879061361f565b60008281526066602052604090205482146114fb5760405162461bcd60e51b8152600401610987906134a6565b60008281526067602052604090205482146115585760405162461bcd60e51b815260206004820152601860248201527f6e6f7420657869737465642042616c6c6f744d656d62657200000000000000006044820152606401610987565b6000828152606660205260409020600a015460ff161561158a5760405162461bcd60e51b815260040161098790613594565b6001600083815260666020526040902060090154146115bb5760405162461bcd60e51b8152600401610987906135f6565b6000828152606760205260408082206009810184905590519091339185917ff0855c0e0ad9b8a162b87f2e4e07d4b2a3f0a45126b15ff4a78b217ad19a901a91a3505050565b600081815260676020526040812060018101546002820154600383015460048401546005850180546001600160a01b0395861697948616969386169590921693606093849384938392916116549061373b565b80601f01602080910402602001604051908101604052809291908181526020018280546116809061373b565b80156116cd5780601f106116a2576101008083540402835291602001916116cd565b820191906000526020600020905b8154815290600101906020018083116116b057829003601f168201915b505050505095508060060180546116e39061373b565b80601f016020809104026020016040519081016040528092919081815260200182805461170f9061373b565b801561175c5780601f106117315761010080835404028352916020019161175c565b820191906000526020600020905b81548152906001019060200180831161173f57829003601f168201915b505050505094508060070180546117729061373b565b80601f016020809104026020016040519081016040528092919081815260200182805461179e9061373b565b80156117eb5780601f106117c0576101008083540402835291602001916117eb565b820191906000526020600020905b8154815290600101906020018083116117ce57829003601f168201915b505050505093508060080154925080600901549150509193959799909294969850565b3361181761240f565b6001600160a01b03161461183d5760405162461bcd60e51b815260040161098790613509565b61184561242f565b6001600160a01b0316306001600160a01b0316146118755760405162461bcd60e51b81526004016109879061361f565b60018214806118845750600282145b6118c35760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103232b1b4b9b4b7b760811b6044820152606401610987565b60008481526066602052604090205484146118f05760405162461bcd60e51b8152600401610987906134a6565b6000858152606a60205260409020548514156119475760405162461bcd60e51b8152602060048201526016602482015275185b1c9958591e48195e1a5cdd1959081d9bdd19525960521b6044820152606401610987565b6000848152606b602090815260408083206001600160a01b038716845290915290205460ff16156119aa5760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e481d9bdd1959609a1b6044820152606401610987565b600260008581526066602052604090206009015414611a025760405162461bcd60e51b81526020600482015260146024820152734e6f7420496e50726f677265737320537461746560601b6044820152606401610987565b6040518060c00160405280868152602001858152602001846001600160a01b03168152602001838152602001828152602001611a3b4290565b90526000868152606a602090815260409182902083518155908301516001820155908201516002820180546001600160a01b0319166001600160a01b03909216919091179055606082015160038201556080820151600482015560a090910151600590910155611aad848484846128a8565b826001600160a01b031684867f41df84b3b467b06744e40c92613c666324e7c640ce0a41ec06efdf602d36760685604051611aea91815260200190565b60405180910390a45050505050565b33611b0261240f565b6001600160a01b031614611b285760405162461bcd60e51b815260040161098790613509565b611b3061242f565b6001600160a01b0316306001600160a01b031614611b605760405162461bcd60e51b81526004016109879061361f565b6000828152606660205260409020548214611b8d5760405162461bcd60e51b8152600401610987906134a6565b6000828152606660205260409020600a015460ff1615611bbf5760405162461bcd60e51b815260040161098790613594565b6003811480611bce5750600481145b611c115760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642042616c6c6f7420537461746560601b6044820152606401610987565b6000828152606660205260409081902060098101839055600a8101805460ff19166001179055905183907fdc921f027328d7238b58d77649ebcbd0c8b1c494c66ba53dfe53e0de65f6dd9f90611c6a9085815260200190565b60405180910390a2505050565b611c7f61271d565b6001600160a01b038116611cd55760405162461bcd60e51b815260206004820152601a60248201527f416464726573732073686f756c64206265206e6f6e2d7a65726f0000000000006044820152606401610987565b606580546001600160a01b0319166001600160a01b0383169081179091556040517f278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd90600090a250565b8133611d2961240f565b6001600160a01b03161480611d5757506000818152606660205260409020600401546001600160a01b031633145b611d735760405162461bcd60e51b815260040161098790613509565b611d7b61242f565b6001600160a01b0316306001600160a01b031614611dab5760405162461bcd60e51b81526004016109879061361f565b6000838152606660205260409020548314611dd85760405162461bcd60e51b8152600401610987906134a6565b6000838152606660205260409020600a015460ff1615611e0a5760405162461bcd60e51b815260040161098790613594565b600083815260666020908152604090912083519091611e30916005840191860190612ef6565b50604051339085907ff0855c0e0ad9b8a162b87f2e4e07d4b2a3f0a45126b15ff4a78b217ad19a901a90600090a350505050565b33611e6d61240f565b6001600160a01b031614611e935760405162461bcd60e51b815260040161098790613509565b611e9b61242f565b6001600160a01b0316306001600160a01b031614611ecb5760405162461bcd60e51b81526004016109879061361f565b8181600082118015611edd5750600081115b611f1d5760405162461bcd60e51b815260206004820152601160248201527007374617274206f7220656e64206973203607c1b6044820152606401610987565b818111611f5b5760405162461bcd60e51b815260206004820152600c60248201526b1cdd185c9d080f8f48195b9960a21b6044820152606401610987565b6000858152606660205260409020548514611f885760405162461bcd60e51b8152600401610987906134a6565b6000858152606660205260409020600a015460ff1615611fba5760405162461bcd60e51b815260040161098790613594565b600160008681526066602052604090206009015414611feb5760405162461bcd60e51b8152600401610987906135f6565b600085815260666020526040902060018101859055600280820185905560098201556040518490869088907fd9938a514dab5cdce149a77493f694bd70c24a4833a278fd4d86fbdf859099c590600090a4505050505050565b600061204e612705565b6001600160a01b0316631b27e01b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c1157600080fd5b3361208f61240f565b6001600160a01b0316146120b55760405162461bcd60e51b815260040161098790613509565b6120bd61242f565b6001600160a01b0316306001600160a01b0316146120ed5760405162461bcd60e51b81526004016109879061361f565b6120fe8b8989898989898989612a11565b61211a5760405162461bcd60e51b815260040161098790613644565b6121268c8c8c8c61244a565b6121a06040518061014001604052806000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001606081526020016060815260200160008152602001600081525090565b8c8160000181815250508881602001906001600160a01b031690816001600160a01b0316815250508781604001906001600160a01b031690816001600160a01b0316815250508681606001906001600160a01b031690816001600160a01b0316815250508581608001906001600160a01b031690816001600160a01b031681525050848160a00181905250838160c00181905250828160e00181905250818161010001818152505080606760008f81526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060808201518160040160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060a0820151816005019080519060200190612336929190612ef6565b5060c08201518051612352916006840191602090910190612ef6565b5060e0820151805161236e916007840191602090910190612ef6565b5061010082015160088201556101209091015160099091015550505050505050505050505050565b61239e61271d565b6001600160a01b0381166124035760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610987565b61240c81612856565b50565b6000610c497111dbdd995c9b985b98d950dbdb9d1c9858dd60721b612e73565b6000610c496c42616c6c6f7453746f7261676560981b612e73565b8180612454610bcf565b11156124a25760405162461bcd60e51b815260206004820152601c60248201527f556e646572206d696e2076616c7565206f6620206475726174696f6e000000006044820152606401610987565b6124aa612044565b8111156124f95760405162461bcd60e51b815260206004820152601a60248201527f4f766572206d61782076616c7565206f66206475726174696f6e0000000000006044820152606401610987565b6000858152606660205260409020548514156125505760405162461bcd60e51b8152602060048201526016602482015275105b1c9958591e48195e1a5cdd19590818985b1b1bdd60521b6044820152606401610987565b6125bf6040518061018001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016060815260200160008152602001600081526020016000815260200160008152602001600015158152602001600081525090565b858152606081018590526001600160a01b0383166080820152600161012082015260006101408201819052610160820185905286815260666020908152604091829020835181558184015160018201559183015160028301556060830151600383015560808301516004830180546001600160a01b0319166001600160a01b0390921691909117905560a08301518051849392612663926005850192910190612ef6565b5060c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a8201805460ff191691151591909117905561016090910151600b90910155606d546126c2906001613715565b606d556040516001600160a01b03841690869088907fd1ba591c76ef71222e2d30b8277758713cc6eef1de29efaf98a716744ac2420b90600090a4505050505050565b6000610c4969456e7653746f7261676560b01b612e73565b6033546001600160a01b031633146114655760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610987565b6000600584146127995760405162461bcd60e51b815260040161098790613567565b826127f05760405162461bcd60e51b815260206004820152602160248201527f496e76616c696420656e7669726f6e6d656e74207661726961626c65206e616d6044820152606560f81b6064820152608401610987565b600082511161284c5760405162461bcd60e51b815260206004820152602260248201527f496e76616c696420656e7669726f6e6d656e74207661726961626c652076616c604482015261756560f01b6064820152608401610987565b5060019392505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60018214806128b75750600282145b6128f65760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103232b1b4b9b4b7b760811b6044820152606401610987565b60008481526066602052604090205484146129235760405162461bcd60e51b8152600401610987906134a6565b6000848152606b602090815260408083206001600160a01b038716845290915290205460ff16156129865760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e481d9bdd1959609a1b6044820152606401610987565b6000848152606660209081526040808320606b83528184206001600160a01b0388168552909252909120805460ff1916600190811790915560068201546129cc91613715565b600682015560018314156129f4578181600701546129ea9190613715565b6007820155612a0a565b818160080154612a049190613715565b60088201555b5050505050565b600060018a10158015612a25575060038a11155b612a415760405162461bcd60e51b815260040161098790613567565b60028a1415612c01576001600160a01b038916612a705760405162461bcd60e51b8152600401610987906135bf565b6001600160a01b03881615612a975760405162461bcd60e51b815260040161098790613530565b6001600160a01b03871615612abe5760405162461bcd60e51b81526004016109879061366f565b6001600160a01b03861615612ae55760405162461bcd60e51b8152600401610987906134d2565b845115612b2c5760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964206e6577206e6f6465206e616d6560581b6044820152606401610987565b835115612b715760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b995dc81b9bd919481a59606a1b6044820152606401610987565b825115612bb65760405162461bcd60e51b81526020600482015260136024820152720496e76616c6964206e6577206e6f646520495606c1b6044820152606401610987565b8115612bfc5760405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a59081b995dc81b9bd91948141bdc9d605a1b6044820152606401610987565b612e63565b6000855111612c4a5760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964206e6577206e6f6465206e616d6560581b6044820152606401610987565b8351604014612c915760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b995dc81b9bd919481a59606a1b6044820152606401610987565b6000835111612cd85760405162461bcd60e51b81526020600482015260136024820152720496e76616c6964206e6577206e6f646520495606c1b6044820152606401610987565b60008211612d205760405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a59081b995dc81b9bd91948141bdc9d605a1b6044820152606401610987565b60018a1415612dc2576001600160a01b03891615612d505760405162461bcd60e51b8152600401610987906135bf565b6001600160a01b038816612d765760405162461bcd60e51b815260040161098790613530565b6001600160a01b038716612d9c5760405162461bcd60e51b81526004016109879061366f565b6001600160a01b038616612bfc5760405162461bcd60e51b8152600401610987906134d2565b60038a1415612e63576001600160a01b038916612df15760405162461bcd60e51b8152600401610987906135bf565b6001600160a01b038816612e175760405162461bcd60e51b815260040161098790613530565b6001600160a01b038716612e3d5760405162461bcd60e51b81526004016109879061366f565b6001600160a01b038616612e635760405162461bcd60e51b8152600401610987906134d2565b5060019998505050505050505050565b606554604051630d2020dd60e01b8152600481018390526000916001600160a01b031690630d2020dd9060240160206040518083038186803b158015612eb857600080fd5b505afa158015612ecc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef09190613050565b92915050565b828054612f029061373b565b90600052602060002090601f016020900481019282612f245760008555612f6a565b82601f10612f3d57805160ff1916838001178555612f6a565b82800160010185558215612f6a579182015b82811115612f6a578251825591602001919060010190612f4f565b50612f76929150612f7a565b5090565b5b80821115612f765760008155600101612f7b565b8035612f9a8161378c565b919050565b600082601f830112612fb057600080fd5b813567ffffffffffffffff80821115612fcb57612fcb613776565b604051601f8301601f19908116603f01168101908282118183101715612ff357612ff3613776565b8160405283815286602085880101111561300c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561303e57600080fd5b81356130498161378c565b9392505050565b60006020828403121561306257600080fd5b81516130498161378c565b60006020828403121561307f57600080fd5b5035919050565b60006020828403121561309857600080fd5b5051919050565b600080604083850312156130b257600080fd5b82359150602083013567ffffffffffffffff8111156130d057600080fd5b6130dc85828601612f9f565b9150509250929050565b600080604083850312156130f957600080fd5b50508035926020909101359150565b600080600080600060a0868803121561312057600080fd5b853594506020860135935060408601356131398161378c565b94979396509394606081013594506080013592915050565b60008060006060848603121561316657600080fd5b505081359360208301359350604090920135919050565b600080600080600060a0868803121561319557600080fd5b85359450602086013593506040860135925060608601356131b58161378c565b915060808601356131c58161378c565b809150509295509295909350565b6000806000806000806000806000806000806101808d8f0312156131f657600080fd5b8c359b5060208d01359a5060408d0135995061321460608e01612f8f565b985061322260808e01612f8f565b975061323060a08e01612f8f565b965061323e60c08e01612f8f565b955061324c60e08e01612f8f565b945067ffffffffffffffff6101008e0135111561326857600080fd5b6132798e6101008f01358f01612f9f565b935067ffffffffffffffff6101208e0135111561329557600080fd5b6132a68e6101208f01358f01612f9f565b925067ffffffffffffffff6101408e013511156132c257600080fd5b6132d38e6101408f01358f01612f9f565b91506101608d013590509295989b509295989b509295989b565b600080600080600080600060e0888a03121561330857600080fd5b87359650602088013595506040880135945060608801356133288161378c565b93506080880135925060a0880135915060c088013567ffffffffffffffff81111561335257600080fd5b61335e8a828b01612f9f565b91505092959891949750929550565b6000806040838503121561338057600080fd5b823566ffffffffffffff8116811461339757600080fd5b915060208301356133a78161378c565b809150509250929050565b6000815180845260005b818110156133d8576020818501810151868301820152016133bc565b818111156133ea576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b038a8116825289811660208301528881166040830152871660608201526101206080820181905260009061343c838201896133b2565b905082810360a084015261345081886133b2565b905082810360c084015261346481876133b2565b60e084019590955250506101000152979650505050505050565b83815282602082015260606040820152600061349d60608301846133b2565b95945050505050565b6020808252601290820152711b9bdd08195e1a5cdd19590810985b1b1bdd60721b604082015260600190565b6020808252601a908201527f496e76616c6964206e6577207265776172642061646472657373000000000000604082015260600190565b6020808252600d908201526c2737902832b936b4b9b9b4b7b760991b604082015260600190565b6020808252601a908201527f496e76616c6964206e6577207374616b65722061646472657373000000000000604082015260600190565b602080825260139082015272496e76616c69642042616c6c6f74205479706560681b604082015260600190565b602080825260119082015270185b1c9958591e48199a5b985b1a5e9959607a1b604082015260600190565b6020808252601a908201527f496e76616c6964206f6c64207374616b65722061646472657373000000000000604082015260600190565b6020808252600f908201526e4e6f7420526561647920537461746560881b604082015260600190565b6020808252600b908201526a125cc8111a5cd8589b195960aa1b604082015260600190565b60208082526011908201527024b73b30b634b2102830b930b6b2ba32b960791b604082015260600190565b60208082526019908201527f496e76616c6964206e657720766f746572206164647265737300000000000000604082015260600190565b60006101608d83528c60208401528b604084015260018060a01b038b1660608401528060808401526136da8184018b6133b2565b60a0840199909952505060c081019590955260e085019390935261010084019190915215156101208301526101409091015295945050505050565b6000821982111561373657634e487b7160e01b600052601160045260246000fd5b500190565b600181811c9082168061374f57607f821691505b6020821081141561377057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461240c57600080fdfea26469706673582212209af0146f791e1a675383b2b5e730fb56fbe226cae67a99b063def7bf2e4bf5f164736f6c63430008060033"; +var BallotStorage_data = "0x60806040526000606d553480156200001657600080fd5b50604051620039cf380380620039cf8339810160408190526200003991620001b6565b620000443362000056565b6200004f81620000a8565b50620001e8565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620000b262000158565b6001600160a01b0381166200010e5760405162461bcd60e51b815260206004820152601a60248201527f416464726573732073686f756c64206265206e6f6e2d7a65726f00000000000060448201526064015b60405180910390fd5b606580546001600160a01b0319166001600160a01b0383169081179091556040517f278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd90600090a250565b6033546001600160a01b03163314620001b45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000105565b565b600060208284031215620001c957600080fd5b81516001600160a01b0381168114620001e157600080fd5b9392505050565b6137d780620001f86000396000f3fe608060405234801561001057600080fd5b506004361061023d5760003560e01c80636c78d2cf1161013b578063a91e59ba116100b8578063c0b6f1861161007c578063c0b6f186146105a6578063ce04b9d4146105b9578063daacbb95146105c1578063f2fde38b146105d4578063f680e555146105e757600080fd5b8063a91e59ba14610554578063a91ee0dc14610567578063b23c676c1461057a578063b47414951461058b578063bce0dbc11461059357600080fd5b80637bf46530116100ff5780637bf46530146104d95780637efa9ae3146104ed5780638da5cb5b1461051957806396462b9c1461052a5780639986e4b91461053d57600080fd5b80636c78d2cf1461044f578063715018a61461046b57806372d0ec9214610473578063738fdd1a1461048657806373df4e01146104b157600080fd5b806334125c84116101c95780635a55c1f01161018d5780635a55c1f01461038f5780635a731cca146103dd578063656bc633146103f4578063688ca5b2146104075780636c57f5a91461043757600080fd5b806334125c841461033b5780634a57823e1461034e5780634bd1ed7614610361578063557ed1ba1461037657806356ba988e1461037c57600080fd5b80631c150171116102105780631c150171146102d95780631d940da2146102e15780631e0cba0d146103035780632a74f38c146103145780632f40992e1461032757600080fd5b806302b385fb1461024257806309970688146102755780630a3a63fe146102a3578063155ca224146102c4575b600080fd5b61025561025036600461306d565b61062b565b60405161026c9b9a999897969594939291906136a6565b60405180910390f35b61028861028336600461306d565b6107f6565b6040805193845260208401929092529082015260600161026c565b6102b66102b136600461317d565b610956565b60405190815260200161026c565b6102d76102d236600461306d565b610a6e565b005b6102b6610bcf565b6102f46102ef36600461306d565b610c4e565b60405161026c9392919061347e565b6102b6665374616b696e6760c81b81565b6102d761032236600461302c565b610d06565b6102b66914995dd85c99141bdbdb60b21b81565b6102b66845636f73797374656d60b81b81565b6102b661035c3660046132ed565b610da0565b6102b66a4d61696e74656e616e636560a81b81565b426102b6565b61028861038a36600461306d565b610ea7565b6103a261039d36600461306d565b610ff8565b6040805196875260208701959095526001600160a01b03909316938501939093526060840152608083019190915260a082015260c00161026c565b6102b66c14dd185ada5b99d4995dd85c99609a1b81565b6102d76104023660046130e6565b6110c6565b61041a61041536600461306d565b6112d9565b60408051938452602084019290925215159082015260600161026c565b61043f61142f565b604051901515815260200161026c565b6102b67111dbdd995c9b985b98d950dbdb9d1c9858dd60721b81565b6102d7611453565b6102d76104813660046130e6565b611467565b606554610499906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b6104c46104bf36600461306d565b611601565b60405161026c999897969594939291906133ff565b6102b669456e7653746f7261676560b01b81565b6104996104fb36600461306d565b6000908152606860205260409020600101546001600160a01b031690565b6033546001600160a01b0316610499565b6102d7610538366004613108565b61180e565b6102b66c42616c6c6f7453746f7261676560981b81565b6102d76105623660046130e6565b611af9565b6102d761057536600461302c565b611c77565b606c546001600160a01b0316610499565b606d546102b6565b6102d76105a136600461309f565b611d1f565b6102d76105b4366004613151565b611e64565b6102b6612044565b6102d76105cf3660046131d3565b612086565b6102d76105e236600461302c565b612396565b61043f6105f536600461336d565b66ffffffffffffff82166000908152606b602090815260408083206001600160a01b038516845290915290205460ff1692915050565b60008060008060606000806000806000806000606660008e815260200190815260200160002060405180610180016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016005820180546106c49061373b565b80601f01602080910402602001604051908101604052809291908181526020018280546106f09061373b565b801561073d5780601f106107125761010080835404028352916020019161073d565b820191906000526020600020905b81548152906001019060200180831161072057829003601f168201915b5050505050815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a900460ff16151515158152602001600b82015481525050905080602001519b5080604001519a5080606001519950806080015198508060a0015197508060c0015196508060e00151955080610100015194508061012001519350806101400151925080610160015191505091939597999b90929496989a50565b6000818152606660209081526040808320815161018081018352815481526001820154938101939093526002810154918301919091526003810154606083015260048101546001600160a01b031660808301526005810180548493849384939192909160a08401916108679061373b565b80601f01602080910402602001604051908101604052809291908181526020018280546108939061373b565b80156108e05780601f106108b5576101008083540402835291602001916108e0565b820191906000526020600020905b8154815290600101906020018083116108c357829003601f168201915b5050505050815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a820160009054906101000a900460ff16151515158152602001600b82015481525050905080602001519350806040015192508061016001519150509193909250565b60003361096161240f565b6001600160a01b0316146109905760405162461bcd60e51b815260040161098790613509565b60405180910390fd5b61099861242f565b6001600160a01b0316306001600160a01b0316146109c85760405162461bcd60e51b81526004016109879061361f565b600485146109e85760405162461bcd60e51b815260040161098790613567565b6001600160a01b038216610a0e5760405162461bcd60e51b815260040161098790613644565b610a1a8686868661244a565b506040805180820182528681526001600160a01b0392831660208083019182526000898152606890915292909220905181559051600190910180546001600160a01b03191691909216179055509192915050565b8033610a7861240f565b6001600160a01b03161480610aa657506000818152606660205260409020600401546001600160a01b031633145b610ac25760405162461bcd60e51b815260040161098790613509565b610aca61242f565b6001600160a01b0316306001600160a01b031614610afa5760405162461bcd60e51b81526004016109879061361f565b6000828152606660205260409020548214610b275760405162461bcd60e51b8152600401610987906134a6565b6000828152606660205260409020600a015460ff1615610b595760405162461bcd60e51b815260040161098790613594565b600160008381526066602052604090206009015414610b8a5760405162461bcd60e51b8152600401610987906135f6565b60008281526066602052604090206005600982015560405183907fd5e541d004c50564e5e05fcbc6be2916c68d817507693dc3774c69dde4ce13dc90600090a2505050565b6000610bd9612705565b6001600160a01b03166333be496e6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c1157600080fd5b505afa158015610c25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c499190613086565b905090565b600081815260696020526040902060018101546002820154600383018054929391926060929190610c7e9061373b565b80601f0160208091040260200160405190810160405280929190818152602001828054610caa9061373b565b8015610cf75780601f10610ccc57610100808354040283529160200191610cf7565b820191906000526020600020905b815481529060010190602001808311610cda57829003601f168201915b50505050509150509193909250565b610d0e61271d565b6001600160a01b038116610d565760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610987565b606c80546001600160a01b0319166001600160a01b0383169081179091556040517f3d809312b6e303291a93b307c7ddbd0960c094f5f0fb4e3ba0758775013edeb390600090a250565b600033610dab61240f565b6001600160a01b031614610dd15760405162461bcd60e51b815260040161098790613509565b610dd961242f565b6001600160a01b0316306001600160a01b031614610e095760405162461bcd60e51b81526004016109879061361f565b610e14878584612777565b610e305760405162461bcd60e51b815260040161098790613644565b610e3c8888888861244a565b6040805160808101825289815260208082018781528284018781526060840187815260008e81526069855295909520845181559151600183015551600282015592518051929384939092610e97926003850192910190612ef6565b50999a9950505050505050505050565b6000818152606660209081526040808320815161018081018352815481526001820154938101939093526002810154918301919091526003810154606083015260048101546001600160a01b031660808301526005810180548493849384939192909160a0840191610f189061373b565b80601f0160208091040260200160405190810160405280929190818152602001828054610f449061373b565b8015610f915780601f10610f6657610100808354040283529160200191610f91565b820191906000526020600020905b815481529060010190602001808311610f7457829003601f168201915b505050918352505060068201546020820152600782015460408201526008820154606082015260098201546080820152600a82015460ff16151560a0820152600b9091015460c09182015281015160e0820151610100909201519097919650945092505050565b6000818152606a60205260408120548190819081908190819087146110545760405162461bcd60e51b81526020600482015260126024820152711b9bdd08195e1a5cdd1959081d9bdd19525960721b6044820152606401610987565b50505060009384525050606a6020908152604092839020835160c0810185528154808252600183015493820184905260028301546001600160a01b031695820186905260038301546060830181905260048401546080840181905260059094015460a090930183905290969395945092565b81336110d061240f565b6001600160a01b031614806110fe57506000818152606660205260409020600401546001600160a01b031633145b61111a5760405162461bcd60e51b815260040161098790613509565b61112261242f565b6001600160a01b0316306001600160a01b0316146111525760405162461bcd60e51b81526004016109879061361f565b818061115c610bcf565b11156111aa5760405162461bcd60e51b815260206004820152601c60248201527f556e646572206d696e2076616c7565206f6620206475726174696f6e000000006044820152606401610987565b6111b2612044565b8111156112015760405162461bcd60e51b815260206004820152601a60248201527f4f766572206d61782076616c7565206f66206475726174696f6e0000000000006044820152606401610987565b600084815260666020526040902054841461122e5760405162461bcd60e51b8152600401610987906134a6565b6000848152606660205260409020600a015460ff16156112605760405162461bcd60e51b815260040161098790613594565b6001600085815260666020526040902060090154146112915760405162461bcd60e51b8152600401610987906135f6565b600084815260666020526040808220600b810186905590519091339187917ff0855c0e0ad9b8a162b87f2e4e07d4b2a3f0a45126b15ff4a78b217ad19a901a91a35050505050565b6000818152606660209081526040808320815161018081018352815481526001820154938101939093526002810154918301919091526003810154606083015260048101546001600160a01b031660808301526005810180548493849384939192909160a084019161134a9061373b565b80601f01602080910402602001604051908101604052809291908181526020018280546113769061373b565b80156113c35780601f10611398576101008083540402835291602001916113c3565b820191906000526020600020905b8154815290600101906020018083116113a657829003601f168201915b50505091835250506006820154602082015260078201546040820152600882015460608083019190915260098301546080830152600a83015460ff16151560a0830152600b9092015460c090910152810151610120820151610140909201519097919650945092505050565b600061143961242f565b6001600160a01b0316306001600160a01b03161415905090565b61145b61271d565b6114656000612856565b565b3361147061240f565b6001600160a01b0316146114965760405162461bcd60e51b815260040161098790613509565b61149e61242f565b6001600160a01b0316306001600160a01b0316146114ce5760405162461bcd60e51b81526004016109879061361f565b60008281526066602052604090205482146114fb5760405162461bcd60e51b8152600401610987906134a6565b60008281526067602052604090205482146115585760405162461bcd60e51b815260206004820152601860248201527f6e6f7420657869737465642042616c6c6f744d656d62657200000000000000006044820152606401610987565b6000828152606660205260409020600a015460ff161561158a5760405162461bcd60e51b815260040161098790613594565b6001600083815260666020526040902060090154146115bb5760405162461bcd60e51b8152600401610987906135f6565b6000828152606760205260408082206009810184905590519091339185917ff0855c0e0ad9b8a162b87f2e4e07d4b2a3f0a45126b15ff4a78b217ad19a901a91a3505050565b600081815260676020526040812060018101546002820154600383015460048401546005850180546001600160a01b0395861697948616969386169590921693606093849384938392916116549061373b565b80601f01602080910402602001604051908101604052809291908181526020018280546116809061373b565b80156116cd5780601f106116a2576101008083540402835291602001916116cd565b820191906000526020600020905b8154815290600101906020018083116116b057829003601f168201915b505050505095508060060180546116e39061373b565b80601f016020809104026020016040519081016040528092919081815260200182805461170f9061373b565b801561175c5780601f106117315761010080835404028352916020019161175c565b820191906000526020600020905b81548152906001019060200180831161173f57829003601f168201915b505050505094508060070180546117729061373b565b80601f016020809104026020016040519081016040528092919081815260200182805461179e9061373b565b80156117eb5780601f106117c0576101008083540402835291602001916117eb565b820191906000526020600020905b8154815290600101906020018083116117ce57829003601f168201915b505050505093508060080154925080600901549150509193959799909294969850565b3361181761240f565b6001600160a01b03161461183d5760405162461bcd60e51b815260040161098790613509565b61184561242f565b6001600160a01b0316306001600160a01b0316146118755760405162461bcd60e51b81526004016109879061361f565b60018214806118845750600282145b6118c35760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103232b1b4b9b4b7b760811b6044820152606401610987565b60008481526066602052604090205484146118f05760405162461bcd60e51b8152600401610987906134a6565b6000858152606a60205260409020548514156119475760405162461bcd60e51b8152602060048201526016602482015275185b1c9958591e48195e1a5cdd1959081d9bdd19525960521b6044820152606401610987565b6000848152606b602090815260408083206001600160a01b038716845290915290205460ff16156119aa5760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e481d9bdd1959609a1b6044820152606401610987565b600260008581526066602052604090206009015414611a025760405162461bcd60e51b81526020600482015260146024820152734e6f7420496e50726f677265737320537461746560601b6044820152606401610987565b6040518060c00160405280868152602001858152602001846001600160a01b03168152602001838152602001828152602001611a3b4290565b90526000868152606a602090815260409182902083518155908301516001820155908201516002820180546001600160a01b0319166001600160a01b03909216919091179055606082015160038201556080820151600482015560a090910151600590910155611aad848484846128a8565b826001600160a01b031684867f41df84b3b467b06744e40c92613c666324e7c640ce0a41ec06efdf602d36760685604051611aea91815260200190565b60405180910390a45050505050565b33611b0261240f565b6001600160a01b031614611b285760405162461bcd60e51b815260040161098790613509565b611b3061242f565b6001600160a01b0316306001600160a01b031614611b605760405162461bcd60e51b81526004016109879061361f565b6000828152606660205260409020548214611b8d5760405162461bcd60e51b8152600401610987906134a6565b6000828152606660205260409020600a015460ff1615611bbf5760405162461bcd60e51b815260040161098790613594565b6003811480611bce5750600481145b611c115760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642042616c6c6f7420537461746560601b6044820152606401610987565b6000828152606660205260409081902060098101839055600a8101805460ff19166001179055905183907fdc921f027328d7238b58d77649ebcbd0c8b1c494c66ba53dfe53e0de65f6dd9f90611c6a9085815260200190565b60405180910390a2505050565b611c7f61271d565b6001600160a01b038116611cd55760405162461bcd60e51b815260206004820152601a60248201527f416464726573732073686f756c64206265206e6f6e2d7a65726f0000000000006044820152606401610987565b606580546001600160a01b0319166001600160a01b0383169081179091556040517f278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd90600090a250565b8133611d2961240f565b6001600160a01b03161480611d5757506000818152606660205260409020600401546001600160a01b031633145b611d735760405162461bcd60e51b815260040161098790613509565b611d7b61242f565b6001600160a01b0316306001600160a01b031614611dab5760405162461bcd60e51b81526004016109879061361f565b6000838152606660205260409020548314611dd85760405162461bcd60e51b8152600401610987906134a6565b6000838152606660205260409020600a015460ff1615611e0a5760405162461bcd60e51b815260040161098790613594565b600083815260666020908152604090912083519091611e30916005840191860190612ef6565b50604051339085907ff0855c0e0ad9b8a162b87f2e4e07d4b2a3f0a45126b15ff4a78b217ad19a901a90600090a350505050565b33611e6d61240f565b6001600160a01b031614611e935760405162461bcd60e51b815260040161098790613509565b611e9b61242f565b6001600160a01b0316306001600160a01b031614611ecb5760405162461bcd60e51b81526004016109879061361f565b8181600082118015611edd5750600081115b611f1d5760405162461bcd60e51b815260206004820152601160248201527007374617274206f7220656e64206973203607c1b6044820152606401610987565b818111611f5b5760405162461bcd60e51b815260206004820152600c60248201526b1cdd185c9d080f8f48195b9960a21b6044820152606401610987565b6000858152606660205260409020548514611f885760405162461bcd60e51b8152600401610987906134a6565b6000858152606660205260409020600a015460ff1615611fba5760405162461bcd60e51b815260040161098790613594565b600160008681526066602052604090206009015414611feb5760405162461bcd60e51b8152600401610987906135f6565b600085815260666020526040902060018101859055600280820185905560098201556040518490869088907fd9938a514dab5cdce149a77493f694bd70c24a4833a278fd4d86fbdf859099c590600090a4505050505050565b600061204e612705565b6001600160a01b0316631b27e01b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610c1157600080fd5b3361208f61240f565b6001600160a01b0316146120b55760405162461bcd60e51b815260040161098790613509565b6120bd61242f565b6001600160a01b0316306001600160a01b0316146120ed5760405162461bcd60e51b81526004016109879061361f565b6120fe8b8989898989898989612a11565b61211a5760405162461bcd60e51b815260040161098790613644565b6121268c8c8c8c61244a565b6121a06040518061014001604052806000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160608152602001606081526020016060815260200160008152602001600081525090565b8c8160000181815250508881602001906001600160a01b031690816001600160a01b0316815250508781604001906001600160a01b031690816001600160a01b0316815250508681606001906001600160a01b031690816001600160a01b0316815250508581608001906001600160a01b031690816001600160a01b031681525050848160a00181905250838160c00181905250828160e00181905250818161010001818152505080606760008f81526020019081526020016000206000820151816000015560208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060808201518160040160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060a0820151816005019080519060200190612336929190612ef6565b5060c08201518051612352916006840191602090910190612ef6565b5060e0820151805161236e916007840191602090910190612ef6565b5061010082015160088201556101209091015160099091015550505050505050505050505050565b61239e61271d565b6001600160a01b0381166124035760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610987565b61240c81612856565b50565b6000610c497111dbdd995c9b985b98d950dbdb9d1c9858dd60721b612e73565b6000610c496c42616c6c6f7453746f7261676560981b612e73565b8180612454610bcf565b11156124a25760405162461bcd60e51b815260206004820152601c60248201527f556e646572206d696e2076616c7565206f6620206475726174696f6e000000006044820152606401610987565b6124aa612044565b8111156124f95760405162461bcd60e51b815260206004820152601a60248201527f4f766572206d61782076616c7565206f66206475726174696f6e0000000000006044820152606401610987565b6000858152606660205260409020548514156125505760405162461bcd60e51b8152602060048201526016602482015275105b1c9958591e48195e1a5cdd19590818985b1b1bdd60521b6044820152606401610987565b6125bf6040518061018001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b031681526020016060815260200160008152602001600081526020016000815260200160008152602001600015158152602001600081525090565b858152606081018590526001600160a01b0383166080820152600161012082015260006101408201819052610160820185905286815260666020908152604091829020835181558184015160018201559183015160028301556060830151600383015560808301516004830180546001600160a01b0319166001600160a01b0390921691909117905560a08301518051849392612663926005850192910190612ef6565b5060c0820151600682015560e0820151600782015561010082015160088201556101208201516009820155610140820151600a8201805460ff191691151591909117905561016090910151600b90910155606d546126c2906001613715565b606d556040516001600160a01b03841690869088907fd1ba591c76ef71222e2d30b8277758713cc6eef1de29efaf98a716744ac2420b90600090a4505050505050565b6000610c4969456e7653746f7261676560b01b612e73565b6033546001600160a01b031633146114655760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610987565b6000600584146127995760405162461bcd60e51b815260040161098790613567565b826127f05760405162461bcd60e51b815260206004820152602160248201527f496e76616c696420656e7669726f6e6d656e74207661726961626c65206e616d6044820152606560f81b6064820152608401610987565b600082511161284c5760405162461bcd60e51b815260206004820152602260248201527f496e76616c696420656e7669726f6e6d656e74207661726961626c652076616c604482015261756560f01b6064820152608401610987565b5060019392505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60018214806128b75750600282145b6128f65760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103232b1b4b9b4b7b760811b6044820152606401610987565b60008481526066602052604090205484146129235760405162461bcd60e51b8152600401610987906134a6565b6000848152606b602090815260408083206001600160a01b038716845290915290205460ff16156129865760405162461bcd60e51b815260206004820152600d60248201526c185b1c9958591e481d9bdd1959609a1b6044820152606401610987565b6000848152606660209081526040808320606b83528184206001600160a01b0388168552909252909120805460ff1916600190811790915560068201546129cc91613715565b600682015560018314156129f4578181600701546129ea9190613715565b6007820155612a0a565b818160080154612a049190613715565b60088201555b5050505050565b600060018a10158015612a25575060038a11155b612a415760405162461bcd60e51b815260040161098790613567565b60028a1415612c01576001600160a01b038916612a705760405162461bcd60e51b8152600401610987906135bf565b6001600160a01b03881615612a975760405162461bcd60e51b815260040161098790613530565b6001600160a01b03871615612abe5760405162461bcd60e51b81526004016109879061366f565b6001600160a01b03861615612ae55760405162461bcd60e51b8152600401610987906134d2565b845115612b2c5760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964206e6577206e6f6465206e616d6560581b6044820152606401610987565b835115612b715760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b995dc81b9bd919481a59606a1b6044820152606401610987565b825115612bb65760405162461bcd60e51b81526020600482015260136024820152720496e76616c6964206e6577206e6f646520495606c1b6044820152606401610987565b8115612bfc5760405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a59081b995dc81b9bd91948141bdc9d605a1b6044820152606401610987565b612e63565b6000855111612c4a5760405162461bcd60e51b8152602060048201526015602482015274496e76616c6964206e6577206e6f6465206e616d6560581b6044820152606401610987565b8351604014612c915760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081b995dc81b9bd919481a59606a1b6044820152606401610987565b6000835111612cd85760405162461bcd60e51b81526020600482015260136024820152720496e76616c6964206e6577206e6f646520495606c1b6044820152606401610987565b60008211612d205760405162461bcd60e51b8152602060048201526015602482015274125b9d985b1a59081b995dc81b9bd91948141bdc9d605a1b6044820152606401610987565b60018a1415612dc2576001600160a01b03891615612d505760405162461bcd60e51b8152600401610987906135bf565b6001600160a01b038816612d765760405162461bcd60e51b815260040161098790613530565b6001600160a01b038716612d9c5760405162461bcd60e51b81526004016109879061366f565b6001600160a01b038616612bfc5760405162461bcd60e51b8152600401610987906134d2565b60038a1415612e63576001600160a01b038916612df15760405162461bcd60e51b8152600401610987906135bf565b6001600160a01b038816612e175760405162461bcd60e51b815260040161098790613530565b6001600160a01b038716612e3d5760405162461bcd60e51b81526004016109879061366f565b6001600160a01b038616612e635760405162461bcd60e51b8152600401610987906134d2565b5060019998505050505050505050565b606554604051630d2020dd60e01b8152600481018390526000916001600160a01b031690630d2020dd9060240160206040518083038186803b158015612eb857600080fd5b505afa158015612ecc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef09190613050565b92915050565b828054612f029061373b565b90600052602060002090601f016020900481019282612f245760008555612f6a565b82601f10612f3d57805160ff1916838001178555612f6a565b82800160010185558215612f6a579182015b82811115612f6a578251825591602001919060010190612f4f565b50612f76929150612f7a565b5090565b5b80821115612f765760008155600101612f7b565b8035612f9a8161378c565b919050565b600082601f830112612fb057600080fd5b813567ffffffffffffffff80821115612fcb57612fcb613776565b604051601f8301601f19908116603f01168101908282118183101715612ff357612ff3613776565b8160405283815286602085880101111561300c57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60006020828403121561303e57600080fd5b81356130498161378c565b9392505050565b60006020828403121561306257600080fd5b81516130498161378c565b60006020828403121561307f57600080fd5b5035919050565b60006020828403121561309857600080fd5b5051919050565b600080604083850312156130b257600080fd5b82359150602083013567ffffffffffffffff8111156130d057600080fd5b6130dc85828601612f9f565b9150509250929050565b600080604083850312156130f957600080fd5b50508035926020909101359150565b600080600080600060a0868803121561312057600080fd5b853594506020860135935060408601356131398161378c565b94979396509394606081013594506080013592915050565b60008060006060848603121561316657600080fd5b505081359360208301359350604090920135919050565b600080600080600060a0868803121561319557600080fd5b85359450602086013593506040860135925060608601356131b58161378c565b915060808601356131c58161378c565b809150509295509295909350565b6000806000806000806000806000806000806101808d8f0312156131f657600080fd5b8c359b5060208d01359a5060408d0135995061321460608e01612f8f565b985061322260808e01612f8f565b975061323060a08e01612f8f565b965061323e60c08e01612f8f565b955061324c60e08e01612f8f565b945067ffffffffffffffff6101008e0135111561326857600080fd5b6132798e6101008f01358f01612f9f565b935067ffffffffffffffff6101208e0135111561329557600080fd5b6132a68e6101208f01358f01612f9f565b925067ffffffffffffffff6101408e013511156132c257600080fd5b6132d38e6101408f01358f01612f9f565b91506101608d013590509295989b509295989b509295989b565b600080600080600080600060e0888a03121561330857600080fd5b87359650602088013595506040880135945060608801356133288161378c565b93506080880135925060a0880135915060c088013567ffffffffffffffff81111561335257600080fd5b61335e8a828b01612f9f565b91505092959891949750929550565b6000806040838503121561338057600080fd5b823566ffffffffffffff8116811461339757600080fd5b915060208301356133a78161378c565b809150509250929050565b6000815180845260005b818110156133d8576020818501810151868301820152016133bc565b818111156133ea576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b038a8116825289811660208301528881166040830152871660608201526101206080820181905260009061343c838201896133b2565b905082810360a084015261345081886133b2565b905082810360c084015261346481876133b2565b60e084019590955250506101000152979650505050505050565b83815282602082015260606040820152600061349d60608301846133b2565b95945050505050565b6020808252601290820152711b9bdd08195e1a5cdd19590810985b1b1bdd60721b604082015260600190565b6020808252601a908201527f496e76616c6964206e6577207265776172642061646472657373000000000000604082015260600190565b6020808252600d908201526c2737902832b936b4b9b9b4b7b760991b604082015260600190565b6020808252601a908201527f496e76616c6964206e6577207374616b65722061646472657373000000000000604082015260600190565b602080825260139082015272496e76616c69642042616c6c6f74205479706560681b604082015260600190565b602080825260119082015270185b1c9958591e48199a5b985b1a5e9959607a1b604082015260600190565b6020808252601a908201527f496e76616c6964206f6c64207374616b65722061646472657373000000000000604082015260600190565b6020808252600f908201526e4e6f7420526561647920537461746560881b604082015260600190565b6020808252600b908201526a125cc8111a5cd8589b195960aa1b604082015260600190565b60208082526011908201527024b73b30b634b2102830b930b6b2ba32b960791b604082015260600190565b60208082526019908201527f496e76616c6964206e657720766f746572206164647265737300000000000000604082015260600190565b60006101608d83528c60208401528b604084015260018060a01b038b1660608401528060808401526136da8184018b6133b2565b60a0840199909952505060c081019590955260e085019390935261010084019190915215156101208301526101409091015295945050505050565b6000821982111561373657634e487b7160e01b600052601160045260246000fd5b500190565b600181811c9082168061374f57607f821691505b6020821081141561377057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461240c57600080fdfea264697066735822122044f7adffee0acc64864072cc71001bff8fb85c19e543b0223e0e95485b4d01be64736f6c63430008060033"; var BallotStorage_contract = web3.eth.contract([{"inputs":[{"internalType":"address","name":"_registry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"ballotId","type":"uint256"}],"name":"BallotCanceled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"ballotId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"ballotType","type":"uint256"},{"indexed":true,"internalType":"address","name":"creator","type":"address"}],"name":"BallotCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"ballotId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"state","type":"uint256"}],"name":"BallotFinalized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"ballotId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"startTime","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"BallotStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"ballotId","type":"uint256"},{"indexed":true,"internalType":"address","name":"updatedBy","type":"address"}],"name":"BallotUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"}],"name":"SetPrevBallotStorage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"}],"name":"SetRegistry","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"voteid","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"ballotId","type":"uint256"},{"indexed":true,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"decision","type":"uint256"}],"name":"Voted","type":"event"},{"inputs":[],"name":"BALLOT_STORAGE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ECOSYSTEM_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENV_STORAGE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GOV_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAINTENANCE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_POOL_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_REWARD_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ballotId","type":"uint256"}],"name":"cancelBallot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_ballotType","type":"uint256"},{"internalType":"uint256","name":"_duration","type":"uint256"},{"internalType":"address","name":"_creator","type":"address"},{"internalType":"address","name":"_newGovernanceAddress","type":"address"}],"name":"createBallotForAddress","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_ballotType","type":"uint256"},{"internalType":"uint256","name":"_duration","type":"uint256"},{"internalType":"address","name":"_creator","type":"address"},{"internalType":"address","name":"_oldStakerAddress","type":"address"},{"internalType":"address","name":"_newStakerAddress","type":"address"},{"internalType":"address","name":"_newVoterAddress","type":"address"},{"internalType":"address","name":"_newRewardAddress","type":"address"},{"internalType":"bytes","name":"_newNodeName","type":"bytes"},{"internalType":"bytes","name":"_newNodeId","type":"bytes"},{"internalType":"bytes","name":"_newNodeIp","type":"bytes"},{"internalType":"uint256","name":"_newNodePort","type":"uint256"}],"name":"createBallotForMember","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_ballotType","type":"uint256"},{"internalType":"uint256","name":"_duration","type":"uint256"},{"internalType":"address","name":"_creator","type":"address"},{"internalType":"bytes32","name":"_envVariableName","type":"bytes32"},{"internalType":"uint256","name":"_envVariableType","type":"uint256"},{"internalType":"bytes","name":"_envVariableValue","type":"bytes"}],"name":"createBallotForVariable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_voteId","type":"uint256"},{"internalType":"uint256","name":"_ballotId","type":"uint256"},{"internalType":"address","name":"_voter","type":"address"},{"internalType":"uint256","name":"_decision","type":"uint256"},{"internalType":"uint256","name":"_power","type":"uint256"}],"name":"createVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ballotId","type":"uint256"},{"internalType":"uint256","name":"_ballotState","type":"uint256"}],"name":"finalizeBallot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getBallotAddress","outputs":[{"internalType":"address","name":"newGovernanceAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getBallotBasic","outputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"ballotType","type":"uint256"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"bytes","name":"memo","type":"bytes"},{"internalType":"uint256","name":"totalVoters","type":"uint256"},{"internalType":"uint256","name":"powerOfAccepts","type":"uint256"},{"internalType":"uint256","name":"powerOfRejects","type":"uint256"},{"internalType":"uint256","name":"state","type":"uint256"},{"internalType":"bool","name":"isFinalized","type":"bool"},{"internalType":"uint256","name":"duration","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBallotCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getBallotMember","outputs":[{"internalType":"address","name":"oldStakerAddress","type":"address"},{"internalType":"address","name":"newStakerAddress","type":"address"},{"internalType":"address","name":"newVoterAddress","type":"address"},{"internalType":"address","name":"newRewardAddress","type":"address"},{"internalType":"bytes","name":"newNodeName","type":"bytes"},{"internalType":"bytes","name":"newNodeId","type":"bytes"},{"internalType":"bytes","name":"newNodeIp","type":"bytes"},{"internalType":"uint256","name":"newNodePort","type":"uint256"},{"internalType":"uint256","name":"lockAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getBallotPeriod","outputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getBallotState","outputs":[{"internalType":"uint256","name":"ballotType","type":"uint256"},{"internalType":"uint256","name":"state","type":"uint256"},{"internalType":"bool","name":"isFinalized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getBallotVariable","outputs":[{"internalType":"bytes32","name":"envVariableName","type":"bytes32"},{"internalType":"uint256","name":"envVariableType","type":"uint256"},{"internalType":"bytes","name":"envVariableValue","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"getBallotVotingInfo","outputs":[{"internalType":"uint256","name":"totalVoters","type":"uint256"},{"internalType":"uint256","name":"powerOfAccepts","type":"uint256"},{"internalType":"uint256","name":"powerOfRejects","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxVotingDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinVotingDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPreviousBallotStorage","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_voteId","type":"uint256"}],"name":"getVote","outputs":[{"internalType":"uint256","name":"voteId","type":"uint256"},{"internalType":"uint256","name":"ballotId","type":"uint256"},{"internalType":"address","name":"voter","type":"address"},{"internalType":"uint256","name":"decision","type":"uint256"},{"internalType":"uint256","name":"power","type":"uint256"},{"internalType":"uint256","name":"time","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint56","name":"_ballotId","type":"uint56"},{"internalType":"address","name":"_voter","type":"address"}],"name":"hasAlreadyVoted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isDisabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reg","outputs":[{"internalType":"contract IRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setPreviousBallotStorage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ballotId","type":"uint256"},{"internalType":"uint256","name":"_startTime","type":"uint256"},{"internalType":"uint256","name":"_endTime","type":"uint256"}],"name":"startBallot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ballotId","type":"uint256"},{"internalType":"uint256","name":"_duration","type":"uint256"}],"name":"updateBallotDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ballotId","type":"uint256"},{"internalType":"uint256","name":"_lockAmount","type":"uint256"}],"name":"updateBallotMemberLockAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ballotId","type":"uint256"},{"internalType":"bytes","name":"_memo","type":"bytes"}],"name":"updateBallotMemo","outputs":[],"stateMutability":"nonpayable","type":"function"}]); function BallotStorage_new() { @@ -286,7 +324,7 @@ function BallotStorage_new() { function BallotStorage_load(addr) { return BallotStorage_contract.at(addr); } -var EnvStorage_data = "0x608060405234801561001057600080fd5b506040516106fc3803806106fc83398101604081905261002f91610301565b80604051806020016040528060008152506100528282600061005a60201b60201c565b5050506103a5565b61006383610090565b6000825111806100705750805b1561008b5761008983836100d060201b61008b1760201c565b505b505050565b610099816100fc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606100f583836040518060600160405280602781526020016106d5602791396101ce565b9392505050565b61010f8161024760201b6100b71760201c565b6101765760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101ad7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61025660201b6100c61760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080856001600160a01b0316856040516101eb919061032a565b600060405180830381855af49150503d8060008114610226576040519150601f19603f3d011682016040523d82523d6000602084013e61022b565b606091505b50909250905061023d86838387610259565b9695505050505050565b6001600160a01b03163b151590565b90565b606083156102c55782516102be576001600160a01b0385163b6102be5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161016d565b50816102cf565b6102cf83836102d7565b949350505050565b8151156102e75781518083602001fd5b8060405162461bcd60e51b815260040161016d9190610346565b60006020828403121561031357600080fd5b81516001600160a01b03811681146100f557600080fd5b6000825161033c818460208701610379565b9190910192915050565b6020815260008251806020840152610365816040850160208701610379565b601f01601f19169190910160400192915050565b60005b8381101561039457818101518382015260200161037c565b838111156100895750506000910152565b610321806103b46000396000f3fe6080604052600436106100225760003560e01c80635c60da1b1461003957610031565b366100315761002f61006a565b005b61002f61006a565b34801561004557600080fd5b5061004e61007c565b6040516001600160a01b03909116815260200160405180910390f35b61007a6100756100c9565b6100fc565b565b60006100866100c9565b905090565b60606100b083836040518060600160405280602781526020016102c560279139610120565b9392505050565b6001600160a01b03163b151590565b90565b60006100867f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b3660008037600080366000845af43d6000803e80801561011b573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161013d9190610245565b600060405180830381855af49150503d8060008114610178576040519150601f19603f3d011682016040523d82523d6000602084013e61017d565b606091505b509150915061018e86838387610198565b9695505050505050565b60608315610209578251610202576001600160a01b0385163b6102025760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610213565b610213838361021b565b949350505050565b81511561022b5781518083602001fd5b8060405162461bcd60e51b81526004016101f99190610261565b60008251610257818460208701610294565b9190910192915050565b6020815260008251806020840152610280816040850160208701610294565b601f01601f19169190910160400192915050565b60005b838110156102af578181015183820152602001610297565b838111156102be576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212209f5f0c27d91adf871a46d4525527c54c2a5ce2464390b6445621ab0cd71e1df764736f6c63430008060033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564"; +var EnvStorage_data = "0x608060405234801561001057600080fd5b506040516106fc3803806106fc83398101604081905261002f91610301565b80604051806020016040528060008152506100528282600061005a60201b60201c565b5050506103a5565b61006383610090565b6000825111806100705750805b1561008b5761008983836100d060201b61008b1760201c565b505b505050565b610099816100fc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606100f583836040518060600160405280602781526020016106d5602791396101ce565b9392505050565b61010f8161024760201b6100b71760201c565b6101765760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101ad7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61025660201b6100c61760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080856001600160a01b0316856040516101eb919061032a565b600060405180830381855af49150503d8060008114610226576040519150601f19603f3d011682016040523d82523d6000602084013e61022b565b606091505b50909250905061023d86838387610259565b9695505050505050565b6001600160a01b03163b151590565b90565b606083156102c55782516102be576001600160a01b0385163b6102be5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161016d565b50816102cf565b6102cf83836102d7565b949350505050565b8151156102e75781518083602001fd5b8060405162461bcd60e51b815260040161016d9190610346565b60006020828403121561031357600080fd5b81516001600160a01b03811681146100f557600080fd5b6000825161033c818460208701610379565b9190910192915050565b6020815260008251806020840152610365816040850160208701610379565b601f01601f19169190910160400192915050565b60005b8381101561039457818101518382015260200161037c565b838111156100895750506000910152565b610321806103b46000396000f3fe6080604052600436106100225760003560e01c80635c60da1b1461003957610031565b366100315761002f61006a565b005b61002f61006a565b34801561004557600080fd5b5061004e61007c565b6040516001600160a01b03909116815260200160405180910390f35b61007a6100756100c9565b6100fc565b565b60006100866100c9565b905090565b60606100b083836040518060600160405280602781526020016102c560279139610120565b9392505050565b6001600160a01b03163b151590565b90565b60006100867f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b3660008037600080366000845af43d6000803e80801561011b573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161013d9190610245565b600060405180830381855af49150503d8060008114610178576040519150601f19603f3d011682016040523d82523d6000602084013e61017d565b606091505b509150915061018e86838387610198565b9695505050505050565b60608315610209578251610202576001600160a01b0385163b6102025760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610213565b610213838361021b565b949350505050565b81511561022b5781518083602001fd5b8060405162461bcd60e51b81526004016101f99190610261565b60008251610257818460208701610294565b9190910192915050565b6020815260008251806020840152610280816040850160208701610294565b601f01601f19169190910160400192915050565b60005b838110156102af578181015183820152602001610297565b838111156102be576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220330bc5ba4a8ea2811b83c69ea4e7d199534e300b220e7f8f618ce772c626d09c64736f6c63430008060033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564"; var EnvStorage_contract = web3.eth.contract([{"inputs":[{"internalType":"address","name":"_implementation","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]); function EnvStorage_new() { @@ -305,7 +343,7 @@ function EnvStorage_new() { function EnvStorage_load(addr) { return EnvStorage_contract.at(addr); } -var EnvStorageImp_data = "0x60a06040523060601b6080523480156200001857600080fd5b506200002362000029565b620000ea565b603854610100900460ff1615620000965760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60385460ff90811614620000e8576038805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60805160601c61369c6200011760003960008181611a1f01528181611aa40152611b7c015261369c6000f3fe6080604052600436106104e05760003560e01c80636fde207a11610281578063a6ed563e1161015a578063c42a0abc116100cc578063e078869f11610085578063e078869f146113d0578063ec3df879146113f0578063f2fde38b14611410578063f38ecf4714611430578063f6fd712914611452578063f82145911461147257600080fd5b8063c42a0abc146112a7578063c6713baf146112db578063c7d3da341461130f578063c95437be14611343578063cdb9f6431461138e578063dc97d962146113a357600080fd5b8063b4d6bd3b1161011e578063b4d6bd3b146111d6578063bd02d0f5146111f6578063be33732a14611223578063c00ace6c14611243578063c031a18014611265578063c0b4fe151461128557600080fd5b8063a6ed563e1461111b578063a91ee0dc14611148578063a9b629b214611168578063aba01fee1461118a578063b128f880146111b457600080fd5b80638c8b887e116101f35780639801bff9116101b75780639801bff914611036578063986e791a146110565780639986e4b914611083578063a36f259b146110a7578063a5d6a581146110c7578063a6868b7d146110e757600080fd5b80638c8b887e14610ee45780638d5cdd7e14610f045780638da5cb5b14610f245780638f6fe72514610f42578063918f86741461102057600080fd5b8063738fdd1a11610245578063738fdd1a14610e0f57806379e8585914610e2f5780637b2bfb0114610e4f5780637bf4653014610e83578063852cf38f14610ea457806388c2801914610ec457600080fd5b80636fde207a14610d4d5780636fe1317714610d6f578063715018a614610d8f57806371c6960d14610da4578063737c59b814610dc457600080fd5b806334125c84116103be5780634bd1ed76116103305780635dba8c4a116102e95780635dba8c4a14610b985780636167eb4514610be3578063656e305214610c1757806367d1a2e014610c4b5780636c78d2cf14610d025780636d583ca714610d2b57600080fd5b80634bd1ed7614610ad65780634d273e2814610af85780634f1ef28614610b2c57806352d1902d14610b3f578063539927be14610b545780635a731cca14610b7457600080fd5b80633d4c65f3116103825780633d4c65f314610a145780633e8daafe14610a345780633f35c8fe14610a54578063408d79cf14610a7657806344b8991414610a9657806345b5ec2914610ab657600080fd5b806334125c84146109275780633659cfe6146109475780633690057a1461096757806338294419146109b25780633848207a146109d457600080fd5b806321f8a721116104575780632eccd8321161041b5780632eccd832146108105780632ed19cd5146108305780632f40992e146108505780633305508e1461087157806333be496e1461089157806333e31184146108dc57600080fd5b806321f8a721146106ef578063238737b61461073d578063278bb12a146107715780632b2eaa92146107a55780632eb57c65146107f057600080fd5b80630fc238bf116104a95780630fc238bf146105db5780630fca11d2146105fb578063124cea371461061b578063185582f11461063b5780631b27e01b146106865780631e0cba0d146106d157600080fd5b806215a73b146104e5578063076cd77f1461051a5780630add66dd146105655780630b1d39b8146105875780630b90a39a146105bb575b600080fd5b3480156104f157600080fd5b5061050760008051602061354083398151915281565b6040519081526020015b60405180910390f35b34801561052657600080fd5b506000805160206135a083398151915260005260026020527fd7a437163435b79030132855d9146a10e26570f1767311219983e0c430cfa69054610507565b34801561057157600080fd5b50610585610580366004613264565b611497565b005b34801561059357600080fd5b506105077fdd5a41a7fc01f5c6d30816b17f638d6531625f1e1eaa599673ab2f6079f2dd9d81565b3480156105c757600080fd5b506105856105d63660046131e9565b6115ed565b3480156105e757600080fd5b506105856105f63660046131e9565b61162d565b34801561060757600080fd5b50610585610616366004613264565b61166a565b34801561062757600080fd5b506105856106363660046131e9565b61172f565b34801561064757600080fd5b5060008051602061350083398151915260005260026020527fbc779bbce8d4fef90926dc39b56d9135e8e3795964b3adae769767961d4a94d854610507565b34801561069257600080fd5b5060008051602061354083398151915260005260026020527f5a1993193b8890c75d83157b2c2c12b144545357ab60021d7429856434de051b54610507565b3480156106dd57600080fd5b50610507665374616b696e6760c81b81565b3480156106fb57600080fd5b5061072561070a366004613186565b6000908152600460205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610511565b34801561074957600080fd5b506105077f1d36f8ce53f59e624857e1d8dc7932d19981a2ea1b8faa4eb8ff843fc3e5a27881565b34801561077d57600080fd5b506105077f9b2e0c7fdae148f225bae7deb92d7e7bd24bb77edb12956e8fa7204900dd8a2281565b3480156107b157600080fd5b5060008051602061358083398151915260005260026020527f270fb31b28afd06ad35288bc3cb901686a4c5a15239e966fd9b64269abd226c354610507565b3480156107fc57600080fd5b5061058561080b366004613186565b61176c565b34801561081c57600080fd5b5061058561082b3660046131e9565b6117b3565b34801561083c57600080fd5b5061058561084b366004613186565b6117f0565b34801561085c57600080fd5b506105076914995dd85c99141bdbdb60b21b81565b34801561087d57600080fd5b5061058561088c366004613186565b611837565b34801561089d57600080fd5b5060008051602061362783398151915260005260026020527f8e8c0bef3b4557d74ba01e0433728c574990153e35cacae69cb26f23a8a4017554610507565b3480156108e857600080fd5b5060008051602061352083398151915260005260026020527ff3497fe1496bfc19eaef6d253f75ec2e9cfe1b4f6080c29192641567c6fc5d8754610507565b34801561093357600080fd5b506105076845636f73797374656d60b81b81565b34801561095357600080fd5b50610585610962366004613028565b61187e565b34801561097357600080fd5b5060008051602061360783398151915260005260026020527f14e650c949c7cc3fca2efe79b3711fc734b4df488cc27c4137f35bd0adaae7fa54610507565b3480156109be57600080fd5b5061050760008051602061358083398151915281565b3480156109e057600080fd5b50610a046109ef366004613186565b60009081526020819052604090205460ff1690565b6040519015158152602001610511565b348015610a2057600080fd5b50610585610a2f3660046131e9565b6118d8565b348015610a4057600080fd5b50610585610a4f3660046131e9565b611915565b348015610a6057600080fd5b5061050760008051602061360783398151915281565b348015610a8257600080fd5b50610585610a913660046131e9565b611952565b348015610aa257600080fd5b50610585610ab13660046131e9565b61198f565b348015610ac257600080fd5b50610585610ad13660046131e9565b6119cc565b348015610ae257600080fd5b506105076a4d61696e74656e616e636560a81b81565b348015610b0457600080fd5b506105077f77884798208df1e64f70968be41ef2d3211ec53613397ca59313416813df088881565b610585610b3a366004613136565b611a14565b348015610b4b57600080fd5b50610507611b6f565b348015610b6057600080fd5b50610585610b6f366004613062565b611c22565b348015610b8057600080fd5b506105076c14dd185ada5b99d4995dd85c99609a1b81565b348015610ba457600080fd5b5060008051602061356083398151915260005260026020527f38eb620cc1355554391bc9d0c224a726d66edf7c3eb2d67af166d6e81fe4456254610507565b348015610bef57600080fd5b506105077f9f1de481f899d76889aa8a2b44cc7b604d42691aa93d4ba618a1a1fd439f505081565b348015610c2357600080fd5b506105077fe10074dceffb75f13bf0ce50145afd35182d63796823f1280ce40e01c19109e781565b348015610c5757600080fd5b5060026020527fc77500645c8acbf6137a0e04460f85359483e3b08db30285cca2957db0c90904547fca55256fa8d248a334a7cb4ca72d9aec97700e81b3784b43c388b9a8d0e2b8e3547f77884798208df1e64f70968be41ef2d3211ec53613397ca59313416813df08886000527fba5524e01c8da4a46e6f70a8f29f4dc63d299ad01d2f01ccae9666cb85f6f7c05460408051938452602084019290925290820152606001610511565b348015610d0e57600080fd5b506105077111dbdd995c9b985b98d950dbdb9d1c9858dd60721b81565b348015610d3757600080fd5b5061050760008051602061362783398151915281565b348015610d5957600080fd5b506105076000805160206135a083398151915281565b348015610d7b57600080fd5b50610585610d8a366004613186565b611eba565b348015610d9b57600080fd5b50610585611f01565b348015610db057600080fd5b50610585610dbf3660046131e9565b611f15565b348015610dd057600080fd5b506000805160206134e083398151915260005260026020527f673c817b54d53459fa437d6b11ba6445e517d8dc789e6b815675ff10e6aeeb5d54610507565b348015610e1b57600080fd5b50609d54610725906001600160a01b031681565b348015610e3b57600080fd5b50610585610e4a366004613186565b611f52565b348015610e5b57600080fd5b506105077f9346226931826838eedd13d9677fa33551e7c81f604b171ef3fac355458da9aa81565b348015610e8f57600080fd5b5061050769456e7653746f7261676560b01b81565b348015610eb057600080fd5b50610585610ebf366004613186565b611f99565b348015610ed057600080fd5b50610585610edf3660046131b8565b611fe0565b348015610ef057600080fd5b50610585610eff3660046131e9565b61215e565b348015610f1057600080fd5b50610585610f1f36600461321e565b6121b4565b348015610f3057600080fd5b50606b546001600160a01b0316610725565b348015610f4e57600080fd5b5060026020527fe6679752544e0074a1c9bec26775117fd40d133ce43cc443fb5f2512ebd7c2af547f89fc1b873e9ef0767cf41719c69200c3f894c43d73c49eb537ca60ec0a2d14bc547fa04c555f883d07b5c5fe85061c632b6bfec696b67afa8ad5e9773b89249984b2547fdd5a41a7fc01f5c6d30816b17f638d6531625f1e1eaa599673ab2f6079f2dd9d6000527f286a480438fb7eb9f5465ec436e6de865b71284ceb2be7ff1cea98f38c26308254604080519485526020850193909352918301526060820152608001610511565b34801561102c57600080fd5b5061050761271081565b34801561104257600080fd5b50610a046110513660046131b8565b612289565b34801561106257600080fd5b50611076611071366004613186565b6123ea565b6040516105119190613314565b34801561108f57600080fd5b506105076c42616c6c6f7453746f7261676560981b81565b3480156110b357600080fd5b506105856110c2366004613186565b61248c565b3480156110d357600080fd5b506105856110e23660046131e9565b6124d3565b3480156110f357600080fd5b506105077f6c6f69f426081752a5d3e73746599acd2a4cb145d5de4203ca1e3473b281680b81565b34801561112757600080fd5b50610507611136366004613186565b60009081526006602052604090205490565b34801561115457600080fd5b50610585611163366004613028565b612510565b34801561117457600080fd5b5061050760008051602061356083398151915281565b34801561119657600080fd5b5061119f6125b8565b60408051928352602083019190915201610511565b3480156111c057600080fd5b5061050760008051602061350083398151915281565b3480156111e257600080fd5b506105856111f136600461321e565b612622565b34801561120257600080fd5b50610507611211366004613186565b60009081526002602052604090205490565b34801561122f57600080fd5b5061058561123e3660046131e9565b6126f9565b34801561124f57600080fd5b506105076000805160206134e083398151915281565b34801561127157600080fd5b50611076611280366004613186565b612748565b34801561129157600080fd5b5061050760008051602061352083398151915281565b3480156112b357600080fd5b506105077fb38b2c133e931937bd95337c65c8aefa7040ed64bbed732e3e29a4944c65747381565b3480156112e757600080fd5b506105077fc9e15e34073efbcd0328740feaf503caac9124b55b38c73d1a97b53da80a2f6081565b34801561131b57600080fd5b506105077f04f7b94450bbcad85f37ea47cd1062728f884bb2040e357738f8fd53056134bc81565b34801561134f57600080fd5b5060008051602061364783398151915260005260026020527f38ddebd16170f2328156b72e009b30efe6e74a1b9fc4389d05f50efa2a42c6f854610507565b34801561139a57600080fd5b5061119f612765565b3480156113af57600080fd5b506105076113be366004613186565b60009081526001602052604090205490565b3480156113dc57600080fd5b506105856113eb3660046131e9565b6127cb565b3480156113fc57600080fd5b5061058561140b366004613186565b61280e565b34801561141c57600080fd5b5061058561142b366004613028565b612855565b34801561143c57600080fd5b5061050760008051602061364783398151915281565b34801561145e57600080fd5b5061058561146d366004613186565b6128cb565b34801561147e57600080fd5b5061058561148d366004613186565b612912565b905090565b336114a0612959565b6001600160a01b0316146114cf5760405162461bcd60e51b81526004016114c690613327565b60405180910390fd5b61271081836114de86886133ee565b6114e891906133ee565b6114f291906133ee565b1461153f5760405162461bcd60e51b815260206004820152601e60248201527f57726f6e6720726577617264206469737472756274696f6e20726174696f000060448201526064016114c6565b6115697fc9e15e34073efbcd0328740feaf503caac9124b55b38c73d1a97b53da80a2f6085612979565b6115937f9f1de481f899d76889aa8a2b44cc7b604d42691aa93d4ba618a1a1fd439f505084612979565b6115bd7f9346226931826838eedd13d9677fa33551e7c81f604b171ef3fac355458da9aa83612979565b6115e77fdd5a41a7fc01f5c6d30816b17f638d6531625f1e1eaa599673ab2f6079f2dd9d82612979565b50505050565b336115f6612959565b6001600160a01b03161461161c5760405162461bcd60e51b81526004016114c690613327565b61162a61146d826020015190565b50565b33611636612959565b6001600160a01b03161461165c5760405162461bcd60e51b81526004016114c690613327565b61162a61140b826020015190565b33611673612959565b6001600160a01b0316146116995760405162461bcd60e51b81526004016114c690613327565b6116c37f1d36f8ce53f59e624857e1d8dc7932d19981a2ea1b8faa4eb8ff843fc3e5a27885612979565b6116ed7fb38b2c133e931937bd95337c65c8aefa7040ed64bbed732e3e29a4944c65747384612979565b6117177f77884798208df1e64f70968be41ef2d3211ec53613397ca59313416813df088883612979565b6115e760008051602061364783398151915282612979565b33611738612959565b6001600160a01b03161461175e5760405162461bcd60e51b81526004016114c690613327565b61162a6110c2826020015190565b33611775612959565b6001600160a01b03161461179b5760405162461bcd60e51b81526004016114c690613327565b61162a6000805160206135a083398151915282612979565b336117bc612959565b6001600160a01b0316146117e25760405162461bcd60e51b81526004016114c690613327565b61162a61148d826020015190565b336117f9612959565b6001600160a01b03161461181f5760405162461bcd60e51b81526004016114c690613327565b61162a60008051602061356083398151915282612979565b33611840612959565b6001600160a01b0316146118665760405162461bcd60e51b81526004016114c690613327565b61162a60008051602061352083398151915282612979565b6118866129c8565b6118a181604051806020016040528060008152506000612a22565b6040516001600160a01b038216907f2a74bbaf99cf25202925743012bb137262ab3432c821e1ba94ddbecac2ea970890600090a250565b336118e1612959565b6001600160a01b0316146119075760405162461bcd60e51b81526004016114c690613327565b61162a61084b826020015190565b3361191e612959565b6001600160a01b0316146119445760405162461bcd60e51b81526004016114c690613327565b61162a610e4a826020015190565b3361195b612959565b6001600160a01b0316146119815760405162461bcd60e51b81526004016114c690613327565b61162a610d8a826020015190565b33611998612959565b6001600160a01b0316146119be5760405162461bcd60e51b81526004016114c690613327565b61162a61088c826020015190565b336119d5612959565b6001600160a01b0316146119fb5760405162461bcd60e51b81526004016114c690613327565b60208101516040820151611a0f8282612622565b505050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415611aa25760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b60648201526084016114c6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611aeb6000805160206135c0833981519152546001600160a01b031690565b6001600160a01b031614611b565760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b60648201526084016114c6565b611b5f82612b9c565b611b6b82826001612a22565b5050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c0f5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016114c6565b506000805160206135c083398151915290565b603854610100900460ff1615808015611c425750603854600160ff909116105b80611c5c5750303b158015611c5c575060385460ff166001145b611cbf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016114c6565b6038805460ff191660011790558015611ce2576038805461ff0019166101001790555b6000805160206135c0833981519152546001600160a01b0385811691161415611d635760405162461bcd60e51b815260206004820152602d60248201527f72656769737472792073686f756c64206e6f742062652073616d65206173206960448201526c36b83632b6b2b73a30ba34b7b760991b60648201526084016114c6565b611d6b612bcb565b611d7484612510565b60005b8251811015611e6e576000611db1858381518110611d9757611d9761349e565b602002602001015160009081526002602052604090205490565b9050838281518110611dc557611dc561349e565b60200260200101516000141580611ddb57508015155b611e1a5760405162461bcd60e51b815260206004820152601060248201526f696e76616c6964207661726961626c6560801b60448201526064016114c6565b80611e5b57611e5b858381518110611e3457611e3461349e565b6020026020010151858481518110611e4e57611e4e61349e565b6020026020010151612979565b5080611e668161346d565b915050611d77565b5080156115e7576038805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b33611ec3612959565b6001600160a01b031614611ee95760405162461bcd60e51b81526004016114c690613327565b61162a60008051602061364783398151915282612979565b611f096129c8565b611f136000612bfa565b565b33611f1e612959565b6001600160a01b031614611f445760405162461bcd60e51b81526004016114c690613327565b61162a61080b826020015190565b33611f5b612959565b6001600160a01b031614611f815760405162461bcd60e51b81526004016114c690613327565b61162a60008051602061360783398151915282612979565b33611fa2612959565b6001600160a01b031614611fc85760405162461bcd60e51b81526004016114c690613327565b61162a60008051602061354083398151915282612979565b600080516020613607833981519152821415611fff57611b6b81611915565b7fe10074dceffb75f13bf0ce50145afd35182d63796823f1280ce40e01c19109e782141561203057611b6b816119cc565b7f6c6f69f426081752a5d3e73746599acd2a4cb145d5de4203ca1e3473b281680b82141561206157611b6b816127cb565b60008051602061350083398151915282141561208057611b6b816115ed565b60008051602061352083398151915282141561209f57611b6b8161198f565b6000805160206135608339815191528214156120be57611b6b816118d8565b6000805160206135808339815191528214156120dd57611b6b8161162d565b7f9b2e0c7fdae148f225bae7deb92d7e7bd24bb77edb12956e8fa7204900dd8a2282141561210e57611b6b8161215e565b7f04f7b94450bbcad85f37ea47cd1062728f884bb2040e357738f8fd53056134bc82141561213f57611b6b816126f9565b600080516020613647833981519152821415611b6b57611b6b81611952565b33612167612959565b6001600160a01b03161461218d5760405162461bcd60e51b81526004016114c690613327565b60208101516040820151606083015160808401516121ad84848484611497565b5050505050565b336121bd612959565b6001600160a01b0316146121e35760405162461bcd60e51b81526004016114c690613327565b808211156122595760405162461bcd60e51b815260206004820152603e60248201527f4d696e696d756d207374616b696e67206d75737420626520736d616c6c65722060448201527f616e6420657175616c207468616e206d6178696d756d207374616b696e67000060648201526084016114c6565b6122716000805160206135a083398151915283612979565b611b6b6000805160206134e083398151915282612979565b60007f9b2e0c7fdae148f225bae7deb92d7e7bd24bb77edb12956e8fa7204900dd8a2283141561231557600080600080858060200190518101906122cd9190613296565b9350935093509350612710818385876122e691906133ee565b6122f091906133ee565b6122fa91906133ee565b1461230c5760009450505050506123e4565b505050506123e0565b7f6c6f69f426081752a5d3e73746599acd2a4cb145d5de4203ca1e3473b281680b83148061236257507fe10074dceffb75f13bf0ce50145afd35182d63796823f1280ce40e01c19109e783145b1561239c576000808380602001905181019061237e9190613240565b9150915080821115612395576000925050506123e4565b50506123e0565b6000805160206135208339815191528314156123e0576000828060200190518101906123c8919061319f565b90506103e88110156123de5760009150506123e4565b505b5060015b92915050565b600081815260036020526040902080546060919061240790613432565b80601f016020809104026020016040519081016040528092919081815260200182805461243390613432565b80156124805780601f1061245557610100808354040283529160200191612480565b820191906000526020600020905b81548152906001019060200180831161246357829003601f168201915b50505050509050919050565b33612495612959565b6001600160a01b0316146124bb5760405162461bcd60e51b81526004016114c690613327565b61162a60008051602061362783398151915282612979565b336124dc612959565b6001600160a01b0316146125025760405162461bcd60e51b81526004016114c690613327565b61162a610ebf826020015190565b6125186129c8565b6001600160a01b03811661256e5760405162461bcd60e51b815260206004820152601a60248201527f416464726573732073686f756c64206265206e6f6e2d7a65726f00000000000060448201526064016114c6565b609d80546001600160a01b0319166001600160a01b0383169081179091556040517f278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd90600090a250565b60026020527fd7a437163435b79030132855d9146a10e26570f1767311219983e0c430cfa690546000805160206134e083398151915260009081527f673c817b54d53459fa437d6b11ba6445e517d8dc789e6b815675ff10e6aeeb5d54909182915b915091509091565b3361262b612959565b6001600160a01b0316146126515760405162461bcd60e51b81526004016114c690613327565b808211156126c9576040805162461bcd60e51b81526020600482015260248101919091527f4d696e696d756d206475726174696f6e206d75737420626520736d616c6c657260448201527f20616e6420657175616c207468616e206d6178696d756d206475726174696f6e60648201526084016114c6565b6126e160008051602061362783398151915283612979565b611b6b60008051602061354083398151915282612979565b33612702612959565b6001600160a01b0316146127285760405162461bcd60e51b81526004016114c690613327565b60208101516040820151606083015160808401516121ad8484848461166a565b600081815260056020526040902080546060919061240790613432565b60026020527f8e8c0bef3b4557d74ba01e0433728c574990153e35cacae69cb26f23a8a401755460008051602061354083398151915260009081527f5a1993193b8890c75d83157b2c2c12b144545357ab60021d7429856434de051b549091829161261a565b336127d4612959565b6001600160a01b0316146127fa5760405162461bcd60e51b81526004016114c690613327565b60208101516040820151611a0f82826121b4565b33612817612959565b6001600160a01b03161461283d5760405162461bcd60e51b81526004016114c690613327565b61162a60008051602061358083398151915282612979565b61285d6129c8565b6001600160a01b0381166128c25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016114c6565b61162a81612bfa565b336128d4612959565b6001600160a01b0316146128fa5760405162461bcd60e51b81526004016114c690613327565b61162a60008051602061350083398151915282612979565b3361291b612959565b6001600160a01b0316146129415760405162461bcd60e51b81526004016114c690613327565b61162a6000805160206134e083398151915282612979565b60006114927111dbdd995c9b985b98d950dbdb9d1c9858dd60721b612c4c565b6000828152600260205260409020819055817f58d7c10adfd5778016889c15d422d57f2975b9292415b54fe5d8cd4241200612826040516129bc91815260200190565b60405180910390a25050565b606b546001600160a01b03163314611f135760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016114c6565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612a5557611a0f83612cc9565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612a8e57600080fd5b505afa925050508015612abe575060408051601f3d908101601f19168201909252612abb9181019061319f565b60015b612b215760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016114c6565b6000805160206135c08339815191528114612b905760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016114c6565b50611a0f838383612d65565b33612ba5612959565b6001600160a01b03161461162a5760405162461bcd60e51b81526004016114c690613327565b603854610100900460ff16612bf25760405162461bcd60e51b81526004016114c69061334e565b611f13612d8a565b606b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b609d54604051630d2020dd60e01b8152600481018390526000916001600160a01b031690630d2020dd9060240160206040518083038186803b158015612c9157600080fd5b505afa158015612ca5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e49190613045565b6001600160a01b0381163b612d365760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016114c6565b6000805160206135c083398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b612d6e83612dba565b600082511180612d7b5750805b15611a0f576115e78383612dfa565b603854610100900460ff16612db15760405162461bcd60e51b81526004016114c69061334e565b611f1333612bfa565b612dc381612cc9565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060612e1f83836040518060600160405280602781526020016135e060279139612e26565b9392505050565b6060600080856001600160a01b031685604051612e4391906132f8565b600060405180830381855af49150503d8060008114612e7e576040519150601f19603f3d011682016040523d82523d6000602084013e612e83565b606091505b5091509150612e9486838387612e9e565b9695505050505050565b60608315612f0a578251612f03576001600160a01b0385163b612f035760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016114c6565b5081612f14565b612f148383612f1c565b949350505050565b815115612f2c5781518083602001fd5b8060405162461bcd60e51b81526004016114c69190613314565b600082601f830112612f5757600080fd5b81356020612f6c612f67836133ca565b613399565b80838252828201915082860187848660051b8901011115612f8c57600080fd5b60005b85811015612fab57813584529284019290840190600101612f8f565b5090979650505050505050565b600082601f830112612fc957600080fd5b813567ffffffffffffffff811115612fe357612fe36134b4565b612ff6601f8201601f1916602001613399565b81815284602083860101111561300b57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561303a57600080fd5b8135612e1f816134ca565b60006020828403121561305757600080fd5b8151612e1f816134ca565b60008060006060848603121561307757600080fd5b8335613082816134ca565b925060208481013567ffffffffffffffff808211156130a057600080fd5b818701915087601f8301126130b457600080fd5b81356130c2612f67826133ca565b8082825285820191508585018b878560051b88010111156130e257600080fd5b600095505b838610156131055780358352600195909501949186019186016130e7565b5096505050604087013592508083111561311e57600080fd5b505061312c86828701612f46565b9150509250925092565b6000806040838503121561314957600080fd5b8235613154816134ca565b9150602083013567ffffffffffffffff81111561317057600080fd5b61317c85828601612fb8565b9150509250929050565b60006020828403121561319857600080fd5b5035919050565b6000602082840312156131b157600080fd5b5051919050565b600080604083850312156131cb57600080fd5b82359150602083013567ffffffffffffffff81111561317057600080fd5b6000602082840312156131fb57600080fd5b813567ffffffffffffffff81111561321257600080fd5b612f1484828501612fb8565b6000806040838503121561323157600080fd5b50508035926020909101359150565b6000806040838503121561325357600080fd5b505080516020909101519092909150565b6000806000806080858703121561327a57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080608085870312156132ac57600080fd5b505082516020840151604085015160609095015191969095509092509050565b600081518084526132e4816020860160208601613406565b601f01601f19169290920160200192915050565b6000825161330a818460208701613406565b9190910192915050565b602081526000612e1f60208301846132cc565b6020808252600d908201526c2737902832b936b4b9b9b4b7b760991b604082015260600190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156133c2576133c26134b4565b604052919050565b600067ffffffffffffffff8211156133e4576133e46134b4565b5060051b60200190565b6000821982111561340157613401613488565b500190565b60005b83811015613421578181015183820152602001613409565b838111156115e75750506000910152565b600181811c9082168061344657607f821691505b6020821081141561346757634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561348157613481613488565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461162a57600080fdfe18ad4415ef4a621ce1a136395c51ab6c3712bb2e24b79d526059925cea58dcb8829561ab7af084b7efc6600518d2df79b8d95f3f4c3a550f54f8f7ec7d2b80578086da5becff4dfac91a3105821b361078d2d4abba0ccc2401b974cf0dcf05c10c4fbe9dc9de15dd7c0d064975ee1a2f2f9b954fa0e65d4f6cddba94884bdc3e89dd490ecaf395283ed4ff2fd9557ca767fc425dce063451a9b0da6d72f600c3be90e461bbdb9a95a694f7796912ea04244caf7f5b60ad7ded17e16821d3e44c0b09c9badbbeb6c813a598ee910770a39ccda797a1940439bb6e47fc6c87548b360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65642a268972a70c8c688b62366bdfdd9bb09cf19d3e5b6e7e7bb158e671ffdcedd2c69fc6b7d0efc934fd5a3581c7253a7107a952526bb6dbcd814ef8d8dae1f44a7c1150f0e1a39ff55552d52764f97e6c387e2a247e1df344369f122c4254be2fa2646970667358221220b92713e5eb1b0b2c9f04f8830198331e15503d9e2ef99bd891b9b5909e57dd4164736f6c63430008060033"; +var EnvStorageImp_data = "0x60a06040523060601b6080523480156200001857600080fd5b506200002362000029565b620000ea565b603854610100900460ff1615620000965760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60385460ff90811614620000e8576038805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60805160601c61369c6200011760003960008181611a1f01528181611aa40152611b7c015261369c6000f3fe6080604052600436106104e05760003560e01c80636fde207a11610281578063a6ed563e1161015a578063c42a0abc116100cc578063e078869f11610085578063e078869f146113d0578063ec3df879146113f0578063f2fde38b14611410578063f38ecf4714611430578063f6fd712914611452578063f82145911461147257600080fd5b8063c42a0abc146112a7578063c6713baf146112db578063c7d3da341461130f578063c95437be14611343578063cdb9f6431461138e578063dc97d962146113a357600080fd5b8063b4d6bd3b1161011e578063b4d6bd3b146111d6578063bd02d0f5146111f6578063be33732a14611223578063c00ace6c14611243578063c031a18014611265578063c0b4fe151461128557600080fd5b8063a6ed563e1461111b578063a91ee0dc14611148578063a9b629b214611168578063aba01fee1461118a578063b128f880146111b457600080fd5b80638c8b887e116101f35780639801bff9116101b75780639801bff914611036578063986e791a146110565780639986e4b914611083578063a36f259b146110a7578063a5d6a581146110c7578063a6868b7d146110e757600080fd5b80638c8b887e14610ee45780638d5cdd7e14610f045780638da5cb5b14610f245780638f6fe72514610f42578063918f86741461102057600080fd5b8063738fdd1a11610245578063738fdd1a14610e0f57806379e8585914610e2f5780637b2bfb0114610e4f5780637bf4653014610e83578063852cf38f14610ea457806388c2801914610ec457600080fd5b80636fde207a14610d4d5780636fe1317714610d6f578063715018a614610d8f57806371c6960d14610da4578063737c59b814610dc457600080fd5b806334125c84116103be5780634bd1ed76116103305780635dba8c4a116102e95780635dba8c4a14610b985780636167eb4514610be3578063656e305214610c1757806367d1a2e014610c4b5780636c78d2cf14610d025780636d583ca714610d2b57600080fd5b80634bd1ed7614610ad65780634d273e2814610af85780634f1ef28614610b2c57806352d1902d14610b3f578063539927be14610b545780635a731cca14610b7457600080fd5b80633d4c65f3116103825780633d4c65f314610a145780633e8daafe14610a345780633f35c8fe14610a54578063408d79cf14610a7657806344b8991414610a9657806345b5ec2914610ab657600080fd5b806334125c84146109275780633659cfe6146109475780633690057a1461096757806338294419146109b25780633848207a146109d457600080fd5b806321f8a721116104575780632eccd8321161041b5780632eccd832146108105780632ed19cd5146108305780632f40992e146108505780633305508e1461087157806333be496e1461089157806333e31184146108dc57600080fd5b806321f8a721146106ef578063238737b61461073d578063278bb12a146107715780632b2eaa92146107a55780632eb57c65146107f057600080fd5b80630fc238bf116104a95780630fc238bf146105db5780630fca11d2146105fb578063124cea371461061b578063185582f11461063b5780631b27e01b146106865780631e0cba0d146106d157600080fd5b806215a73b146104e5578063076cd77f1461051a5780630add66dd146105655780630b1d39b8146105875780630b90a39a146105bb575b600080fd5b3480156104f157600080fd5b5061050760008051602061354083398151915281565b6040519081526020015b60405180910390f35b34801561052657600080fd5b506000805160206135a083398151915260005260026020527fd7a437163435b79030132855d9146a10e26570f1767311219983e0c430cfa69054610507565b34801561057157600080fd5b50610585610580366004613264565b611497565b005b34801561059357600080fd5b506105077fdd5a41a7fc01f5c6d30816b17f638d6531625f1e1eaa599673ab2f6079f2dd9d81565b3480156105c757600080fd5b506105856105d63660046131e9565b6115ed565b3480156105e757600080fd5b506105856105f63660046131e9565b61162d565b34801561060757600080fd5b50610585610616366004613264565b61166a565b34801561062757600080fd5b506105856106363660046131e9565b61172f565b34801561064757600080fd5b5060008051602061350083398151915260005260026020527fbc779bbce8d4fef90926dc39b56d9135e8e3795964b3adae769767961d4a94d854610507565b34801561069257600080fd5b5060008051602061354083398151915260005260026020527f5a1993193b8890c75d83157b2c2c12b144545357ab60021d7429856434de051b54610507565b3480156106dd57600080fd5b50610507665374616b696e6760c81b81565b3480156106fb57600080fd5b5061072561070a366004613186565b6000908152600460205260409020546001600160a01b031690565b6040516001600160a01b039091168152602001610511565b34801561074957600080fd5b506105077f1d36f8ce53f59e624857e1d8dc7932d19981a2ea1b8faa4eb8ff843fc3e5a27881565b34801561077d57600080fd5b506105077f9b2e0c7fdae148f225bae7deb92d7e7bd24bb77edb12956e8fa7204900dd8a2281565b3480156107b157600080fd5b5060008051602061358083398151915260005260026020527f270fb31b28afd06ad35288bc3cb901686a4c5a15239e966fd9b64269abd226c354610507565b3480156107fc57600080fd5b5061058561080b366004613186565b61176c565b34801561081c57600080fd5b5061058561082b3660046131e9565b6117b3565b34801561083c57600080fd5b5061058561084b366004613186565b6117f0565b34801561085c57600080fd5b506105076914995dd85c99141bdbdb60b21b81565b34801561087d57600080fd5b5061058561088c366004613186565b611837565b34801561089d57600080fd5b5060008051602061362783398151915260005260026020527f8e8c0bef3b4557d74ba01e0433728c574990153e35cacae69cb26f23a8a4017554610507565b3480156108e857600080fd5b5060008051602061352083398151915260005260026020527ff3497fe1496bfc19eaef6d253f75ec2e9cfe1b4f6080c29192641567c6fc5d8754610507565b34801561093357600080fd5b506105076845636f73797374656d60b81b81565b34801561095357600080fd5b50610585610962366004613028565b61187e565b34801561097357600080fd5b5060008051602061360783398151915260005260026020527f14e650c949c7cc3fca2efe79b3711fc734b4df488cc27c4137f35bd0adaae7fa54610507565b3480156109be57600080fd5b5061050760008051602061358083398151915281565b3480156109e057600080fd5b50610a046109ef366004613186565b60009081526020819052604090205460ff1690565b6040519015158152602001610511565b348015610a2057600080fd5b50610585610a2f3660046131e9565b6118d8565b348015610a4057600080fd5b50610585610a4f3660046131e9565b611915565b348015610a6057600080fd5b5061050760008051602061360783398151915281565b348015610a8257600080fd5b50610585610a913660046131e9565b611952565b348015610aa257600080fd5b50610585610ab13660046131e9565b61198f565b348015610ac257600080fd5b50610585610ad13660046131e9565b6119cc565b348015610ae257600080fd5b506105076a4d61696e74656e616e636560a81b81565b348015610b0457600080fd5b506105077f77884798208df1e64f70968be41ef2d3211ec53613397ca59313416813df088881565b610585610b3a366004613136565b611a14565b348015610b4b57600080fd5b50610507611b6f565b348015610b6057600080fd5b50610585610b6f366004613062565b611c22565b348015610b8057600080fd5b506105076c14dd185ada5b99d4995dd85c99609a1b81565b348015610ba457600080fd5b5060008051602061356083398151915260005260026020527f38eb620cc1355554391bc9d0c224a726d66edf7c3eb2d67af166d6e81fe4456254610507565b348015610bef57600080fd5b506105077f9f1de481f899d76889aa8a2b44cc7b604d42691aa93d4ba618a1a1fd439f505081565b348015610c2357600080fd5b506105077fe10074dceffb75f13bf0ce50145afd35182d63796823f1280ce40e01c19109e781565b348015610c5757600080fd5b5060026020527fc77500645c8acbf6137a0e04460f85359483e3b08db30285cca2957db0c90904547fca55256fa8d248a334a7cb4ca72d9aec97700e81b3784b43c388b9a8d0e2b8e3547f77884798208df1e64f70968be41ef2d3211ec53613397ca59313416813df08886000527fba5524e01c8da4a46e6f70a8f29f4dc63d299ad01d2f01ccae9666cb85f6f7c05460408051938452602084019290925290820152606001610511565b348015610d0e57600080fd5b506105077111dbdd995c9b985b98d950dbdb9d1c9858dd60721b81565b348015610d3757600080fd5b5061050760008051602061362783398151915281565b348015610d5957600080fd5b506105076000805160206135a083398151915281565b348015610d7b57600080fd5b50610585610d8a366004613186565b611eba565b348015610d9b57600080fd5b50610585611f01565b348015610db057600080fd5b50610585610dbf3660046131e9565b611f15565b348015610dd057600080fd5b506000805160206134e083398151915260005260026020527f673c817b54d53459fa437d6b11ba6445e517d8dc789e6b815675ff10e6aeeb5d54610507565b348015610e1b57600080fd5b50609d54610725906001600160a01b031681565b348015610e3b57600080fd5b50610585610e4a366004613186565b611f52565b348015610e5b57600080fd5b506105077f9346226931826838eedd13d9677fa33551e7c81f604b171ef3fac355458da9aa81565b348015610e8f57600080fd5b5061050769456e7653746f7261676560b01b81565b348015610eb057600080fd5b50610585610ebf366004613186565b611f99565b348015610ed057600080fd5b50610585610edf3660046131b8565b611fe0565b348015610ef057600080fd5b50610585610eff3660046131e9565b61215e565b348015610f1057600080fd5b50610585610f1f36600461321e565b6121b4565b348015610f3057600080fd5b50606b546001600160a01b0316610725565b348015610f4e57600080fd5b5060026020527fe6679752544e0074a1c9bec26775117fd40d133ce43cc443fb5f2512ebd7c2af547f89fc1b873e9ef0767cf41719c69200c3f894c43d73c49eb537ca60ec0a2d14bc547fa04c555f883d07b5c5fe85061c632b6bfec696b67afa8ad5e9773b89249984b2547fdd5a41a7fc01f5c6d30816b17f638d6531625f1e1eaa599673ab2f6079f2dd9d6000527f286a480438fb7eb9f5465ec436e6de865b71284ceb2be7ff1cea98f38c26308254604080519485526020850193909352918301526060820152608001610511565b34801561102c57600080fd5b5061050761271081565b34801561104257600080fd5b50610a046110513660046131b8565b612289565b34801561106257600080fd5b50611076611071366004613186565b6123ea565b6040516105119190613314565b34801561108f57600080fd5b506105076c42616c6c6f7453746f7261676560981b81565b3480156110b357600080fd5b506105856110c2366004613186565b61248c565b3480156110d357600080fd5b506105856110e23660046131e9565b6124d3565b3480156110f357600080fd5b506105077f6c6f69f426081752a5d3e73746599acd2a4cb145d5de4203ca1e3473b281680b81565b34801561112757600080fd5b50610507611136366004613186565b60009081526006602052604090205490565b34801561115457600080fd5b50610585611163366004613028565b612510565b34801561117457600080fd5b5061050760008051602061356083398151915281565b34801561119657600080fd5b5061119f6125b8565b60408051928352602083019190915201610511565b3480156111c057600080fd5b5061050760008051602061350083398151915281565b3480156111e257600080fd5b506105856111f136600461321e565b612622565b34801561120257600080fd5b50610507611211366004613186565b60009081526002602052604090205490565b34801561122f57600080fd5b5061058561123e3660046131e9565b6126f9565b34801561124f57600080fd5b506105076000805160206134e083398151915281565b34801561127157600080fd5b50611076611280366004613186565b612748565b34801561129157600080fd5b5061050760008051602061352083398151915281565b3480156112b357600080fd5b506105077fb38b2c133e931937bd95337c65c8aefa7040ed64bbed732e3e29a4944c65747381565b3480156112e757600080fd5b506105077fc9e15e34073efbcd0328740feaf503caac9124b55b38c73d1a97b53da80a2f6081565b34801561131b57600080fd5b506105077f04f7b94450bbcad85f37ea47cd1062728f884bb2040e357738f8fd53056134bc81565b34801561134f57600080fd5b5060008051602061364783398151915260005260026020527f38ddebd16170f2328156b72e009b30efe6e74a1b9fc4389d05f50efa2a42c6f854610507565b34801561139a57600080fd5b5061119f612765565b3480156113af57600080fd5b506105076113be366004613186565b60009081526001602052604090205490565b3480156113dc57600080fd5b506105856113eb3660046131e9565b6127cb565b3480156113fc57600080fd5b5061058561140b366004613186565b61280e565b34801561141c57600080fd5b5061058561142b366004613028565b612855565b34801561143c57600080fd5b5061050760008051602061364783398151915281565b34801561145e57600080fd5b5061058561146d366004613186565b6128cb565b34801561147e57600080fd5b5061058561148d366004613186565b612912565b905090565b336114a0612959565b6001600160a01b0316146114cf5760405162461bcd60e51b81526004016114c690613327565b60405180910390fd5b61271081836114de86886133ee565b6114e891906133ee565b6114f291906133ee565b1461153f5760405162461bcd60e51b815260206004820152601e60248201527f57726f6e6720726577617264206469737472756274696f6e20726174696f000060448201526064016114c6565b6115697fc9e15e34073efbcd0328740feaf503caac9124b55b38c73d1a97b53da80a2f6085612979565b6115937f9f1de481f899d76889aa8a2b44cc7b604d42691aa93d4ba618a1a1fd439f505084612979565b6115bd7f9346226931826838eedd13d9677fa33551e7c81f604b171ef3fac355458da9aa83612979565b6115e77fdd5a41a7fc01f5c6d30816b17f638d6531625f1e1eaa599673ab2f6079f2dd9d82612979565b50505050565b336115f6612959565b6001600160a01b03161461161c5760405162461bcd60e51b81526004016114c690613327565b61162a61146d826020015190565b50565b33611636612959565b6001600160a01b03161461165c5760405162461bcd60e51b81526004016114c690613327565b61162a61140b826020015190565b33611673612959565b6001600160a01b0316146116995760405162461bcd60e51b81526004016114c690613327565b6116c37f1d36f8ce53f59e624857e1d8dc7932d19981a2ea1b8faa4eb8ff843fc3e5a27885612979565b6116ed7fb38b2c133e931937bd95337c65c8aefa7040ed64bbed732e3e29a4944c65747384612979565b6117177f77884798208df1e64f70968be41ef2d3211ec53613397ca59313416813df088883612979565b6115e760008051602061364783398151915282612979565b33611738612959565b6001600160a01b03161461175e5760405162461bcd60e51b81526004016114c690613327565b61162a6110c2826020015190565b33611775612959565b6001600160a01b03161461179b5760405162461bcd60e51b81526004016114c690613327565b61162a6000805160206135a083398151915282612979565b336117bc612959565b6001600160a01b0316146117e25760405162461bcd60e51b81526004016114c690613327565b61162a61148d826020015190565b336117f9612959565b6001600160a01b03161461181f5760405162461bcd60e51b81526004016114c690613327565b61162a60008051602061356083398151915282612979565b33611840612959565b6001600160a01b0316146118665760405162461bcd60e51b81526004016114c690613327565b61162a60008051602061352083398151915282612979565b6118866129c8565b6118a181604051806020016040528060008152506000612a22565b6040516001600160a01b038216907f2a74bbaf99cf25202925743012bb137262ab3432c821e1ba94ddbecac2ea970890600090a250565b336118e1612959565b6001600160a01b0316146119075760405162461bcd60e51b81526004016114c690613327565b61162a61084b826020015190565b3361191e612959565b6001600160a01b0316146119445760405162461bcd60e51b81526004016114c690613327565b61162a610e4a826020015190565b3361195b612959565b6001600160a01b0316146119815760405162461bcd60e51b81526004016114c690613327565b61162a610d8a826020015190565b33611998612959565b6001600160a01b0316146119be5760405162461bcd60e51b81526004016114c690613327565b61162a61088c826020015190565b336119d5612959565b6001600160a01b0316146119fb5760405162461bcd60e51b81526004016114c690613327565b60208101516040820151611a0f8282612622565b505050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161415611aa25760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b19195b1959d85d1958d85b1b60a21b60648201526084016114c6565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611aeb6000805160206135c0833981519152546001600160a01b031690565b6001600160a01b031614611b565760405162461bcd60e51b815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201526b6163746976652070726f787960a01b60648201526084016114c6565b611b5f82612b9c565b611b6b82826001612a22565b5050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c0f5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016114c6565b506000805160206135c083398151915290565b603854610100900460ff1615808015611c425750603854600160ff909116105b80611c5c5750303b158015611c5c575060385460ff166001145b611cbf5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016114c6565b6038805460ff191660011790558015611ce2576038805461ff0019166101001790555b6000805160206135c0833981519152546001600160a01b0385811691161415611d635760405162461bcd60e51b815260206004820152602d60248201527f72656769737472792073686f756c64206e6f742062652073616d65206173206960448201526c36b83632b6b2b73a30ba34b7b760991b60648201526084016114c6565b611d6b612bcb565b611d7484612510565b60005b8251811015611e6e576000611db1858381518110611d9757611d9761349e565b602002602001015160009081526002602052604090205490565b9050838281518110611dc557611dc561349e565b60200260200101516000141580611ddb57508015155b611e1a5760405162461bcd60e51b815260206004820152601060248201526f696e76616c6964207661726961626c6560801b60448201526064016114c6565b80611e5b57611e5b858381518110611e3457611e3461349e565b6020026020010151858481518110611e4e57611e4e61349e565b6020026020010151612979565b5080611e668161346d565b915050611d77565b5080156115e7576038805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b33611ec3612959565b6001600160a01b031614611ee95760405162461bcd60e51b81526004016114c690613327565b61162a60008051602061364783398151915282612979565b611f096129c8565b611f136000612bfa565b565b33611f1e612959565b6001600160a01b031614611f445760405162461bcd60e51b81526004016114c690613327565b61162a61080b826020015190565b33611f5b612959565b6001600160a01b031614611f815760405162461bcd60e51b81526004016114c690613327565b61162a60008051602061360783398151915282612979565b33611fa2612959565b6001600160a01b031614611fc85760405162461bcd60e51b81526004016114c690613327565b61162a60008051602061354083398151915282612979565b600080516020613607833981519152821415611fff57611b6b81611915565b7fe10074dceffb75f13bf0ce50145afd35182d63796823f1280ce40e01c19109e782141561203057611b6b816119cc565b7f6c6f69f426081752a5d3e73746599acd2a4cb145d5de4203ca1e3473b281680b82141561206157611b6b816127cb565b60008051602061350083398151915282141561208057611b6b816115ed565b60008051602061352083398151915282141561209f57611b6b8161198f565b6000805160206135608339815191528214156120be57611b6b816118d8565b6000805160206135808339815191528214156120dd57611b6b8161162d565b7f9b2e0c7fdae148f225bae7deb92d7e7bd24bb77edb12956e8fa7204900dd8a2282141561210e57611b6b8161215e565b7f04f7b94450bbcad85f37ea47cd1062728f884bb2040e357738f8fd53056134bc82141561213f57611b6b816126f9565b600080516020613647833981519152821415611b6b57611b6b81611952565b33612167612959565b6001600160a01b03161461218d5760405162461bcd60e51b81526004016114c690613327565b60208101516040820151606083015160808401516121ad84848484611497565b5050505050565b336121bd612959565b6001600160a01b0316146121e35760405162461bcd60e51b81526004016114c690613327565b808211156122595760405162461bcd60e51b815260206004820152603e60248201527f4d696e696d756d207374616b696e67206d75737420626520736d616c6c65722060448201527f616e6420657175616c207468616e206d6178696d756d207374616b696e67000060648201526084016114c6565b6122716000805160206135a083398151915283612979565b611b6b6000805160206134e083398151915282612979565b60007f9b2e0c7fdae148f225bae7deb92d7e7bd24bb77edb12956e8fa7204900dd8a2283141561231557600080600080858060200190518101906122cd9190613296565b9350935093509350612710818385876122e691906133ee565b6122f091906133ee565b6122fa91906133ee565b1461230c5760009450505050506123e4565b505050506123e0565b7f6c6f69f426081752a5d3e73746599acd2a4cb145d5de4203ca1e3473b281680b83148061236257507fe10074dceffb75f13bf0ce50145afd35182d63796823f1280ce40e01c19109e783145b1561239c576000808380602001905181019061237e9190613240565b9150915080821115612395576000925050506123e4565b50506123e0565b6000805160206135208339815191528314156123e0576000828060200190518101906123c8919061319f565b90506103e88110156123de5760009150506123e4565b505b5060015b92915050565b600081815260036020526040902080546060919061240790613432565b80601f016020809104026020016040519081016040528092919081815260200182805461243390613432565b80156124805780601f1061245557610100808354040283529160200191612480565b820191906000526020600020905b81548152906001019060200180831161246357829003601f168201915b50505050509050919050565b33612495612959565b6001600160a01b0316146124bb5760405162461bcd60e51b81526004016114c690613327565b61162a60008051602061362783398151915282612979565b336124dc612959565b6001600160a01b0316146125025760405162461bcd60e51b81526004016114c690613327565b61162a610ebf826020015190565b6125186129c8565b6001600160a01b03811661256e5760405162461bcd60e51b815260206004820152601a60248201527f416464726573732073686f756c64206265206e6f6e2d7a65726f00000000000060448201526064016114c6565b609d80546001600160a01b0319166001600160a01b0383169081179091556040517f278c70ced5f3e0e5eeb385b5ff9cb735748ba00a625147e66065ed48fc1562cd90600090a250565b60026020527fd7a437163435b79030132855d9146a10e26570f1767311219983e0c430cfa690546000805160206134e083398151915260009081527f673c817b54d53459fa437d6b11ba6445e517d8dc789e6b815675ff10e6aeeb5d54909182915b915091509091565b3361262b612959565b6001600160a01b0316146126515760405162461bcd60e51b81526004016114c690613327565b808211156126c9576040805162461bcd60e51b81526020600482015260248101919091527f4d696e696d756d206475726174696f6e206d75737420626520736d616c6c657260448201527f20616e6420657175616c207468616e206d6178696d756d206475726174696f6e60648201526084016114c6565b6126e160008051602061362783398151915283612979565b611b6b60008051602061354083398151915282612979565b33612702612959565b6001600160a01b0316146127285760405162461bcd60e51b81526004016114c690613327565b60208101516040820151606083015160808401516121ad8484848461166a565b600081815260056020526040902080546060919061240790613432565b60026020527f8e8c0bef3b4557d74ba01e0433728c574990153e35cacae69cb26f23a8a401755460008051602061354083398151915260009081527f5a1993193b8890c75d83157b2c2c12b144545357ab60021d7429856434de051b549091829161261a565b336127d4612959565b6001600160a01b0316146127fa5760405162461bcd60e51b81526004016114c690613327565b60208101516040820151611a0f82826121b4565b33612817612959565b6001600160a01b03161461283d5760405162461bcd60e51b81526004016114c690613327565b61162a60008051602061358083398151915282612979565b61285d6129c8565b6001600160a01b0381166128c25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016114c6565b61162a81612bfa565b336128d4612959565b6001600160a01b0316146128fa5760405162461bcd60e51b81526004016114c690613327565b61162a60008051602061350083398151915282612979565b3361291b612959565b6001600160a01b0316146129415760405162461bcd60e51b81526004016114c690613327565b61162a6000805160206134e083398151915282612979565b60006114927111dbdd995c9b985b98d950dbdb9d1c9858dd60721b612c4c565b6000828152600260205260409020819055817f58d7c10adfd5778016889c15d422d57f2975b9292415b54fe5d8cd4241200612826040516129bc91815260200190565b60405180910390a25050565b606b546001600160a01b03163314611f135760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016114c6565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612a5557611a0f83612cc9565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015612a8e57600080fd5b505afa925050508015612abe575060408051601f3d908101601f19168201909252612abb9181019061319f565b60015b612b215760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016114c6565b6000805160206135c08339815191528114612b905760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016114c6565b50611a0f838383612d65565b33612ba5612959565b6001600160a01b03161461162a5760405162461bcd60e51b81526004016114c690613327565b603854610100900460ff16612bf25760405162461bcd60e51b81526004016114c69061334e565b611f13612d8a565b606b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b609d54604051630d2020dd60e01b8152600481018390526000916001600160a01b031690630d2020dd9060240160206040518083038186803b158015612c9157600080fd5b505afa158015612ca5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e49190613045565b6001600160a01b0381163b612d365760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016114c6565b6000805160206135c083398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b612d6e83612dba565b600082511180612d7b5750805b15611a0f576115e78383612dfa565b603854610100900460ff16612db15760405162461bcd60e51b81526004016114c69061334e565b611f1333612bfa565b612dc381612cc9565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060612e1f83836040518060600160405280602781526020016135e060279139612e26565b9392505050565b6060600080856001600160a01b031685604051612e4391906132f8565b600060405180830381855af49150503d8060008114612e7e576040519150601f19603f3d011682016040523d82523d6000602084013e612e83565b606091505b5091509150612e9486838387612e9e565b9695505050505050565b60608315612f0a578251612f03576001600160a01b0385163b612f035760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016114c6565b5081612f14565b612f148383612f1c565b949350505050565b815115612f2c5781518083602001fd5b8060405162461bcd60e51b81526004016114c69190613314565b600082601f830112612f5757600080fd5b81356020612f6c612f67836133ca565b613399565b80838252828201915082860187848660051b8901011115612f8c57600080fd5b60005b85811015612fab57813584529284019290840190600101612f8f565b5090979650505050505050565b600082601f830112612fc957600080fd5b813567ffffffffffffffff811115612fe357612fe36134b4565b612ff6601f8201601f1916602001613399565b81815284602083860101111561300b57600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561303a57600080fd5b8135612e1f816134ca565b60006020828403121561305757600080fd5b8151612e1f816134ca565b60008060006060848603121561307757600080fd5b8335613082816134ca565b925060208481013567ffffffffffffffff808211156130a057600080fd5b818701915087601f8301126130b457600080fd5b81356130c2612f67826133ca565b8082825285820191508585018b878560051b88010111156130e257600080fd5b600095505b838610156131055780358352600195909501949186019186016130e7565b5096505050604087013592508083111561311e57600080fd5b505061312c86828701612f46565b9150509250925092565b6000806040838503121561314957600080fd5b8235613154816134ca565b9150602083013567ffffffffffffffff81111561317057600080fd5b61317c85828601612fb8565b9150509250929050565b60006020828403121561319857600080fd5b5035919050565b6000602082840312156131b157600080fd5b5051919050565b600080604083850312156131cb57600080fd5b82359150602083013567ffffffffffffffff81111561317057600080fd5b6000602082840312156131fb57600080fd5b813567ffffffffffffffff81111561321257600080fd5b612f1484828501612fb8565b6000806040838503121561323157600080fd5b50508035926020909101359150565b6000806040838503121561325357600080fd5b505080516020909101519092909150565b6000806000806080858703121561327a57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080608085870312156132ac57600080fd5b505082516020840151604085015160609095015191969095509092509050565b600081518084526132e4816020860160208601613406565b601f01601f19169290920160200192915050565b6000825161330a818460208701613406565b9190910192915050565b602081526000612e1f60208301846132cc565b6020808252600d908201526c2737902832b936b4b9b9b4b7b760991b604082015260600190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156133c2576133c26134b4565b604052919050565b600067ffffffffffffffff8211156133e4576133e46134b4565b5060051b60200190565b6000821982111561340157613401613488565b500190565b60005b83811015613421578181015183820152602001613409565b838111156115e75750506000910152565b600181811c9082168061344657607f821691505b6020821081141561346757634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561348157613481613488565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461162a57600080fdfe18ad4415ef4a621ce1a136395c51ab6c3712bb2e24b79d526059925cea58dcb8829561ab7af084b7efc6600518d2df79b8d95f3f4c3a550f54f8f7ec7d2b80578086da5becff4dfac91a3105821b361078d2d4abba0ccc2401b974cf0dcf05c10c4fbe9dc9de15dd7c0d064975ee1a2f2f9b954fa0e65d4f6cddba94884bdc3e89dd490ecaf395283ed4ff2fd9557ca767fc425dce063451a9b0da6d72f600c3be90e461bbdb9a95a694f7796912ea04244caf7f5b60ad7ded17e16821d3e44c0b09c9badbbeb6c813a598ee910770a39ccda797a1940439bb6e47fc6c87548b360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65642a268972a70c8c688b62366bdfdd9bb09cf19d3e5b6e7e7bb158e671ffdcedd2c69fc6b7d0efc934fd5a3581c7253a7107a952526bb6dbcd814ef8d8dae1f44a7c1150f0e1a39ff55552d52764f97e6c387e2a247e1df344369f122c4254be2fa2646970667358221220e0f696eb9fc517b07b00b2a83f401e991753610c49339f4fc99e62458bd6050364736f6c63430008060033"; var EnvStorageImp_contract = web3.eth.contract([{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_name","type":"bytes32"},{"indexed":false,"internalType":"address","name":"_value","type":"address"}],"name":"AddressVarableChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_name","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"_value","type":"bytes32"}],"name":"Bytes32VarableChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_name","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"_value","type":"bytes"}],"name":"BytesVarableChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_name","type":"bytes32"},{"indexed":false,"internalType":"int256","name":"_value","type":"int256"}],"name":"IntVarableChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"}],"name":"SetRegistry","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_name","type":"bytes32"},{"indexed":false,"internalType":"string","name":"_value","type":"string"}],"name":"StringVarableChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_name","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"_value","type":"uint256"}],"name":"UintVarableChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"UpgradeImplementation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"_name","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"_type","type":"uint256"},{"indexed":false,"internalType":"string","name":"_value","type":"string"}],"name":"VarableChanged","type":"event"},{"inputs":[],"name":"BALLOT_DURATION_MAX_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BALLOT_DURATION_MIN_MAX_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BALLOT_DURATION_MIN_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BALLOT_STORAGE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BASE_FEE_MAX_CHANGE_RATE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCKS_PER_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_CREATION_TIME_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_GASLIMIT_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_AMOUNT_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_BLOCK_PRODUCER_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_ECOSYSTEM_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_MAINTANANCE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_METHOD_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD_DISTRIBUTION_STAKING_REWARD_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ECOSYSTEM_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ENV_STORAGE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GASLIMIT_AND_BASE_FEE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GAS_TARGET_PERCENTAGE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GOV_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAINTENANCE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BASE_FEE_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_IDLE_BLOCK_INTERVAL_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PRIORITY_FEE_PER_GAS_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_POOL_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_MAX_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_MIN_MAX_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_MIN_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"STAKING_REWARD_NAME","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"envKey","type":"bytes32"},{"internalType":"bytes","name":"envVal","type":"bytes"}],"name":"checkVariableCondition","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"getAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBallotDurationMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBallotDurationMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBallotDurationMinMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBlockCreationTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBlockRewardAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBlockRewardDistributionMethod","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBlocksPer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"getBoolean","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"getBytes","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"getBytes32","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getGasLimitAndBaseFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"getInt","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxBaseFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxIdleBlockInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxPriorityFeePerGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakingMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakingMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStakingMinMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"getString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"getUint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_registry","type":"address"},{"internalType":"bytes32[]","name":"names","type":"bytes32[]"},{"internalType":"uint256[]","name":"infos","type":"uint256[]"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reg","outputs":[{"internalType":"contract IRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setBallotDurationMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"setBallotDurationMaxByBytes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setBallotDurationMin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"setBallotDurationMinByBytes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setBallotDurationMinMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"setBallotDurationMinMaxByBytes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setBlockCreationTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"setBlockCreationTimeByBytes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setBlockRewardAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"setBlockRewardAmountByBytes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_block_producer","type":"uint256"},{"internalType":"uint256","name":"_staking_reward","type":"uint256"},{"internalType":"uint256","name":"_ecofund","type":"uint256"},{"internalType":"uint256","name":"_maintanance","type":"uint256"}],"name":"setBlockRewardDistributionMethod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"setBlockRewardDistributionMethodByBytes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setBlocksPer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"setBlocksPerByBytes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_block_GasLimit","type":"uint256"},{"internalType":"uint256","name":"_baseFeeMaxChangeRate","type":"uint256"},{"internalType":"uint256","name":"_gasTargetPercentage","type":"uint256"},{"internalType":"uint256","name":"_maxBaseFee","type":"uint256"}],"name":"setGasLimitAndBaseFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"setGasLimitAndBaseFeeByBytes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMaxBaseFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"setMaxBaseFeeByBytes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMaxIdleBlockInterval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"setMaxIdleBlockIntervalByBytes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMaxPriorityFeePerGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"setMaxPriorityFeePerGasByBytes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"setRegistry","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setStakingMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"setStakingMaxByBytes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setStakingMin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"setStakingMinByBytes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_min","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"name":"setStakingMinMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes","name":"_value","type":"bytes"}],"name":"setStakingMinMaxByBytes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"envKey","type":"bytes32"},{"internalType":"bytes","name":"envVal","type":"bytes"}],"name":"setVariable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"}],"name":"upgradeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"upgradeToAndCall","outputs":[],"stateMutability":"payable","type":"function"}]); function EnvStorageImp_new() { @@ -324,7 +362,7 @@ function EnvStorageImp_new() { function EnvStorageImp_load(addr) { return EnvStorageImp_contract.at(addr); } -var EternalStorage_data = "0x608060405234801561001057600080fd5b5061034c806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063a6ed563e1161005b578063a6ed563e1461011b578063bd02d0f514610149578063c031a18014610169578063dc97d9621461017c57600080fd5b806321f8a721146100825780633848207a146100c8578063986e791a146100fb575b600080fd5b6100ab61009036600461025b565b6000908152600460205260409020546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b6100eb6100d636600461025b565b60009081526020819052604090205460ff1690565b60405190151581526020016100bf565b61010e61010936600461025b565b61019c565b6040516100bf91906102c1565b61013b61012936600461025b565b60009081526006602052604090205490565b6040519081526020016100bf565b61013b61015736600461025b565b60009081526002602052604090205490565b61010e61017736600461025b565b61023e565b61013b61018a36600461025b565b60009081526001602052604090205490565b60008181526003602052604090208054606091906101b9906102db565b80601f01602080910402602001604051908101604052809291908181526020018280546101e5906102db565b80156102325780601f1061020757610100808354040283529160200191610232565b820191906000526020600020905b81548152906001019060200180831161021557829003601f168201915b50505050509050919050565b60008181526005602052604090208054606091906101b9906102db565b60006020828403121561026d57600080fd5b5035919050565b6000815180845260005b8181101561029a5760208185018101518683018201520161027e565b818111156102ac576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006102d46020830184610274565b9392505050565b600181811c908216806102ef57607f821691505b6020821081141561031057634e487b7160e01b600052602260045260246000fd5b5091905056fea264697066735822122072b40f2ff4303670422e15b03800ef14920a8f428d9943884a317ac46cefcd8b64736f6c63430008060033"; +var EternalStorage_data = "0x608060405234801561001057600080fd5b5061034c806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063a6ed563e1161005b578063a6ed563e1461011b578063bd02d0f514610149578063c031a18014610169578063dc97d9621461017c57600080fd5b806321f8a721146100825780633848207a146100c8578063986e791a146100fb575b600080fd5b6100ab61009036600461025b565b6000908152600460205260409020546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b6100eb6100d636600461025b565b60009081526020819052604090205460ff1690565b60405190151581526020016100bf565b61010e61010936600461025b565b61019c565b6040516100bf91906102c1565b61013b61012936600461025b565b60009081526006602052604090205490565b6040519081526020016100bf565b61013b61015736600461025b565b60009081526002602052604090205490565b61010e61017736600461025b565b61023e565b61013b61018a36600461025b565b60009081526001602052604090205490565b60008181526003602052604090208054606091906101b9906102db565b80601f01602080910402602001604051908101604052809291908181526020018280546101e5906102db565b80156102325780601f1061020757610100808354040283529160200191610232565b820191906000526020600020905b81548152906001019060200180831161021557829003601f168201915b50505050509050919050565b60008181526005602052604090208054606091906101b9906102db565b60006020828403121561026d57600080fd5b5035919050565b6000815180845260005b8181101561029a5760208185018101518683018201520161027e565b818111156102ac576000602083870101525b50601f01601f19169290920160200192915050565b6020815260006102d46020830184610274565b9392505050565b600181811c908216806102ef57607f821691505b6020821081141561031057634e487b7160e01b600052602260045260246000fd5b5091905056fea2646970667358221220ac4f7f28e6a08c52d379a652549f91bf3bbf30158a9230a066650ba69d16b57d64736f6c63430008060033"; var EternalStorage_contract = web3.eth.contract([{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"getAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"getBoolean","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"getBytes","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"getBytes32","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"getInt","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"getString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"h","type":"bytes32"}],"name":"getUint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]); function EternalStorage_new() { @@ -343,7 +381,7 @@ function EternalStorage_new() { function EternalStorage_load(addr) { return EternalStorage_contract.at(addr); } -var Staking_data = "0x608060405234801561001057600080fd5b506040516106fc3803806106fc83398101604081905261002f91610301565b80604051806020016040528060008152506100528282600061005a60201b60201c565b5050506103a5565b61006383610090565b6000825111806100705750805b1561008b5761008983836100d060201b61008b1760201c565b505b505050565b610099816100fc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606100f583836040518060600160405280602781526020016106d5602791396101ce565b9392505050565b61010f8161024760201b6100b71760201c565b6101765760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101ad7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61025660201b6100c61760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080856001600160a01b0316856040516101eb919061032a565b600060405180830381855af49150503d8060008114610226576040519150601f19603f3d011682016040523d82523d6000602084013e61022b565b606091505b50909250905061023d86838387610259565b9695505050505050565b6001600160a01b03163b151590565b90565b606083156102c55782516102be576001600160a01b0385163b6102be5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161016d565b50816102cf565b6102cf83836102d7565b949350505050565b8151156102e75781518083602001fd5b8060405162461bcd60e51b815260040161016d9190610346565b60006020828403121561031357600080fd5b81516001600160a01b03811681146100f557600080fd5b6000825161033c818460208701610379565b9190910192915050565b6020815260008251806020840152610365816040850160208701610379565b601f01601f19169190910160400192915050565b60005b8381101561039457818101518382015260200161037c565b838111156100895750506000910152565b610321806103b46000396000f3fe6080604052600436106100225760003560e01c80635c60da1b1461003957610031565b366100315761002f61006a565b005b61002f61006a565b34801561004557600080fd5b5061004e61007c565b6040516001600160a01b03909116815260200160405180910390f35b61007a6100756100c9565b6100fc565b565b60006100866100c9565b905090565b60606100b083836040518060600160405280602781526020016102c560279139610120565b9392505050565b6001600160a01b03163b151590565b90565b60006100867f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b3660008037600080366000845af43d6000803e80801561011b573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161013d9190610245565b600060405180830381855af49150503d8060008114610178576040519150601f19603f3d011682016040523d82523d6000602084013e61017d565b606091505b509150915061018e86838387610198565b9695505050505050565b60608315610209578251610202576001600160a01b0385163b6102025760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610213565b610213838361021b565b949350505050565b81511561022b5781518083602001fd5b8060405162461bcd60e51b81526004016101f99190610261565b60008251610257818460208701610294565b9190910192915050565b6020815260008251806020840152610280816040850160208701610294565b601f01601f19169190910160400192915050565b60005b838110156102af578181015183820152602001610297565b838111156102be576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220058c9d2df6c727a5df93aec4fe52de8383691f623d0659e594c4849e76ee76ef64736f6c63430008060033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564"; +var Staking_data = "0x608060405234801561001057600080fd5b506040516106fc3803806106fc83398101604081905261002f91610301565b80604051806020016040528060008152506100528282600061005a60201b60201c565b5050506103a5565b61006383610090565b6000825111806100705750805b1561008b5761008983836100d060201b61008b1760201c565b505b505050565b610099816100fc565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606100f583836040518060600160405280602781526020016106d5602791396101ce565b9392505050565b61010f8161024760201b6100b71760201c565b6101765760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101ad7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61025660201b6100c61760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080856001600160a01b0316856040516101eb919061032a565b600060405180830381855af49150503d8060008114610226576040519150601f19603f3d011682016040523d82523d6000602084013e61022b565b606091505b50909250905061023d86838387610259565b9695505050505050565b6001600160a01b03163b151590565b90565b606083156102c55782516102be576001600160a01b0385163b6102be5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161016d565b50816102cf565b6102cf83836102d7565b949350505050565b8151156102e75781518083602001fd5b8060405162461bcd60e51b815260040161016d9190610346565b60006020828403121561031357600080fd5b81516001600160a01b03811681146100f557600080fd5b6000825161033c818460208701610379565b9190910192915050565b6020815260008251806020840152610365816040850160208701610379565b601f01601f19169190910160400192915050565b60005b8381101561039457818101518382015260200161037c565b838111156100895750506000910152565b610321806103b46000396000f3fe6080604052600436106100225760003560e01c80635c60da1b1461003957610031565b366100315761002f61006a565b005b61002f61006a565b34801561004557600080fd5b5061004e61007c565b6040516001600160a01b03909116815260200160405180910390f35b61007a6100756100c9565b6100fc565b565b60006100866100c9565b905090565b60606100b083836040518060600160405280602781526020016102c560279139610120565b9392505050565b6001600160a01b03163b151590565b90565b60006100867f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b3660008037600080366000845af43d6000803e80801561011b573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161013d9190610245565b600060405180830381855af49150503d8060008114610178576040519150601f19603f3d011682016040523d82523d6000602084013e61017d565b606091505b509150915061018e86838387610198565b9695505050505050565b60608315610209578251610202576001600160a01b0385163b6102025760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610213565b610213838361021b565b949350505050565b81511561022b5781518083602001fd5b8060405162461bcd60e51b81526004016101f99190610261565b60008251610257818460208701610294565b9190910192915050565b6020815260008251806020840152610280816040850160208701610294565b601f01601f19169190910160400192915050565b60005b838110156102af578181015183820152602001610297565b838111156102be576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220839a0cb41c3d012b48b19048fd1ad031cef0b02d72b29b01780f35f1bb4a9cfc64736f6c63430008060033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564"; var Staking_contract = web3.eth.contract([{"inputs":[{"internalType":"address","name":"_imp","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"implementation","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]); function Staking_new() { @@ -413,7 +451,7 @@ function ReentrancyGuardUpgradeable_new() { function ReentrancyGuardUpgradeable_load(addr) { return ReentrancyGuardUpgradeable_contract.at(addr); } -var AddressUpgradeable_data = "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a746faf2ed7a73ff3d241e1d2be05463918eede2fcf00d56967801d2b19d393564736f6c63430008060033"; +var AddressUpgradeable_data = "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220b50b6c30c94fb82b5f11e3d987d7594607bddec7339be075492201c032bbda4264736f6c63430008060033"; var AddressUpgradeable_contract = web3.eth.contract([]); function AddressUpgradeable_new() { @@ -500,7 +538,7 @@ function IERC1822Proxiable_new() { function IERC1822Proxiable_load(addr) { return IERC1822Proxiable_contract.at(addr); } -var ERC1967Proxy_data = "0x6080604052604051610735380380610735833981016040819052610022916102dc565b61002e82826000610035565b505061043b565b61003e8361006b565b60008251118061004b5750805b156100665761006483836100ab60201b6100291760201c565b505b505050565b610074816100d7565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606100d0838360405180606001604052806027815260200161070e602791396101a9565b9392505050565b6100ea8161022260201b6100551760201c565b6101515760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101887f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61023160201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080856001600160a01b0316856040516101c691906103aa565b600060405180830381855af49150503d8060008114610201576040519150601f19603f3d011682016040523d82523d6000602084013e610206565b606091505b50909250905061021886838387610234565b9695505050505050565b6001600160a01b03163b151590565b90565b606083156102a0578251610299576001600160a01b0385163b6102995760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610148565b50816102aa565b6102aa83836102b2565b949350505050565b8151156102c25781518083602001fd5b8060405162461bcd60e51b815260040161014891906103c6565b600080604083850312156102ef57600080fd5b82516001600160a01b038116811461030657600080fd5b60208401519092506001600160401b038082111561032357600080fd5b818501915085601f83011261033757600080fd5b81518181111561034957610349610425565b604051601f8201601f19908116603f0116810190838211818310171561037157610371610425565b8160405282815288602084870101111561038a57600080fd5b61039b8360208301602088016103f9565b80955050505050509250929050565b600082516103bc8184602087016103f9565b9190910192915050565b60208152600082518060208401526103e58160408501602087016103f9565b601f01601f19169190910160400192915050565b60005b838110156104145781810151838201526020016103fc565b838111156100645750506000910152565b634e487b7160e01b600052604160045260246000fd5b6102c48061044a6000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b61009f565b565b606061004e8383604051806060016040528060278152602001610268602791396100c3565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156100be573d6000f35b3d6000fd5b6060600080856001600160a01b0316856040516100e091906101e8565b600060405180830381855af49150503d806000811461011b576040519150601f19603f3d011682016040523d82523d6000602084013e610120565b606091505b50915091506101318683838761013b565b9695505050505050565b606083156101ac5782516101a5576001600160a01b0385163b6101a55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b50816101b6565b6101b683836101be565b949350505050565b8151156101ce5781518083602001fd5b8060405162461bcd60e51b815260040161019c9190610204565b600082516101fa818460208701610237565b9190910192915050565b6020815260008251806020840152610223816040850160208701610237565b601f01601f19169190910160400192915050565b60005b8381101561025257818101518382015260200161023a565b83811115610261576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220cdd5599bb367e8a59cea215320e33bd79b4bf23c2693ea587e435e8296fb1e2164736f6c63430008060033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564"; +var ERC1967Proxy_data = "0x6080604052604051610735380380610735833981016040819052610022916102dc565b61002e82826000610035565b505061043b565b61003e8361006b565b60008251118061004b5750805b156100665761006483836100ab60201b6100291760201c565b505b505050565b610074816100d7565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606100d0838360405180606001604052806027815260200161070e602791396101a9565b9392505050565b6100ea8161022260201b6100551760201c565b6101515760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101887f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61023160201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060600080856001600160a01b0316856040516101c691906103aa565b600060405180830381855af49150503d8060008114610201576040519150601f19603f3d011682016040523d82523d6000602084013e610206565b606091505b50909250905061021886838387610234565b9695505050505050565b6001600160a01b03163b151590565b90565b606083156102a0578251610299576001600160a01b0385163b6102995760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610148565b50816102aa565b6102aa83836102b2565b949350505050565b8151156102c25781518083602001fd5b8060405162461bcd60e51b815260040161014891906103c6565b600080604083850312156102ef57600080fd5b82516001600160a01b038116811461030657600080fd5b60208401519092506001600160401b038082111561032357600080fd5b818501915085601f83011261033757600080fd5b81518181111561034957610349610425565b604051601f8201601f19908116603f0116810190838211818310171561037157610371610425565b8160405282815288602084870101111561038a57600080fd5b61039b8360208301602088016103f9565b80955050505050509250929050565b600082516103bc8184602087016103f9565b9190910192915050565b60208152600082518060208401526103e58160408501602087016103f9565b601f01601f19169190910160400192915050565b60005b838110156104145781810151838201526020016103fc565b838111156100645750506000910152565b634e487b7160e01b600052604160045260246000fd5b6102c48061044a6000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b61009f565b565b606061004e8383604051806060016040528060278152602001610268602791396100c3565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156100be573d6000f35b3d6000fd5b6060600080856001600160a01b0316856040516100e091906101e8565b600060405180830381855af49150503d806000811461011b576040519150601f19603f3d011682016040523d82523d6000602084013e610120565b606091505b50915091506101318683838761013b565b9695505050505050565b606083156101ac5782516101a5576001600160a01b0385163b6101a55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b50816101b6565b6101b683836101be565b949350505050565b8151156101ce5781518083602001fd5b8060405162461bcd60e51b815260040161019c9190610204565b600082516101fa818460208701610237565b9190910192915050565b6020815260008251806020840152610223816040850160208701610237565b601f01601f19169190910160400192915050565b60005b8381101561025257818101518382015260200161023a565b83811115610261576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b13d484bcf179f9e8a1cd014e4c7008f54197ec23be6ca5a9d544c94e2d09e4264736f6c63430008060033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564"; var ERC1967Proxy_contract = web3.eth.contract([{"inputs":[{"internalType":"address","name":"_logic","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"previousAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"AdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"beacon","type":"address"}],"name":"BeaconUpgraded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"implementation","type":"address"}],"name":"Upgraded","type":"event"},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}]); function ERC1967Proxy_new() { @@ -587,7 +625,7 @@ function UUPSUpgradeable_new() { function UUPSUpgradeable_load(addr) { return UUPSUpgradeable_contract.at(addr); } -var Address_data = "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e381f16d3b6d30f0fea09cdebb4bf1e0e2fefc3cf496384e760a422073c6a3c664736f6c63430008060033"; +var Address_data = "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a9a04416237d497852b1d9b0b90768b8b65b230a9ee628d6d6816861b1f57a2064736f6c63430008060033"; var Address_contract = web3.eth.contract([]); function Address_new() { @@ -623,7 +661,7 @@ function Context_new() { function Context_load(addr) { return Context_contract.at(addr); } -var StorageSlot_data = "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212204fa02b48d3edf5d3c09fa0b1074b71b85d22d270427ddb112620d1aa159fad7564736f6c63430008060033"; +var StorageSlot_data = "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220a1d1695d0ec1924827463ec5fe9bb8c96c0188765cb6667f9558c430937f202064736f6c63430008060033"; var StorageSlot_contract = web3.eth.contract([]); function StorageSlot_new() { diff --git a/metadium/miner/miner.go b/metadium/miner/miner.go index ba3cda494349..6c8dec971ea4 100644 --- a/metadium/miner/miner.go +++ b/metadium/miner/miner.go @@ -30,6 +30,8 @@ var ( AcquireMiningTokenFunc func(height *big.Int, parentHash common.Hash) (bool, error) ReleaseMiningTokenFunc func(height *big.Int, hash, parentHash common.Hash) error HasMiningTokenFunc func() bool + // Add TRS + GetTRSListMapFunc func(height *big.Int) (trsListMap map[common.Address]bool, trsSubscribe bool, err error) ) func IsMiner() bool { @@ -170,4 +172,15 @@ func GetBlockBuildParameters(height *big.Int) (blockInterval int64, maxBaseFee, } } +// Add TRS +func GetTRSListMap(height *big.Int) (trsListMap map[common.Address]bool, trsSubscribe bool, err error) { + if GetTRSListMapFunc == nil { + err = ErrNotInitialized + trsSubscribe = false + } else { + trsListMap, trsSubscribe, err = GetTRSListMapFunc(height) + } + return +} + // EOF diff --git a/metadium/scripts/deploy-governance.js b/metadium/scripts/deploy-governance.js index 5ce9494c6f66..340ed1629445 100644 --- a/metadium/scripts/deploy-governance.js +++ b/metadium/scripts/deploy-governance.js @@ -268,6 +268,17 @@ var GovernanceDeployer = new function() { ballotStorage = this.resolveContract(BallotStorage_contract.abi, ballotStorage) staking = this.resolveContract(Staking_contract.abi, staking) + // Add TRS + // deploy trsList contract + var trslist,trslistImp + trslistImp = this.deployContract(TRSListImp_data) + this.log("Waiting for trslistImp contract receipts...") + trslistImp = this.resolveContract(TRSListImp_contract.abi, trslistImp) + code = TRSList_contract.getData(trslistImp.address, { data: TRSList_data }) + trslist = this.deployContract(code) + this.log("Waiting for trslist contract receipts...") + trslist = this.resolveContract(TRSList_contract.abi, trslist) + // 3. setup registry this.log("Setting registry...") txs.length = 0 @@ -283,6 +294,10 @@ var GovernanceDeployer = new function() { txs[txs.length] = this.sendTx(registry.address, null, registry.setContractDomain.getData( "GovernanceContract", gov.address)) + // Add TRS + txs[txs.length] = this.sendTx(registry.address, null, + registry.setContractDomain.getData( + "TRSList", trslist.address)) if (initData.staker) txs[txs.length] = this.sendTx(registry.address, null, registry.setContractDomain.getData( @@ -350,6 +365,12 @@ var GovernanceDeployer = new function() { txs[txs.length] = this.sendTx(envStorage.address, null, tmpEnvStorageImp.initialize.getData(registry.address, envNames, envValues)) + // 4.1 initialize trslist: + this.log("Initializing trslist ...") + var tmptrslistImp = web3.eth.contract(trslistImp.abi).at(trslist.address) + txs[txs.length] = this.sendTx(trslist.address, null, + tmptrslistImp.initialize.getData(registry.address)) + // 5. deposit staking var tmpStakingImp = web3.eth.contract(stakingImp.abi).at(staking.address) code = tmpStakingImp.init.getData(registry.address, @@ -358,7 +379,7 @@ var GovernanceDeployer = new function() { txs[txs.length] = this.sendStakingDeposit(staking.address, tmpStakingImp.deposit.getData(), web3.toBigNumber(bootNode.stake).toString(10)); for(i=0;i 0 && env.trsSubscribe { + if env.trsListMap[from] || (tx.To() != nil && env.trsListMap[*tx.To()]) { + log.Debug("included in trsList", "hash", tx.Hash(), "from", from) + txs.Pop() + continue + } + } + // Start executing the transaction env.state.Prepare(tx.Hash(), env.tcount) @@ -1645,6 +1658,12 @@ func (w *worker) commitWork(interrupt *int32, noempty bool, timestamp int64) { if coinbase, err := metaminer.GetCoinbase(work.header.Number); err == nil { work.coinbase = coinbase } + // Add TRS + // Set the trsList and the node's trs subscription information to the work. + if trsListMap, trsSubscribe, _ := metaminer.GetTRSListMap(big.NewInt(work.header.Number.Int64() - 1)); trsListMap != nil && err == nil { + work.trsListMap = trsListMap + work.trsSubscribe = trsSubscribe + } } if err != nil { return diff --git a/node/api.go b/node/api.go index 0daac1bf38b5..7f10548fdabc 100644 --- a/node/api.go +++ b/node/api.go @@ -337,6 +337,12 @@ func (api *publicAdminAPI) Datadir() string { return api.node.DataDir() } +// Add TRS +// TrsInfo retrieves the information about Transaction Restriction Service(TRS) +func (api *publicAdminAPI) TrsInfo(height rpc.BlockNumber) interface{} { + return metaapi.TRSInfo(height) +} + // MetadiumInfo retrieves the information about Metadium func (api *publicAdminAPI) MetadiumInfo() interface{} { return metaapi.Info() From 0a0825598f39e06a0460e43392acc839aa33df45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=92=E1=85=A1=E1=86=AB=E1=84=8B=E1=85=AF=E1=86=AB?= =?UTF-8?q?=E1=84=8C=E1=85=AE=E1=86=AB?= Date: Tue, 28 May 2024 09:00:16 +0900 Subject: [PATCH 2/7] core/state/snapshot, ethdb/rocksdb: Fixed RocksDB Iterator error. --- core/state/snapshot/generate.go | 3 +-- ethdb/rocksdb/rocksdb.go | 5 +++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/core/state/snapshot/generate.go b/core/state/snapshot/generate.go index dadce4ea5cee..769989aec21c 100644 --- a/core/state/snapshot/generate.go +++ b/core/state/snapshot/generate.go @@ -615,8 +615,7 @@ func generateAccounts(ctx *generatorContext, dl *diskLayer, accMarker []byte) er // If the iterated account is the contract, create a further loop to // verify or regenerate the contract storage. if acc.Root == emptyRoot { - log.Debug("removeStorageAt skip for rocksdb") - // ctx.removeStorageAt(account) + ctx.removeStorageAt(account) } else { var storeMarker []byte if accMarker != nil && bytes.Equal(account[:], accMarker) && len(dl.genMarker) > common.HashLength { diff --git a/ethdb/rocksdb/rocksdb.go b/ethdb/rocksdb/rocksdb.go index f19a7a6802a3..e0466aad3012 100644 --- a/ethdb/rocksdb/rocksdb.go +++ b/ethdb/rocksdb/rocksdb.go @@ -272,6 +272,11 @@ func (it *RDBIterator) Next() bool { if it.first { it.first = false } else { + // Added conditions to prevent Rocksdb Iterator error. + // Valid() call is a RocksDB requirement. + if C.rocksdb_iter_valid(it.it) == 0 { + return false + } C.rocksdb_iter_next(it.it) } return C.rocksdb_iter_valid(it.it) != 0 From c71a667d27938894ce5dfd86f5803755c8a0e79f Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Wed, 9 Aug 2023 16:00:31 +0200 Subject: [PATCH 3/7] p2p: move ping handling into pingLoop goroutine (#27887) Moving the response sending there allows tracking all peer goroutines in the peer WaitGroup. --- p2p/peer.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/p2p/peer.go b/p2p/peer.go index 257027a5b74d..3d01858c9f28 100644 --- a/p2p/peer.go +++ b/p2p/peer.go @@ -112,6 +112,7 @@ type Peer struct { wg sync.WaitGroup protoErr chan error closed chan struct{} + pingRecv chan struct{} disc chan DiscReason // events receives message send / receive events if set @@ -233,6 +234,7 @@ func newPeer(log log.Logger, conn *conn, protocols []Protocol) *Peer { disc: make(chan DiscReason), protoErr: make(chan error, len(protomap)+1), // protocols + pingLoop closed: make(chan struct{}), + pingRecv: make(chan struct{}, 16), log: log.New("id", conn.node.ID(), "conn", conn.flags), } return p @@ -293,9 +295,11 @@ loop: } func (p *Peer) pingLoop() { - ping := time.NewTimer(pingInterval) defer p.wg.Done() + + ping := time.NewTimer(pingInterval) defer ping.Stop() + for { select { case <-ping.C: @@ -304,6 +308,10 @@ func (p *Peer) pingLoop() { return } ping.Reset(pingInterval) + + case <-p.pingRecv: + SendItems(p.rw, pongMsg) + case <-p.closed: return } @@ -330,7 +338,10 @@ func (p *Peer) handle(msg Msg) error { switch { case msg.Code == pingMsg: msg.Discard() - go SendItems(p.rw, pongMsg) + select { + case p.pingRecv <- struct{}{}: + case <-p.closed: + } case msg.Code == discMsg: // This is the last message. We don't need to discard or // check errors because, the connection will be closed after it. From 5ff16aee602550ce07134d8bd8d6f0fbe42058db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=92=E1=85=A1=E1=86=AB=E1=84=8B=E1=85=AF=E1=86=AB?= =?UTF-8?q?=E1=84=8C=E1=85=AE=E1=86=AB?= Date: Tue, 28 May 2024 15:59:34 +0900 Subject: [PATCH 4/7] Makefile: Fixed gmet-linux build error that occurred when Dockerfile.metadium was updated with ubuntu focus. --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index f4f90868bd2d..55bf4d08ef52 100644 --- a/Makefile +++ b/Makefile @@ -120,9 +120,9 @@ gmet-linux: docker build -t meta/builder:local \ -f Dockerfile.metadium . && \ docker run -e HOME=/tmp --rm -v $(shell pwd):/data \ - -u $(shell id -u):$(shell id -g) \ -w /data meta/builder:local \ - "make USE_ROCKSDB=$(USE_ROCKSDB)"; \ + "git config --global --add safe.directory /data;\ + make USE_ROCKSDB=$(USE_ROCKSDB)"; \ fi ifneq ($(USE_ROCKSDB), YES) From e5607b3cea937e573df95f4bb11df8cd6cc4e0ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=92=E1=85=A1=E1=86=AB=E1=84=8B=E1=85=AF=E1=86=AB?= =?UTF-8?q?=E1=84=8C=E1=85=AE=E1=86=AB?= Date: Thu, 30 May 2024 08:50:43 +0900 Subject: [PATCH 5/7] Makefile: Fixed 'permission denied' error when make clean after Docker make in Ubuntu. --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index 55bf4d08ef52..492e1b3a7d58 100644 --- a/Makefile +++ b/Makefile @@ -120,6 +120,7 @@ gmet-linux: docker build -t meta/builder:local \ -f Dockerfile.metadium . && \ docker run -e HOME=/tmp --rm -v $(shell pwd):/data \ + -u $(shell id -u):$(shell id -g) \ -w /data meta/builder:local \ "git config --global --add safe.directory /data;\ make USE_ROCKSDB=$(USE_ROCKSDB)"; \ From ffa9f27a4c963b86f0babf21091419ae88aef7dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=92=E1=85=A1=E1=86=AB=E1=84=8B=E1=85=AF=E1=86=AB?= =?UTF-8?q?=E1=84=8C=E1=85=AE=E1=86=AB?= Date: Tue, 4 Jun 2024 11:24:20 +0900 Subject: [PATCH 6/7] core,light,metadium: Changed logic to improve TRS performance. - Changed the logic to get TRS information into Txpool. - Added a function to store the block number of cached TRS information and find it by block number. --- core/tx_pool.go | 42 ++++++++++++++++++------------------------ light/txpool.go | 15 ++++++++++++--- metadium/admin.go | 33 ++++++++++++++++++++++++++++++++- 3 files changed, 62 insertions(+), 28 deletions(-) diff --git a/core/tx_pool.go b/core/tx_pool.go index f8e293917385..37ba07669710 100644 --- a/core/tx_pool.go +++ b/core/tx_pool.go @@ -253,6 +253,9 @@ type TxPool struct { eip1559 bool // Fork indicator whether we are using EIP-1559 type transactions. // fee delegation feedelegation bool // Fork indicator whether we are using fee delegation type transactions. + // Add TRS + trsListMap map[common.Address]bool + trsSubscribe bool currentState *state.StateDB // Current state in the blockchain head pendingNonces *txNoncer // Pending state tracking virtual nonces @@ -444,13 +447,12 @@ func (pool *TxPool) loop() { case <-trsTicker.C: // Removes the transaction included in trsList regardless of TRS subscription. if !metaminer.IsPoW() { - trsListMap, _, _ := metaminer.GetTRSListMap(pool.chain.CurrentBlock().Number()) - if len(trsListMap) > 0 { + if len(pool.trsListMap) > 0 { pool.mu.Lock() for addr := range pool.pending { list := pool.pending[addr].Flatten() for _, tx := range list { - if trsListMap[addr] || (tx.To() != nil && trsListMap[*tx.To()]) { + if pool.trsListMap[addr] || (tx.To() != nil && pool.trsListMap[*tx.To()]) { log.Debug("Discard pending transaction included in trsList", "hash", tx.Hash(), "addr", addr) pool.removeTx(tx.Hash(), true) pendingDiscardMeter.Mark(int64(1)) @@ -731,9 +733,8 @@ func (pool *TxPool) validateTx(tx *types.Transaction, local bool) error { // Add TRS // Only nodes that subscribe to TRS removes transactions included in trsList. if !metaminer.IsPoW() { - trsListMap, trsSubscribe, _ := metaminer.GetTRSListMap(pool.chain.CurrentBlock().Number()) - if len(trsListMap) > 0 && trsSubscribe { - if trsListMap[from] || (tx.To() != nil && trsListMap[*tx.To()]) { + if len(pool.trsListMap) > 0 && pool.trsSubscribe { + if pool.trsListMap[from] || (tx.To() != nil && pool.trsListMap[*tx.To()]) { return ErrIncludedTRSList } } @@ -1438,6 +1439,13 @@ func (pool *TxPool) reset(oldHead, newHead *types.Header) { pool.eip1559 = pool.chainconfig.IsLondon(next) // fee delegation pool.feedelegation = pool.chainconfig.IsApplepie(next) + // Add TRS + if !metaminer.IsPoW() { + pool.trsListMap, pool.trsSubscribe, _ = metaminer.GetTRSListMap(newHead.Number) + } else { + pool.trsListMap = nil + pool.trsSubscribe = false + } } // promoteExecutables moves transactions that have become processable from the @@ -1447,13 +1455,6 @@ func (pool *TxPool) promoteExecutables(accounts []common.Address) []*types.Trans // Track the promoted transactions to broadcast them at once var promoted []*types.Transaction - // Add TRS - var trsListMap map[common.Address]bool - var trsSubscribe bool - if !metaminer.IsPoW() { - trsListMap, trsSubscribe, _ = metaminer.GetTRSListMap(pool.chain.CurrentBlock().Number()) - } - // Iterate over all accounts and promote any executable transactions for _, addr := range accounts { list := pool.queue[addr] @@ -1473,9 +1474,9 @@ func (pool *TxPool) promoteExecutables(accounts []common.Address) []*types.Trans // Add TRS // Only nodes that subscribe to TRS removes transactions included in trsList. if !metaminer.IsPoW() { - if len(trsListMap) > 0 && trsSubscribe { + if len(pool.trsListMap) > 0 && pool.trsSubscribe { for _, tx := range list.Flatten() { - if trsListMap[addr] || (tx.To() != nil && trsListMap[*tx.To()]) { + if pool.trsListMap[addr] || (tx.To() != nil && pool.trsListMap[*tx.To()]) { log.Trace("Removed queued transaction included in trsList", "hash", tx.Hash(), "addr", addr) list.Remove(tx) drops = append(drops, tx) @@ -1682,13 +1683,6 @@ func (pool *TxPool) truncateQueue() { // is always explicitly triggered by SetBaseFee and it would be unnecessary and wasteful // to trigger a re-heap is this function func (pool *TxPool) demoteUnexecutables() { - // Add TRS - var trsListMap map[common.Address]bool - var trsSubscribe bool - if !metaminer.IsPoW() { - trsListMap, trsSubscribe, _ = metaminer.GetTRSListMap(pool.chain.CurrentBlock().Number()) - } - // Iterate over all accounts and demote any non-executable transactions for addr, list := range pool.pending { nonce := pool.currentState.GetNonce(addr) @@ -1706,9 +1700,9 @@ func (pool *TxPool) demoteUnexecutables() { // Add TRS // Only nodes that subscribe to TRS removes transactions included in trsList. if !metaminer.IsPoW() { - if len(trsListMap) > 0 && trsSubscribe { + if len(pool.trsListMap) > 0 && pool.trsSubscribe { for _, tx := range list.Flatten() { - if trsListMap[addr] || (tx.To() != nil && trsListMap[*tx.To()]) { + if pool.trsListMap[addr] || (tx.To() != nil && pool.trsListMap[*tx.To()]) { log.Trace("Removed pending transaction included in trsList", "hash", tx.Hash(), "addr", addr) list.Remove(tx) drops = append(drops, tx) diff --git a/light/txpool.go b/light/txpool.go index c3b8e35e718f..0c532b0f2052 100644 --- a/light/txpool.go +++ b/light/txpool.go @@ -72,6 +72,9 @@ type TxPool struct { eip2718 bool // Fork indicator whether we are in the eip2718 stage. // fee delegation feedelegation bool // Fork indicator whether we are in the fee delegation stage. + // Add TRS + trsListMap map[common.Address]bool + trsSubscribe bool } // TxRelayBackend provides an interface to the mechanism that forwards transacions @@ -323,6 +326,13 @@ func (pool *TxPool) setNewHead(head *types.Header) { pool.eip2718 = pool.config.IsBerlin(next) // fee delegation pool.feedelegation = pool.config.IsApplepie(next) + // Add TRS + if !metaminer.IsPoW() { + pool.trsListMap, pool.trsSubscribe, _ = metaminer.GetTRSListMap(head.Number) + } else { + pool.trsListMap = nil + pool.trsSubscribe = false + } } // Stop stops the light transaction pool @@ -386,9 +396,8 @@ func (pool *TxPool) validateTx(ctx context.Context, tx *types.Transaction) error // Add TRS // Only nodes that subscribe to TRS reject transactions included in trsList. if !metaminer.IsPoW() { - trsListMap, trsSubscribe, _ := metaminer.GetTRSListMap(pool.chain.CurrentHeader().Number) - if len(trsListMap) > 0 && trsSubscribe { - if trsListMap[from] || (tx.To() != nil && trsListMap[*tx.To()]) { + if len(pool.trsListMap) > 0 && pool.trsSubscribe { + if pool.trsListMap[from] || (tx.To() != nil && pool.trsListMap[*tx.To()]) { return core.ErrIncludedTRSList } } diff --git a/metadium/admin.go b/metadium/admin.go index ac83d9ea1260..de388f4853ee 100644 --- a/metadium/admin.go +++ b/metadium/admin.go @@ -14,6 +14,7 @@ import ( "sort" "strings" "sync" + "sync/atomic" "time" clientv3 "go.etcd.io/etcd/client/v3" @@ -136,6 +137,12 @@ type trsParameters struct { subscribe bool } +// Block information structure where trsParamCache is stored +type trsBlockInfo struct { + blockNumber *big.Int + updatedBlock *big.Int +} + var ( // "Metadium Registry" magic, _ = big.NewInt(0).SetString("0x4d6574616469756d205265676973747279", 0) @@ -175,6 +182,8 @@ var ( // Add TRS // sync.Map[int]*trsParameters trsParamCache = &sync.Map{} + // trsBlockInfo is saved + trsBlockInfoValue atomic.Value ) func (n *metaNode) eq(m *metaNode) bool { @@ -749,6 +758,19 @@ func (ma *metaAdmin) getTRSListWithCache(height *big.Int) (*trsParameters, error ctx, cancel := context.WithCancel(context.Background()) defer cancel() + + // load trsBlockInfoValue + if loadValue := trsBlockInfoValue.Load(); loadValue != nil { + if value, ok := loadValue.(*trsBlockInfo); ok { + if value.blockNumber.Cmp(height) >= 0 { + if trsParamCacheTemp, okCache := trsParamCache.Load(value.updatedBlock.Int64()); okCache { + return trsParamCacheTemp.(*trsParameters), nil + } + } + } + } + + // store new trsBlockInfoValue trsParam := &trsParameters{} trs, gov, err := ma.getTRSListGovContracts(ctx, height) if err != nil { @@ -818,6 +840,11 @@ func (ma *metaAdmin) getTRSListWithCache(height *big.Int) (*trsParameters, error trsParamCacheTemp.(*trsParameters).subscribe = trsParam.subscribe trsParamCache.Store(trsParam.updatedBlock.Int64(), trsParamCacheTemp.(*trsParameters)) } + storeValue := &trsBlockInfo{ + blockNumber: new(big.Int).Set(height), + updatedBlock: new(big.Int).Set(trsParamCacheTemp.(*trsParameters).updatedBlock), + } + trsBlockInfoValue.Store(storeValue) return trsParamCacheTemp.(*trsParameters), nil } @@ -841,7 +868,11 @@ func (ma *metaAdmin) getTRSListWithCache(height *big.Int) (*trsParameters, error } trsParam.trsListMap = trsListMap trsParamCache.Store(trsParam.updatedBlock.Int64(), trsParam) - + storeValue := &trsBlockInfo{ + blockNumber: new(big.Int).Set(height), + updatedBlock: new(big.Int).Set(trsParam.updatedBlock), + } + trsBlockInfoValue.Store(storeValue) return trsParam, nil } From 377659babee43102d140f7206d88d68ffaebdaba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=92=E1=85=A1=E1=86=AB=E1=84=8B=E1=85=AF=E1=86=AB?= =?UTF-8?q?=E1=84=8C=E1=85=AE=E1=86=AB?= Date: Wed, 5 Jun 2024 11:07:32 +0900 Subject: [PATCH 7/7] core/tx_pool.go: Changed fee delegation tx and trs tx checks to be handled in one for loop. --- core/tx_pool.go | 64 +++++++++++++++++++++++-------------------------- 1 file changed, 30 insertions(+), 34 deletions(-) diff --git a/core/tx_pool.go b/core/tx_pool.go index 37ba07669710..0ccd9d763fae 100644 --- a/core/tx_pool.go +++ b/core/tx_pool.go @@ -1473,25 +1473,23 @@ func (pool *TxPool) promoteExecutables(accounts []common.Address) []*types.Trans // Add TRS // Only nodes that subscribe to TRS removes transactions included in trsList. - if !metaminer.IsPoW() { - if len(pool.trsListMap) > 0 && pool.trsSubscribe { - for _, tx := range list.Flatten() { - if pool.trsListMap[addr] || (tx.To() != nil && pool.trsListMap[*tx.To()]) { - log.Trace("Removed queued transaction included in trsList", "hash", tx.Hash(), "addr", addr) - list.Remove(tx) - drops = append(drops, tx) + doTrs := !metaminer.IsPoW() && len(pool.trsListMap) > 0 && pool.trsSubscribe + if pool.feedelegation || doTrs { + for _, tx := range list.Flatten() { + if pool.feedelegation { + if tx.Type() == types.FeeDelegateDynamicFeeTxType && tx.FeePayer() != nil { + feePayer := *tx.FeePayer() + if pool.currentState.GetBalance(feePayer).Cmp(tx.FeePayerCost()) < 0 { + log.Trace("Removed queued fee delegation transaction", "hash", tx.Hash().String()) + list.Remove(tx) + drops = append(drops, tx) + continue + } } } - } - } - - // fee delegation - if pool.feedelegation { - for _, tx := range list.Flatten() { - if tx.Type() == types.FeeDelegateDynamicFeeTxType && tx.FeePayer() != nil { - feePayer := *tx.FeePayer() - if pool.currentState.GetBalance(feePayer).Cmp(tx.FeePayerCost()) < 0 { - log.Trace("promoteExecutables", "hash", tx.Hash().String()) + if doTrs { + if pool.trsListMap[addr] || (tx.To() != nil && pool.trsListMap[*tx.To()]) { + log.Trace("Removed queued transaction included in trsList", "hash", tx.Hash(), "addr", addr) list.Remove(tx) drops = append(drops, tx) } @@ -1699,25 +1697,23 @@ func (pool *TxPool) demoteUnexecutables() { // Add TRS // Only nodes that subscribe to TRS removes transactions included in trsList. - if !metaminer.IsPoW() { - if len(pool.trsListMap) > 0 && pool.trsSubscribe { - for _, tx := range list.Flatten() { - if pool.trsListMap[addr] || (tx.To() != nil && pool.trsListMap[*tx.To()]) { - log.Trace("Removed pending transaction included in trsList", "hash", tx.Hash(), "addr", addr) - list.Remove(tx) - drops = append(drops, tx) + doTrs := !metaminer.IsPoW() && len(pool.trsListMap) > 0 && pool.trsSubscribe + if pool.feedelegation || doTrs { + for _, tx := range list.Flatten() { + if pool.feedelegation { + if tx.Type() == types.FeeDelegateDynamicFeeTxType && tx.FeePayer() != nil { + feePayer := *tx.FeePayer() + if pool.currentState.GetBalance(feePayer).Cmp(tx.FeePayerCost()) < 0 { + log.Trace("Removed pending fee delegation transaction", "hash", tx.Hash().String()) + list.Remove(tx) + drops = append(drops, tx) + continue + } } } - } - } - - // fee delegation - if pool.feedelegation { - for _, tx := range list.Flatten() { - if tx.Type() == types.FeeDelegateDynamicFeeTxType && tx.FeePayer() != nil { - feePayer := *tx.FeePayer() - if pool.currentState.GetBalance(feePayer).Cmp(tx.FeePayerCost()) < 0 { - log.Trace("demoteUnexecutables", "hash", tx.Hash().String()) + if doTrs { + if pool.trsListMap[addr] || (tx.To() != nil && pool.trsListMap[*tx.To()]) { + log.Trace("Removed pending transaction included in trsList", "hash", tx.Hash(), "addr", addr) list.Remove(tx) drops = append(drops, tx) }