diff --git a/.github/workflows/taiko-client--docker.yml b/.github/workflows/taiko-client--docker.yml index 98b69265be..c0f46d10dd 100644 --- a/.github/workflows/taiko-client--docker.yml +++ b/.github/workflows/taiko-client--docker.yml @@ -7,6 +7,11 @@ on: - "taiko-client-v*" paths: - "packages/taiko-client/**" + pull_request: + paths: + - "packages/taiko-client/**" + - "go.mod" + - "go.sum" jobs: push-docker-image: diff --git a/go.mod b/go.mod index ffd9afedb3..fd1b2d0a21 100644 --- a/go.mod +++ b/go.mod @@ -11,6 +11,7 @@ require ( github.com/cyberhorsey/webutils v0.0.0-20230314183728-56890c6ddbe7 github.com/davecgh/go-spew v1.1.1 github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 + github.com/dgraph-io/badger/v4 v4.2.0 github.com/ethereum-optimism/optimism v1.7.4 github.com/ethereum/go-ethereum v1.13.15 github.com/ethereum/hive v0.0.0-20240822135954-91829ccfb2c5 @@ -37,7 +38,7 @@ require ( github.com/testcontainers/testcontainers-go v0.30.0 github.com/urfave/cli/v2 v2.27.2 golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 - golang.org/x/sync v0.7.0 + golang.org/x/sync v0.8.0 gopkg.in/go-playground/assert.v1 v1.2.1 gopkg.in/yaml.v3 v3.0.1 gorm.io/datatypes v1.2.1 @@ -67,7 +68,6 @@ require ( github.com/btcsuite/btcd v0.24.0 // indirect github.com/btcsuite/btcd/btcutil v1.1.5 // indirect github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect - github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cloudflare/circl v1.3.7 // indirect github.com/cockroachdb/errors v1.11.1 // indirect @@ -88,7 +88,7 @@ require ( github.com/cyphar/filepath-securejoin v0.2.4 // indirect github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect github.com/deckarep/golang-set/v2 v2.6.0 // indirect - github.com/dgraph-io/ristretto v0.0.4-0.20210318174700-74754f61e018 // indirect + github.com/dgraph-io/ristretto v0.1.1 // indirect github.com/distribution/reference v0.5.0 // indirect github.com/docker/docker v25.0.5+incompatible // indirect github.com/docker/go-connections v0.5.0 // indirect @@ -127,9 +127,11 @@ require ( github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt v3.2.2+incompatible // indirect github.com/golang-jwt/jwt/v4 v4.5.0 // indirect + github.com/golang/glog v1.2.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect + github.com/google/flatbuffers v1.12.1 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.1-0.20220503160820-4a35382e8fc8 // indirect github.com/google/gopacket v1.1.19 // indirect @@ -294,13 +296,13 @@ require ( go.uber.org/mock v0.4.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/crypto v0.24.0 // indirect + golang.org/x/crypto v0.26.0 // indirect golang.org/x/mod v0.17.0 // indirect - golang.org/x/net v0.25.0 // indirect + golang.org/x/net v0.28.0 // indirect golang.org/x/oauth2 v0.18.0 // indirect - golang.org/x/sys v0.22.0 // indirect - golang.org/x/term v0.22.0 // indirect - golang.org/x/text v0.16.0 // indirect + golang.org/x/sys v0.24.0 // indirect + golang.org/x/term v0.23.0 // indirect + golang.org/x/text v0.17.0 // indirect golang.org/x/time v0.5.0 // indirect golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect google.golang.org/api v0.44.0 // indirect diff --git a/go.sum b/go.sum index 3d85672de4..7c0f2d30ac 100644 --- a/go.sum +++ b/go.sum @@ -70,9 +70,6 @@ github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERo github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/Microsoft/hcsshim v0.11.4 h1:68vKo2VN8DE9AdN4tnkWnmdhqdbpUFM8OF3Airm7fz8= github.com/Microsoft/hcsshim v0.11.4/go.mod h1:smjE4dvqPX9Zldna+t5FG3rnoHhaB7QYxPRqGcpAD9w= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/OneOfOne/xxhash v1.2.8 h1:31czK/TI9sNkxIKfaUfGlU47BAxQ0ztGgd9vPyqimf8= -github.com/OneOfOne/xxhash v1.2.8/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= github.com/ProtonMail/go-crypto v1.0.0 h1:LRuvITjQWX+WIfr930YHG2HNfjR1uOfyf5vE0kC2U78= github.com/ProtonMail/go-crypto v1.0.0/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= @@ -170,8 +167,6 @@ github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyY github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/cp v1.1.1 h1:nCb6ZLdB7NRaqsm91JtQTAme2SKJzXVsdPIPkyJr1MU= github.com/cespare/cp v1.1.1/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= @@ -258,8 +253,10 @@ github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeC github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= -github.com/dgraph-io/ristretto v0.0.4-0.20210318174700-74754f61e018 h1:cNcG4c2n5xanQzp2hMyxDxPYVQmZ91y4WN6fJFlndLo= -github.com/dgraph-io/ristretto v0.0.4-0.20210318174700-74754f61e018/go.mod h1:MIonLggsKgZLUSt414ExgwNtlOL5MuEoAJP514mwGe8= +github.com/dgraph-io/badger/v4 v4.2.0 h1:kJrlajbXXL9DFTNuhhu9yCx7JJa4qpYWxtE8BzuWsEs= +github.com/dgraph-io/badger/v4 v4.2.0/go.mod h1:qfCqhPoWDFJRx1gp5QwwyGo8xk1lbHUxvK9nK0OGAak= +github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= +github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= @@ -469,6 +466,8 @@ github.com/gomarkdown/markdown v0.0.0-20231222211730-1d6d20845b47 h1:k4Tw0nt6lwr github.com/gomarkdown/markdown v0.0.0-20231222211730-1d6d20845b47/go.mod h1:JDGcbDT52eL4fju3sZ4TeHGsQwhG9nbDV21aMyhwPoA= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/flatbuffers v1.12.1 h1:MVlul7pQNoDzWRLTw5imwYsl+usrS1TXG2H4jg6ImGw= +github.com/google/flatbuffers v1.12.1/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54= github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -1133,7 +1132,6 @@ github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4k github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY= @@ -1328,8 +1326,8 @@ golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98y golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= -golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= -golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw= +golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1439,8 +1437,8 @@ golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= -golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= -golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= +golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1471,8 +1469,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1561,6 +1559,7 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1576,8 +1575,8 @@ golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= -golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= +golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1591,8 +1590,8 @@ golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= -golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk= -golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= +golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU= +golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1610,8 +1609,8 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= +golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= diff --git a/packages/eventindexer/pkg/http/server_test.go b/packages/eventindexer/pkg/http/server_test.go index 5eeff77275..589a135761 100644 --- a/packages/eventindexer/pkg/http/server_test.go +++ b/packages/eventindexer/pkg/http/server_test.go @@ -91,16 +91,6 @@ func Test_NewServer(t *testing.T) { }, eventindexer.ErrNoEventRepository, }, - { - "noCorsOrigins", - NewServerOpts{ - Echo: echo.New(), - EventRepo: &repo.EventRepository{}, - NFTBalanceRepo: &repo.NFTBalanceRepository{}, - NFTMetadataRepo: &repo.NFTMetadataRepository{}, - }, - eventindexer.ErrNoCORSOrigins, - }, { "noHttpFramework", NewServerOpts{ diff --git a/packages/protocol/contracts/layer1/based/LibProposing.sol b/packages/protocol/contracts/layer1/based/LibProposing.sol index dab7077aba..2fc0102c0f 100644 --- a/packages/protocol/contracts/layer1/based/LibProposing.sol +++ b/packages/protocol/contracts/layer1/based/LibProposing.sol @@ -260,12 +260,8 @@ library LibProposing { // Update certain meta fields if (meta_.blobUsed) { - if (!LibNetwork.isDencunSupported(block.chainid)) revert L1_BLOB_NOT_AVAILABLE(); + // if (!LibNetwork.isDencunSupported(block.chainid)) revert L1_BLOB_NOT_AVAILABLE(); - // Always use the first blob in this transaction. If the - // proposeBlock functions are called more than once in the same - // L1 transaction, these multiple L2 blocks will share the same - // blob. meta_.blobHash = blobhash(local.params.blobIndex); if (meta_.blobHash == 0) revert L1_BLOB_NOT_FOUND(); } else { @@ -273,14 +269,16 @@ library LibProposing { emit CalldataTxList(meta_.id, _txList); } - local.tierProvider = ITierProvider( - ITierRouter(_resolver.resolve(LibStrings.B_TIER_ROUTER, false)).getProvider( - local.b.numBlocks - ) - ); + // local.tierProvider = ITierProvider( + // ITierRouter(_resolver.resolve(LibStrings.B_TIER_ROUTER, false)).getProvider( + // local.b.numBlocks + // ) + // ); // Use the difficulty as a random number - meta_.minTier = local.tierProvider.getMinTier(meta_.proposer, uint256(meta_.difficulty)); + // meta_.minTier = local.tierProvider.getMinTier(meta_.proposer, uint256(meta_.difficulty)); + + meta_.minTier = 100; if (!local.postFork) { metaV1_ = LibData.blockMetadataV2toV1(meta_); diff --git a/packages/protocol/contracts/layer1/preconfs/PreconfsTaikoL1.sol b/packages/protocol/contracts/layer1/preconfs/PreconfsTaikoL1.sol new file mode 100644 index 0000000000..bdf5a9012b --- /dev/null +++ b/packages/protocol/contracts/layer1/preconfs/PreconfsTaikoL1.sol @@ -0,0 +1,30 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.27; + +import "../based/TaikoL1.sol"; + +/// @title PreconfsTaikoL1 +/// @custom:security-contact security@taiko.xyz +contract PreconfsTaikoL1 is TaikoL1 { + /// @inheritdoc ITaikoL1 + function getConfig() public pure override returns (TaikoData.Config memory _config_) { + return TaikoData.Config({ + chainId: 167_010, + blockMaxProposals: 324_000, + blockRingBufferSize: 360_000, + maxBlocksToVerify: 16, + blockMaxGasLimit: 240_000_000, + livenessBond: 125e18, // 125 TAIKO token + stateRootSyncInternal: 16, + maxAnchorHeightOffset: 64, + baseFeeConfig: LibSharedData.BaseFeeConfig({ + adjustmentQuotient: 8, + sharingPctg: 0, + gasIssuancePerSecond: 5_000_000, + minGasExcess: 1_340_000_000, + maxGasIssuancePerBlock: 600_000_000 + }), + ontakeForkHeight: 0 + }); + } +} diff --git a/packages/protocol/script/layer1/DeployProtocolOnL1.s.sol b/packages/protocol/script/layer1/DeployProtocolOnL1.s.sol index ec97f9c8f5..3c939f0cf2 100644 --- a/packages/protocol/script/layer1/DeployProtocolOnL1.s.sol +++ b/packages/protocol/script/layer1/DeployProtocolOnL1.s.sol @@ -20,6 +20,7 @@ import "../../contracts/layer1/automata-attestation/lib/PEMCertChainLib.sol"; import "../../contracts/layer1/automata-attestation/utils/SigVerifyLib.sol"; import "../../contracts/layer1/devnet/DevnetTaikoL1.sol"; import "../../contracts/layer1/devnet/DevnetTierProvider.sol"; +import "../../contracts/layer1/preconfs/PreconfsTaikoL1.sol"; import "../../contracts/layer1/mainnet/rollup/MainnetGuardianProver.sol"; import "../../contracts/layer1/mainnet/rollup/MainnetTaikoL1.sol"; import "../../contracts/layer1/mainnet/rollup/verifiers/MainnetSgxVerifier.sol"; @@ -119,9 +120,9 @@ contract DeployProtocolOnL1 is DeployCapability { // --------------------------------------------------------------- // Deploy other contracts - if (block.chainid != 1) { - deployAuxContracts(); - } + // if (block.chainid != 1) { + // deployAuxContracts(); + // } if (AddressManager(sharedAddressManager).owner() == msg.sender) { AddressManager(sharedAddressManager).transferOwnership(contractOwner); @@ -169,89 +170,94 @@ contract DeployProtocolOnL1 is DeployCapability { registerTo: sharedAddressManager }); - deployProxy({ - name: "mainnet_bridge", - impl: address(new MainnetBridge()), - data: abi.encodeCall(Bridge.init, (address(0), sharedAddressManager)) - }); - address brdige = deployProxy({ - name: "bridge", - impl: address(new Bridge()), - data: abi.encodeCall(Bridge.init, (address(0), sharedAddressManager)), - registerTo: sharedAddressManager - }); - - if (vm.envBool("PAUSE_BRIDGE")) { - Bridge(payable(brdige)).pause(); - } - - Bridge(payable(brdige)).transferOwnership(owner); - - console2.log("------------------------------------------"); - console2.log( - "Warning - you need to register *all* counterparty bridges to enable multi-hop bridging:" - ); - console2.log( - "sharedAddressManager.setAddress(remoteChainId, \"bridge\", address(remoteBridge))" - ); - console2.log("- sharedAddressManager : ", sharedAddressManager); + // deployProxy({ + // name: "mainnet_bridge", + // impl: address(new MainnetBridge()), + // data: abi.encodeCall(Bridge.init, (address(0), sharedAddressManager)) + // }); + // address brdige = deployProxy({ + // name: "bridge", + // impl: address(new Bridge()), + // data: abi.encodeCall(Bridge.init, (address(0), sharedAddressManager)), + // registerTo: sharedAddressManager + // }); + + // if (vm.envBool("PAUSE_BRIDGE")) { + // Bridge(payable(brdige)).pause(); + // } + + // Bridge(payable(brdige)).transferOwnership(owner); + + // console2.log("------------------------------------------"); + // console2.log( + // "Warning - you need to register *all* counterparty bridges to enable multi-hop + // bridging:" + // ); + // console2.log( + // "sharedAddressManager.setAddress(remoteChainId, \"bridge\", address(remoteBridge))" + // ); + // console2.log("- sharedAddressManager : ", sharedAddressManager); // Deploy Vaults - deployProxy({ - name: "mainnet_erc20_vault", - impl: address(new MainnetERC20Vault()), - data: abi.encodeCall(ERC20Vault.init, (owner, sharedAddressManager)) - }); - deployProxy({ - name: "erc20_vault", - impl: address(new ERC20Vault()), - data: abi.encodeCall(ERC20Vault.init, (owner, sharedAddressManager)), - registerTo: sharedAddressManager - }); - - deployProxy({ - name: "mainnet_erc721_vault", - impl: address(new MainnetERC721Vault()), - data: abi.encodeCall(ERC721Vault.init, (owner, sharedAddressManager)) - }); - deployProxy({ - name: "erc721_vault", - impl: address(new ERC721Vault()), - data: abi.encodeCall(ERC721Vault.init, (owner, sharedAddressManager)), - registerTo: sharedAddressManager - }); - - deployProxy({ - name: "mainnet_erc1155_vault", - impl: address(new MainnetERC1155Vault()), - data: abi.encodeCall(ERC1155Vault.init, (owner, sharedAddressManager)) - }); - deployProxy({ - name: "erc1155_vault", - impl: address(new ERC1155Vault()), - data: abi.encodeCall(ERC1155Vault.init, (owner, sharedAddressManager)), - registerTo: sharedAddressManager - }); - - console2.log("------------------------------------------"); - console2.log( - "Warning - you need to register *all* counterparty vaults to enable multi-hop bridging:" - ); - console2.log( - "sharedAddressManager.setAddress(remoteChainId, \"erc20_vault\", address(remoteERC20Vault))" - ); - console2.log( - "sharedAddressManager.setAddress(remoteChainId, \"erc721_vault\", address(remoteERC721Vault))" - ); - console2.log( - "sharedAddressManager.setAddress(remoteChainId, \"erc1155_vault\", address(remoteERC1155Vault))" - ); - console2.log("- sharedAddressManager : ", sharedAddressManager); - - // Deploy Bridged token implementations - register(sharedAddressManager, "bridged_erc20", address(new BridgedERC20())); - register(sharedAddressManager, "bridged_erc721", address(new BridgedERC721())); - register(sharedAddressManager, "bridged_erc1155", address(new BridgedERC1155())); + // deployProxy({ + // name: "mainnet_erc20_vault", + // impl: address(new MainnetERC20Vault()), + // data: abi.encodeCall(ERC20Vault.init, (owner, sharedAddressManager)) + // }); + // deployProxy({ + // name: "erc20_vault", + // impl: address(new ERC20Vault()), + // data: abi.encodeCall(ERC20Vault.init, (owner, sharedAddressManager)), + // registerTo: sharedAddressManager + // }); + + // deployProxy({ + // name: "mainnet_erc721_vault", + // impl: address(new MainnetERC721Vault()), + // data: abi.encodeCall(ERC721Vault.init, (owner, sharedAddressManager)) + // }); + // deployProxy({ + // name: "erc721_vault", + // impl: address(new ERC721Vault()), + // data: abi.encodeCall(ERC721Vault.init, (owner, sharedAddressManager)), + // registerTo: sharedAddressManager + // }); + + // deployProxy({ + // name: "mainnet_erc1155_vault", + // impl: address(new MainnetERC1155Vault()), + // data: abi.encodeCall(ERC1155Vault.init, (owner, sharedAddressManager)) + // }); + // deployProxy({ + // name: "erc1155_vault", + // impl: address(new ERC1155Vault()), + // data: abi.encodeCall(ERC1155Vault.init, (owner, sharedAddressManager)), + // registerTo: sharedAddressManager + // }); + + // console2.log("------------------------------------------"); + // console2.log( + // "Warning - you need to register *all* counterparty vaults to enable multi-hop + // bridging:" + // ); + // console2.log( + // "sharedAddressManager.setAddress(remoteChainId, \"erc20_vault\", + // address(remoteERC20Vault))" + // ); + // console2.log( + // "sharedAddressManager.setAddress(remoteChainId, \"erc721_vault\", + // address(remoteERC721Vault))" + // ); + // console2.log( + // "sharedAddressManager.setAddress(remoteChainId, \"erc1155_vault\", + // address(remoteERC1155Vault))" + // ); + // console2.log("- sharedAddressManager : ", sharedAddressManager); + + // // Deploy Bridged token implementations + // register(sharedAddressManager, "bridged_erc20", address(new BridgedERC20())); + // register(sharedAddressManager, "bridged_erc721", address(new BridgedERC721())); + // register(sharedAddressManager, "bridged_erc1155", address(new BridgedERC1155())); } function deployRollupContracts( @@ -274,7 +280,7 @@ contract DeployProtocolOnL1 is DeployCapability { // Register shared contracts in the new rollup copyRegister(rollupAddressManager, _sharedAddressManager, "taiko_token"); copyRegister(rollupAddressManager, _sharedAddressManager, "signal_service"); - copyRegister(rollupAddressManager, _sharedAddressManager, "bridge"); + // copyRegister(rollupAddressManager, _sharedAddressManager, "bridge"); deployProxy({ name: "mainnet_taiko", @@ -294,6 +300,11 @@ contract DeployProtocolOnL1 is DeployCapability { if (keccak256(abi.encode(vm.envString("TIER_PROVIDER"))) == keccak256(abi.encode("devnet"))) { taikoL1 = TaikoL1(address(new DevnetTaikoL1())); + } else if ( + keccak256(abi.encode(vm.envString("TIER_PROVIDER"))) + == keccak256(abi.encode("preconfs")) + ) { + taikoL1 = TaikoL1(address(new PreconfsTaikoL1())); } else { taikoL1 = TaikoL1(address(new TaikoL1())); } @@ -313,18 +324,18 @@ contract DeployProtocolOnL1 is DeployCapability { registerTo: rollupAddressManager }); - deployProxy({ - name: "mainnet_tier_sgx", - impl: address(new MainnetSgxVerifier()), - data: abi.encodeCall(SgxVerifier.init, (owner, rollupAddressManager)) - }); + // deployProxy({ + // name: "mainnet_tier_sgx", + // impl: address(new MainnetSgxVerifier()), + // data: abi.encodeCall(SgxVerifier.init, (owner, rollupAddressManager)) + // }); - deployProxy({ - name: "tier_sgx", - impl: address(new SgxVerifier()), - data: abi.encodeCall(SgxVerifier.init, (owner, rollupAddressManager)), - registerTo: rollupAddressManager - }); + // deployProxy({ + // name: "tier_sgx", + // impl: address(new SgxVerifier()), + // data: abi.encodeCall(SgxVerifier.init, (owner, rollupAddressManager)), + // registerTo: rollupAddressManager + // }); deployProxy({ name: "mainnet_guardian_prover_minority", @@ -370,34 +381,35 @@ contract DeployProtocolOnL1 is DeployCapability { // No need to proxy these, because they are 3rd party. If we want to modify, we simply // change the registerAddress("automata_dcap_attestation", address(attestation)); - P256Verifier p256Verifier = new P256Verifier(); - SigVerifyLib sigVerifyLib = new SigVerifyLib(address(p256Verifier)); - PEMCertChainLib pemCertChainLib = new PEMCertChainLib(); - address automateDcapV3AttestationImpl = address(new AutomataDcapV3Attestation()); - - address automataProxy = deployProxy({ - name: "automata_dcap_attestation", - impl: automateDcapV3AttestationImpl, - data: abi.encodeCall( - AutomataDcapV3Attestation.init, (owner, address(sigVerifyLib), address(pemCertChainLib)) - ), - registerTo: rollupAddressManager - }); - - // Log addresses for the user to register sgx instance - console2.log("SigVerifyLib", address(sigVerifyLib)); - console2.log("PemCertChainLib", address(pemCertChainLib)); - console2.log("AutomataDcapVaAttestation", automataProxy); - - deployProxy({ - name: "prover_set", - impl: address(new ProverSet()), - data: abi.encodeCall( - ProverSet.init, (owner, vm.envAddress("PROVER_SET_ADMIN"), rollupAddressManager) - ) - }); - - deployZKVerifiers(owner, rollupAddressManager); + // P256Verifier p256Verifier = new P256Verifier(); + // SigVerifyLib sigVerifyLib = new SigVerifyLib(address(p256Verifier)); + // PEMCertChainLib pemCertChainLib = new PEMCertChainLib(); + // address automateDcapV3AttestationImpl = address(new AutomataDcapV3Attestation()); + + // address automataProxy = deployProxy({ + // name: "automata_dcap_attestation", + // impl: automateDcapV3AttestationImpl, + // data: abi.encodeCall( + // AutomataDcapV3Attestation.init, (owner, address(sigVerifyLib), + // address(pemCertChainLib)) + // ), + // registerTo: rollupAddressManager + // }); + + // // Log addresses for the user to register sgx instance + // console2.log("SigVerifyLib", address(sigVerifyLib)); + // console2.log("PemCertChainLib", address(pemCertChainLib)); + // console2.log("AutomataDcapVaAttestation", automataProxy); + + // deployProxy({ + // name: "prover_set", + // impl: address(new ProverSet()), + // data: abi.encodeCall( + // ProverSet.init, (owner, vm.envAddress("PROVER_SET_ADMIN"), rollupAddressManager) + // ) + // }); + + // deployZKVerifiers(owner, rollupAddressManager); } // deploy both sp1 & risc0 verifiers. @@ -428,7 +440,10 @@ contract DeployProtocolOnL1 is DeployCapability { } function deployTierProvider(string memory tierProviderName) private returns (address) { - if (keccak256(abi.encode(tierProviderName)) == keccak256(abi.encode("devnet"))) { + if ( + keccak256(abi.encode(tierProviderName)) == keccak256(abi.encode("devnet")) + || keccak256(abi.encode(tierProviderName)) == keccak256(abi.encode("preconfs")) + ) { return address(new DevnetTierProvider()); } else if (keccak256(abi.encode(tierProviderName)) == keccak256(abi.encode("testnet"))) { return address(new TestTierProvider()); @@ -439,13 +454,13 @@ contract DeployProtocolOnL1 is DeployCapability { } } - function deployAuxContracts() private { - address horseToken = address(new FreeMintERC20("Horse Token", "HORSE")); - console2.log("HorseToken", horseToken); + // function deployAuxContracts() private { + // address horseToken = address(new FreeMintERC20("Horse Token", "HORSE")); + // console2.log("HorseToken", horseToken); - address bullToken = address(new MayFailFreeMintERC20("Bull Token", "BULL")); - console2.log("BullToken", bullToken); - } + // address bullToken = address(new MayFailFreeMintERC20("Bull Token", "BULL")); + // console2.log("BullToken", bullToken); + // } function addressNotNull(address addr, string memory err) private pure { require(addr != address(0), err); diff --git a/packages/protocol/test/genesis/GenerateGenesis.g.sol b/packages/protocol/test/genesis/GenerateGenesis.g.sol index 4140409b79..745e0a78ec 100644 --- a/packages/protocol/test/genesis/GenerateGenesis.g.sol +++ b/packages/protocol/test/genesis/GenerateGenesis.g.sol @@ -27,29 +27,29 @@ contract TestGenerateGenesis is Test, AddressResolver { assertEq(block.chainid, 167); // check bytecode - checkDeployedCode("ERC20Vault"); - checkDeployedCode("ERC721Vault"); - checkDeployedCode("ERC1155Vault"); - checkDeployedCode("Bridge"); + // checkDeployedCode("ERC20Vault"); + // checkDeployedCode("ERC721Vault"); + // checkDeployedCode("ERC1155Vault"); + // checkDeployedCode("Bridge"); checkDeployedCode("SignalService"); - checkDeployedCode("SharedAddressManager"); - checkDeployedCode("BridgedERC20Impl"); - checkDeployedCode("BridgedERC721Impl"); - checkDeployedCode("BridgedERC1155Impl"); + // checkDeployedCode("SharedAddressManager"); + // checkDeployedCode("BridgedERC20Impl"); + // checkDeployedCode("BridgedERC721Impl"); + // checkDeployedCode("BridgedERC1155Impl"); // check proxy implementations - checkProxyImplementation("ERC20Vault"); - checkProxyImplementation("ERC721Vault"); - checkProxyImplementation("ERC1155Vault"); - checkProxyImplementation("Bridge"); + // checkProxyImplementation("ERC20Vault"); + // checkProxyImplementation("ERC721Vault"); + // checkProxyImplementation("ERC1155Vault"); + // checkProxyImplementation("Bridge"); checkProxyImplementation("SignalService"); checkProxyImplementation("SharedAddressManager"); // // check proxies - checkDeployedCode("ERC20Vault"); - checkDeployedCode("ERC721Vault"); - checkDeployedCode("ERC1155Vault"); - checkDeployedCode("Bridge"); + // checkDeployedCode("ERC20Vault"); + // checkDeployedCode("ERC721Vault"); + // checkDeployedCode("ERC1155Vault"); + // checkDeployedCode("Bridge"); checkDeployedCode("SignalService"); checkDeployedCode("SharedAddressManager"); } @@ -68,40 +68,40 @@ contract TestGenerateGenesis is Test, AddressResolver { checkDeployedCode("RollupAddressManager"); } - function testSharedAddressManager() public { - AddressManager addressManagerProxy = - AddressManager(getPredeployedContractAddress("SharedAddressManager")); + // function testSharedAddressManager() public { + // AddressManager addressManagerProxy = + // AddressManager(getPredeployedContractAddress("SharedAddressManager")); - assertEq(contractOwner, addressManagerProxy.owner()); + // assertEq(contractOwner, addressManagerProxy.owner()); - checkSavedAddress(addressManagerProxy, "Bridge", "bridge"); - checkSavedAddress(addressManagerProxy, "ERC20Vault", "erc20_vault"); - checkSavedAddress(addressManagerProxy, "ERC721Vault", "erc721_vault"); - checkSavedAddress(addressManagerProxy, "ERC1155Vault", "erc1155_vault"); - checkSavedAddress(addressManagerProxy, "SignalService", "signal_service"); + // checkSavedAddress(addressManagerProxy, "Bridge", "bridge"); + // checkSavedAddress(addressManagerProxy, "ERC20Vault", "erc20_vault"); + // checkSavedAddress(addressManagerProxy, "ERC721Vault", "erc721_vault"); + // checkSavedAddress(addressManagerProxy, "ERC1155Vault", "erc1155_vault"); + // checkSavedAddress(addressManagerProxy, "SignalService", "signal_service"); - vm.startPrank(addressManagerProxy.owner()); + // vm.startPrank(addressManagerProxy.owner()); - addressManagerProxy.upgradeTo(address(new AddressManager())); + // addressManagerProxy.upgradeTo(address(new AddressManager())); - vm.stopPrank(); - } + // vm.stopPrank(); + // } - function testRollupAddressManager() public { - AddressManager addressManagerProxy = - AddressManager(getPredeployedContractAddress("RollupAddressManager")); + // function testRollupAddressManager() public { + // AddressManager addressManagerProxy = + // AddressManager(getPredeployedContractAddress("RollupAddressManager")); - assertEq(contractOwner, addressManagerProxy.owner()); + // assertEq(contractOwner, addressManagerProxy.owner()); - checkSavedAddress(addressManagerProxy, "TaikoL2", "taiko"); - checkSavedAddress(addressManagerProxy, "SignalService", "signal_service"); + // checkSavedAddress(addressManagerProxy, "TaikoL2", "taiko"); + // checkSavedAddress(addressManagerProxy, "SignalService", "signal_service"); - vm.startPrank(addressManagerProxy.owner()); + // vm.startPrank(addressManagerProxy.owner()); - addressManagerProxy.upgradeTo(address(new AddressManager())); + // addressManagerProxy.upgradeTo(address(new AddressManager())); - vm.stopPrank(); - } + // vm.stopPrank(); + // } function testTaikoL2() public { TaikoL2 taikoL2Proxy = TaikoL2(getPredeployedContractAddress("TaikoL2")); @@ -116,136 +116,136 @@ contract TestGenerateGenesis is Test, AddressResolver { vm.stopPrank(); } - function testSingletonBridge() public { - address bridgeAddress = getPredeployedContractAddress("Bridge"); + // function testSingletonBridge() public { + // address bridgeAddress = getPredeployedContractAddress("Bridge"); + + // Bridge bridgeProxy = Bridge(payable(bridgeAddress)); + // AddressManager addressManager = + // AddressManager(getPredeployedContractAddress("SharedAddressManager")); + + // vm.startPrank(addressManager.owner()); + // addressManager.setAddress(1, "bridge", bridgeAddress); + // vm.stopPrank(); + + // assertEq(contractOwner, bridgeProxy.owner()); + + // vm.expectRevert(Bridge.B_PERMISSION_DENIED.selector); + // bridgeProxy.processMessage( + // IBridge.Message({ + // id: 0, + // from: address(0), + // srcChainId: 1, + // destChainId: 167, + // srcOwner: address(0), + // destOwner: address(0), + // to: address(0), + // value: 0, + // fee: 0, + // gasLimit: 0, + // data: "" + // }), + // "" + // ); - Bridge bridgeProxy = Bridge(payable(bridgeAddress)); - AddressManager addressManager = - AddressManager(getPredeployedContractAddress("SharedAddressManager")); + // assertEq(bridgeProxy.paused(), false); - vm.startPrank(addressManager.owner()); - addressManager.setAddress(1, "bridge", bridgeAddress); - vm.stopPrank(); + // vm.startPrank(contractOwner); + // bridgeProxy.pause(); + // assertEq(bridgeProxy.paused(), true); - assertEq(contractOwner, bridgeProxy.owner()); - - vm.expectRevert(Bridge.B_PERMISSION_DENIED.selector); - bridgeProxy.processMessage( - IBridge.Message({ - id: 0, - from: address(0), - srcChainId: 1, - destChainId: 167, - srcOwner: address(0), - destOwner: address(0), - to: address(0), - value: 0, - fee: 0, - gasLimit: 0, - data: "" - }), - "" - ); + // vm.expectRevert(EssentialContract.INVALID_PAUSE_STATUS.selector); + // bridgeProxy.processMessage( + // IBridge.Message({ + // id: 0, + // from: address(0), + // srcChainId: 1, + // destChainId: 167, + // srcOwner: address(0), + // destOwner: address(0), + // to: address(0), + // value: 0, + // fee: 0, + // gasLimit: 0, + // data: "" + // }), + // "" + // ); - assertEq(bridgeProxy.paused(), false); + // bridgeProxy.unpause(); + // assertEq(bridgeProxy.paused(), false); - vm.startPrank(contractOwner); - bridgeProxy.pause(); - assertEq(bridgeProxy.paused(), true); - - vm.expectRevert(EssentialContract.INVALID_PAUSE_STATUS.selector); - bridgeProxy.processMessage( - IBridge.Message({ - id: 0, - from: address(0), - srcChainId: 1, - destChainId: 167, - srcOwner: address(0), - destOwner: address(0), - to: address(0), - value: 0, - fee: 0, - gasLimit: 0, - data: "" - }), - "" - ); + // bridgeProxy.upgradeTo(address(new Bridge())); - bridgeProxy.unpause(); - assertEq(bridgeProxy.paused(), false); + // vm.stopPrank(); + // } - bridgeProxy.upgradeTo(address(new Bridge())); + // function testSingletonERC20Vault() public { + // address erc20VaultAddress = getPredeployedContractAddress("ERC20Vault"); + // address bridgeAddress = getPredeployedContractAddress("Bridge"); - vm.stopPrank(); - } + // ERC20Vault erc20VaultProxy = ERC20Vault(erc20VaultAddress); + // AddressManager addressManager = + // AddressManager(getPredeployedContractAddress("SharedAddressManager")); - function testSingletonERC20Vault() public { - address erc20VaultAddress = getPredeployedContractAddress("ERC20Vault"); - address bridgeAddress = getPredeployedContractAddress("Bridge"); + // assertEq(contractOwner, erc20VaultProxy.owner()); - ERC20Vault erc20VaultProxy = ERC20Vault(erc20VaultAddress); - AddressManager addressManager = - AddressManager(getPredeployedContractAddress("SharedAddressManager")); + // vm.startPrank(addressManager.owner()); + // addressManager.setAddress(1, "bridge", bridgeAddress); + // addressManager.setAddress(1, "erc20_vault", erc20VaultAddress); + // vm.stopPrank(); - assertEq(contractOwner, erc20VaultProxy.owner()); + // vm.startPrank(erc20VaultProxy.owner()); - vm.startPrank(addressManager.owner()); - addressManager.setAddress(1, "bridge", bridgeAddress); - addressManager.setAddress(1, "erc20_vault", erc20VaultAddress); - vm.stopPrank(); + // erc20VaultProxy.upgradeTo(address(new ERC20Vault())); - vm.startPrank(erc20VaultProxy.owner()); + // vm.stopPrank(); + // } - erc20VaultProxy.upgradeTo(address(new ERC20Vault())); + // function testSingletonERC721Vault() public { + // address erc721VaultAddress = getPredeployedContractAddress("ERC721Vault"); + // address bridgeAddress = getPredeployedContractAddress("Bridge"); - vm.stopPrank(); - } + // EssentialContract erc721VaultProxy = EssentialContract(erc721VaultAddress); + // AddressManager addressManager = + // AddressManager(getPredeployedContractAddress("SharedAddressManager")); - function testSingletonERC721Vault() public { - address erc721VaultAddress = getPredeployedContractAddress("ERC721Vault"); - address bridgeAddress = getPredeployedContractAddress("Bridge"); + // assertEq(contractOwner, erc721VaultProxy.owner()); - EssentialContract erc721VaultProxy = EssentialContract(erc721VaultAddress); - AddressManager addressManager = - AddressManager(getPredeployedContractAddress("SharedAddressManager")); + // vm.startPrank(addressManager.owner()); + // addressManager.setAddress(1, "bridge", bridgeAddress); + // addressManager.setAddress(1, "erc721_vault", erc721VaultAddress); + // vm.stopPrank(); - assertEq(contractOwner, erc721VaultProxy.owner()); + // vm.startPrank(erc721VaultProxy.owner()); - vm.startPrank(addressManager.owner()); - addressManager.setAddress(1, "bridge", bridgeAddress); - addressManager.setAddress(1, "erc721_vault", erc721VaultAddress); - vm.stopPrank(); + // erc721VaultProxy.upgradeTo(address(new ERC721Vault())); - vm.startPrank(erc721VaultProxy.owner()); + // vm.stopPrank(); + // } - erc721VaultProxy.upgradeTo(address(new ERC721Vault())); + // function testSingletonERC1155Vault() public { + // address erc1155VaultProxyAddress = getPredeployedContractAddress("ERC1155Vault"); + // address bridgeProxyAddress = getPredeployedContractAddress("Bridge"); - vm.stopPrank(); - } + // EssentialContract erc1155VaultProxy = EssentialContract(erc1155VaultProxyAddress); + // AddressManager addressManager = + // AddressManager(getPredeployedContractAddress("SharedAddressManager")); - function testSingletonERC1155Vault() public { - address erc1155VaultProxyAddress = getPredeployedContractAddress("ERC1155Vault"); - address bridgeProxyAddress = getPredeployedContractAddress("Bridge"); + // assertEq(contractOwner, erc1155VaultProxy.owner()); - EssentialContract erc1155VaultProxy = EssentialContract(erc1155VaultProxyAddress); - AddressManager addressManager = - AddressManager(getPredeployedContractAddress("SharedAddressManager")); + // vm.startPrank(addressManager.owner()); + // addressManager.setAddress(1, "bridge", bridgeProxyAddress); + // addressManager.setAddress(1, "erc1155_vault", erc1155VaultProxyAddress); + // vm.stopPrank(); - assertEq(contractOwner, erc1155VaultProxy.owner()); + // // address erc1155VaultAddress = getPredeployedContractAddress("ERC1155VaultImpl"); - vm.startPrank(addressManager.owner()); - addressManager.setAddress(1, "bridge", bridgeProxyAddress); - addressManager.setAddress(1, "erc1155_vault", erc1155VaultProxyAddress); - vm.stopPrank(); + // vm.startPrank(erc1155VaultProxy.owner()); - // address erc1155VaultAddress = getPredeployedContractAddress("ERC1155VaultImpl"); + // erc1155VaultProxy.upgradeTo(address(new ERC1155Vault())); - vm.startPrank(erc1155VaultProxy.owner()); - - erc1155VaultProxy.upgradeTo(address(new ERC1155Vault())); - - vm.stopPrank(); - } + // vm.stopPrank(); + // } function testSingletonSignalService() public { SignalService signalServiceProxy = @@ -265,12 +265,12 @@ contract TestGenerateGenesis is Test, AddressResolver { vm.stopPrank(); } - function testERC20() public { - RegularERC20 regularERC20 = RegularERC20(getPredeployedContractAddress("RegularERC20")); + // function testERC20() public { + // RegularERC20 regularERC20 = RegularERC20(getPredeployedContractAddress("RegularERC20")); - assertEq(regularERC20.name(), "RegularERC20"); - assertEq(regularERC20.symbol(), "RGL"); - } + // assertEq(regularERC20.name(), "RegularERC20"); + // assertEq(regularERC20.symbol(), "RGL"); + // } function getPredeployedContractAddress(string memory contractName) private diff --git a/packages/protocol/test/genesis/data/genesis.json b/packages/protocol/test/genesis/data/genesis.json index 6b1549bf7e..e8225562a1 100644 --- a/packages/protocol/test/genesis/data/genesis.json +++ b/packages/protocol/test/genesis/data/genesis.json @@ -24,216 +24,216 @@ "alloc": { - "0xDf08F82De32B8d460adbE8D72043E3a7e25A3B39": { + "0x91c34396e640e3bB4eE80f2e523c23dDa2b3f78F": { "balance": "0x3635c9adc5dea00000" }, "0x79fcdef22feed20eddacbb2587640e45491b757f": { "balance": "0x3635c9adc5dea00000" }, - "0x0167000000000000000000000000000000000006": { + "0x0167010000000000000000000000000000000006": { "contractName": "SharedAddressManagerImpl", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f" }, - "code": "0x608060405260043610610126575f3560e01c80635c975abb116100a85780638da5cb5b1161006d5780638da5cb5b14610301578063a86f9d9e1461031e578063d8f4648f1461033d578063e07baba61461035c578063e30c39781461039b578063f2fde38b146103b8575f5ffd5b80635c975abb14610291578063715018a6146102b157806379ba5097146102c55780638456cb59146102d95780638abf6077146102ed575f5ffd5b80633ab76e9f116100ee5780633ab76e9f1461020a5780633eb6b8cf146102295780633f4ba83a146102485780634f1ef2861461025c57806352d1902d1461026f575f5ffd5b8063069489a21461012a57806319ab453c1461014057806328f713cc1461015f5780633075db56146101c75780633659cfe6146101eb575b5f5ffd5b348015610135575f5ffd5b5061013e6103d7565b005b34801561014b575f5ffd5b5061013e61015a36600461110e565b610487565b34801561016a575f5ffd5b506101aa610179366004611145565b67ffffffffffffffff919091165f90815260fb6020908152604080832093835292905220546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101d2575f5ffd5b506101db61055f565b60405190151581526020016101be565b3480156101f6575f5ffd5b5061013e61020536600461110e565b610577565b348015610215575f5ffd5b506097546101aa906001600160a01b031681565b348015610234575f5ffd5b506101aa61024336600461117c565b61063e565b348015610253575f5ffd5b5061013e610654565b61013e61026a3660046111c9565b610668565b34801561027a575f5ffd5b5061028361071d565b6040519081526020016101be565b34801561029c575f5ffd5b506101db60c954610100900460ff1660021490565b3480156102bc575f5ffd5b5061013e6107ce565b3480156102d0575f5ffd5b5061013e6107df565b3480156102e4575f5ffd5b5061013e610856565b3480156102f8575f5ffd5b506101aa610869565b34801561030c575f5ffd5b506033546001600160a01b03166101aa565b348015610329575f5ffd5b506101aa61033836600461128f565b610877565b348015610348575f5ffd5b5061013e6103573660046112b9565b610883565b348015610367575f5ffd5b5060c9546103829062010000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101be565b3480156103a6575f5ffd5b506065546001600160a01b03166101aa565b3480156103c3575f5ffd5b5061013e6103d236600461110e565b610961565b6103df6109d2565b5f54600290610100900460ff161580156103ff57505f5460ff8083169116105b6104245760405162461bcd60e51b815260040161041b906112f6565b60405180910390fd5b5f8054609780546001600160a01b0319163017905561ffff191660ff83169081176101001761ff0019169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b5f54610100900460ff16158080156104a557505f54600160ff909116105b806104be5750303b1580156104be57505f5460ff166001145b6104da5760405162461bcd60e51b815260040161041b906112f6565b5f805460ff1916600117905580156104fb575f805461ff0019166101001790555b61050482610a2c565b609780546001600160a01b03191630179055801561055b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b5f600261056e60c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000061630036105bf5760405162461bcd60e51b815260040161041b90611344565b7f00000000000000000000000001670000000000000000000000000000000000066001600160a01b03166105f1610a8a565b6001600160a01b0316146106175760405162461bcd60e51b815260040161041b90611390565b61062081610aa5565b604080515f8082526020820190925261063b91839190610aad565b50565b5f61064a848484610c1c565b90505b9392505050565b61065c610c6f565b610666335f610d00565b565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000061630036106b05760405162461bcd60e51b815260040161041b90611344565b7f00000000000000000000000001670000000000000000000000000000000000066001600160a01b03166106e2610a8a565b6001600160a01b0316146107085760405162461bcd60e51b815260040161041b90611390565b61071182610aa5565b61055b82826001610aad565b5f306001600160a01b037f000000000000000000000000016700000000000000000000000000000000000616146107bc5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161041b565b505f5160206114c95f395f51905f5290565b6107d66109d2565b6106665f610d19565b60655433906001600160a01b0316811461084d5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b606482015260840161041b565b61063b81610d19565b61085e610d32565b610666336001610d00565b5f610872610a8a565b905090565b5f61064d468484610c1c565b61088b6109d2565b67ffffffffffffffff83165f90815260fb602090815260408083208584529091529020546001600160a01b039081169082168190036108dd5760405163a883089360e01b815260040160405180910390fd5b67ffffffffffffffff84165f81815260fb6020908152604080832087845282529182902080546001600160a01b0319166001600160a01b038781169182179092558351908152908516918101919091528592917f500dcd607a98daece9bccc2511bf6032471252929de73caf507aae0e082f8453910160405180910390a350505050565b6109696109d2565b606580546001600160a01b0383166001600160a01b0319909116811790915561099a6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6033546001600160a01b031633146106665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161041b565b5f54610100900460ff16610a525760405162461bcd60e51b815260040161041b906113dc565b610a5a610da3565b610a786001600160a01b03821615610a725781610d19565b33610d19565b5060c9805461ff001916610100179055565b5f5160206114c95f395f51905f52546001600160a01b031690565b61063b6109d2565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610ae557610ae083610dc9565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b3f575060408051601f3d908101601f19168201909252610b3c91810190611427565b60015b610ba25760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161041b565b5f5160206114c95f395f51905f528114610c105760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161041b565b50610ae0838383610e64565b5f610c278484610e8e565b905081158015610c3e57506001600160a01b038116155b1561064d57604051632b0d65db60e01b815267ffffffffffffffff851660048201526024810184905260440161041b565b610c8360c954610100900460ff1660021490565b610ca05760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff0019909116620100004267ffffffffffffffff1602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b604051630c2b8f8f60e11b815260040160405180910390fd5b606580546001600160a01b031916905561063b81610f39565b610d4660c954610100900460ff1660021490565b15610d645760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610cf6565b5f54610100900460ff166106665760405162461bcd60e51b815260040161041b906113dc565b6001600160a01b0381163b610e365760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161041b565b5f5160206114c95f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b610e6d83610f8a565b5f82511180610e795750805b15610ae057610e888383610fc9565b50505050565b6097545f906001600160a01b031680610eba57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b815267ffffffffffffffff85166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015610f0d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f31919061143e565b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b610f9381610dc9565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061064d83836040518060600160405280602781526020016114e96027913960605f5f856001600160a01b031685604051611005919061147b565b5f60405180830381855af49150503d805f811461103d576040519150601f19603f3d011682016040523d82523d5f602084013e611042565b606091505b50915091506110538683838761105d565b9695505050505050565b606083156110cb5782515f036110c4576001600160a01b0385163b6110c45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161041b565b5081610f31565b610f3183838151156110e05781518083602001fd5b8060405162461bcd60e51b815260040161041b9190611496565b6001600160a01b038116811461063b575f5ffd5b5f6020828403121561111e575f5ffd5b813561064d816110fa565b803567ffffffffffffffff81168114611140575f5ffd5b919050565b5f5f60408385031215611156575f5ffd5b61115f83611129565b946020939093013593505050565b80358015158114611140575f5ffd5b5f5f5f6060848603121561118e575f5ffd5b61119784611129565b9250602084013591506111ac6040850161116d565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156111da575f5ffd5b82356111e5816110fa565b9150602083013567ffffffffffffffff811115611200575f5ffd5b8301601f81018513611210575f5ffd5b803567ffffffffffffffff81111561122a5761122a6111b5565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715611259576112596111b5565b604052818152828201602001871015611270575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f604083850312156112a0575f5ffd5b823591506112b06020840161116d565b90509250929050565b5f5f5f606084860312156112cb575f5ffd5b6112d484611129565b92506020840135915060408401356112eb816110fa565b809150509250925092565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215611437575f5ffd5b5051919050565b5f6020828403121561144e575f5ffd5b815161064d816110fa565b5f5b8381101561147357818101518382015260200161145b565b50505f910152565b5f825161148c818460208701611459565b9190910192915050565b602081525f82518060208401526114b4816040850160208701611459565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220086d22e71c4d170ad7ce74f948ce47f2f39076babb18c7b950d99c756006877464736f6c634300081b0033", + "code": "0x608060405260043610610126575f3560e01c80635c975abb116100a85780638da5cb5b1161006d5780638da5cb5b14610301578063a86f9d9e1461031e578063d8f4648f1461033d578063e07baba61461035c578063e30c39781461039b578063f2fde38b146103b8575f5ffd5b80635c975abb14610291578063715018a6146102b157806379ba5097146102c55780638456cb59146102d95780638abf6077146102ed575f5ffd5b80633ab76e9f116100ee5780633ab76e9f1461020a5780633eb6b8cf146102295780633f4ba83a146102485780634f1ef2861461025c57806352d1902d1461026f575f5ffd5b8063069489a21461012a57806319ab453c1461014057806328f713cc1461015f5780633075db56146101c75780633659cfe6146101eb575b5f5ffd5b348015610135575f5ffd5b5061013e6103d7565b005b34801561014b575f5ffd5b5061013e61015a36600461110e565b610487565b34801561016a575f5ffd5b506101aa610179366004611145565b67ffffffffffffffff919091165f90815260fb6020908152604080832093835292905220546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101d2575f5ffd5b506101db61055f565b60405190151581526020016101be565b3480156101f6575f5ffd5b5061013e61020536600461110e565b610577565b348015610215575f5ffd5b506097546101aa906001600160a01b031681565b348015610234575f5ffd5b506101aa61024336600461117c565b61063e565b348015610253575f5ffd5b5061013e610654565b61013e61026a3660046111c9565b610668565b34801561027a575f5ffd5b5061028361071d565b6040519081526020016101be565b34801561029c575f5ffd5b506101db60c954610100900460ff1660021490565b3480156102bc575f5ffd5b5061013e6107ce565b3480156102d0575f5ffd5b5061013e6107df565b3480156102e4575f5ffd5b5061013e610856565b3480156102f8575f5ffd5b506101aa610869565b34801561030c575f5ffd5b506033546001600160a01b03166101aa565b348015610329575f5ffd5b506101aa61033836600461128f565b610877565b348015610348575f5ffd5b5061013e6103573660046112b9565b610883565b348015610367575f5ffd5b5060c9546103829062010000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101be565b3480156103a6575f5ffd5b506065546001600160a01b03166101aa565b3480156103c3575f5ffd5b5061013e6103d236600461110e565b610961565b6103df6109d2565b5f54600290610100900460ff161580156103ff57505f5460ff8083169116105b6104245760405162461bcd60e51b815260040161041b906112f6565b60405180910390fd5b5f8054609780546001600160a01b0319163017905561ffff191660ff83169081176101001761ff0019169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b5f54610100900460ff16158080156104a557505f54600160ff909116105b806104be5750303b1580156104be57505f5460ff166001145b6104da5760405162461bcd60e51b815260040161041b906112f6565b5f805460ff1916600117905580156104fb575f805461ff0019166101001790555b61050482610a2c565b609780546001600160a01b03191630179055801561055b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b5f600261056e60c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670100000000000000000000000000000000061630036105bf5760405162461bcd60e51b815260040161041b90611344565b7f00000000000000000000000001670100000000000000000000000000000000066001600160a01b03166105f1610a8a565b6001600160a01b0316146106175760405162461bcd60e51b815260040161041b90611390565b61062081610aa5565b604080515f8082526020820190925261063b91839190610aad565b50565b5f61064a848484610c1c565b90505b9392505050565b61065c610c6f565b610666335f610d00565b565b6001600160a01b037f00000000000000000000000001670100000000000000000000000000000000061630036106b05760405162461bcd60e51b815260040161041b90611344565b7f00000000000000000000000001670100000000000000000000000000000000066001600160a01b03166106e2610a8a565b6001600160a01b0316146107085760405162461bcd60e51b815260040161041b90611390565b61071182610aa5565b61055b82826001610aad565b5f306001600160a01b037f000000000000000000000000016701000000000000000000000000000000000616146107bc5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161041b565b505f5160206114c95f395f51905f5290565b6107d66109d2565b6106665f610d19565b60655433906001600160a01b0316811461084d5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b606482015260840161041b565b61063b81610d19565b61085e610d32565b610666336001610d00565b5f610872610a8a565b905090565b5f61064d468484610c1c565b61088b6109d2565b67ffffffffffffffff83165f90815260fb602090815260408083208584529091529020546001600160a01b039081169082168190036108dd5760405163a883089360e01b815260040160405180910390fd5b67ffffffffffffffff84165f81815260fb6020908152604080832087845282529182902080546001600160a01b0319166001600160a01b038781169182179092558351908152908516918101919091528592917f500dcd607a98daece9bccc2511bf6032471252929de73caf507aae0e082f8453910160405180910390a350505050565b6109696109d2565b606580546001600160a01b0383166001600160a01b0319909116811790915561099a6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6033546001600160a01b031633146106665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161041b565b5f54610100900460ff16610a525760405162461bcd60e51b815260040161041b906113dc565b610a5a610da3565b610a786001600160a01b03821615610a725781610d19565b33610d19565b5060c9805461ff001916610100179055565b5f5160206114c95f395f51905f52546001600160a01b031690565b61063b6109d2565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610ae557610ae083610dc9565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b3f575060408051601f3d908101601f19168201909252610b3c91810190611427565b60015b610ba25760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161041b565b5f5160206114c95f395f51905f528114610c105760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161041b565b50610ae0838383610e64565b5f610c278484610e8e565b905081158015610c3e57506001600160a01b038116155b1561064d57604051632b0d65db60e01b815267ffffffffffffffff851660048201526024810184905260440161041b565b610c8360c954610100900460ff1660021490565b610ca05760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff0019909116620100004267ffffffffffffffff1602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b604051630c2b8f8f60e11b815260040160405180910390fd5b606580546001600160a01b031916905561063b81610f39565b610d4660c954610100900460ff1660021490565b15610d645760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610cf6565b5f54610100900460ff166106665760405162461bcd60e51b815260040161041b906113dc565b6001600160a01b0381163b610e365760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161041b565b5f5160206114c95f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b610e6d83610f8a565b5f82511180610e795750805b15610ae057610e888383610fc9565b50505050565b6097545f906001600160a01b031680610eba57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b815267ffffffffffffffff85166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015610f0d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f31919061143e565b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b610f9381610dc9565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061064d83836040518060600160405280602781526020016114e96027913960605f5f856001600160a01b031685604051611005919061147b565b5f60405180830381855af49150503d805f811461103d576040519150601f19603f3d011682016040523d82523d5f602084013e611042565b606091505b50915091506110538683838761105d565b9695505050505050565b606083156110cb5782515f036110c4576001600160a01b0385163b6110c45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161041b565b5081610f31565b610f3183838151156110e05781518083602001fd5b8060405162461bcd60e51b815260040161041b9190611496565b6001600160a01b038116811461063b575f5ffd5b5f6020828403121561111e575f5ffd5b813561064d816110fa565b803567ffffffffffffffff81168114611140575f5ffd5b919050565b5f5f60408385031215611156575f5ffd5b61115f83611129565b946020939093013593505050565b80358015158114611140575f5ffd5b5f5f5f6060848603121561118e575f5ffd5b61119784611129565b9250602084013591506111ac6040850161116d565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156111da575f5ffd5b82356111e5816110fa565b9150602083013567ffffffffffffffff811115611200575f5ffd5b8301601f81018513611210575f5ffd5b803567ffffffffffffffff81111561122a5761122a6111b5565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715611259576112596111b5565b604052818152828201602001871015611270575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f604083850312156112a0575f5ffd5b823591506112b06020840161116d565b90509250929050565b5f5f5f606084860312156112cb575f5ffd5b6112d484611129565b92506020840135915060408401356112eb816110fa565b809150509250925092565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215611437575f5ffd5b5051919050565b5f6020828403121561144e575f5ffd5b815161064d816110fa565b5f5b8381101561147357818101518382015260200161145b565b50505f910152565b5f825161148c818460208701611459565b9190910192915050565b602081525f82518060208401526114b4816040850160208701611459565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220086d22e71c4d170ad7ce74f948ce47f2f39076babb18c7b950d99c756006877464736f6c634300081b0033", "balance": "0x0" }, - "0x1670000000000000000000000000000000000006": { + "0x1670100000000000000000000000000000000006": { "contractName": "SharedAddressManager", "storage": { "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", - "0xee78643889fcb54c297d0ecf866d9df7d829a8c978e52394d135cdb40a501e38": "0x0000000000000000000000001670000000000000000000000000000000000001", - "0x1b59c5b714a9474274d08839cd27e78ebbcde0eb67d55f88e6a8162fdf746fb6": "0x0000000000000000000000001670000000000000000000000000000000000002", - "0x86f2835ec2a9687ca2e2a16b9bca18cc21a3eb0801913c2c1024c94dae29a56f": "0x0000000000000000000000001670000000000000000000000000000000000003", - "0xceda61f04213e952bfa0631c1d6a46e0243feddef01b15830df6d44a883942ef": "0x0000000000000000000000001670000000000000000000000000000000000004", - "0xd724ebf31fb7ffa376a4d5d51b51967009df0c86a4dfef5f55507cde2eb36739": "0x0000000000000000000000001670000000000000000000000000000000000005", - "0x7c370492eefc4caa8cbb896169c5fc4597f28c57333bb43e31066f4f66652c55": "0x0000000000000000000000000167000000000000000000000000000000010096", - "0xe6965834a21a9e0a0de81d5e0ea99e149f660508a785a52be0ad77b96b5b1c5c": "0x0000000000000000000000000167000000000000000000000000000000010097", - "0x83e96d9214b47c6368e642dca9daced8ea339555eb83dac20d7cbfb0cc0f5c7b": "0x0000000000000000000000000167000000000000000000000000000000010098", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000000006" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f", + "0xe5868eccbe729200743507b6a76ef4952ff4776d6f6e681ea64d7940675418c0": "0x0000000000000000000000001670100000000000000000000000000000000001", + "0xac615b65b35c3ba4f3c515a78b7c7087cf20a185f9b50892a5aee8f38a94a2a3": "0x0000000000000000000000001670100000000000000000000000000000000002", + "0x14cb34ed2e94c2835324f4eb54fd6848cf7921d0bf9f4fb32c4024aa57aa1984": "0x0000000000000000000000001670100000000000000000000000000000000003", + "0xb2033e35b11225145ffd6e0525438c45f3904a68265a4ffbb67d58cb05a01cc5": "0x0000000000000000000000001670100000000000000000000000000000000004", + "0x84e8aac80b10d1364654096d750848d40210c937caf853cdc47e8784ad6cf9d5": "0x0000000000000000000000001670100000000000000000000000000000000005", + "0x9a06f3c0b2f5a00a447c9f6319a508edf25cf66bc3f3c78f4ae49dd92666d942": "0x0000000000000000000000000167010000000000000000000000000000010096", + "0x9f59effaee3d6269d0c2edb48468d6b7b24b0d51e8dbf63ea89d415b3ba3c4c3": "0x0000000000000000000000000167010000000000000000000000000000010097", + "0xd2c72e61a4567b7f7a7370a9e5ee40577297986a376fbdb74245f5bd58472e83": "0x0000000000000000000000000167010000000000000000000000000000010098", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167010000000000000000000000000000000006" }, "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", "balance": "0x0" }, - "0x0167000000000000000000000000000000000001": { + "0x0167010000000000000000000000000000000001": { "contractName": "BridgeImpl", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f" }, - "code": "0x60806040526004361061021d575f3560e01c806382b5e8891161011e578063b8acae0e116100a8578063e07baba61161006d578063e07baba61461066b578063e30c3978146106a8578063eefbf17e146106c5578063f09a4016146106eb578063f2fde38b1461070a575f5ffd5b8063b8acae0e146105af578063be880c81146105ce578063c012fa77146105e4578063d0496d6a14610603578063d1aaa5df1461064b575f5ffd5b80638e3881a9116100ee5780638e3881a9146104fe578063913b16cb1461053c5780639efc7a2e1461055b578063a730cdfb1461057a578063a86f9d9e14610590575f5ffd5b806382b5e8891461049a5780638456cb59146104b95780638abf6077146104cd5780638da5cb5b146104e1575f5ffd5b80633f4ba83a116101aa5780635c975abb1161016f5780635c975abb146103ff57806360620c6b1461041f578063715018a61461043e57806379ba5097146104525780637cbadfaa14610466575f5ffd5b80633f4ba83a14610381578063422770fa146103955780634f1ef286146103b957806352d1902d146103cc5780635862f6e1146103e0575f5ffd5b80633075db56116101f05780633075db56146102ad5780633659cfe6146102d15780633ab76e9f146102f05780633c6cf473146103275780633eb6b8cf14610362575f5ffd5b80630432873c14610221578063069489a2146102425780631bdb0037146102565780632035065e14610280575b5f5ffd5b34801561022c575f5ffd5b5061024061023b366004612f28565b610729565b005b34801561024d575f5ffd5b50610240610a27565b610269610264366004612f76565b610ade565b604051610277929190613102565b60405180910390f35b34801561028b575f5ffd5b5061029f61029a36600461311a565b610e94565b6040516102779291906131d7565b3480156102b8575f5ffd5b506102c1611354565b6040519015158152602001610277565b3480156102dc575f5ffd5b506102406102eb366004613226565b61136c565b3480156102fb575f5ffd5b5060975461030f906001600160a01b031681565b6040516001600160a01b039091168152602001610277565b348015610332575f5ffd5b50610355610341366004613241565b60fc6020525f908152604090205460ff1681565b6040516102779190613258565b34801561036d575f5ffd5b5061030f61037c36600461327c565b611433565b34801561038c575f5ffd5b50610240611449565b3480156103a0575f5ffd5b506103ab62030d4081565b604051908152602001610277565b6102406103c736600461337f565b61145d565b3480156103d7575f5ffd5b506103ab611516565b3480156103eb575f5ffd5b506102c16103fa36600461311a565b6115c8565b34801561040a575f5ffd5b506102c160c954610100900460ff1660021490565b34801561042a575f5ffd5b506102c1610439366004612f76565b611633565b348015610449575f5ffd5b50610240611701565b34801561045d575f5ffd5b50610240611712565b348015610471575f5ffd5b50610485610480366004613241565b611789565b60405163ffffffff9091168152602001610277565b3480156104a5575f5ffd5b506102406104b4366004613226565b6117a7565b3480156104c4575f5ffd5b50610240611827565b3480156104d8575f5ffd5b5061030f61183a565b3480156104ec575f5ffd5b506033546001600160a01b031661030f565b348015610509575f5ffd5b5061051d6105183660046133cb565b611848565b6040805192151583526001600160a01b03909116602083015201610277565b348015610547575f5ffd5b50610240610556366004612f76565b611874565b348015610566575f5ffd5b5061024061057536600461311a565b611a63565b348015610585575f5ffd5b506104856201d4c081565b34801561059b575f5ffd5b5061030f6105aa3660046133e4565b611d67565b3480156105ba575f5ffd5b506102c16105c936600461311a565b611d73565b3480156105d9575f5ffd5b50610485620c350081565b3480156105ef575f5ffd5b506103ab6105fe366004613507565b611dd4565b34801561060e575f5ffd5b50610617611e03565b60408051825181526020808401516001600160a01b031690820152918101516001600160401b031690820152606001610277565b348015610656575f5ffd5b506103ab610665366004613241565b60031890565b348015610676575f5ffd5b5060c954610690906201000090046001600160401b031681565b6040516001600160401b039091168152602001610277565b3480156106b3575f5ffd5b506065546001600160a01b031661030f565b3480156106d0575f5ffd5b5060fb5461069090600160401b90046001600160401b031681565b3480156106f6575f5ffd5b50610240610705366004613538565b611eaa565b348015610715575f5ffd5b50610240610724366004613226565b611f71565b61073960e0830160c084016133cb565b46816001600160401b03161461076257604051631c6c777560e31b815260040160405180910390fd5b61077260a08401608085016133cb565b6001600160401b0381161580610790575046816001600160401b0316145b156107ae57604051631c6c777560e31b815260040160405180910390fd5b6107c260c954610100900460ff1660021490565b156107e05760405163bae6e2a960e01b815260040160405180910390fd5b60026107ee60c95460ff1690565b60ff160361080f5760405163dfc60d8560e01b815260040160405180910390fd5b6108196002611fe2565b5f6108266105fe86613564565b9050610833816001611ff8565b61084185610120013561204a565b61085e576040516335856fbd60e21b815260040160405180910390fd5b5f6108838661087e6d7369676e616c5f7365727669636560901b5f611d67565b6120eb565b156108ce576108c78661012001356188b860405180602001604052805f8152508960e00160208101906108b69190613226565b6001600160a01b03169291906121e2565b9050610948565b6108de606087016040880161356f565b63ffffffff1615806108ed5750845b801561091b5750610905610100870160e08801613226565b6001600160a01b0316336001600160a01b031614155b15610939576040516372b6e1c360e11b815260040160405180910390fd5b61094586835a5f61221f565b90505b801561095e57610959826002612316565b610a15565b84156109fc5761096f826003612316565b61098a6d7369676e616c5f7365727669636560901b5f611d67565b60405163019b28af60e61b81526003841860048201526001600160a01b0391909116906366ca2bc0906024016020604051808303815f875af11580156109d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109f69190613588565b50610a15565b60405163161e3ead60e01b815260040160405180910390fd5b5050610a216001611fe2565b50505050565b610a2f6123d3565b5f54600290610100900460ff16158015610a4f57505f5460ff8083169116105b610a745760405162461bcd60e51b8152600401610a6b9061359f565b60405180910390fd5b5f805460fb805467ffffffffffffffff1916905560ff82815561010083815561ff001991851661ffff19909316831717169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201839052610140820152610b4460c0840160a08501613226565b6001600160a01b038116610b6b5760405163538ba4f960e01b815260040160405180910390fd5b610b7c610100850160e08601613226565b6001600160a01b038116610ba35760405163538ba4f960e01b815260040160405180910390fd5b610bb360e0860160c087016133cb565b6001600160401b0381161580610bd1575046816001600160401b0316145b15610bef57604051631c6c777560e31b815260040160405180910390fd5b610c0360c954610100900460ff1660021490565b15610c215760405163bae6e2a960e01b815260040160405180910390fd5b6002610c2f60c95460ff1690565b60ff1603610c505760405163dfc60d8560e01b815260040160405180910390fd5b610c5a6002611fe2565b610c6a606087016040880161356f565b63ffffffff165f03610cb257610c8660408701602088016133cb565b6001600160401b031615610cad5760405163c9f5178760e01b815260040160405180910390fd5b610cda565b610cbb8661242d565b5f03610cda576040516308c2ad5360e01b815260040160405180910390fd5b5f610cee61051860e0890160c08a016133cb565b50905080610d0f57604051631c6c777560e31b815260040160405180910390fd5b34610d206040890160208a016133cb565b610d38906001600160401b03166101208a0135613601565b14610d5657604051634ac2abdf60e11b815260040160405180910390fd5b610d5f87613564565b60fb8054919650600160401b9091046001600160401b0316906008610d8383613614565b82546101009290920a6001600160401b03818102199093169183160217909155908116865233606087015246166080860152610dbe85611dd4565b9550857fe33fd33b4f45b95b1c196242240c5b5233129d724b578f95b66ce8d8aae9351786604051610df0919061363e565b60405180910390a2610e136d7369676e616c5f7365727669636560901b5f611d67565b6001600160a01b03166366ca2bc0876040518263ffffffff1660e01b8152600401610e4091815260200190565b6020604051808303815f875af1158015610e5c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e809190613588565b5050610e8c6001611fe2565b505050915091565b5f5f610eaa60c954610100900460ff1660021490565b15610ec85760405163bae6e2a960e01b815260040160405180910390fd5b6002610ed660c95460ff1690565b60ff1603610ef75760405163dfc60d8560e01b815260040160405180910390fd5b610f016002611fe2565b5f5a905046610f1660e0880160c089016133cb565b6001600160401b031614610f3d57604051631c6c777560e31b815260040160405180910390fd5b610f4d60a08701608088016133cb565b6001600160401b03161580610f79575046610f6e60a08801608089016133cb565b6001600160401b0316145b15610f9757604051631c6c777560e31b815260040160405180910390fd5b604080516080810182525f808252602082018190529181018290526060810191909152610fcb610100880160e08901613226565b6001600160a01b031633148015606083015261103a57610ff1606088016040890161356f565b63ffffffff165f03611016576040516372b6e1c360e11b815260040160405180910390fd5b62030d4085111561103a57604051631e3b03c960e01b815260040160405180910390fd5b5f6110476105fe89613564565b9050611053815f611ff8565b5f61106f6d7369676e616c5f7365727669636560901b5f611d67565b63ffffffff881660208501529050611099818361109260a08d0160808e016133cb565b8b8b612480565b63ffffffff166040808501919091526110d8906110bb908b0160208c016133cb565b6110d3906001600160401b03166101208c0135613601565b61204a565b6110f5576040516335856fbd60e21b815260040160405180910390fd5b5f6111008a836120eb565b1561111957506002955060019450610120890135611160565b5f8460600151611129575a611132565b6111328b61242d565b90506111448b8583886060015161221f565b1561115557600297505f965061115e565b60019750600296505b505b61117060408b0160208c016133cb565b6001600160401b0316156112d15761118e60408b0160208c016133cb565b6111a1906001600160401b031682613601565b9050836060015180156111c857506111bf60608b0160408c0161356f565b63ffffffff1615155b156112d157604084015163ffffffff16614e20025a6112056111ee6101408e018e613650565b6020601f909101819004026101a00160041b919050565b63ffffffff9081168801919091036201d4c00181168087525f91839161122e9183919061252b16565b0390505f61124260608e0160408f0161356f565b63ffffffff168d602001602081019061125b91906133cb565b6001600160401b031683028161127357611273613699565b0490505f48830290505f6112b78f602001602081019061129391906133cb565b6001600160401b0316848410156112af5784840160011c6112b1565b845b90612540565b958690039590506112cb33826188b8612554565b50505050505b6112f9816188b86112e96101008e0160e08f01613226565b6001600160a01b03169190612554565b6113038388612316565b827f8580f507761043ecdd2bdca084d6fb0109150b3d9842d854d34e3dea6d69387d8b86604051611335929190613831565b60405180910390a2505050505061134c6001611fe2565b935093915050565b5f600261136360c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000011630036113b45760405162461bcd60e51b8152600401610a6b90613885565b7f00000000000000000000000001670000000000000000000000000000000000016001600160a01b03166113e6612597565b6001600160a01b03161461140c5760405162461bcd60e51b8152600401610a6b906138d1565b611415816125b2565b604080515f80825260208201909252611430918391906125ba565b50565b5f61143f848484612724565b90505b9392505050565b611451612776565b61145b335f612806565b565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000011630036114a55760405162461bcd60e51b8152600401610a6b90613885565b7f00000000000000000000000001670000000000000000000000000000000000016001600160a01b03166114d7612597565b6001600160a01b0316146114fd5760405162461bcd60e51b8152600401610a6b906138d1565b611506826125b2565b611512828260016125ba565b5050565b5f306001600160a01b037f000000000000000000000000016700000000000000000000000000000000000116146115b55760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610a6b565b505f516020613aeb5f395f51905f525b90565b5f466115da60a08601608087016133cb565b6001600160401b0316146115ef57505f611442565b61143f61160d6d7369676e616c5f7365727669636560901b5f611d67565b61161c6106656105fe88613564565b61162c60e0880160c089016133cb565b86866128b3565b5f4661164560a08401608085016133cb565b6001600160401b03161461165a57505f919050565b6116756d7369676e616c5f7365727669636560901b5f611d67565b6001600160a01b03166332676bc6306116906105fe86613564565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa1580156116d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116fb919061391d565b92915050565b6117096123d3565b61145b5f612935565b60655433906001600160a01b031681146117805760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610a6b565b61143081612935565b5f6116fb620c35006101a06020601f8601819004020160041b613938565b806001600160a01b0381166117cf5760405163538ba4f960e01b815260040160405180910390fd5b6040516317066a5760e21b81523060048201526001600160a01b03831690635c19a95c906024015f604051808303815f87803b15801561180d575f5ffd5b505af115801561181f573d5f5f3e3d5ffd5b505050505050565b61182f61294e565b61145b336001612806565b5f611843612597565b905090565b5f5f61185f836562726964676560d01b6001611433565b6001600160a01b038116151594909350915050565b61188460e0820160c083016133cb565b46816001600160401b0316146118ad57604051631c6c777560e31b815260040160405180910390fd5b6118bd60a08301608084016133cb565b6001600160401b03811615806118db575046816001600160401b0316145b156118f957604051631c6c777560e31b815260040160405180910390fd5b61190d60c954610100900460ff1660021490565b1561192b5760405163bae6e2a960e01b815260040160405180910390fd5b600261193960c95460ff1690565b60ff160361195a5760405163dfc60d8560e01b815260040160405180910390fd5b6119646002611fe2565b611975610100840160e08501613226565b6001600160a01b0316336001600160a01b0316146119a6576040516372b6e1c360e11b815260040160405180910390fd5b5f6119b36105fe85613564565b90506119c0816001611ff8565b6119cb816003612316565b6119e66d7369676e616c5f7365727669636560901b5f611d67565b60405163019b28af60e61b81526003831860048201526001600160a01b0391909116906366ca2bc0906024016020604051808303815f875af1158015611a2e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a529190613588565b5050611a5e6001611fe2565b505050565b611a7360a08401608085016133cb565b46816001600160401b031614611a9c57604051631c6c777560e31b815260040160405180910390fd5b611aac60e0850160c086016133cb565b6001600160401b0381161580611aca575046816001600160401b0316145b15611ae857604051631c6c777560e31b815260040160405180910390fd5b611afc60c954610100900460ff1660021490565b15611b1a5760405163bae6e2a960e01b815260040160405180910390fd5b6002611b2860c95460ff1690565b60ff1603611b495760405163dfc60d8560e01b815260040160405180910390fd5b611b536002611fe2565b5f611b606105fe87613564565b9050611b6c815f611ff8565b5f611b886d7369676e616c5f7365727669636560901b5f611d67565b604051631933b5e360e11b8152306004820152602481018490529091506001600160a01b038216906332676bc690604401602060405180830381865afa158015611bd4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bf8919061391d565b611c155760405163ab035ad560e01b815260040160405180910390fd5b611c348160038418611c2d60e08b0160c08c016133cb565b8989612480565b50611c40826004612316565b611c4e87610120013561204a565b611c6b576040516335856fbd60e21b815260040160405180910390fd5b611c9462bc399d60e11b611c8560808a0160608b01613226565b6001600160a01b0316906129bf565b15611d3857611cb38230611cae60a08b0160808c016133cb565b612a4c565b611cc36080880160608901613226565b6001600160a01b0316630178733a88610120013589856040518463ffffffff1660e01b8152600401611cf6929190613954565b5f604051808303818588803b158015611d0d575f5ffd5b505af1158015611d1f573d5f5f3e3d5ffd5b5050505050611d335f195f1b5f1980612a4c565b611d54565b611d546101208801356188b86112e960c08b0160a08c01613226565b5050611d606001611fe2565b5050505050565b5f611442468484612724565b5f46611d8560e0860160c087016133cb565b6001600160401b031614611d9a57505f611442565b61143f611db86d7369676e616c5f7365727669636560901b5f611d67565b611dc46105fe87613564565b61162c60a08801608089016133cb565b5f81604051602001611de69190613975565b604051602081830303815290604052805190602001209050919050565b604080516060810182525f8082526020820181905291810191909152611e7a604080516060810182525f8082526020820181905291810191909152506040805160608101825260fd54815260fe546001600160a01b0381166020830152600160a01b90046001600160401b03169181019190915290565b80519091501580611e8c575080515f19145b156115c557604051635ceed17360e01b815260040160405180910390fd5b5f54610100900460ff1615808015611ec857505f54600160ff909116105b80611ee15750303b158015611ee157505f5460ff166001145b611efd5760405162461bcd60e51b8152600401610a6b9061359f565b5f805460ff191660011790558015611f1e575f805461ff0019166101001790555b611f288383612aa1565b8015611a5e575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b611f796123d3565b606580546001600160a01b0383166001600160a01b03199091168117909155611faa6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b80600481111561200a5761200a6131af565b5f83815260fc602052604090205460ff16600481111561202c5761202c6131af565b14611512576040516319d893ad60e21b815260040160405180910390fd5b5f5f6120676c38bab7ba30afb6b0b730b3b2b960991b6001611d67565b90506001600160a01b0381166120805750600192915050565b6040516315c638fb60e31b81525f6004820152602481018490526001600160a01b0382169063ae31c7d8906044015f604051808303815f87803b1580156120c5575f5ffd5b505af19250505080156120d6575060015b6120e257505f92915050565b50600192915050565b5f806120ff61012085016101008601613226565b6001600160a01b031603612115575060016116fb565b3061212861012085016101008601613226565b6001600160a01b03160361213e575060016116fb565b6001600160a01b03821661215a61012085016101008601613226565b6001600160a01b031603612170575060016116fb565b6004612180610140850185613650565b9050101580156121b75750637f07c94760e01b6121a1610140850185613650565b6121aa916139ab565b6001600160e01b03191614155b801561144257506114426121d361012085016101008601613226565b6001600160a01b03163b151590565b5f6001600160a01b03851661220a57604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b5f306122316080870160608801613226565b6001600160a01b031603612247576122476139e3565b825f0361225557505f61230e565b612279846122696080880160608901613226565b611cae60a0890160808a016133cb565b5f61228c61012087016101008801613226565b90506101208601355f6122a3610140890189613650565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525084519495509384935083925090506020850186888cf194505a905085156122fd576122fd8188612adb565b6123095f198080612a4c565b505050505b949350505050565b806004811115612328576123286131af565b5f83815260fc602052604090205460ff16600481111561234a5761234a6131af565b03612368576040516319d893ad60e21b815260040160405180910390fd5b5f82815260fc60205260409020805482919060ff19166001836004811115612392576123926131af565b0217905550817f6c51882bc2ed67617f77a1e9b9a25d2caad8448647ecb093b357a603b2575634826040516123c79190613258565b60405180910390a25050565b6033546001600160a01b0316331461145b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a6b565b5f80612447612440610140850185613650565b9050611789565b63ffffffff16905080612478612463606086016040870161356f565b63ffffffff168361252b90919063ffffffff16565b039392505050565b5f856001600160a01b031663910af6ed856124a5876562726964676560d01b5f611433565b8887876040518663ffffffff1660e01b81526004016124c89594939291906139f7565b6020604051808303815f875af1925050508015612502575060408051601f3d908101601f191682019092526124ff91810190613588565b60015b61251f576040516314504c7360e31b815260040160405180910390fd5b90505b95945050505050565b5f8183116125395781611442565b5090919050565b5f81831161254e5782611442565b50919050565b815f0361256057505050565b61257a83838360405180602001604052805f8152506121e2565b611a5e57604051634c67134d60e11b815260040160405180910390fd5b5f516020613aeb5f395f51905f52546001600160a01b031690565b6114306123d3565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156125ed57611a5e83612aef565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612647575060408051601f3d908101601f1916820190925261264491810190613588565b60015b6126aa5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610a6b565b5f516020613aeb5f395f51905f5281146127185760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610a6b565b50611a5e838383612b8a565b5f61272f8484612bae565b90508115801561274657506001600160a01b038116155b1561144257604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610a6b565b61278a60c954610100900460ff1660021490565b6127a75760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6033546001600160a01b038381169116148061284e57506128396d636861696e5f7761746368646f6760901b6001611d67565b6001600160a01b0316826001600160a01b0316145b15612857575050565b808015612891575061287c6e6272696467655f7761746368646f6760881b6001611d67565b6001600160a01b0316826001600160a01b0316145b1561289a575050565b604051630d85cccf60e11b815260040160405180910390fd5b5f856001600160a01b031663ce9d0820856128d8876562726964676560d01b5f611433565b8887876040518663ffffffff1660e01b81526004016128fb9594939291906139f7565b5f6040518083038186803b158015612911575f5ffd5b505afa925050508015612922575060015b61292d57505f612522565b506001612522565b606580546001600160a01b031916905561143081612c50565b61296260c954610100900460ff1660021490565b156129805760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016127fc565b5f6001600160a01b0383163b6129d657505f6116fb565b6040516301ffc9a760e01b81526001600160e01b0319831660048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa925050508015612a40575060408051601f3d908101601f19168201909252612a3d9181019061391d565b60015b156116fb579392505050565b604080516060810182528481526001600160a01b03909316602084018190526001600160401b03909216920182905260fd9290925560fe8054600160a01b9092026001600160e01b0319909216909217179055565b806001600160a01b038116612ac95760405163538ba4f960e01b815260040160405180910390fd5b612ad283612ca1565b611a5e82612cff565b612ae6603f82613a38565b82101561151257fe5b6001600160a01b0381163b612b5c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610a6b565b5f516020613aeb5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b612b9383612d6f565b5f82511180612b9f5750805b15611a5e57610a218383612dae565b6097545f906001600160a01b031680612bda57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015612c2c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061230e9190613a57565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16612cc75760405162461bcd60e51b8152600401610a6b90613a72565b612ccf612dd3565b612ced6001600160a01b03821615612ce75781612935565b33612935565b5060c9805461ff001916610100179055565b5f54610100900460ff16612d255760405162461bcd60e51b8152600401610a6b90613a72565b6001600160401b03461115612d4d5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b612d7881612aef565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606114428383604051806060016040528060278152602001613b0b60279139612df9565b5f54610100900460ff1661145b5760405162461bcd60e51b8152600401610a6b90613a72565b60605f5f856001600160a01b031685604051612e159190613abd565b5f60405180830381855af49150503d805f8114612e4d576040519150601f19603f3d011682016040523d82523d5f602084013e612e52565b606091505b5091509150612e6386838387612e6d565b9695505050505050565b60608315612edb5782515f03612ed4576001600160a01b0385163b612ed45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a6b565b508161230e565b61230e8383815115612ef05781518083602001fd5b8060405162461bcd60e51b8152600401610a6b9190613ad8565b5f610160828403121561254e575f5ffd5b8015158114611430575f5ffd5b5f5f60408385031215612f39575f5ffd5b82356001600160401b03811115612f4e575f5ffd5b612f5a85828601612f0a565b9250506020830135612f6b81612f1b565b809150509250929050565b5f60208284031215612f86575f5ffd5b81356001600160401b03811115612f9b575f5ffd5b61230e84828501612f0a565b5f5b83811015612fc1578181015183820152602001612fa9565b50505f910152565b5f8151808452612fe0816020860160208601612fa7565b601f01601f19169290920160200192915050565b80516001600160401b031682525f602082015161301c60208501826001600160401b03169052565b506040820151613034604085018263ffffffff169052565b50606082015161304f60608501826001600160a01b03169052565b50608082015161306a60808501826001600160401b03169052565b5060a082015161308560a08501826001600160a01b03169052565b5060c08201516130a060c08501826001600160401b03169052565b5060e08201516130bb60e08501826001600160a01b03169052565b506101008201516130d86101008501826001600160a01b03169052565b5061012082015161012084015261014082015161016061014085015261230e610160850182612fc9565b828152604060208201525f61143f6040830184612ff4565b5f5f5f6040848603121561312c575f5ffd5b83356001600160401b03811115613141575f5ffd5b61314d86828701612f0a565b93505060208401356001600160401b03811115613168575f5ffd5b8401601f81018613613178575f5ffd5b80356001600160401b0381111561318d575f5ffd5b86602082840101111561319e575f5ffd5b939660209190910195509293505050565b634e487b7160e01b5f52602160045260245ffd5b600581106131d3576131d36131af565b9052565b604081016131e582856131c3565b600483106131f5576131f56131af565b8260208301529392505050565b6001600160a01b0381168114611430575f5ffd5b803561322181613202565b919050565b5f60208284031215613236575f5ffd5b813561144281613202565b5f60208284031215613251575f5ffd5b5035919050565b602081016116fb82846131c3565b80356001600160401b0381168114613221575f5ffd5b5f5f5f6060848603121561328e575f5ffd5b61329784613266565b92506020840135915060408401356132ae81612f1b565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405161016081016001600160401b03811182821017156132f0576132f06132b9565b60405290565b5f82601f830112613305575f5ffd5b81356001600160401b0381111561331e5761331e6132b9565b604051601f8201601f19908116603f011681016001600160401b038111828210171561334c5761334c6132b9565b604052818152838201602001851015613363575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215613390575f5ffd5b823561339b81613202565b915060208301356001600160401b038111156133b5575f5ffd5b6133c1858286016132f6565b9150509250929050565b5f602082840312156133db575f5ffd5b61144282613266565b5f5f604083850312156133f5575f5ffd5b823591506020830135612f6b81612f1b565b803563ffffffff81168114613221575f5ffd5b5f610160828403121561342b575f5ffd5b6134336132cd565b905061343e82613266565b815261344c60208301613266565b602082015261345d60408301613407565b604082015261346e60608301613216565b606082015261347f60808301613266565b608082015261349060a08301613216565b60a08201526134a160c08301613266565b60c08201526134b260e08301613216565b60e08201526134c46101008301613216565b61010082015261012082810135908201526101408201356001600160401b038111156134ee575f5ffd5b6134fa848285016132f6565b6101408301525092915050565b5f60208284031215613517575f5ffd5b81356001600160401b0381111561352c575f5ffd5b61230e8482850161341a565b5f5f60408385031215613549575f5ffd5b823561355481613202565b91506020830135612f6b81613202565b5f6116fb368361341a565b5f6020828403121561357f575f5ffd5b61144282613407565b5f60208284031215613598575f5ffd5b5051919050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156116fb576116fb6135ed565b5f6001600160401b0382166001600160401b038103613635576136356135ed565b60010192915050565b602081525f6114426020830184612ff4565b5f5f8335601e19843603018112613665575f5ffd5b8301803591506001600160401b0382111561367e575f5ffd5b602001915036819003821315613692575f5ffd5b9250929050565b634e487b7160e01b5f52601260045260245ffd5b5f5f8335601e198436030181126136c2575f5ffd5b83016020810192503590506001600160401b038111156136e0575f5ffd5b803603821315613692575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6137308261372383613266565b6001600160401b03169052565b5f61373d60208301613266565b6001600160401b0316602084015261375760408301613407565b63ffffffff16604084015261376e60608301613216565b6001600160a01b0316606084015261378860808301613266565b6001600160401b031660808401526137a260a08301613216565b6001600160a01b031660a08401526137bc60c08301613266565b6001600160401b031660c08401526137d660e08301613216565b6001600160a01b031660e08401526137f16101008301613216565b6001600160a01b031661010084015261012082810135908401526138196101408301836136ad565b610160610140860152612522610160860182846136ee565b60a081525f61384360a0830185613716565b905063ffffffff835116602083015263ffffffff602084015116604083015263ffffffff60408401511660608301526060830151151560808301529392505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f6020828403121561392d575f5ffd5b815161144281612f1b565b63ffffffff81811683821601908111156116fb576116fb6135ed565b604081525f6139666040830185613716565b90508260208301529392505050565b60408152600d60408201526c5441494b4f5f4d45535341474560981b6060820152608060208201525f6114426080830184612ff4565b80356001600160e01b031981169060048410156139dc576001600160e01b0319600485900360031b81901b82161691505b5092915050565b634e487b7160e01b5f52600160045260245ffd5b6001600160401b038616815260018060a01b0385166020820152836040820152608060608201525f613a2d6080830184866136ee565b979650505050505050565b5f82613a5257634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215613a67575f5ffd5b815161144281613202565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f8251613ace818460208701612fa7565b9190910192915050565b602081525f6114426020830184612fc956fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220fe7f47dabd46879b9404e8d06f7ee77f2c51d0391f21575037dda2b3e15ccfb164736f6c634300081b0033", + "code": "0x60806040526004361061021d575f3560e01c806382b5e8891161011e578063b8acae0e116100a8578063e07baba61161006d578063e07baba61461066b578063e30c3978146106a8578063eefbf17e146106c5578063f09a4016146106eb578063f2fde38b1461070a575f5ffd5b8063b8acae0e146105af578063be880c81146105ce578063c012fa77146105e4578063d0496d6a14610603578063d1aaa5df1461064b575f5ffd5b80638e3881a9116100ee5780638e3881a9146104fe578063913b16cb1461053c5780639efc7a2e1461055b578063a730cdfb1461057a578063a86f9d9e14610590575f5ffd5b806382b5e8891461049a5780638456cb59146104b95780638abf6077146104cd5780638da5cb5b146104e1575f5ffd5b80633f4ba83a116101aa5780635c975abb1161016f5780635c975abb146103ff57806360620c6b1461041f578063715018a61461043e57806379ba5097146104525780637cbadfaa14610466575f5ffd5b80633f4ba83a14610381578063422770fa146103955780634f1ef286146103b957806352d1902d146103cc5780635862f6e1146103e0575f5ffd5b80633075db56116101f05780633075db56146102ad5780633659cfe6146102d15780633ab76e9f146102f05780633c6cf473146103275780633eb6b8cf14610362575f5ffd5b80630432873c14610221578063069489a2146102425780631bdb0037146102565780632035065e14610280575b5f5ffd5b34801561022c575f5ffd5b5061024061023b366004612f28565b610729565b005b34801561024d575f5ffd5b50610240610a27565b610269610264366004612f76565b610ade565b604051610277929190613102565b60405180910390f35b34801561028b575f5ffd5b5061029f61029a36600461311a565b610e94565b6040516102779291906131d7565b3480156102b8575f5ffd5b506102c1611354565b6040519015158152602001610277565b3480156102dc575f5ffd5b506102406102eb366004613226565b61136c565b3480156102fb575f5ffd5b5060975461030f906001600160a01b031681565b6040516001600160a01b039091168152602001610277565b348015610332575f5ffd5b50610355610341366004613241565b60fc6020525f908152604090205460ff1681565b6040516102779190613258565b34801561036d575f5ffd5b5061030f61037c36600461327c565b611433565b34801561038c575f5ffd5b50610240611449565b3480156103a0575f5ffd5b506103ab62030d4081565b604051908152602001610277565b6102406103c736600461337f565b61145d565b3480156103d7575f5ffd5b506103ab611516565b3480156103eb575f5ffd5b506102c16103fa36600461311a565b6115c8565b34801561040a575f5ffd5b506102c160c954610100900460ff1660021490565b34801561042a575f5ffd5b506102c1610439366004612f76565b611633565b348015610449575f5ffd5b50610240611701565b34801561045d575f5ffd5b50610240611712565b348015610471575f5ffd5b50610485610480366004613241565b611789565b60405163ffffffff9091168152602001610277565b3480156104a5575f5ffd5b506102406104b4366004613226565b6117a7565b3480156104c4575f5ffd5b50610240611827565b3480156104d8575f5ffd5b5061030f61183a565b3480156104ec575f5ffd5b506033546001600160a01b031661030f565b348015610509575f5ffd5b5061051d6105183660046133cb565b611848565b6040805192151583526001600160a01b03909116602083015201610277565b348015610547575f5ffd5b50610240610556366004612f76565b611874565b348015610566575f5ffd5b5061024061057536600461311a565b611a63565b348015610585575f5ffd5b506104856201d4c081565b34801561059b575f5ffd5b5061030f6105aa3660046133e4565b611d67565b3480156105ba575f5ffd5b506102c16105c936600461311a565b611d73565b3480156105d9575f5ffd5b50610485620c350081565b3480156105ef575f5ffd5b506103ab6105fe366004613507565b611dd4565b34801561060e575f5ffd5b50610617611e03565b60408051825181526020808401516001600160a01b031690820152918101516001600160401b031690820152606001610277565b348015610656575f5ffd5b506103ab610665366004613241565b60031890565b348015610676575f5ffd5b5060c954610690906201000090046001600160401b031681565b6040516001600160401b039091168152602001610277565b3480156106b3575f5ffd5b506065546001600160a01b031661030f565b3480156106d0575f5ffd5b5060fb5461069090600160401b90046001600160401b031681565b3480156106f6575f5ffd5b50610240610705366004613538565b611eaa565b348015610715575f5ffd5b50610240610724366004613226565b611f71565b61073960e0830160c084016133cb565b46816001600160401b03161461076257604051631c6c777560e31b815260040160405180910390fd5b61077260a08401608085016133cb565b6001600160401b0381161580610790575046816001600160401b0316145b156107ae57604051631c6c777560e31b815260040160405180910390fd5b6107c260c954610100900460ff1660021490565b156107e05760405163bae6e2a960e01b815260040160405180910390fd5b60026107ee60c95460ff1690565b60ff160361080f5760405163dfc60d8560e01b815260040160405180910390fd5b6108196002611fe2565b5f6108266105fe86613564565b9050610833816001611ff8565b61084185610120013561204a565b61085e576040516335856fbd60e21b815260040160405180910390fd5b5f6108838661087e6d7369676e616c5f7365727669636560901b5f611d67565b6120eb565b156108ce576108c78661012001356188b860405180602001604052805f8152508960e00160208101906108b69190613226565b6001600160a01b03169291906121e2565b9050610948565b6108de606087016040880161356f565b63ffffffff1615806108ed5750845b801561091b5750610905610100870160e08801613226565b6001600160a01b0316336001600160a01b031614155b15610939576040516372b6e1c360e11b815260040160405180910390fd5b61094586835a5f61221f565b90505b801561095e57610959826002612316565b610a15565b84156109fc5761096f826003612316565b61098a6d7369676e616c5f7365727669636560901b5f611d67565b60405163019b28af60e61b81526003841860048201526001600160a01b0391909116906366ca2bc0906024016020604051808303815f875af11580156109d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109f69190613588565b50610a15565b60405163161e3ead60e01b815260040160405180910390fd5b5050610a216001611fe2565b50505050565b610a2f6123d3565b5f54600290610100900460ff16158015610a4f57505f5460ff8083169116105b610a745760405162461bcd60e51b8152600401610a6b9061359f565b60405180910390fd5b5f805460fb805467ffffffffffffffff1916905560ff82815561010083815561ff001991851661ffff19909316831717169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201839052610140820152610b4460c0840160a08501613226565b6001600160a01b038116610b6b5760405163538ba4f960e01b815260040160405180910390fd5b610b7c610100850160e08601613226565b6001600160a01b038116610ba35760405163538ba4f960e01b815260040160405180910390fd5b610bb360e0860160c087016133cb565b6001600160401b0381161580610bd1575046816001600160401b0316145b15610bef57604051631c6c777560e31b815260040160405180910390fd5b610c0360c954610100900460ff1660021490565b15610c215760405163bae6e2a960e01b815260040160405180910390fd5b6002610c2f60c95460ff1690565b60ff1603610c505760405163dfc60d8560e01b815260040160405180910390fd5b610c5a6002611fe2565b610c6a606087016040880161356f565b63ffffffff165f03610cb257610c8660408701602088016133cb565b6001600160401b031615610cad5760405163c9f5178760e01b815260040160405180910390fd5b610cda565b610cbb8661242d565b5f03610cda576040516308c2ad5360e01b815260040160405180910390fd5b5f610cee61051860e0890160c08a016133cb565b50905080610d0f57604051631c6c777560e31b815260040160405180910390fd5b34610d206040890160208a016133cb565b610d38906001600160401b03166101208a0135613601565b14610d5657604051634ac2abdf60e11b815260040160405180910390fd5b610d5f87613564565b60fb8054919650600160401b9091046001600160401b0316906008610d8383613614565b82546101009290920a6001600160401b03818102199093169183160217909155908116865233606087015246166080860152610dbe85611dd4565b9550857fe33fd33b4f45b95b1c196242240c5b5233129d724b578f95b66ce8d8aae9351786604051610df0919061363e565b60405180910390a2610e136d7369676e616c5f7365727669636560901b5f611d67565b6001600160a01b03166366ca2bc0876040518263ffffffff1660e01b8152600401610e4091815260200190565b6020604051808303815f875af1158015610e5c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e809190613588565b5050610e8c6001611fe2565b505050915091565b5f5f610eaa60c954610100900460ff1660021490565b15610ec85760405163bae6e2a960e01b815260040160405180910390fd5b6002610ed660c95460ff1690565b60ff1603610ef75760405163dfc60d8560e01b815260040160405180910390fd5b610f016002611fe2565b5f5a905046610f1660e0880160c089016133cb565b6001600160401b031614610f3d57604051631c6c777560e31b815260040160405180910390fd5b610f4d60a08701608088016133cb565b6001600160401b03161580610f79575046610f6e60a08801608089016133cb565b6001600160401b0316145b15610f9757604051631c6c777560e31b815260040160405180910390fd5b604080516080810182525f808252602082018190529181018290526060810191909152610fcb610100880160e08901613226565b6001600160a01b031633148015606083015261103a57610ff1606088016040890161356f565b63ffffffff165f03611016576040516372b6e1c360e11b815260040160405180910390fd5b62030d4085111561103a57604051631e3b03c960e01b815260040160405180910390fd5b5f6110476105fe89613564565b9050611053815f611ff8565b5f61106f6d7369676e616c5f7365727669636560901b5f611d67565b63ffffffff881660208501529050611099818361109260a08d0160808e016133cb565b8b8b612480565b63ffffffff166040808501919091526110d8906110bb908b0160208c016133cb565b6110d3906001600160401b03166101208c0135613601565b61204a565b6110f5576040516335856fbd60e21b815260040160405180910390fd5b5f6111008a836120eb565b1561111957506002955060019450610120890135611160565b5f8460600151611129575a611132565b6111328b61242d565b90506111448b8583886060015161221f565b1561115557600297505f965061115e565b60019750600296505b505b61117060408b0160208c016133cb565b6001600160401b0316156112d15761118e60408b0160208c016133cb565b6111a1906001600160401b031682613601565b9050836060015180156111c857506111bf60608b0160408c0161356f565b63ffffffff1615155b156112d157604084015163ffffffff16614e20025a6112056111ee6101408e018e613650565b6020601f909101819004026101a00160041b919050565b63ffffffff9081168801919091036201d4c00181168087525f91839161122e9183919061252b16565b0390505f61124260608e0160408f0161356f565b63ffffffff168d602001602081019061125b91906133cb565b6001600160401b031683028161127357611273613699565b0490505f48830290505f6112b78f602001602081019061129391906133cb565b6001600160401b0316848410156112af5784840160011c6112b1565b845b90612540565b958690039590506112cb33826188b8612554565b50505050505b6112f9816188b86112e96101008e0160e08f01613226565b6001600160a01b03169190612554565b6113038388612316565b827f8580f507761043ecdd2bdca084d6fb0109150b3d9842d854d34e3dea6d69387d8b86604051611335929190613831565b60405180910390a2505050505061134c6001611fe2565b935093915050565b5f600261136360c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670100000000000000000000000000000000011630036113b45760405162461bcd60e51b8152600401610a6b90613885565b7f00000000000000000000000001670100000000000000000000000000000000016001600160a01b03166113e6612597565b6001600160a01b03161461140c5760405162461bcd60e51b8152600401610a6b906138d1565b611415816125b2565b604080515f80825260208201909252611430918391906125ba565b50565b5f61143f848484612724565b90505b9392505050565b611451612776565b61145b335f612806565b565b6001600160a01b037f00000000000000000000000001670100000000000000000000000000000000011630036114a55760405162461bcd60e51b8152600401610a6b90613885565b7f00000000000000000000000001670100000000000000000000000000000000016001600160a01b03166114d7612597565b6001600160a01b0316146114fd5760405162461bcd60e51b8152600401610a6b906138d1565b611506826125b2565b611512828260016125ba565b5050565b5f306001600160a01b037f000000000000000000000000016701000000000000000000000000000000000116146115b55760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610a6b565b505f516020613aeb5f395f51905f525b90565b5f466115da60a08601608087016133cb565b6001600160401b0316146115ef57505f611442565b61143f61160d6d7369676e616c5f7365727669636560901b5f611d67565b61161c6106656105fe88613564565b61162c60e0880160c089016133cb565b86866128b3565b5f4661164560a08401608085016133cb565b6001600160401b03161461165a57505f919050565b6116756d7369676e616c5f7365727669636560901b5f611d67565b6001600160a01b03166332676bc6306116906105fe86613564565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa1580156116d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116fb919061391d565b92915050565b6117096123d3565b61145b5f612935565b60655433906001600160a01b031681146117805760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610a6b565b61143081612935565b5f6116fb620c35006101a06020601f8601819004020160041b613938565b806001600160a01b0381166117cf5760405163538ba4f960e01b815260040160405180910390fd5b6040516317066a5760e21b81523060048201526001600160a01b03831690635c19a95c906024015f604051808303815f87803b15801561180d575f5ffd5b505af115801561181f573d5f5f3e3d5ffd5b505050505050565b61182f61294e565b61145b336001612806565b5f611843612597565b905090565b5f5f61185f836562726964676560d01b6001611433565b6001600160a01b038116151594909350915050565b61188460e0820160c083016133cb565b46816001600160401b0316146118ad57604051631c6c777560e31b815260040160405180910390fd5b6118bd60a08301608084016133cb565b6001600160401b03811615806118db575046816001600160401b0316145b156118f957604051631c6c777560e31b815260040160405180910390fd5b61190d60c954610100900460ff1660021490565b1561192b5760405163bae6e2a960e01b815260040160405180910390fd5b600261193960c95460ff1690565b60ff160361195a5760405163dfc60d8560e01b815260040160405180910390fd5b6119646002611fe2565b611975610100840160e08501613226565b6001600160a01b0316336001600160a01b0316146119a6576040516372b6e1c360e11b815260040160405180910390fd5b5f6119b36105fe85613564565b90506119c0816001611ff8565b6119cb816003612316565b6119e66d7369676e616c5f7365727669636560901b5f611d67565b60405163019b28af60e61b81526003831860048201526001600160a01b0391909116906366ca2bc0906024016020604051808303815f875af1158015611a2e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a529190613588565b5050611a5e6001611fe2565b505050565b611a7360a08401608085016133cb565b46816001600160401b031614611a9c57604051631c6c777560e31b815260040160405180910390fd5b611aac60e0850160c086016133cb565b6001600160401b0381161580611aca575046816001600160401b0316145b15611ae857604051631c6c777560e31b815260040160405180910390fd5b611afc60c954610100900460ff1660021490565b15611b1a5760405163bae6e2a960e01b815260040160405180910390fd5b6002611b2860c95460ff1690565b60ff1603611b495760405163dfc60d8560e01b815260040160405180910390fd5b611b536002611fe2565b5f611b606105fe87613564565b9050611b6c815f611ff8565b5f611b886d7369676e616c5f7365727669636560901b5f611d67565b604051631933b5e360e11b8152306004820152602481018490529091506001600160a01b038216906332676bc690604401602060405180830381865afa158015611bd4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bf8919061391d565b611c155760405163ab035ad560e01b815260040160405180910390fd5b611c348160038418611c2d60e08b0160c08c016133cb565b8989612480565b50611c40826004612316565b611c4e87610120013561204a565b611c6b576040516335856fbd60e21b815260040160405180910390fd5b611c9462bc399d60e11b611c8560808a0160608b01613226565b6001600160a01b0316906129bf565b15611d3857611cb38230611cae60a08b0160808c016133cb565b612a4c565b611cc36080880160608901613226565b6001600160a01b0316630178733a88610120013589856040518463ffffffff1660e01b8152600401611cf6929190613954565b5f604051808303818588803b158015611d0d575f5ffd5b505af1158015611d1f573d5f5f3e3d5ffd5b5050505050611d335f195f1b5f1980612a4c565b611d54565b611d546101208801356188b86112e960c08b0160a08c01613226565b5050611d606001611fe2565b5050505050565b5f611442468484612724565b5f46611d8560e0860160c087016133cb565b6001600160401b031614611d9a57505f611442565b61143f611db86d7369676e616c5f7365727669636560901b5f611d67565b611dc46105fe87613564565b61162c60a08801608089016133cb565b5f81604051602001611de69190613975565b604051602081830303815290604052805190602001209050919050565b604080516060810182525f8082526020820181905291810191909152611e7a604080516060810182525f8082526020820181905291810191909152506040805160608101825260fd54815260fe546001600160a01b0381166020830152600160a01b90046001600160401b03169181019190915290565b80519091501580611e8c575080515f19145b156115c557604051635ceed17360e01b815260040160405180910390fd5b5f54610100900460ff1615808015611ec857505f54600160ff909116105b80611ee15750303b158015611ee157505f5460ff166001145b611efd5760405162461bcd60e51b8152600401610a6b9061359f565b5f805460ff191660011790558015611f1e575f805461ff0019166101001790555b611f288383612aa1565b8015611a5e575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b611f796123d3565b606580546001600160a01b0383166001600160a01b03199091168117909155611faa6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b80600481111561200a5761200a6131af565b5f83815260fc602052604090205460ff16600481111561202c5761202c6131af565b14611512576040516319d893ad60e21b815260040160405180910390fd5b5f5f6120676c38bab7ba30afb6b0b730b3b2b960991b6001611d67565b90506001600160a01b0381166120805750600192915050565b6040516315c638fb60e31b81525f6004820152602481018490526001600160a01b0382169063ae31c7d8906044015f604051808303815f87803b1580156120c5575f5ffd5b505af19250505080156120d6575060015b6120e257505f92915050565b50600192915050565b5f806120ff61012085016101008601613226565b6001600160a01b031603612115575060016116fb565b3061212861012085016101008601613226565b6001600160a01b03160361213e575060016116fb565b6001600160a01b03821661215a61012085016101008601613226565b6001600160a01b031603612170575060016116fb565b6004612180610140850185613650565b9050101580156121b75750637f07c94760e01b6121a1610140850185613650565b6121aa916139ab565b6001600160e01b03191614155b801561144257506114426121d361012085016101008601613226565b6001600160a01b03163b151590565b5f6001600160a01b03851661220a57604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b5f306122316080870160608801613226565b6001600160a01b031603612247576122476139e3565b825f0361225557505f61230e565b612279846122696080880160608901613226565b611cae60a0890160808a016133cb565b5f61228c61012087016101008801613226565b90506101208601355f6122a3610140890189613650565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525084519495509384935083925090506020850186888cf194505a905085156122fd576122fd8188612adb565b6123095f198080612a4c565b505050505b949350505050565b806004811115612328576123286131af565b5f83815260fc602052604090205460ff16600481111561234a5761234a6131af565b03612368576040516319d893ad60e21b815260040160405180910390fd5b5f82815260fc60205260409020805482919060ff19166001836004811115612392576123926131af565b0217905550817f6c51882bc2ed67617f77a1e9b9a25d2caad8448647ecb093b357a603b2575634826040516123c79190613258565b60405180910390a25050565b6033546001600160a01b0316331461145b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a6b565b5f80612447612440610140850185613650565b9050611789565b63ffffffff16905080612478612463606086016040870161356f565b63ffffffff168361252b90919063ffffffff16565b039392505050565b5f856001600160a01b031663910af6ed856124a5876562726964676560d01b5f611433565b8887876040518663ffffffff1660e01b81526004016124c89594939291906139f7565b6020604051808303815f875af1925050508015612502575060408051601f3d908101601f191682019092526124ff91810190613588565b60015b61251f576040516314504c7360e31b815260040160405180910390fd5b90505b95945050505050565b5f8183116125395781611442565b5090919050565b5f81831161254e5782611442565b50919050565b815f0361256057505050565b61257a83838360405180602001604052805f8152506121e2565b611a5e57604051634c67134d60e11b815260040160405180910390fd5b5f516020613aeb5f395f51905f52546001600160a01b031690565b6114306123d3565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156125ed57611a5e83612aef565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612647575060408051601f3d908101601f1916820190925261264491810190613588565b60015b6126aa5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610a6b565b5f516020613aeb5f395f51905f5281146127185760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610a6b565b50611a5e838383612b8a565b5f61272f8484612bae565b90508115801561274657506001600160a01b038116155b1561144257604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610a6b565b61278a60c954610100900460ff1660021490565b6127a75760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6033546001600160a01b038381169116148061284e57506128396d636861696e5f7761746368646f6760901b6001611d67565b6001600160a01b0316826001600160a01b0316145b15612857575050565b808015612891575061287c6e6272696467655f7761746368646f6760881b6001611d67565b6001600160a01b0316826001600160a01b0316145b1561289a575050565b604051630d85cccf60e11b815260040160405180910390fd5b5f856001600160a01b031663ce9d0820856128d8876562726964676560d01b5f611433565b8887876040518663ffffffff1660e01b81526004016128fb9594939291906139f7565b5f6040518083038186803b158015612911575f5ffd5b505afa925050508015612922575060015b61292d57505f612522565b506001612522565b606580546001600160a01b031916905561143081612c50565b61296260c954610100900460ff1660021490565b156129805760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016127fc565b5f6001600160a01b0383163b6129d657505f6116fb565b6040516301ffc9a760e01b81526001600160e01b0319831660048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa925050508015612a40575060408051601f3d908101601f19168201909252612a3d9181019061391d565b60015b156116fb579392505050565b604080516060810182528481526001600160a01b03909316602084018190526001600160401b03909216920182905260fd9290925560fe8054600160a01b9092026001600160e01b0319909216909217179055565b806001600160a01b038116612ac95760405163538ba4f960e01b815260040160405180910390fd5b612ad283612ca1565b611a5e82612cff565b612ae6603f82613a38565b82101561151257fe5b6001600160a01b0381163b612b5c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610a6b565b5f516020613aeb5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b612b9383612d6f565b5f82511180612b9f5750805b15611a5e57610a218383612dae565b6097545f906001600160a01b031680612bda57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015612c2c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061230e9190613a57565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16612cc75760405162461bcd60e51b8152600401610a6b90613a72565b612ccf612dd3565b612ced6001600160a01b03821615612ce75781612935565b33612935565b5060c9805461ff001916610100179055565b5f54610100900460ff16612d255760405162461bcd60e51b8152600401610a6b90613a72565b6001600160401b03461115612d4d5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b612d7881612aef565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606114428383604051806060016040528060278152602001613b0b60279139612df9565b5f54610100900460ff1661145b5760405162461bcd60e51b8152600401610a6b90613a72565b60605f5f856001600160a01b031685604051612e159190613abd565b5f60405180830381855af49150503d805f8114612e4d576040519150601f19603f3d011682016040523d82523d5f602084013e612e52565b606091505b5091509150612e6386838387612e6d565b9695505050505050565b60608315612edb5782515f03612ed4576001600160a01b0385163b612ed45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a6b565b508161230e565b61230e8383815115612ef05781518083602001fd5b8060405162461bcd60e51b8152600401610a6b9190613ad8565b5f610160828403121561254e575f5ffd5b8015158114611430575f5ffd5b5f5f60408385031215612f39575f5ffd5b82356001600160401b03811115612f4e575f5ffd5b612f5a85828601612f0a565b9250506020830135612f6b81612f1b565b809150509250929050565b5f60208284031215612f86575f5ffd5b81356001600160401b03811115612f9b575f5ffd5b61230e84828501612f0a565b5f5b83811015612fc1578181015183820152602001612fa9565b50505f910152565b5f8151808452612fe0816020860160208601612fa7565b601f01601f19169290920160200192915050565b80516001600160401b031682525f602082015161301c60208501826001600160401b03169052565b506040820151613034604085018263ffffffff169052565b50606082015161304f60608501826001600160a01b03169052565b50608082015161306a60808501826001600160401b03169052565b5060a082015161308560a08501826001600160a01b03169052565b5060c08201516130a060c08501826001600160401b03169052565b5060e08201516130bb60e08501826001600160a01b03169052565b506101008201516130d86101008501826001600160a01b03169052565b5061012082015161012084015261014082015161016061014085015261230e610160850182612fc9565b828152604060208201525f61143f6040830184612ff4565b5f5f5f6040848603121561312c575f5ffd5b83356001600160401b03811115613141575f5ffd5b61314d86828701612f0a565b93505060208401356001600160401b03811115613168575f5ffd5b8401601f81018613613178575f5ffd5b80356001600160401b0381111561318d575f5ffd5b86602082840101111561319e575f5ffd5b939660209190910195509293505050565b634e487b7160e01b5f52602160045260245ffd5b600581106131d3576131d36131af565b9052565b604081016131e582856131c3565b600483106131f5576131f56131af565b8260208301529392505050565b6001600160a01b0381168114611430575f5ffd5b803561322181613202565b919050565b5f60208284031215613236575f5ffd5b813561144281613202565b5f60208284031215613251575f5ffd5b5035919050565b602081016116fb82846131c3565b80356001600160401b0381168114613221575f5ffd5b5f5f5f6060848603121561328e575f5ffd5b61329784613266565b92506020840135915060408401356132ae81612f1b565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405161016081016001600160401b03811182821017156132f0576132f06132b9565b60405290565b5f82601f830112613305575f5ffd5b81356001600160401b0381111561331e5761331e6132b9565b604051601f8201601f19908116603f011681016001600160401b038111828210171561334c5761334c6132b9565b604052818152838201602001851015613363575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215613390575f5ffd5b823561339b81613202565b915060208301356001600160401b038111156133b5575f5ffd5b6133c1858286016132f6565b9150509250929050565b5f602082840312156133db575f5ffd5b61144282613266565b5f5f604083850312156133f5575f5ffd5b823591506020830135612f6b81612f1b565b803563ffffffff81168114613221575f5ffd5b5f610160828403121561342b575f5ffd5b6134336132cd565b905061343e82613266565b815261344c60208301613266565b602082015261345d60408301613407565b604082015261346e60608301613216565b606082015261347f60808301613266565b608082015261349060a08301613216565b60a08201526134a160c08301613266565b60c08201526134b260e08301613216565b60e08201526134c46101008301613216565b61010082015261012082810135908201526101408201356001600160401b038111156134ee575f5ffd5b6134fa848285016132f6565b6101408301525092915050565b5f60208284031215613517575f5ffd5b81356001600160401b0381111561352c575f5ffd5b61230e8482850161341a565b5f5f60408385031215613549575f5ffd5b823561355481613202565b91506020830135612f6b81613202565b5f6116fb368361341a565b5f6020828403121561357f575f5ffd5b61144282613407565b5f60208284031215613598575f5ffd5b5051919050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156116fb576116fb6135ed565b5f6001600160401b0382166001600160401b038103613635576136356135ed565b60010192915050565b602081525f6114426020830184612ff4565b5f5f8335601e19843603018112613665575f5ffd5b8301803591506001600160401b0382111561367e575f5ffd5b602001915036819003821315613692575f5ffd5b9250929050565b634e487b7160e01b5f52601260045260245ffd5b5f5f8335601e198436030181126136c2575f5ffd5b83016020810192503590506001600160401b038111156136e0575f5ffd5b803603821315613692575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6137308261372383613266565b6001600160401b03169052565b5f61373d60208301613266565b6001600160401b0316602084015261375760408301613407565b63ffffffff16604084015261376e60608301613216565b6001600160a01b0316606084015261378860808301613266565b6001600160401b031660808401526137a260a08301613216565b6001600160a01b031660a08401526137bc60c08301613266565b6001600160401b031660c08401526137d660e08301613216565b6001600160a01b031660e08401526137f16101008301613216565b6001600160a01b031661010084015261012082810135908401526138196101408301836136ad565b610160610140860152612522610160860182846136ee565b60a081525f61384360a0830185613716565b905063ffffffff835116602083015263ffffffff602084015116604083015263ffffffff60408401511660608301526060830151151560808301529392505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f6020828403121561392d575f5ffd5b815161144281612f1b565b63ffffffff81811683821601908111156116fb576116fb6135ed565b604081525f6139666040830185613716565b90508260208301529392505050565b60408152600d60408201526c5441494b4f5f4d45535341474560981b6060820152608060208201525f6114426080830184612ff4565b80356001600160e01b031981169060048410156139dc576001600160e01b0319600485900360031b81901b82161691505b5092915050565b634e487b7160e01b5f52600160045260245ffd5b6001600160401b038616815260018060a01b0385166020820152836040820152608060608201525f613a2d6080830184866136ee565b979650505050505050565b5f82613a5257634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215613a67575f5ffd5b815161144281613202565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f8251613ace818460208701612fa7565b9190910192915050565b602081525f6114426020830184612fc956fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220fe7f47dabd46879b9404e8d06f7ee77f2c51d0391f21575037dda2b3e15ccfb164736f6c634300081b0033", "balance": "0x0" }, - "0x1670000000000000000000000000000000000001": { + "0x1670100000000000000000000000000000000001": { "contractName": "Bridge", "storage": { "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", - "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670000000000000000000000000000000000006", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000000001" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670100000000000000000000000000000000006", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167010000000000000000000000000000000001" }, "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", "balance": "0x033b2dc55cae685664a00000" }, - "0x0167000000000000000000000000000000000002": { + "0x0167010000000000000000000000000000000002": { "contractName": "ERC20VaultImpl", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f" }, - "code": "0x6080604052600436106101ba575f3560e01c806367090ccf116100f25780639aa8605c11610092578063e07baba611610062578063e07baba6146104e3578063e30c397814610520578063f09a40161461053d578063f2fde38b1461055c575f5ffd5b80639aa8605c1461045e578063a86f9d9e1461048e578063b84d9ffe146104ad578063d56ad7ac146104cd575f5ffd5b80637f07c947116100cd5780637f07c947146104065780638456cb59146104195780638abf60771461042d5780638da5cb5b14610441575f5ffd5b806367090ccf1461039e578063715018a6146103de57806379ba5097146103f2575f5ffd5b80633659cfe61161015d5780633f4ba83a116101385780633f4ba83a146103435780634f1ef2861461035757806352d1902d1461036a5780635c975abb1461037e575f5ffd5b80633659cfe6146102e65780633ab76e9f146103055780633eb6b8cf14610324575f5ffd5b806306fdde031161019857806306fdde031461024c5780630e7eeb791461026c5780630ecd8be91461029b5780633075db56146102d2575f5ffd5b80630178733a146101be57806301ffc9a7146101d3578063066fe7b414610207575b5f5ffd5b6101d16101cc36600461330a565b61057b565b005b3480156101de575f5ffd5b506101f26101ed366004613350565b610709565b60405190151581526020015b60405180910390f35b348015610212575f5ffd5b5061023e61022136600461338b565b61013060209081525f928352604080842090915290825290205481565b6040519081526020016101fe565b348015610257575f5ffd5b506a195c98cc8c17dd985d5b1d60aa1b61023e565b348015610277575f5ffd5b506101f26102863660046133b9565b61012f6020525f908152604090205460ff1681565b3480156102a6575f5ffd5b506102ba6102b53660046133d4565b610759565b6040516001600160a01b0390911681526020016101fe565b3480156102dd575f5ffd5b506101f2610e67565b3480156102f1575f5ffd5b506101d16103003660046133b9565b610e7f565b348015610310575f5ffd5b506097546102ba906001600160a01b031681565b34801561032f575f5ffd5b506102ba61033e36600461343c565b610f4f565b34801561034e575f5ffd5b506101d1610f65565b6101d1610365366004613584565b610f79565b348015610375575f5ffd5b5061023e61102e565b348015610389575f5ffd5b506101f260c954610100900460ff1660021490565b3480156103a9575f5ffd5b506102ba6103b836600461338b565b61012e60209081525f92835260408084209091529082529020546001600160a01b031681565b3480156103e9575f5ffd5b506101d16110df565b3480156103fd575f5ffd5b506101d16110f0565b6101d16104143660046135d0565b611167565b348015610424575f5ffd5b506101d16112b7565b348015610438575f5ffd5b506102ba6112ca565b34801561044c575f5ffd5b506033546001600160a01b03166102ba565b348015610469575f5ffd5b5061047d6104783660046133b9565b6112d8565b6040516101fe959493929190613689565b348015610499575f5ffd5b506102ba6104a83660046136e2565b61142d565b6104c06104bb366004613705565b611439565b6040516101fe919061371e565b3480156104d8575f5ffd5b5061023e6276a70081565b3480156104ee575f5ffd5b5060c954610508906201000090046001600160401b031681565b6040516001600160401b0390911681526020016101fe565b34801561052b575f5ffd5b506065546001600160a01b03166102ba565b348015610548575f5ffd5b506101d161055736600461380e565b61187c565b348015610567575f5ffd5b506101d16105763660046133b9565b61198b565b61058f60c954610100900460ff1660021490565b156105ad5760405163bae6e2a960e01b815260040160405180910390fd5b60026105bb60c95460ff1690565b60ff16036105dc5760405163dfc60d8560e01b815260040160405180910390fd5b6105e660026119fc565b6105ee611a12565b505f6105fe61014084018461382a565b61060c916004908290613873565b810190610619919061389a565b90505f5f828060200190518101906106319190613946565b9350505091505f610655838760a001602081019061064f91906133b9565b84611b08565b905061067f61012087013561067060c0890160a08a016133b9565b6001600160a01b031690611bb0565b61068f60c0870160a088016133b9565b6001600160a01b0316857f3dea0f5955b148debf6212261e03bd80eaf8534bee43780452d16637dcc22dd5856020015184866040516106ef939291906001600160a01b039384168152919092166020820152604081019190915260600190565b60405180910390a35050505061070560016119fc565b5050565b5f6001600160e01b0319821662bc399d60e11b148061073857506001600160e01b03198216637f07c94760e01b145b8061075357506001600160e01b031982166301ffc9a760e01b145b92915050565b5f610762611bbb565b600261077060c95460ff1690565b60ff16036107915760405163dfc60d8560e01b815260040160405180910390fd5b61079b60026119fc565b6001600160a01b03821615806107d157506001600160a01b038281165f90815261012d6020526040902054600160401b90041615155b806107e457506001600160a01b0382163b155b156108025760405163dc63f98760e01b815260040160405180910390fd5b5f61081360408501602086016133b9565b6001600160a01b0316148061083c5750466108316020850185613a3a565b6001600160401b0316145b1561085a57604051638257f7f560e01b815260040160405180910390fd5b6001600160a01b0382165f90815261012f602052604090205460ff1615610894576040516375c42fc160e01b815260040160405180910390fd5b5f610130816108a66020870187613a3a565b6001600160401b031681526020019081526020015f205f8560200160208101906108d091906133b9565b6001600160a01b0316815260208101919091526040015f205490506108f86276a70082613a69565b4210156109185760405163231d35fb60e11b815260040160405180910390fd5b61012e5f6109296020870187613a3a565b6001600160401b031681526020019081526020015f205f85602001602081019061095391906133b9565b6001600160a01b03908116825260208201929092526040015f20541691508115610cb9576001600160a01b038281165f90815261012d60209081526040808320815160a08101835281546001600160401b0381168252600160401b810490961693810193909352600160e01b90940460ff1690820152600183018054929391926060840191906109e290613a7c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0e90613a7c565b8015610a595780601f10610a3057610100808354040283529160200191610a59565b820191905f5260205f20905b815481529060010190602001808311610a3c57829003601f168201915b50505050508152602001600282018054610a7290613a7c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9e90613a7c565b8015610ae95780601f10610ac057610100808354040283529160200191610ae9565b820191905f5260205f20905b815481529060010190602001808311610acc57829003601f168201915b505050505081525050905080604051602001610b059190613b13565b6040516020818303038152906040528051906020012085604051602001610b2c9190613b99565b6040516020818303038152906040528051906020012014610b6057604051632f9d1d7b60e11b815260040160405180910390fd5b6001600160a01b0383165f90815261012d6020526040812080546001600160e81b031916815590610b9460018301826132b2565b610ba1600283015f6132b2565b50506001600160a01b0383165f81815261012f60205260409020805460ff19166001179055610bd79063b8f2e0c560e01b611c15565b8015610bf85750610bf86001600160a01b03851663b8f2e0c560e01b611c15565b15610cb75760405163b8f2e0c560e01b81526001600160a01b0385811660048301525f602483015284169063b8f2e0c5906044015f604051808303815f87803b158015610c43575f5ffd5b505af1158015610c55573d5f5f3e3d5ffd5b505060405163b8f2e0c560e01b81526001600160a01b038681166004830152600160248301528716925063b8f2e0c591506044015f604051808303815f87803b158015610ca0575f5ffd5b505af1158015610cb2573d5f5f3e3d5ffd5b505050505b505b6001600160a01b0383165f90815261012d602052604090208490610cdd8282613d3c565b5083905061012e5f610cf26020880188613a3a565b6001600160401b031681526020019081526020015f205f866020016020810190610d1c91906133b9565b6001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550426101305f865f016020810190610d759190613a3a565b6001600160401b031681526020019081526020015f205f866020016020810190610d9f91906133b9565b6001600160a01b03166001600160a01b031681526020019081526020015f2081905550836020016020810190610dd591906133b9565b6001600160a01b0316610deb6020860186613a3a565b6001600160401b03167f031d68e1805917560c34a5f55a7dd91bef98f911190ed02cdbb53caedae6c39d8486610e2460608a018a61382a565b610e3160808c018c61382a565b610e4160608e0160408f01613dfa565b604051610e549796959493929190613e15565b60405180910390a35061075360016119fc565b5f6002610e7660c95460ff1690565b60ff1614905090565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000000002163003610ed05760405162461bcd60e51b8152600401610ec790613e6c565b60405180910390fd5b7f00000000000000000000000001670000000000000000000000000000000000026001600160a01b0316610f02611ca2565b6001600160a01b031614610f285760405162461bcd60e51b8152600401610ec790613eb8565b610f3181611cbd565b604080515f80825260208201909252610f4c91839190611cc5565b50565b5f610f5b848484611e2f565b90505b9392505050565b610f6d611e81565b610f77335f611f11565b565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000000002163003610fc15760405162461bcd60e51b8152600401610ec790613e6c565b7f00000000000000000000000001670000000000000000000000000000000000026001600160a01b0316610ff3611ca2565b6001600160a01b0316146110195760405162461bcd60e51b8152600401610ec790613eb8565b61102282611cbd565b61070582826001611cc5565b5f306001600160a01b037f000000000000000000000000016700000000000000000000000000000000000216146110cd5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610ec7565b505f5160206149985f395f51905f5290565b6110e7611bbb565b610f775f611f19565b60655433906001600160a01b0316811461115e5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610ec7565b610f4c81611f19565b61117b60c954610100900460ff1660021490565b156111995760405163bae6e2a960e01b815260040160405180910390fd5b60026111a760c95460ff1690565b60ff16036111c85760405163dfc60d8560e01b815260040160405180910390fd5b6111d260026119fc565b5f8080806111e285870187613f0f565b93509350935093505f6111f3611f32565b90506111fe83612051565b5f61120a868585611b08565b905061121f6001600160a01b03851634611bb0565b836001600160a01b0316856001600160a01b0316835f01517f75a051823424fc80e92556c41cb0ad977ae1dcb09c68a9c38acab86b11a69f8985604001518a60200151868960405161129f94939291906001600160401b039490941684526001600160a01b03928316602085015291166040830152606082015260800190565b60405180910390a450505050505061070560016119fc565b6112bf61208d565b610f77336001611f11565b5f6112d3611ca2565b905090565b61012d6020525f9081526040902080546001820180546001600160401b03831693600160401b84046001600160a01b031693600160e01b900460ff1692909161132090613a7c565b80601f016020809104026020016040519081016040528092919081815260200182805461134c90613a7c565b80156113975780601f1061136e57610100808354040283529160200191611397565b820191905f5260205f20905b81548152906001019060200180831161137a57829003601f168201915b5050505050908060020180546113ac90613a7c565b80601f01602080910402602001604051908101604052809291908181526020018280546113d890613a7c565b80156114235780601f106113fa57610100808354040283529160200191611423565b820191905f5260205f20905b81548152906001019060200180831161140657829003601f168201915b5050505050905085565b5f610f5e468484611e2f565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201929092526101408101919091526114a760c954610100900460ff1660021490565b156114c55760405163bae6e2a960e01b815260040160405180910390fd5b60026114d360c95460ff1690565b60ff16036114f45760405163dfc60d8560e01b815260040160405180910390fd5b6114fe60026119fc565b8160c001355f0361152257604051634299323b60e11b815260040160405180910390fd5b5f61153360a08401608085016133b9565b6001600160a01b03160361155a576040516303f8a7d360e01b815260040160405180910390fd5b61012f5f61156e60a08501608086016133b9565b6001600160a01b0316815260208101919091526040015f205460ff16156115a8576040516375c42fc160e01b815260040160405180910390fd5b6115b86080830160608401613a3a565b6001600160401b03163410156115e157604051630178ce0b60e31b815260040160405180910390fd5b5f5f5f6115ed856120fe565b6040805161016081019091525f8082529396509194509250602081016116196080890160608a01613a3a565b6001600160401b0316815260200161163760c0890160a08a01614014565b63ffffffff1681525f6020808301829052604083019190915233606083015260809091019061166890890189613a3a565b6001600160401b031681526020015f6001600160a01b031688602001602081019061169391906133b9565b6001600160a01b0316036116a757336116b7565b6116b76040890160208a016133b9565b6001600160a01b031681526020908101906116ee906116d8908a018a613a3a565b6a195c98cc8c17dd985d5b1d60aa1b5b5f610f4f565b6001600160a01b0316815260200161170c6080890160608a01613a3a565b61171f906001600160401b03163461402f565b815260200185905290505f61173d6562726964676560d01b8261142d565b6001600160a01b0316631bdb003734846040518363ffffffff1660e01b8152600401611769919061371e565b5f6040518083038185885af1158015611784573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d908101601f191682016040526117ac919081019061404d565b965090506117c060608801604089016133b9565b6001600160a01b03168660a001516001600160a01b0316827f256f5c87f6ab8d238ac244067613227eb6e2cd65299121135d4f778e8581e03d875f01518b5f01602081019061180f9190613a3a565b89602001518d608001602081019061182791906133b9565b604080516001600160401b0395861681529390941660208401526001600160a01b03918216838501521660608201526080810189905290519081900360a00190a4505050505061187760016119fc565b919050565b5f54610100900460ff161580801561189a57505f54600160ff909116105b806118b35750303b1580156118b357505f5460ff166001145b6119165760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ec7565b5f805460ff191660011790558015611937575f805461ff0019166101001790555b6119418383612598565b8015611986575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b611993611bbb565b606580546001600160a01b0383166001600160a01b031990911681179091556119c46033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611a4381600161142d565b6001600160a01b0316336001600160a01b031614611a7457604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611ab0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ad4919061416d565b60208101519092506001600160a01b03163314611b0457604051632583296b60e01b815260040160405180910390fd5b5090565b5f46845f01516001600160401b031603611b3b57506020830151611b366001600160a01b03821684846125d2565b611ba6565b611b4484612635565b6040516340c10f1960e01b81526001600160a01b03858116600483015260248201859052919250908216906340c10f19906044015f604051808303815f87803b158015611b8f575f5ffd5b505af1158015611ba1573d5f5f3e3d5ffd5b505050505b610f5e8183612677565b61070582825a612706565b6033546001600160a01b03163314610f775760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ec7565b5f6001600160a01b0383163b611c2c57505f610753565b6040516301ffc9a760e01b81526001600160e01b0319831660048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa925050508015611c96575060408051601f3d908101601f19168201909252611c93918101906141d5565b60015b15610753579392505050565b5f5160206149985f395f51905f52546001600160a01b031690565b610f4c611bbb565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611cf85761198683612749565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611d52575060408051601f3d908101601f19168201909252611d4f918101906141f0565b60015b611db55760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610ec7565b5f5160206149985f395f51905f528114611e235760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610ec7565b506119868383836127e4565b5f611e3a848461280e565b905081158015611e5157506001600160a01b038116155b15610f5e57604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610ec7565b611e9560c954610100900460ff1660021490565b611eb25760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610705611bbb565b606580546001600160a01b0319169055610f4c816128b8565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611f6381600161142d565b6001600160a01b0316336001600160a01b031614611f9457604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611fd0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff4919061416d565b91505f61201483604001516116e86a195c98cc8c17dd985d5b1d60aa1b90565b9050806001600160a01b031683602001516001600160a01b03161461204c57604051632583296b60e01b815260040160405180910390fd5b505090565b6001600160a01b038116158061206f57506001600160a01b03811630145b15610f4c57604051635b50f3f960e01b815260040160405180910390fd5b6120a160c954610100900460ff1660021490565b156120bf5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611f07565b6040805160a0810182525f8082526020820181905291810191909152606081810181905260808201819052905f8061012d8161214060a08801608089016133b9565b6001600160a01b03908116825260208201929092526040015f208054909250600160401b90041615612376576040805160a08101825282546001600160401b0381168252600160401b81046001600160a01b03166020830152600160e01b900460ff1691810191909152600182018054839160608401916121c090613a7c565b80601f01602080910402602001604051908101604052809291908181526020018280546121ec90613a7c565b80156122375780601f1061220e57610100808354040283529160200191612237565b820191905f5260205f20905b81548152906001019060200180831161221a57829003601f168201915b5050505050815260200160028201805461225090613a7c565b80601f016020809104026020016040519081016040528092919081815260200182805461227c90613a7c565b80156122c75780601f1061229e576101008083540402835291602001916122c7565b820191905f5260205f20905b8154815290600101906020018083116122aa57829003601f168201915b505050505081525050925061230033308760c001358860800160208101906122ef91906133b9565b6001600160a01b0316929190612909565b61231060a08601608087016133b9565b604051630852cd8d60e31b815260c087013560048201526001600160a01b0391909116906342966c68906024015f604051808303815f87803b158015612354575f5ffd5b505af1158015612366573d5f5f3e3d5ffd5b505050508460c001359150612518565b6040518060a00160405280466001600160401b031681526020018660800160208101906123a391906133b9565b6001600160a01b031681526020016123c96123c460a0890160808a016133b9565b612941565b60ff1681526020016123e96123e460a0890160808a016133b9565b6129f5565b815260200161240661240160a0890160808a016133b9565b612a9f565b905292505f61241b60a08701608088016133b9565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038316906370a0823190602401602060405180830381865afa158015612462573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061248691906141f0565b90506124a16001600160a01b038316333060c08b0135612909565b6040516370a0823160e01b815230600482015281906001600160a01b038416906370a0823190602401602060405180830381865afa1580156124e5573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061250991906141f0565b612513919061402f565b935050505b30637f07c947843361253060608a0160408b016133b9565b866040516020016125449493929190614207565b60408051601f19818403018152908290526125619160240161423c565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050509350509193909250565b806001600160a01b0381166125c05760405163538ba4f960e01b815260040160405180910390fd5b6125c983612ae5565b61198682612b43565b6040516001600160a01b03831660248201526044810182905261198690849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612bb3565b80516001600160401b03165f90815261012e60209081526040808320828501516001600160a01b03908116855292529091205416806118775761075382612c86565b5f6126936c38bab7ba30afb6b0b730b3b2b960991b600161142d565b90506001600160a01b03811615611986576040516315c638fb60e31b81526001600160a01b0384811660048301526024820184905282169063ae31c7d8906044015f604051808303815f87803b1580156126eb575f5ffd5b505af11580156126fd573d5f5f3e3d5ffd5b50505050505050565b815f0361271257505050565b61272c83838360405180602001604052805f815250612e88565b61198657604051634c67134d60e11b815260040160405180910390fd5b6001600160a01b0381163b6127b65760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610ec7565b5f5160206149985f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b6127ed83612ec5565b5f825111806127f95750805b15611986576128088383612f04565b50505050565b6097545f906001600160a01b03168061283a57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa15801561288c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128b0919061424e565b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6040516001600160a01b03808516602483015283166044820152606481018290526128089085906323b872dd60e01b906084016125fe565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f91829182916001600160a01b038616916129869190614269565b5f60405180830381855afa9150503d805f81146129be576040519150601f19603f3d011682016040523d82523d5f602084013e6129c3565b606091505b50915091508180156129d6575080516020145b6129e15760126128b0565b808060200190518101906128b09190614284565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516060915f9182916001600160a01b03861691612a3b9190614269565b5f60405180830381855afa9150503d805f8114612a73576040519150601f19603f3d011682016040523d82523d5f602084013e612a78565b606091505b509150915081612a965760405180602001604052805f8152506128b0565b6128b081612f29565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516060915f9182916001600160a01b03861691612a3b9190614269565b5f54610100900460ff16612b0b5760405162461bcd60e51b8152600401610ec79061429f565b612b13613096565b612b316001600160a01b03821615612b2b5781611f19565b33611f19565b5060c9805461ff001916610100179055565b5f54610100900460ff16612b695760405162461bcd60e51b8152600401610ec79061429f565b6001600160401b03461115612b915760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f612c07826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166130bc9092919063ffffffff16565b905080515f1480612c27575080806020019051810190612c2791906141d5565b6119865760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610ec7565b5f5f612c9a6033546001600160a01b031690565b60975460208501518551604080880151606089015160808a01519251612cd097966001600160a01b0316959493906024016142ea565b60408051601f198184030181529190526020810180516001600160e01b031663bb86ef9360e01b1790529050612d166c0627269646765645f657263323609c1b5f61142d565b81604051612d23906132e9565b612d2e929190614355565b604051809103905ff080158015612d47573d5f5f3e3d5ffd5b506001600160a01b038082165f90815261012d602090815260409182902087518154928901519389015160ff16600160e01b0260ff60e01b1994909516600160401b026001600160e01b03199093166001600160401b03909116179190911791909116919091178155606085015191935084916001820190612dc99082614378565b5060808201516002820190612dde9082614378565b505083516001600160401b039081165f90815261012e6020908152604080832082890180516001600160a01b039081168652919093529281902080546001600160a01b0319168885169081179091559151885160608a015160808b0151848c01519451959850929095169516937fb6b427556e8cb0ebf9175da4bc48c64c4f56e44cfaf8c3ab5ebf8e2ea130907993612e7a9391929190614432565b60405180910390a450919050565b5f6001600160a01b038516612eb057604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b612ece81612749565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610f5e83836040518060600160405280602781526020016149b8602791396130ca565b60606040825110612f485781806020019051810190610753919061446a565b8151602003613083575f5b60208160ff16108015612f885750828160ff1681518110612f7657612f7661449b565b01602001516001600160f81b03191615155b15612f9f5780612f97816144af565b915050612f53565b5f8160ff166001600160401b03811115612fbb57612fbb61347b565b6040519080825280601f01601f191660200182016040528015612fe5576020820181803683370190505b5090505f91505b60208260ff161080156130215750838260ff168151811061300f5761300f61449b565b01602001516001600160f81b03191615155b15610f5e57838260ff168151811061303b5761303b61449b565b602001015160f81c60f81b818360ff168151811061305b5761305b61449b565b60200101906001600160f81b03191690815f1a9053508161307b816144af565b925050612fec565b505060408051602081019091525f815290565b5f54610100900460ff16610f775760405162461bcd60e51b8152600401610ec79061429f565b6060610f5b84845f8561313e565b60605f5f856001600160a01b0316856040516130e69190614269565b5f60405180830381855af49150503d805f811461311e576040519150601f19603f3d011682016040523d82523d5f602084013e613123565b606091505b509150915061313486838387613215565b9695505050505050565b60608247101561319f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610ec7565b5f5f866001600160a01b031685876040516131ba9190614269565b5f6040518083038185875af1925050503d805f81146131f4576040519150601f19603f3d011682016040523d82523d5f602084013e6131f9565b606091505b509150915061320a87838387613215565b979650505050505050565b606083156132835782515f0361327c576001600160a01b0385163b61327c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ec7565b50816128b0565b6128b083838151156132985781518083602001fd5b8060405162461bcd60e51b8152600401610ec7919061423c565b5080546132be90613a7c565b5f825580601f106132cd575050565b601f0160209004905f5260205f2090810190610f4c91906132f6565b6104ca806144ce83390190565b5b80821115611b04575f81556001016132f7565b5f5f6040838503121561331b575f5ffd5b82356001600160401b03811115613330575f5ffd5b83016101608186031215613342575f5ffd5b946020939093013593505050565b5f60208284031215613360575f5ffd5b81356001600160e01b031981168114610f5e575f5ffd5b6001600160a01b0381168114610f4c575f5ffd5b5f5f6040838503121561339c575f5ffd5b8235915060208301356133ae81613377565b809150509250929050565b5f602082840312156133c9575f5ffd5b8135610f5e81613377565b5f5f604083850312156133e5575f5ffd5b82356001600160401b038111156133fa575f5ffd5b830160a0818603121561340b575f5ffd5b915060208301356133ae81613377565b6001600160401b0381168114610f4c575f5ffd5b8015158114610f4c575f5ffd5b5f5f5f6060848603121561344e575f5ffd5b83356134598161341b565b92506020840135915060408401356134708161342f565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405160a081016001600160401b03811182821017156134b1576134b161347b565b60405290565b60405161016081016001600160401b03811182821017156134b1576134b161347b565b604051601f8201601f191681016001600160401b03811182821017156135025761350261347b565b604052919050565b5f6001600160401b038211156135225761352261347b565b50601f01601f191660200190565b5f82601f83011261353f575f5ffd5b8135602083015f6135576135528461350a565b6134da565b905082815285838301111561356a575f5ffd5b828260208301375f92810160200192909252509392505050565b5f5f60408385031215613595575f5ffd5b82356135a081613377565b915060208301356001600160401b038111156135ba575f5ffd5b6135c685828601613530565b9150509250929050565b5f5f602083850312156135e1575f5ffd5b82356001600160401b038111156135f6575f5ffd5b8301601f81018513613606575f5ffd5b80356001600160401b0381111561361b575f5ffd5b85602082840101111561362c575f5ffd5b6020919091019590945092505050565b5f5b8381101561365657818101518382015260200161363e565b50505f910152565b5f815180845261367581602086016020860161363c565b601f01601f19169290920160200192915050565b6001600160401b03861681526001600160a01b038516602082015260ff8416604082015260a0606082018190525f906136c49083018561365e565b82810360808401526136d6818561365e565b98975050505050505050565b5f5f604083850312156136f3575f5ffd5b8235915060208301356133ae8161342f565b5f60e0828403128015613716575f5ffd5b509092915050565b602081526137386020820183516001600160401b03169052565b5f602083015161375360408401826001600160401b03169052565b50604083015163ffffffff811660608401525060608301516001600160a01b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160401b03811660e08401525060e08301516001600160a01b038116610100840152506101008301516001600160a01b03811661012084015250610120830151610140830152610140830151610160808401526128b061018084018261365e565b5f5f6040838503121561381f575f5ffd5b823561340b81613377565b5f5f8335601e1984360301811261383f575f5ffd5b8301803591506001600160401b03821115613858575f5ffd5b60200191503681900382131561386c575f5ffd5b9250929050565b5f5f85851115613881575f5ffd5b8386111561388d575f5ffd5b5050820193919092039150565b5f602082840312156138aa575f5ffd5b81356001600160401b038111156138bf575f5ffd5b6128b084828501613530565b80516118778161341b565b805161187781613377565b60ff81168114610f4c575f5ffd5b8051611877816138e1565b5f82601f830112613909575f5ffd5b8151602083015f61391c6135528461350a565b905082815285838301111561392f575f5ffd5b61393d83602083018461363c565b95945050505050565b5f5f5f5f60808587031215613959575f5ffd5b84516001600160401b0381111561396e575f5ffd5b850160a0818803121561397f575f5ffd5b61398761348f565b81516139928161341b565b815260208201516139a281613377565b60208201526139b3604083016138ef565b604082015260608201516001600160401b038111156139d0575f5ffd5b6139dc898285016138fa565b60608301525060808201516001600160401b038111156139fa575f5ffd5b613a06898285016138fa565b6080830152509450613a1c9050602086016138d6565b9250613a2a604086016138d6565b6060959095015193969295505050565b5f60208284031215613a4a575f5ffd5b8135610f5e8161341b565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561075357610753613a55565b600181811c90821680613a9057607f821691505b602082108103613aae57634e487b7160e01b5f52602260045260245ffd5b50919050565b6001600160401b03815116825260018060a01b03602082015116602083015260ff60408201511660408301525f606082015160a06060850152613afa60a085018261365e565b90506080830151848203608086015261393d828261365e565b602081525f610f5e6020830184613ab4565b8035611877816138e1565b5f5f8335601e19843603018112613b45575f5ffd5b83016020810192503590506001600160401b03811115613b63575f5ffd5b80360382131561386c575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f8235613ba98161341b565b6001600160401b0381166020840152506020830135613bc781613377565b6001600160a01b0316604083810191909152830135613be5816138e1565b60ff8116606084015250613bfc6060840184613b30565b60a06080850152613c1160c085018284613b71565b915050613c216080850185613b30565b848303601f190160a0860152613134838284613b71565b601f82111561198657805f5260205f20601f840160051c81016020851015613c5d5750805b601f840160051c820191505b81811015613c7c575f8155600101613c69565b5050505050565b6001600160401b03831115613c9a57613c9a61347b565b613cae83613ca88354613a7c565b83613c38565b5f601f841160018114613cdf575f8515613cc85750838201355b5f19600387901b1c1916600186901b178355613c7c565b5f83815260208120601f198716915b82811015613d0e5786850135825560209485019460019092019101613cee565b5086821015613d2a575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b8135613d478161341b565b6001600160401b03811690508154816001600160401b031982161783556020840135613d7281613377565b6001600160e01b031991909116909117604091821b68010000000000000000600160e01b03161782555f90830135613da9816138e1565b825460ff60e01b191660e09190911b60ff60e01b1617825550613dcf606083018361382a565b613ddd818360018601613c83565b5050613dec608083018361382a565b612808818360028601613c83565b5f60208284031215613e0a575f5ffd5b8135610f5e816138e1565b6001600160a01b0388811682528716602082015260a0604082018190525f90613e419083018789613b71565b8281036060840152613e54818688613b71565b91505060ff8316608083015298975050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b803561187781613377565b5f5f5f5f60808587031215613f22575f5ffd5b84356001600160401b03811115613f37575f5ffd5b850160a08188031215613f48575f5ffd5b613f5061348f565b8135613f5b8161341b565b81526020820135613f6b81613377565b6020820152613f7c60408301613b25565b604082015260608201356001600160401b03811115613f99575f5ffd5b613fa589828501613530565b60608301525060808201356001600160401b03811115613fc3575f5ffd5b613fcf89828501613530565b6080830152509450613fe5905060208601613f04565b9250613ff360408601613f04565b9396929550929360600135925050565b63ffffffff81168114610f4c575f5ffd5b5f60208284031215614024575f5ffd5b8135610f5e81614003565b8181038181111561075357610753613a55565b805161187781614003565b5f5f6040838503121561405e575f5ffd5b825160208401519092506001600160401b0381111561407b575f5ffd5b8301610160818603121561408d575f5ffd5b6140956134b7565b61409e826138cb565b81526140ac602083016138cb565b60208201526140bd60408301614042565b60408201526140ce606083016138d6565b60608201526140df608083016138cb565b60808201526140f060a083016138d6565b60a082015261410160c083016138cb565b60c082015261411260e083016138d6565b60e082015261412461010083016138d6565b61010082015261012082810151908201526101408201516001600160401b0381111561414e575f5ffd5b61415a878285016138fa565b6101408301525080925050509250929050565b5f606082840312801561417e575f5ffd5b50604051606081016001600160401b03811182821017156141a1576141a161347b565b6040528251815260208301516141b681613377565b602082015260408301516141c98161341b565b60408201529392505050565b5f602082840312156141e5575f5ffd5b8151610f5e8161342f565b5f60208284031215614200575f5ffd5b5051919050565b608081525f6142196080830187613ab4565b6001600160a01b0395861660208401529390941660408201526060015292915050565b602081525f610f5e602083018461365e565b5f6020828403121561425e575f5ffd5b8151610f5e81613377565b5f825161427a81846020870161363c565b9190910192915050565b5f60208284031215614294575f5ffd5b8151610f5e816138e1565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0388811682528781166020830152861660408201526001600160401b038516606082015260ff8416608082015260e060a082018190525f906143359083018561365e565b82810360c0840152614347818561365e565b9a9950505050505050505050565b6001600160a01b03831681526040602082018190525f90610f5b9083018461365e565b81516001600160401b038111156143915761439161347b565b6143a58161439f8454613a7c565b84613c38565b6020601f8211600181146143d7575f83156143c05750848201515b5f19600385901b1c1916600184901b178455613c7c565b5f84815260208120601f198516915b8281101561440657878501518255602094850194600190920191016143e6565b508482101561442357868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b606081525f614444606083018661365e565b8281036020840152614456818661365e565b91505060ff83166040830152949350505050565b5f6020828403121561447a575f5ffd5b81516001600160401b0381111561448f575f5ffd5b6128b0848285016138fa565b634e487b7160e01b5f52603260045260245ffd5b5f60ff821660ff81036144c4576144c4613a55565b6001019291505056fe60806040526040516104ca3803806104ca833981016040819052610022916102d2565b61002d82825f610034565b50506103ed565b61003d8361005f565b5f825111806100495750805b1561005a57610058838361009e565b505b505050565b610068816100ca565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606100c383836040518060600160405280602781526020016104a36027913961017d565b9392505050565b6001600160a01b0381163b61013c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f856001600160a01b03168560405161019991906103a0565b5f60405180830381855af49150503d805f81146101d1576040519150601f19603f3d011682016040523d82523d5f602084013e6101d6565b606091505b5090925090506101e8868383876101f2565b9695505050505050565b606083156102605782515f03610259576001600160a01b0385163b6102595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610133565b508161026a565b61026a8383610272565b949350505050565b8151156102825781518083602001fd5b8060405162461bcd60e51b815260040161013391906103bb565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156102ca5781810151838201526020016102b2565b50505f910152565b5f5f604083850312156102e3575f5ffd5b82516001600160a01b03811681146102f9575f5ffd5b60208401519092506001600160401b03811115610314575f5ffd5b8301601f81018513610324575f5ffd5b80516001600160401b0381111561033d5761033d61029c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561036b5761036b61029c565b604052818152828201602001871015610382575f5ffd5b6103938260208301602086016102b0565b8093505050509250929050565b5f82516103b18184602087016102b0565b9190910192915050565b602081525f82518060208401526103d98160408501602087016102b0565b601f01601f19169190910160400192915050565b60aa806103f95f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b8d385d4f2d6cc75f0553b0f75a9defc23ce602bcb05516f25f5e40cac657bef64736f6c634300081b0033", + "code": "0x6080604052600436106101ba575f3560e01c806367090ccf116100f25780639aa8605c11610092578063e07baba611610062578063e07baba6146104e3578063e30c397814610520578063f09a40161461053d578063f2fde38b1461055c575f5ffd5b80639aa8605c1461045e578063a86f9d9e1461048e578063b84d9ffe146104ad578063d56ad7ac146104cd575f5ffd5b80637f07c947116100cd5780637f07c947146104065780638456cb59146104195780638abf60771461042d5780638da5cb5b14610441575f5ffd5b806367090ccf1461039e578063715018a6146103de57806379ba5097146103f2575f5ffd5b80633659cfe61161015d5780633f4ba83a116101385780633f4ba83a146103435780634f1ef2861461035757806352d1902d1461036a5780635c975abb1461037e575f5ffd5b80633659cfe6146102e65780633ab76e9f146103055780633eb6b8cf14610324575f5ffd5b806306fdde031161019857806306fdde031461024c5780630e7eeb791461026c5780630ecd8be91461029b5780633075db56146102d2575f5ffd5b80630178733a146101be57806301ffc9a7146101d3578063066fe7b414610207575b5f5ffd5b6101d16101cc36600461330a565b61057b565b005b3480156101de575f5ffd5b506101f26101ed366004613350565b610709565b60405190151581526020015b60405180910390f35b348015610212575f5ffd5b5061023e61022136600461338b565b61013060209081525f928352604080842090915290825290205481565b6040519081526020016101fe565b348015610257575f5ffd5b506a195c98cc8c17dd985d5b1d60aa1b61023e565b348015610277575f5ffd5b506101f26102863660046133b9565b61012f6020525f908152604090205460ff1681565b3480156102a6575f5ffd5b506102ba6102b53660046133d4565b610759565b6040516001600160a01b0390911681526020016101fe565b3480156102dd575f5ffd5b506101f2610e67565b3480156102f1575f5ffd5b506101d16103003660046133b9565b610e7f565b348015610310575f5ffd5b506097546102ba906001600160a01b031681565b34801561032f575f5ffd5b506102ba61033e36600461343c565b610f4f565b34801561034e575f5ffd5b506101d1610f65565b6101d1610365366004613584565b610f79565b348015610375575f5ffd5b5061023e61102e565b348015610389575f5ffd5b506101f260c954610100900460ff1660021490565b3480156103a9575f5ffd5b506102ba6103b836600461338b565b61012e60209081525f92835260408084209091529082529020546001600160a01b031681565b3480156103e9575f5ffd5b506101d16110df565b3480156103fd575f5ffd5b506101d16110f0565b6101d16104143660046135d0565b611167565b348015610424575f5ffd5b506101d16112b7565b348015610438575f5ffd5b506102ba6112ca565b34801561044c575f5ffd5b506033546001600160a01b03166102ba565b348015610469575f5ffd5b5061047d6104783660046133b9565b6112d8565b6040516101fe959493929190613689565b348015610499575f5ffd5b506102ba6104a83660046136e2565b61142d565b6104c06104bb366004613705565b611439565b6040516101fe919061371e565b3480156104d8575f5ffd5b5061023e6276a70081565b3480156104ee575f5ffd5b5060c954610508906201000090046001600160401b031681565b6040516001600160401b0390911681526020016101fe565b34801561052b575f5ffd5b506065546001600160a01b03166102ba565b348015610548575f5ffd5b506101d161055736600461380e565b61187c565b348015610567575f5ffd5b506101d16105763660046133b9565b61198b565b61058f60c954610100900460ff1660021490565b156105ad5760405163bae6e2a960e01b815260040160405180910390fd5b60026105bb60c95460ff1690565b60ff16036105dc5760405163dfc60d8560e01b815260040160405180910390fd5b6105e660026119fc565b6105ee611a12565b505f6105fe61014084018461382a565b61060c916004908290613873565b810190610619919061389a565b90505f5f828060200190518101906106319190613946565b9350505091505f610655838760a001602081019061064f91906133b9565b84611b08565b905061067f61012087013561067060c0890160a08a016133b9565b6001600160a01b031690611bb0565b61068f60c0870160a088016133b9565b6001600160a01b0316857f3dea0f5955b148debf6212261e03bd80eaf8534bee43780452d16637dcc22dd5856020015184866040516106ef939291906001600160a01b039384168152919092166020820152604081019190915260600190565b60405180910390a35050505061070560016119fc565b5050565b5f6001600160e01b0319821662bc399d60e11b148061073857506001600160e01b03198216637f07c94760e01b145b8061075357506001600160e01b031982166301ffc9a760e01b145b92915050565b5f610762611bbb565b600261077060c95460ff1690565b60ff16036107915760405163dfc60d8560e01b815260040160405180910390fd5b61079b60026119fc565b6001600160a01b03821615806107d157506001600160a01b038281165f90815261012d6020526040902054600160401b90041615155b806107e457506001600160a01b0382163b155b156108025760405163dc63f98760e01b815260040160405180910390fd5b5f61081360408501602086016133b9565b6001600160a01b0316148061083c5750466108316020850185613a3a565b6001600160401b0316145b1561085a57604051638257f7f560e01b815260040160405180910390fd5b6001600160a01b0382165f90815261012f602052604090205460ff1615610894576040516375c42fc160e01b815260040160405180910390fd5b5f610130816108a66020870187613a3a565b6001600160401b031681526020019081526020015f205f8560200160208101906108d091906133b9565b6001600160a01b0316815260208101919091526040015f205490506108f86276a70082613a69565b4210156109185760405163231d35fb60e11b815260040160405180910390fd5b61012e5f6109296020870187613a3a565b6001600160401b031681526020019081526020015f205f85602001602081019061095391906133b9565b6001600160a01b03908116825260208201929092526040015f20541691508115610cb9576001600160a01b038281165f90815261012d60209081526040808320815160a08101835281546001600160401b0381168252600160401b810490961693810193909352600160e01b90940460ff1690820152600183018054929391926060840191906109e290613a7c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0e90613a7c565b8015610a595780601f10610a3057610100808354040283529160200191610a59565b820191905f5260205f20905b815481529060010190602001808311610a3c57829003601f168201915b50505050508152602001600282018054610a7290613a7c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9e90613a7c565b8015610ae95780601f10610ac057610100808354040283529160200191610ae9565b820191905f5260205f20905b815481529060010190602001808311610acc57829003601f168201915b505050505081525050905080604051602001610b059190613b13565b6040516020818303038152906040528051906020012085604051602001610b2c9190613b99565b6040516020818303038152906040528051906020012014610b6057604051632f9d1d7b60e11b815260040160405180910390fd5b6001600160a01b0383165f90815261012d6020526040812080546001600160e81b031916815590610b9460018301826132b2565b610ba1600283015f6132b2565b50506001600160a01b0383165f81815261012f60205260409020805460ff19166001179055610bd79063b8f2e0c560e01b611c15565b8015610bf85750610bf86001600160a01b03851663b8f2e0c560e01b611c15565b15610cb75760405163b8f2e0c560e01b81526001600160a01b0385811660048301525f602483015284169063b8f2e0c5906044015f604051808303815f87803b158015610c43575f5ffd5b505af1158015610c55573d5f5f3e3d5ffd5b505060405163b8f2e0c560e01b81526001600160a01b038681166004830152600160248301528716925063b8f2e0c591506044015f604051808303815f87803b158015610ca0575f5ffd5b505af1158015610cb2573d5f5f3e3d5ffd5b505050505b505b6001600160a01b0383165f90815261012d602052604090208490610cdd8282613d3c565b5083905061012e5f610cf26020880188613a3a565b6001600160401b031681526020019081526020015f205f866020016020810190610d1c91906133b9565b6001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550426101305f865f016020810190610d759190613a3a565b6001600160401b031681526020019081526020015f205f866020016020810190610d9f91906133b9565b6001600160a01b03166001600160a01b031681526020019081526020015f2081905550836020016020810190610dd591906133b9565b6001600160a01b0316610deb6020860186613a3a565b6001600160401b03167f031d68e1805917560c34a5f55a7dd91bef98f911190ed02cdbb53caedae6c39d8486610e2460608a018a61382a565b610e3160808c018c61382a565b610e4160608e0160408f01613dfa565b604051610e549796959493929190613e15565b60405180910390a35061075360016119fc565b5f6002610e7660c95460ff1690565b60ff1614905090565b6001600160a01b037f0000000000000000000000000167010000000000000000000000000000000002163003610ed05760405162461bcd60e51b8152600401610ec790613e6c565b60405180910390fd5b7f00000000000000000000000001670100000000000000000000000000000000026001600160a01b0316610f02611ca2565b6001600160a01b031614610f285760405162461bcd60e51b8152600401610ec790613eb8565b610f3181611cbd565b604080515f80825260208201909252610f4c91839190611cc5565b50565b5f610f5b848484611e2f565b90505b9392505050565b610f6d611e81565b610f77335f611f11565b565b6001600160a01b037f0000000000000000000000000167010000000000000000000000000000000002163003610fc15760405162461bcd60e51b8152600401610ec790613e6c565b7f00000000000000000000000001670100000000000000000000000000000000026001600160a01b0316610ff3611ca2565b6001600160a01b0316146110195760405162461bcd60e51b8152600401610ec790613eb8565b61102282611cbd565b61070582826001611cc5565b5f306001600160a01b037f000000000000000000000000016701000000000000000000000000000000000216146110cd5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610ec7565b505f5160206149985f395f51905f5290565b6110e7611bbb565b610f775f611f19565b60655433906001600160a01b0316811461115e5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610ec7565b610f4c81611f19565b61117b60c954610100900460ff1660021490565b156111995760405163bae6e2a960e01b815260040160405180910390fd5b60026111a760c95460ff1690565b60ff16036111c85760405163dfc60d8560e01b815260040160405180910390fd5b6111d260026119fc565b5f8080806111e285870187613f0f565b93509350935093505f6111f3611f32565b90506111fe83612051565b5f61120a868585611b08565b905061121f6001600160a01b03851634611bb0565b836001600160a01b0316856001600160a01b0316835f01517f75a051823424fc80e92556c41cb0ad977ae1dcb09c68a9c38acab86b11a69f8985604001518a60200151868960405161129f94939291906001600160401b039490941684526001600160a01b03928316602085015291166040830152606082015260800190565b60405180910390a450505050505061070560016119fc565b6112bf61208d565b610f77336001611f11565b5f6112d3611ca2565b905090565b61012d6020525f9081526040902080546001820180546001600160401b03831693600160401b84046001600160a01b031693600160e01b900460ff1692909161132090613a7c565b80601f016020809104026020016040519081016040528092919081815260200182805461134c90613a7c565b80156113975780601f1061136e57610100808354040283529160200191611397565b820191905f5260205f20905b81548152906001019060200180831161137a57829003601f168201915b5050505050908060020180546113ac90613a7c565b80601f01602080910402602001604051908101604052809291908181526020018280546113d890613a7c565b80156114235780601f106113fa57610100808354040283529160200191611423565b820191905f5260205f20905b81548152906001019060200180831161140657829003601f168201915b5050505050905085565b5f610f5e468484611e2f565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201929092526101408101919091526114a760c954610100900460ff1660021490565b156114c55760405163bae6e2a960e01b815260040160405180910390fd5b60026114d360c95460ff1690565b60ff16036114f45760405163dfc60d8560e01b815260040160405180910390fd5b6114fe60026119fc565b8160c001355f0361152257604051634299323b60e11b815260040160405180910390fd5b5f61153360a08401608085016133b9565b6001600160a01b03160361155a576040516303f8a7d360e01b815260040160405180910390fd5b61012f5f61156e60a08501608086016133b9565b6001600160a01b0316815260208101919091526040015f205460ff16156115a8576040516375c42fc160e01b815260040160405180910390fd5b6115b86080830160608401613a3a565b6001600160401b03163410156115e157604051630178ce0b60e31b815260040160405180910390fd5b5f5f5f6115ed856120fe565b6040805161016081019091525f8082529396509194509250602081016116196080890160608a01613a3a565b6001600160401b0316815260200161163760c0890160a08a01614014565b63ffffffff1681525f6020808301829052604083019190915233606083015260809091019061166890890189613a3a565b6001600160401b031681526020015f6001600160a01b031688602001602081019061169391906133b9565b6001600160a01b0316036116a757336116b7565b6116b76040890160208a016133b9565b6001600160a01b031681526020908101906116ee906116d8908a018a613a3a565b6a195c98cc8c17dd985d5b1d60aa1b5b5f610f4f565b6001600160a01b0316815260200161170c6080890160608a01613a3a565b61171f906001600160401b03163461402f565b815260200185905290505f61173d6562726964676560d01b8261142d565b6001600160a01b0316631bdb003734846040518363ffffffff1660e01b8152600401611769919061371e565b5f6040518083038185885af1158015611784573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d908101601f191682016040526117ac919081019061404d565b965090506117c060608801604089016133b9565b6001600160a01b03168660a001516001600160a01b0316827f256f5c87f6ab8d238ac244067613227eb6e2cd65299121135d4f778e8581e03d875f01518b5f01602081019061180f9190613a3a565b89602001518d608001602081019061182791906133b9565b604080516001600160401b0395861681529390941660208401526001600160a01b03918216838501521660608201526080810189905290519081900360a00190a4505050505061187760016119fc565b919050565b5f54610100900460ff161580801561189a57505f54600160ff909116105b806118b35750303b1580156118b357505f5460ff166001145b6119165760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ec7565b5f805460ff191660011790558015611937575f805461ff0019166101001790555b6119418383612598565b8015611986575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b611993611bbb565b606580546001600160a01b0383166001600160a01b031990911681179091556119c46033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611a4381600161142d565b6001600160a01b0316336001600160a01b031614611a7457604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611ab0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ad4919061416d565b60208101519092506001600160a01b03163314611b0457604051632583296b60e01b815260040160405180910390fd5b5090565b5f46845f01516001600160401b031603611b3b57506020830151611b366001600160a01b03821684846125d2565b611ba6565b611b4484612635565b6040516340c10f1960e01b81526001600160a01b03858116600483015260248201859052919250908216906340c10f19906044015f604051808303815f87803b158015611b8f575f5ffd5b505af1158015611ba1573d5f5f3e3d5ffd5b505050505b610f5e8183612677565b61070582825a612706565b6033546001600160a01b03163314610f775760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ec7565b5f6001600160a01b0383163b611c2c57505f610753565b6040516301ffc9a760e01b81526001600160e01b0319831660048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa925050508015611c96575060408051601f3d908101601f19168201909252611c93918101906141d5565b60015b15610753579392505050565b5f5160206149985f395f51905f52546001600160a01b031690565b610f4c611bbb565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611cf85761198683612749565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611d52575060408051601f3d908101601f19168201909252611d4f918101906141f0565b60015b611db55760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610ec7565b5f5160206149985f395f51905f528114611e235760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610ec7565b506119868383836127e4565b5f611e3a848461280e565b905081158015611e5157506001600160a01b038116155b15610f5e57604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610ec7565b611e9560c954610100900460ff1660021490565b611eb25760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610705611bbb565b606580546001600160a01b0319169055610f4c816128b8565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611f6381600161142d565b6001600160a01b0316336001600160a01b031614611f9457604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611fd0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff4919061416d565b91505f61201483604001516116e86a195c98cc8c17dd985d5b1d60aa1b90565b9050806001600160a01b031683602001516001600160a01b03161461204c57604051632583296b60e01b815260040160405180910390fd5b505090565b6001600160a01b038116158061206f57506001600160a01b03811630145b15610f4c57604051635b50f3f960e01b815260040160405180910390fd5b6120a160c954610100900460ff1660021490565b156120bf5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611f07565b6040805160a0810182525f8082526020820181905291810191909152606081810181905260808201819052905f8061012d8161214060a08801608089016133b9565b6001600160a01b03908116825260208201929092526040015f208054909250600160401b90041615612376576040805160a08101825282546001600160401b0381168252600160401b81046001600160a01b03166020830152600160e01b900460ff1691810191909152600182018054839160608401916121c090613a7c565b80601f01602080910402602001604051908101604052809291908181526020018280546121ec90613a7c565b80156122375780601f1061220e57610100808354040283529160200191612237565b820191905f5260205f20905b81548152906001019060200180831161221a57829003601f168201915b5050505050815260200160028201805461225090613a7c565b80601f016020809104026020016040519081016040528092919081815260200182805461227c90613a7c565b80156122c75780601f1061229e576101008083540402835291602001916122c7565b820191905f5260205f20905b8154815290600101906020018083116122aa57829003601f168201915b505050505081525050925061230033308760c001358860800160208101906122ef91906133b9565b6001600160a01b0316929190612909565b61231060a08601608087016133b9565b604051630852cd8d60e31b815260c087013560048201526001600160a01b0391909116906342966c68906024015f604051808303815f87803b158015612354575f5ffd5b505af1158015612366573d5f5f3e3d5ffd5b505050508460c001359150612518565b6040518060a00160405280466001600160401b031681526020018660800160208101906123a391906133b9565b6001600160a01b031681526020016123c96123c460a0890160808a016133b9565b612941565b60ff1681526020016123e96123e460a0890160808a016133b9565b6129f5565b815260200161240661240160a0890160808a016133b9565b612a9f565b905292505f61241b60a08701608088016133b9565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038316906370a0823190602401602060405180830381865afa158015612462573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061248691906141f0565b90506124a16001600160a01b038316333060c08b0135612909565b6040516370a0823160e01b815230600482015281906001600160a01b038416906370a0823190602401602060405180830381865afa1580156124e5573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061250991906141f0565b612513919061402f565b935050505b30637f07c947843361253060608a0160408b016133b9565b866040516020016125449493929190614207565b60408051601f19818403018152908290526125619160240161423c565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050509350509193909250565b806001600160a01b0381166125c05760405163538ba4f960e01b815260040160405180910390fd5b6125c983612ae5565b61198682612b43565b6040516001600160a01b03831660248201526044810182905261198690849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612bb3565b80516001600160401b03165f90815261012e60209081526040808320828501516001600160a01b03908116855292529091205416806118775761075382612c86565b5f6126936c38bab7ba30afb6b0b730b3b2b960991b600161142d565b90506001600160a01b03811615611986576040516315c638fb60e31b81526001600160a01b0384811660048301526024820184905282169063ae31c7d8906044015f604051808303815f87803b1580156126eb575f5ffd5b505af11580156126fd573d5f5f3e3d5ffd5b50505050505050565b815f0361271257505050565b61272c83838360405180602001604052805f815250612e88565b61198657604051634c67134d60e11b815260040160405180910390fd5b6001600160a01b0381163b6127b65760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610ec7565b5f5160206149985f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b6127ed83612ec5565b5f825111806127f95750805b15611986576128088383612f04565b50505050565b6097545f906001600160a01b03168061283a57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa15801561288c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128b0919061424e565b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6040516001600160a01b03808516602483015283166044820152606481018290526128089085906323b872dd60e01b906084016125fe565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f91829182916001600160a01b038616916129869190614269565b5f60405180830381855afa9150503d805f81146129be576040519150601f19603f3d011682016040523d82523d5f602084013e6129c3565b606091505b50915091508180156129d6575080516020145b6129e15760126128b0565b808060200190518101906128b09190614284565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516060915f9182916001600160a01b03861691612a3b9190614269565b5f60405180830381855afa9150503d805f8114612a73576040519150601f19603f3d011682016040523d82523d5f602084013e612a78565b606091505b509150915081612a965760405180602001604052805f8152506128b0565b6128b081612f29565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516060915f9182916001600160a01b03861691612a3b9190614269565b5f54610100900460ff16612b0b5760405162461bcd60e51b8152600401610ec79061429f565b612b13613096565b612b316001600160a01b03821615612b2b5781611f19565b33611f19565b5060c9805461ff001916610100179055565b5f54610100900460ff16612b695760405162461bcd60e51b8152600401610ec79061429f565b6001600160401b03461115612b915760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f612c07826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166130bc9092919063ffffffff16565b905080515f1480612c27575080806020019051810190612c2791906141d5565b6119865760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610ec7565b5f5f612c9a6033546001600160a01b031690565b60975460208501518551604080880151606089015160808a01519251612cd097966001600160a01b0316959493906024016142ea565b60408051601f198184030181529190526020810180516001600160e01b031663bb86ef9360e01b1790529050612d166c0627269646765645f657263323609c1b5f61142d565b81604051612d23906132e9565b612d2e929190614355565b604051809103905ff080158015612d47573d5f5f3e3d5ffd5b506001600160a01b038082165f90815261012d602090815260409182902087518154928901519389015160ff16600160e01b0260ff60e01b1994909516600160401b026001600160e01b03199093166001600160401b03909116179190911791909116919091178155606085015191935084916001820190612dc99082614378565b5060808201516002820190612dde9082614378565b505083516001600160401b039081165f90815261012e6020908152604080832082890180516001600160a01b039081168652919093529281902080546001600160a01b0319168885169081179091559151885160608a015160808b0151848c01519451959850929095169516937fb6b427556e8cb0ebf9175da4bc48c64c4f56e44cfaf8c3ab5ebf8e2ea130907993612e7a9391929190614432565b60405180910390a450919050565b5f6001600160a01b038516612eb057604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b612ece81612749565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610f5e83836040518060600160405280602781526020016149b8602791396130ca565b60606040825110612f485781806020019051810190610753919061446a565b8151602003613083575f5b60208160ff16108015612f885750828160ff1681518110612f7657612f7661449b565b01602001516001600160f81b03191615155b15612f9f5780612f97816144af565b915050612f53565b5f8160ff166001600160401b03811115612fbb57612fbb61347b565b6040519080825280601f01601f191660200182016040528015612fe5576020820181803683370190505b5090505f91505b60208260ff161080156130215750838260ff168151811061300f5761300f61449b565b01602001516001600160f81b03191615155b15610f5e57838260ff168151811061303b5761303b61449b565b602001015160f81c60f81b818360ff168151811061305b5761305b61449b565b60200101906001600160f81b03191690815f1a9053508161307b816144af565b925050612fec565b505060408051602081019091525f815290565b5f54610100900460ff16610f775760405162461bcd60e51b8152600401610ec79061429f565b6060610f5b84845f8561313e565b60605f5f856001600160a01b0316856040516130e69190614269565b5f60405180830381855af49150503d805f811461311e576040519150601f19603f3d011682016040523d82523d5f602084013e613123565b606091505b509150915061313486838387613215565b9695505050505050565b60608247101561319f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610ec7565b5f5f866001600160a01b031685876040516131ba9190614269565b5f6040518083038185875af1925050503d805f81146131f4576040519150601f19603f3d011682016040523d82523d5f602084013e6131f9565b606091505b509150915061320a87838387613215565b979650505050505050565b606083156132835782515f0361327c576001600160a01b0385163b61327c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ec7565b50816128b0565b6128b083838151156132985781518083602001fd5b8060405162461bcd60e51b8152600401610ec7919061423c565b5080546132be90613a7c565b5f825580601f106132cd575050565b601f0160209004905f5260205f2090810190610f4c91906132f6565b6104ca806144ce83390190565b5b80821115611b04575f81556001016132f7565b5f5f6040838503121561331b575f5ffd5b82356001600160401b03811115613330575f5ffd5b83016101608186031215613342575f5ffd5b946020939093013593505050565b5f60208284031215613360575f5ffd5b81356001600160e01b031981168114610f5e575f5ffd5b6001600160a01b0381168114610f4c575f5ffd5b5f5f6040838503121561339c575f5ffd5b8235915060208301356133ae81613377565b809150509250929050565b5f602082840312156133c9575f5ffd5b8135610f5e81613377565b5f5f604083850312156133e5575f5ffd5b82356001600160401b038111156133fa575f5ffd5b830160a0818603121561340b575f5ffd5b915060208301356133ae81613377565b6001600160401b0381168114610f4c575f5ffd5b8015158114610f4c575f5ffd5b5f5f5f6060848603121561344e575f5ffd5b83356134598161341b565b92506020840135915060408401356134708161342f565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405160a081016001600160401b03811182821017156134b1576134b161347b565b60405290565b60405161016081016001600160401b03811182821017156134b1576134b161347b565b604051601f8201601f191681016001600160401b03811182821017156135025761350261347b565b604052919050565b5f6001600160401b038211156135225761352261347b565b50601f01601f191660200190565b5f82601f83011261353f575f5ffd5b8135602083015f6135576135528461350a565b6134da565b905082815285838301111561356a575f5ffd5b828260208301375f92810160200192909252509392505050565b5f5f60408385031215613595575f5ffd5b82356135a081613377565b915060208301356001600160401b038111156135ba575f5ffd5b6135c685828601613530565b9150509250929050565b5f5f602083850312156135e1575f5ffd5b82356001600160401b038111156135f6575f5ffd5b8301601f81018513613606575f5ffd5b80356001600160401b0381111561361b575f5ffd5b85602082840101111561362c575f5ffd5b6020919091019590945092505050565b5f5b8381101561365657818101518382015260200161363e565b50505f910152565b5f815180845261367581602086016020860161363c565b601f01601f19169290920160200192915050565b6001600160401b03861681526001600160a01b038516602082015260ff8416604082015260a0606082018190525f906136c49083018561365e565b82810360808401526136d6818561365e565b98975050505050505050565b5f5f604083850312156136f3575f5ffd5b8235915060208301356133ae8161342f565b5f60e0828403128015613716575f5ffd5b509092915050565b602081526137386020820183516001600160401b03169052565b5f602083015161375360408401826001600160401b03169052565b50604083015163ffffffff811660608401525060608301516001600160a01b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160401b03811660e08401525060e08301516001600160a01b038116610100840152506101008301516001600160a01b03811661012084015250610120830151610140830152610140830151610160808401526128b061018084018261365e565b5f5f6040838503121561381f575f5ffd5b823561340b81613377565b5f5f8335601e1984360301811261383f575f5ffd5b8301803591506001600160401b03821115613858575f5ffd5b60200191503681900382131561386c575f5ffd5b9250929050565b5f5f85851115613881575f5ffd5b8386111561388d575f5ffd5b5050820193919092039150565b5f602082840312156138aa575f5ffd5b81356001600160401b038111156138bf575f5ffd5b6128b084828501613530565b80516118778161341b565b805161187781613377565b60ff81168114610f4c575f5ffd5b8051611877816138e1565b5f82601f830112613909575f5ffd5b8151602083015f61391c6135528461350a565b905082815285838301111561392f575f5ffd5b61393d83602083018461363c565b95945050505050565b5f5f5f5f60808587031215613959575f5ffd5b84516001600160401b0381111561396e575f5ffd5b850160a0818803121561397f575f5ffd5b61398761348f565b81516139928161341b565b815260208201516139a281613377565b60208201526139b3604083016138ef565b604082015260608201516001600160401b038111156139d0575f5ffd5b6139dc898285016138fa565b60608301525060808201516001600160401b038111156139fa575f5ffd5b613a06898285016138fa565b6080830152509450613a1c9050602086016138d6565b9250613a2a604086016138d6565b6060959095015193969295505050565b5f60208284031215613a4a575f5ffd5b8135610f5e8161341b565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561075357610753613a55565b600181811c90821680613a9057607f821691505b602082108103613aae57634e487b7160e01b5f52602260045260245ffd5b50919050565b6001600160401b03815116825260018060a01b03602082015116602083015260ff60408201511660408301525f606082015160a06060850152613afa60a085018261365e565b90506080830151848203608086015261393d828261365e565b602081525f610f5e6020830184613ab4565b8035611877816138e1565b5f5f8335601e19843603018112613b45575f5ffd5b83016020810192503590506001600160401b03811115613b63575f5ffd5b80360382131561386c575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f8235613ba98161341b565b6001600160401b0381166020840152506020830135613bc781613377565b6001600160a01b0316604083810191909152830135613be5816138e1565b60ff8116606084015250613bfc6060840184613b30565b60a06080850152613c1160c085018284613b71565b915050613c216080850185613b30565b848303601f190160a0860152613134838284613b71565b601f82111561198657805f5260205f20601f840160051c81016020851015613c5d5750805b601f840160051c820191505b81811015613c7c575f8155600101613c69565b5050505050565b6001600160401b03831115613c9a57613c9a61347b565b613cae83613ca88354613a7c565b83613c38565b5f601f841160018114613cdf575f8515613cc85750838201355b5f19600387901b1c1916600186901b178355613c7c565b5f83815260208120601f198716915b82811015613d0e5786850135825560209485019460019092019101613cee565b5086821015613d2a575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b8135613d478161341b565b6001600160401b03811690508154816001600160401b031982161783556020840135613d7281613377565b6001600160e01b031991909116909117604091821b68010000000000000000600160e01b03161782555f90830135613da9816138e1565b825460ff60e01b191660e09190911b60ff60e01b1617825550613dcf606083018361382a565b613ddd818360018601613c83565b5050613dec608083018361382a565b612808818360028601613c83565b5f60208284031215613e0a575f5ffd5b8135610f5e816138e1565b6001600160a01b0388811682528716602082015260a0604082018190525f90613e419083018789613b71565b8281036060840152613e54818688613b71565b91505060ff8316608083015298975050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b803561187781613377565b5f5f5f5f60808587031215613f22575f5ffd5b84356001600160401b03811115613f37575f5ffd5b850160a08188031215613f48575f5ffd5b613f5061348f565b8135613f5b8161341b565b81526020820135613f6b81613377565b6020820152613f7c60408301613b25565b604082015260608201356001600160401b03811115613f99575f5ffd5b613fa589828501613530565b60608301525060808201356001600160401b03811115613fc3575f5ffd5b613fcf89828501613530565b6080830152509450613fe5905060208601613f04565b9250613ff360408601613f04565b9396929550929360600135925050565b63ffffffff81168114610f4c575f5ffd5b5f60208284031215614024575f5ffd5b8135610f5e81614003565b8181038181111561075357610753613a55565b805161187781614003565b5f5f6040838503121561405e575f5ffd5b825160208401519092506001600160401b0381111561407b575f5ffd5b8301610160818603121561408d575f5ffd5b6140956134b7565b61409e826138cb565b81526140ac602083016138cb565b60208201526140bd60408301614042565b60408201526140ce606083016138d6565b60608201526140df608083016138cb565b60808201526140f060a083016138d6565b60a082015261410160c083016138cb565b60c082015261411260e083016138d6565b60e082015261412461010083016138d6565b61010082015261012082810151908201526101408201516001600160401b0381111561414e575f5ffd5b61415a878285016138fa565b6101408301525080925050509250929050565b5f606082840312801561417e575f5ffd5b50604051606081016001600160401b03811182821017156141a1576141a161347b565b6040528251815260208301516141b681613377565b602082015260408301516141c98161341b565b60408201529392505050565b5f602082840312156141e5575f5ffd5b8151610f5e8161342f565b5f60208284031215614200575f5ffd5b5051919050565b608081525f6142196080830187613ab4565b6001600160a01b0395861660208401529390941660408201526060015292915050565b602081525f610f5e602083018461365e565b5f6020828403121561425e575f5ffd5b8151610f5e81613377565b5f825161427a81846020870161363c565b9190910192915050565b5f60208284031215614294575f5ffd5b8151610f5e816138e1565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0388811682528781166020830152861660408201526001600160401b038516606082015260ff8416608082015260e060a082018190525f906143359083018561365e565b82810360c0840152614347818561365e565b9a9950505050505050505050565b6001600160a01b03831681526040602082018190525f90610f5b9083018461365e565b81516001600160401b038111156143915761439161347b565b6143a58161439f8454613a7c565b84613c38565b6020601f8211600181146143d7575f83156143c05750848201515b5f19600385901b1c1916600184901b178455613c7c565b5f84815260208120601f198516915b8281101561440657878501518255602094850194600190920191016143e6565b508482101561442357868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b606081525f614444606083018661365e565b8281036020840152614456818661365e565b91505060ff83166040830152949350505050565b5f6020828403121561447a575f5ffd5b81516001600160401b0381111561448f575f5ffd5b6128b0848285016138fa565b634e487b7160e01b5f52603260045260245ffd5b5f60ff821660ff81036144c4576144c4613a55565b6001019291505056fe60806040526040516104ca3803806104ca833981016040819052610022916102d2565b61002d82825f610034565b50506103ed565b61003d8361005f565b5f825111806100495750805b1561005a57610058838361009e565b505b505050565b610068816100ca565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606100c383836040518060600160405280602781526020016104a36027913961017d565b9392505050565b6001600160a01b0381163b61013c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f856001600160a01b03168560405161019991906103a0565b5f60405180830381855af49150503d805f81146101d1576040519150601f19603f3d011682016040523d82523d5f602084013e6101d6565b606091505b5090925090506101e8868383876101f2565b9695505050505050565b606083156102605782515f03610259576001600160a01b0385163b6102595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610133565b508161026a565b61026a8383610272565b949350505050565b8151156102825781518083602001fd5b8060405162461bcd60e51b815260040161013391906103bb565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156102ca5781810151838201526020016102b2565b50505f910152565b5f5f604083850312156102e3575f5ffd5b82516001600160a01b03811681146102f9575f5ffd5b60208401519092506001600160401b03811115610314575f5ffd5b8301601f81018513610324575f5ffd5b80516001600160401b0381111561033d5761033d61029c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561036b5761036b61029c565b604052818152828201602001871015610382575f5ffd5b6103938260208301602086016102b0565b8093505050509250929050565b5f82516103b18184602087016102b0565b9190910192915050565b602081525f82518060208401526103d98160408501602087016102b0565b601f01601f19169190910160400192915050565b60aa806103f95f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b8d385d4f2d6cc75f0553b0f75a9defc23ce602bcb05516f25f5e40cac657bef64736f6c634300081b0033", "balance": "0x0" }, - "0x1670000000000000000000000000000000000002": { + "0x1670100000000000000000000000000000000002": { "contractName": "ERC20Vault", "storage": { "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000201", "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", - "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670000000000000000000000000000000000006", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000000002" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670100000000000000000000000000000000006", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167010000000000000000000000000000000002" }, "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", "balance": "0x0" }, - "0x0167000000000000000000000000000000000003": { + "0x0167010000000000000000000000000000000003": { "contractName": "ERC721VaultImpl", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f" }, - "code": "0x60806040526004361061017b575f3560e01c806367090ccf116100cd5780638da5cb5b11610087578063e07baba611610062578063e07baba614610449578063e30c397814610486578063f09a4016146104a3578063f2fde38b146104c2575f5ffd5b80638da5cb5b146103de5780639aa8605c146103fb578063a86f9d9e1461042a575f5ffd5b806367090ccf1461033b578063715018a61461037b57806379ba50971461038f5780637f07c947146103a35780638456cb59146103b65780638abf6077146103ca575f5ffd5b80633659cfe6116101385780633f4ba83a116101135780633f4ba83a146102e05780634f1ef286146102f457806352d1902d146103075780635c975abb1461031b575f5ffd5b80633659cfe61461026b5780633ab76e9f1461028a5780633eb6b8cf146102c1575f5ffd5b80630178733a1461017f57806301ffc9a71461019457806306fdde03146101c8578063150b7a02146101f35780631f59a830146102375780633075db5614610257575b5f5ffd5b61019261018d3660046128ea565b6104e1565b005b34801561019f575f5ffd5b506101b36101ae366004612930565b610694565b60405190151581526020015b60405180910390f35b3480156101d3575f5ffd5b506b195c98cdcc8c57dd985d5b1d60a21b5b6040519081526020016101bf565b3480156101fe575f5ffd5b5061021e61020d3660046129ba565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016101bf565b61024a610245366004612a27565b6106e4565b6040516101bf9190612aab565b348015610262575f5ffd5b506101b3610b6a565b348015610276575f5ffd5b50610192610285366004612b9b565b610b82565b348015610295575f5ffd5b506097546102a9906001600160a01b031681565b6040516001600160a01b0390911681526020016101bf565b3480156102cc575f5ffd5b506102a96102db366004612be2565b610c52565b3480156102eb575f5ffd5b50610192610c68565b610192610302366004612d4d565b610c7c565b348015610312575f5ffd5b506101e5610d31565b348015610326575f5ffd5b506101b360c954610100900460ff1660021490565b348015610346575f5ffd5b506102a9610355366004612d99565b61012e60209081525f92835260408084209091529082529020546001600160a01b031681565b348015610386575f5ffd5b50610192610de2565b34801561039a575f5ffd5b50610192610df3565b6101926103b1366004612dc7565b610e6a565b3480156103c1575f5ffd5b50610192610fd3565b3480156103d5575f5ffd5b506102a9610fe6565b3480156103e9575f5ffd5b506033546001600160a01b03166102a9565b348015610406575f5ffd5b5061041a610415366004612b9b565b610ff4565b6040516101bf9493929190612e05565b348015610435575f5ffd5b506102a9610444366004612e54565b61113f565b348015610454575f5ffd5b5060c95461046e906201000090046001600160401b031681565b6040516001600160401b0390911681526020016101bf565b348015610491575f5ffd5b506065546001600160a01b03166102a9565b3480156104ae575f5ffd5b506101926104bd366004612e77565b61114b565b3480156104cd575f5ffd5b506101926104dc366004612b9b565b61125a565b6104f560c954610100900460ff1660021490565b156105135760405163bae6e2a960e01b815260040160405180910390fd5b600261052160c95460ff1690565b60ff16036105425760405163dfc60d8560e01b815260040160405180910390fd5b61054c60026112cb565b6105546112e1565b505f610564610140840184612ea3565b610572916004908290612ee5565b81019061057f9190612f0c565b90505f5f828060200190518101906105979190613026565b9350505091505f6105bb838760a00160208101906105b59190612b9b565b846113d7565b90506105e56101208701356105d660c0890160a08a01612b9b565b6001600160a01b03169061154e565b6105f560c0870160a08801612b9b565b6001600160a01b0316857fe48bef18455e47bca14864ab6e82dffa29df148b051c09de95aec44ecf13598c8560200151848687516001600160401b0381111561064057610640612c21565b604051908082528060200260200182016040528015610669578160200160208202803683370190505b5060405161067a9493929190613165565b60405180910390a35050505061069060016112cb565b5050565b5f6001600160e01b0319821662bc399d60e11b14806106c357506001600160e01b03198216637f07c94760e01b145b806106de57506001600160e01b031982166301ffc9a760e01b145b92915050565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201839052610100820183905261012082019290925261014081019190915261075260c954610100900460ff1660021490565b156107705760405163bae6e2a960e01b815260040160405180910390fd5b61077982613219565b8060e00151518160c0015151146107a35760405163196e8a4160e31b815260040160405180910390fd5b60808101516001600160a01b03166107ce576040516303f8a7d360e01b815260040160405180910390fd5b60026107dc60c95460ff1690565b60ff16036107fd5760405163dfc60d8560e01b815260040160405180910390fd5b61080760026112cb565b61081760808401606085016132ec565b6001600160401b031634101561084057604051630178ce0b60e31b815260040160405180910390fd5b5f5b61084f60c0850185613307565b90508110156108a35761086560e0850185613307565b828181106108755761087561334c565b905060200201355f1461089b57604051634299323b60e11b815260040160405180910390fd5b600101610842565b506108ce6380ac58cd60e01b6108bf60a0860160808701612b9b565b6001600160a01b031690611559565b6108eb57604051633ee915f560e11b815260040160405180910390fd5b5f5f6108f6856115e6565b6040805161016081019091525f808252929450909250602081016109206080890160608a016132ec565b6001600160401b0316815260200161093e60c0890160a08a01613360565b63ffffffff1681525f6020808301829052604083019190915233606083015260809091019061096f908901896132ec565b6001600160401b031681526020015f6001600160a01b031688602001602081019061099a9190612b9b565b6001600160a01b0316036109ae57336109be565b6109be6040890160208a01612b9b565b6001600160a01b031681526020908101906109f6906109df908a018a6132ec565b6b195c98cdcc8c57dd985d5b1d60a21b5b5f610c52565b6001600160a01b03168152602001610a146080890160608a016132ec565b610a27906001600160401b03163461338f565b815260200184905290505f610a456562726964676560d01b8261113f565b6001600160a01b0316631bdb003734846040518363ffffffff1660e01b8152600401610a719190612aab565b5f6040518083038185885af1158015610a8c573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d908101601f19168201604052610ab491908101906133ad565b96509050610ac86060880160408901612b9b565b6001600160a01b03168660a001516001600160a01b0316827fabbf62a1459339f9ac59136d313a5ccd83d2706cc6d4c04d90642520169144dc8960c0015187602001518c6080016020810190610b1e9190612b9b565b610b2b60c08f018f613307565b8f8060e00190610b3b9190613307565b604051610b4e97969594939291906134fd565b60405180910390a450505050610b6460016112cb565b50919050565b5f6002610b7960c95460ff1690565b60ff1614905090565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000000003163003610bd35760405162461bcd60e51b8152600401610bca90613559565b60405180910390fd5b7f00000000000000000000000001670000000000000000000000000000000000036001600160a01b0316610c05611ac8565b6001600160a01b031614610c2b5760405162461bcd60e51b8152600401610bca906135a5565b610c3481611ae3565b604080515f80825260208201909252610c4f91839190611aeb565b50565b5f610c5e848484611c55565b90505b9392505050565b610c70611ca7565b610c7a335f611d37565b565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000000003163003610cc45760405162461bcd60e51b8152600401610bca90613559565b7f00000000000000000000000001670000000000000000000000000000000000036001600160a01b0316610cf6611ac8565b6001600160a01b031614610d1c5760405162461bcd60e51b8152600401610bca906135a5565b610d2582611ae3565b61069082826001611aeb565b5f306001600160a01b037f00000000000000000000000001670000000000000000000000000000000000031614610dd05760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610bca565b505f516020613ff95f395f51905f5290565b610dea611d3b565b610c7a5f611d95565b60655433906001600160a01b03168114610e615760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610bca565b610c4f81611d95565b610e7e60c954610100900460ff1660021490565b15610e9c5760405163bae6e2a960e01b815260040160405180910390fd5b6002610eaa60c95460ff1690565b60ff1603610ecb5760405163dfc60d8560e01b815260040160405180910390fd5b610ed560026112cb565b5f808080610ee5858701876135f1565b93509350935093505f610ef6611dae565b9050610f0183611ece565b5f610f0d8685856113d7565b9050610f226001600160a01b0385163461154e565b836001600160a01b0316856001600160a01b0316835f01517f895f73e418d1bbbad2a311d085fad00e5d98a960e9f2afa4b942071d39bec43a85604001518a6020015186898a516001600160401b03811115610f8057610f80612c21565b604051908082528060200260200182016040528015610fa9578160200160208202803683370190505b50604051610fbb9594939291906136ea565b60405180910390a450505050505061069060016112cb565b610fdb611f0a565b610c7a336001611d37565b5f610fef611ac8565b905090565b61012d6020525f9081526040902080546001820180546001600160401b03831693600160401b9093046001600160a01b031692919061103290613742565b80601f016020809104026020016040519081016040528092919081815260200182805461105e90613742565b80156110a95780601f10611080576101008083540402835291602001916110a9565b820191905f5260205f20905b81548152906001019060200180831161108c57829003601f168201915b5050505050908060020180546110be90613742565b80601f01602080910402602001604051908101604052809291908181526020018280546110ea90613742565b80156111355780601f1061110c57610100808354040283529160200191611135565b820191905f5260205f20905b81548152906001019060200180831161111857829003601f168201915b5050505050905084565b5f610c61468484611c55565b5f54610100900460ff161580801561116957505f54600160ff909116105b806111825750303b15801561118257505f5460ff166001145b6111e55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610bca565b5f805460ff191660011790558015611206575f805461ff0019166101001790555b6112108383611f7b565b8015611255575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b611262611d3b565b606580546001600160a01b0383166001600160a01b031990911681179091556112936033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b61131281600161113f565b6001600160a01b0316336001600160a01b03161461134357604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561137f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113a39190613774565b60208101519092506001600160a01b031633146113d357604051632583296b60e01b815260040160405180910390fd5b5090565b5f46845f01516001600160401b03160361149d575060208301515f5b825181101561149757816001600160a01b03166342842e0e308686858151811061141f5761141f61334c565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064015f604051808303815f87803b158015611476575f5ffd5b505af1158015611488573d5f5f3e3d5ffd5b505050508060010190506113f3565b50610c61565b6114a684611fb5565b90505f5b825181101561154657816001600160a01b03166340c10f19858584815181106114d5576114d561334c565b60200260200101516040518363ffffffff1660e01b815260040161150e9291906001600160a01b03929092168252602082015260400190565b5f604051808303815f87803b158015611525575f5ffd5b505af1158015611537573d5f5f3e3d5ffd5b505050508060010190506114aa565b509392505050565b61069082825a611ffc565b5f6001600160a01b0383163b61157057505f6106de565b6040516301ffc9a760e01b81526001600160e01b0319831660048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa9250505080156115da575060408051601f3d908101601f191682019092526115d7918101906137dc565b60015b156106de579392505050565b604080516080810182525f808252602082015260609181018290528082018290525f61012d8161161c60a0870160808801612b9b565b6001600160a01b03908116825260208201929092526040015f208054909250600160401b900416156118fd576040805160808101825282546001600160401b0381168252600160401b90046001600160a01b0316602082015260018301805491928492908401919061168d90613742565b80601f01602080910402602001604051908101604052809291908181526020018280546116b990613742565b80156117045780601f106116db57610100808354040283529160200191611704565b820191905f5260205f20905b8154815290600101906020018083116116e757829003601f168201915b5050505050815260200160028201805461171d90613742565b80601f016020809104026020016040519081016040528092919081815260200182805461174990613742565b80156117945780601f1061176b57610100808354040283529160200191611794565b820191905f5260205f20905b81548152906001019060200180831161177757829003601f168201915b50505050508152505091505f5b6117ae60c0860186613307565b90508110156118f7576117c760a0860160808701612b9b565b6001600160a01b03166342842e0e33306117e460c08a018a613307565b868181106117f4576117f461334c565b6040516001600160e01b031960e088901b1681526001600160a01b039586166004820152949093166024850152506020909102013560448201526064015f604051808303815f87803b158015611848575f5ffd5b505af115801561185a573d5f5f3e3d5ffd5b5061186f9250505060a0860160808701612b9b565b6001600160a01b03166342966c6861188a60c0880188613307565b8481811061189a5761189a61334c565b905060200201356040518263ffffffff1660e01b81526004016118bf91815260200190565b5f604051808303815f87803b1580156118d6575f5ffd5b505af11580156118e8573d5f5f3e3d5ffd5b505050508060010190506117a1565b50611a3d565b6040518060800160405280466001600160401b0316815260200185608001602081019061192a9190612b9b565b6001600160a01b0316815260200161195061194b60a0880160808901612b9b565b61203f565b815260200161196d61196860a0880160808901612b9b565b6120f1565b905291505f5b61198060c0860186613307565b9050811015611a3b5761199960a0860160808701612b9b565b6001600160a01b03166342842e0e33306119b660c08a018a613307565b868181106119c6576119c661334c565b6040516001600160e01b031960e088901b1681526001600160a01b039586166004820152949093166024850152506020909102013560448201526064015f604051808303815f87803b158015611a1a575f5ffd5b505af1158015611a2c573d5f5f3e3d5ffd5b50505050806001019050611973565b505b5030637f07c9478233611a566060880160408901612b9b565b611a6360c0890189613307565b604051602001611a779594939291906137f7565b60408051601f1981840301815290829052611a9491602401613888565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050509150915091565b5f516020613ff95f395f51905f52546001600160a01b031690565b610c4f611d3b565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611b1e5761125583612137565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611b78575060408051601f3d908101601f19168201909252611b759181019061389a565b60015b611bdb5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610bca565b5f516020613ff95f395f51905f528114611c495760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610bca565b506112558383836121d2565b5f611c6084846121fc565b905081158015611c7757506001600160a01b038116155b15610c6157604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610bca565b611cbb60c954610100900460ff1660021490565b611cd85760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6106905b6033546001600160a01b03163314610c7a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bca565b606580546001600160a01b0319169055610c4f8161229e565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611ddf81600161113f565b6001600160a01b0316336001600160a01b031614611e1057604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611e4c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e709190613774565b91505f611e9183604001516109f06b195c98cdcc8c57dd985d5b1d60a21b90565b9050806001600160a01b031683602001516001600160a01b031614611ec957604051632583296b60e01b815260040160405180910390fd5b505090565b6001600160a01b0381161580611eec57506001600160a01b03811630145b15610c4f57604051635b50f3f960e01b815260040160405180910390fd5b611f1e60c954610100900460ff1660021490565b15611f3c5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611d2d565b806001600160a01b038116611fa35760405163538ba4f960e01b815260040160405180910390fd5b611fac836122ef565b6112558261234d565b80516001600160401b03165f90815261012e60209081526040808320828501516001600160a01b0390811685529252909120541680611ff7576106de826123bd565b919050565b815f0361200857505050565b61202283838360405180602001604052805f815250612598565b61125557604051634c67134d60e11b815260040160405180910390fd5b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516060915f9182916001600160a01b0386169161208591906138b1565b5f60405180830381855afa9150503d805f81146120bd576040519150601f19603f3d011682016040523d82523d5f602084013e6120c2565b606091505b5091509150816120e05760405180602001604052805f8152506120e9565b6120e9816125d5565b949350505050565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516060915f9182916001600160a01b0386169161208591906138b1565b6001600160a01b0381163b6121a45760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610bca565b5f516020613ff95f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b6121db83612742565b5f825111806121e75750805b15611255576121f68383612781565b50505050565b6097545f906001600160a01b03168061222857604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa15801561227a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120e991906138cc565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166123155760405162461bcd60e51b8152600401610bca906138e7565b61231d6127a6565b61233b6001600160a01b038216156123355781611d95565b33611d95565b5060c9805461ff001916610100179055565b5f54610100900460ff166123735760405162461bcd60e51b8152600401610bca906138e7565b6001600160401b0346111561239b5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f6123d16033546001600160a01b031690565b609754602085015185516040808801516060890151915161240296956001600160a01b031694939290602401613932565b60408051601f198184030181529190526020810180516001600160e01b03166377c6257360e11b17905290506124496d627269646765645f65726337323160901b5f61113f565b81604051612456906128dd565b612461929190613993565b604051809103905ff08015801561247a573d5f5f3e3d5ffd5b506001600160a01b038082165f90815261012d60209081526040918290208751815492890151909416600160401b026001600160e01b03199092166001600160401b0390941693909317178255850151919350849160018201906124de9082613a01565b50606082015160028201906124f39082613a01565b505083516001600160401b039081165f90815261012e6020908152604080832082890180516001600160a01b039081168652919093529281902080546001600160a01b03191688851690811790915591518851828a015160608b01519351949750919094169493909316927f44977f2d30fe1e3aee2c1476f2f95aaacaf34e44b9359c403da01fcc93fd751b9261258a9290613abb565b60405180910390a450919050565b5f6001600160a01b0385166125c057604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b606060408251106125f457818060200190518101906106de9190613adf565b815160200361272f575f5b60208160ff161080156126345750828160ff16815181106126225761262261334c565b01602001516001600160f81b03191615155b1561264b578061264381613b10565b9150506125ff565b5f8160ff166001600160401b0381111561266757612667612c21565b6040519080825280601f01601f191660200182016040528015612691576020820181803683370190505b5090505f91505b60208260ff161080156126cd5750838260ff16815181106126bb576126bb61334c565b01602001516001600160f81b03191615155b15610c6157838260ff16815181106126e7576126e761334c565b602001015160f81c60f81b818360ff16815181106127075761270761334c565b60200101906001600160f81b03191690815f1a9053508161272781613b10565b925050612698565b505060408051602081019091525f815290565b61274b81612137565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610c618383604051806060016040528060278152602001614019602791396127cc565b5f54610100900460ff16610c7a5760405162461bcd60e51b8152600401610bca906138e7565b60605f5f856001600160a01b0316856040516127e891906138b1565b5f60405180830381855af49150503d805f8114612820576040519150601f19603f3d011682016040523d82523d5f602084013e612825565b606091505b509150915061283686838387612840565b9695505050505050565b606083156128ae5782515f036128a7576001600160a01b0385163b6128a75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bca565b50816120e9565b6120e983838151156128c35781518083602001fd5b8060405162461bcd60e51b8152600401610bca9190613888565b6104ca80613b2f83390190565b5f5f604083850312156128fb575f5ffd5b82356001600160401b03811115612910575f5ffd5b83016101608186031215612922575f5ffd5b946020939093013593505050565b5f60208284031215612940575f5ffd5b81356001600160e01b031981168114610c61575f5ffd5b6001600160a01b0381168114610c4f575f5ffd5b8035611ff781612957565b5f5f83601f840112612986575f5ffd5b5081356001600160401b0381111561299c575f5ffd5b6020830191508360208285010111156129b3575f5ffd5b9250929050565b5f5f5f5f5f608086880312156129ce575f5ffd5b85356129d981612957565b945060208601356129e981612957565b93506040860135925060608601356001600160401b03811115612a0a575f5ffd5b612a1688828901612976565b969995985093965092949392505050565b5f60208284031215612a37575f5ffd5b81356001600160401b03811115612a4c575f5ffd5b82016101008185031215610c61575f5ffd5b5f5b83811015612a78578181015183820152602001612a60565b50505f910152565b5f8151808452612a97816020860160208601612a5e565b601f01601f19169290920160200192915050565b60208152612ac56020820183516001600160401b03169052565b5f6020830151612ae060408401826001600160401b03169052565b50604083015163ffffffff811660608401525060608301516001600160a01b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160401b03811660e08401525060e08301516001600160a01b038116610100840152506101008301516001600160a01b03811661012084015250610120830151610140830152610140830151610160808401526120e9610180840182612a80565b5f60208284031215612bab575f5ffd5b8135610c6181612957565b6001600160401b0381168114610c4f575f5ffd5b8035611ff781612bb6565b8015158114610c4f575f5ffd5b5f5f5f60608486031215612bf4575f5ffd5b8335612bff81612bb6565b9250602084013591506040840135612c1681612bd5565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b0381118282101715612c5757612c57612c21565b60405290565b60405161010081016001600160401b0381118282101715612c5757612c57612c21565b60405161016081016001600160401b0381118282101715612c5757612c57612c21565b604051601f8201601f191681016001600160401b0381118282101715612ccb57612ccb612c21565b604052919050565b5f6001600160401b03821115612ceb57612ceb612c21565b50601f01601f191660200190565b5f82601f830112612d08575f5ffd5b8135602083015f612d20612d1b84612cd3565b612ca3565b9050828152858383011115612d33575f5ffd5b828260208301375f92810160200192909252509392505050565b5f5f60408385031215612d5e575f5ffd5b8235612d6981612957565b915060208301356001600160401b03811115612d83575f5ffd5b612d8f85828601612cf9565b9150509250929050565b5f5f60408385031215612daa575f5ffd5b823591506020830135612dbc81612957565b809150509250929050565b5f5f60208385031215612dd8575f5ffd5b82356001600160401b03811115612ded575f5ffd5b612df985828601612976565b90969095509350505050565b6001600160401b03851681526001600160a01b03841660208201526080604082018190525f90612e3790830185612a80565b8281036060840152612e498185612a80565b979650505050505050565b5f5f60408385031215612e65575f5ffd5b823591506020830135612dbc81612bd5565b5f5f60408385031215612e88575f5ffd5b8235612e9381612957565b91506020830135612dbc81612957565b5f5f8335601e19843603018112612eb8575f5ffd5b8301803591506001600160401b03821115612ed1575f5ffd5b6020019150368190038213156129b3575f5ffd5b5f5f85851115612ef3575f5ffd5b83861115612eff575f5ffd5b5050820193919092039150565b5f60208284031215612f1c575f5ffd5b81356001600160401b03811115612f31575f5ffd5b6120e984828501612cf9565b8051611ff781612bb6565b8051611ff781612957565b5f82601f830112612f62575f5ffd5b8151602083015f612f75612d1b84612cd3565b9050828152858383011115612f88575f5ffd5b612f96836020830184612a5e565b95945050505050565b5f6001600160401b03821115612fb757612fb7612c21565b5060051b60200190565b5f82601f830112612fd0575f5ffd5b8151612fde612d1b82612f9f565b8082825260208201915060208360051b860101925085831115612fff575f5ffd5b602085015b8381101561301c578051835260209283019201613004565b5095945050505050565b5f5f5f5f60808587031215613039575f5ffd5b84516001600160401b0381111561304e575f5ffd5b85016080818803121561305f575f5ffd5b613067612c35565b815161307281612bb6565b8152602082015161308281612957565b602082015260408201516001600160401b0381111561309f575f5ffd5b6130ab89828501612f53565b60408301525060608201516001600160401b038111156130c9575f5ffd5b6130d589828501612f53565b60608301525094506130eb905060208601612f48565b92506130f960408601612f48565b915060608501516001600160401b03811115613113575f5ffd5b61311f87828801612fc1565b91505092959194509250565b5f8151808452602084019350602083015f5b8281101561315b57815186526020958601959091019060010161313d565b5093949350505050565b6001600160a01b038581168252841660208201526080604082018190525f906131909083018561312b565b8281036060840152612e49818561312b565b63ffffffff81168114610c4f575f5ffd5b8035611ff7816131a2565b5f82601f8301126131cd575f5ffd5b81356131db612d1b82612f9f565b8082825260208201915060208360051b8601019250858311156131fc575f5ffd5b602085015b8381101561301c578035835260209283019201613201565b5f610100823603121561322a575f5ffd5b613232612c5d565b61323b83612bca565b81526132496020840161296b565b602082015261325a6040840161296b565b604082015261326b60608401612bca565b606082015261327c6080840161296b565b608082015261328d60a084016131b3565b60a082015260c08301356001600160401b038111156132aa575f5ffd5b6132b6368286016131be565b60c08301525060e08301356001600160401b038111156132d4575f5ffd5b6132e0368286016131be565b60e08301525092915050565b5f602082840312156132fc575f5ffd5b8135610c6181612bb6565b5f5f8335601e1984360301811261331c575f5ffd5b8301803591506001600160401b03821115613335575f5ffd5b6020019150600581901b36038213156129b3575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613370575f5ffd5b8135610c61816131a2565b634e487b7160e01b5f52601160045260245ffd5b818103818111156106de576106de61337b565b8051611ff7816131a2565b5f5f604083850312156133be575f5ffd5b825160208401519092506001600160401b038111156133db575f5ffd5b830161016081860312156133ed575f5ffd5b6133f5612c80565b6133fe82612f3d565b815261340c60208301612f3d565b602082015261341d604083016133a2565b604082015261342e60608301612f48565b606082015261343f60808301612f3d565b608082015261345060a08301612f48565b60a082015261346160c08301612f3d565b60c082015261347260e08301612f48565b60e08201526134846101008301612f48565b61010082015261012082810151908201526101408201516001600160401b038111156134ae575f5ffd5b6134ba87828501612f53565b6101408301525080925050509250929050565b8183525f6001600160fb1b038311156134e4575f5ffd5b8260051b80836020870137939093016020019392505050565b6001600160401b03881681526001600160a01b0387811660208301528616604082015260a0606082018190525f9061353890830186886134cd565b828103608084015261354b8185876134cd565b9a9950505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f5f5f5f60808587031215613604575f5ffd5b84356001600160401b03811115613619575f5ffd5b85016080818803121561362a575f5ffd5b613632612c35565b813561363d81612bb6565b8152602082013561364d81612957565b602082015260408201356001600160401b0381111561366a575f5ffd5b61367689828501612cf9565b60408301525060608201356001600160401b03811115613694575f5ffd5b6136a089828501612cf9565b60608301525094506136b690506020860161296b565b92506136c46040860161296b565b915060608501356001600160401b038111156136de575f5ffd5b61311f878288016131be565b6001600160401b03861681526001600160a01b0385811660208301528416604082015260a0606082018190525f906137249083018561312b565b8281036080840152613736818561312b565b98975050505050505050565b600181811c9082168061375657607f821691505b602082108103610b6457634e487b7160e01b5f52602260045260245ffd5b5f6060828403128015613785575f5ffd5b50604051606081016001600160401b03811182821017156137a8576137a8612c21565b6040528251815260208301516137bd81612957565b602082015260408301516137d081612bb6565b60408201529392505050565b5f602082840312156137ec575f5ffd5b8151610c6181612bd5565b608081526001600160401b03865116608082015260018060a01b0360208701511660a08201525f6040870151608060c0840152613838610100840182612a80565b90506060880151607f198483030160e08501526138558282612a80565b6001600160a01b0389811660208701528816604086015291506138759050565b82810360608401526137368185876134cd565b602081525f610c616020830184612a80565b5f602082840312156138aa575f5ffd5b5051919050565b5f82516138c2818460208701612a5e565b9190910192915050565b5f602082840312156138dc575f5ffd5b8151610c6181612957565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0387811682528681166020830152851660408201526001600160401b038416606082015260c0608082018190525f9061397490830185612a80565b82810360a08401526139868185612a80565b9998505050505050505050565b6001600160a01b03831681526040602082018190525f90610c5e90830184612a80565b601f82111561125557805f5260205f20601f840160051c810160208510156139db5750805b601f840160051c820191505b818110156139fa575f81556001016139e7565b5050505050565b81516001600160401b03811115613a1a57613a1a612c21565b613a2e81613a288454613742565b846139b6565b6020601f821160018114613a60575f8315613a495750848201515b5f19600385901b1c1916600184901b1784556139fa565b5f84815260208120601f198516915b82811015613a8f5787850151825560209485019460019092019101613a6f565b5084821015613aac57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b604081525f613acd6040830185612a80565b8281036020840152612f968185612a80565b5f60208284031215613aef575f5ffd5b81516001600160401b03811115613b04575f5ffd5b6120e984828501612f53565b5f60ff821660ff8103613b2557613b2561337b565b6001019291505056fe60806040526040516104ca3803806104ca833981016040819052610022916102d2565b61002d82825f610034565b50506103ed565b61003d8361005f565b5f825111806100495750805b1561005a57610058838361009e565b505b505050565b610068816100ca565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606100c383836040518060600160405280602781526020016104a36027913961017d565b9392505050565b6001600160a01b0381163b61013c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f856001600160a01b03168560405161019991906103a0565b5f60405180830381855af49150503d805f81146101d1576040519150601f19603f3d011682016040523d82523d5f602084013e6101d6565b606091505b5090925090506101e8868383876101f2565b9695505050505050565b606083156102605782515f03610259576001600160a01b0385163b6102595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610133565b508161026a565b61026a8383610272565b949350505050565b8151156102825781518083602001fd5b8060405162461bcd60e51b815260040161013391906103bb565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156102ca5781810151838201526020016102b2565b50505f910152565b5f5f604083850312156102e3575f5ffd5b82516001600160a01b03811681146102f9575f5ffd5b60208401519092506001600160401b03811115610314575f5ffd5b8301601f81018513610324575f5ffd5b80516001600160401b0381111561033d5761033d61029c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561036b5761036b61029c565b604052818152828201602001871015610382575f5ffd5b6103938260208301602086016102b0565b8093505050509250929050565b5f82516103b18184602087016102b0565b9190910192915050565b602081525f82518060208401526103d98160408501602087016102b0565b601f01601f19169190910160400192915050565b60aa806103f95f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122055e523a48576516437df6fcf2810806cc0aeefb1755d2891dc02a161b66f632464736f6c634300081b0033", + "code": "0x60806040526004361061017b575f3560e01c806367090ccf116100cd5780638da5cb5b11610087578063e07baba611610062578063e07baba614610449578063e30c397814610486578063f09a4016146104a3578063f2fde38b146104c2575f5ffd5b80638da5cb5b146103de5780639aa8605c146103fb578063a86f9d9e1461042a575f5ffd5b806367090ccf1461033b578063715018a61461037b57806379ba50971461038f5780637f07c947146103a35780638456cb59146103b65780638abf6077146103ca575f5ffd5b80633659cfe6116101385780633f4ba83a116101135780633f4ba83a146102e05780634f1ef286146102f457806352d1902d146103075780635c975abb1461031b575f5ffd5b80633659cfe61461026b5780633ab76e9f1461028a5780633eb6b8cf146102c1575f5ffd5b80630178733a1461017f57806301ffc9a71461019457806306fdde03146101c8578063150b7a02146101f35780631f59a830146102375780633075db5614610257575b5f5ffd5b61019261018d3660046128ea565b6104e1565b005b34801561019f575f5ffd5b506101b36101ae366004612930565b610694565b60405190151581526020015b60405180910390f35b3480156101d3575f5ffd5b506b195c98cdcc8c57dd985d5b1d60a21b5b6040519081526020016101bf565b3480156101fe575f5ffd5b5061021e61020d3660046129ba565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016101bf565b61024a610245366004612a27565b6106e4565b6040516101bf9190612aab565b348015610262575f5ffd5b506101b3610b6a565b348015610276575f5ffd5b50610192610285366004612b9b565b610b82565b348015610295575f5ffd5b506097546102a9906001600160a01b031681565b6040516001600160a01b0390911681526020016101bf565b3480156102cc575f5ffd5b506102a96102db366004612be2565b610c52565b3480156102eb575f5ffd5b50610192610c68565b610192610302366004612d4d565b610c7c565b348015610312575f5ffd5b506101e5610d31565b348015610326575f5ffd5b506101b360c954610100900460ff1660021490565b348015610346575f5ffd5b506102a9610355366004612d99565b61012e60209081525f92835260408084209091529082529020546001600160a01b031681565b348015610386575f5ffd5b50610192610de2565b34801561039a575f5ffd5b50610192610df3565b6101926103b1366004612dc7565b610e6a565b3480156103c1575f5ffd5b50610192610fd3565b3480156103d5575f5ffd5b506102a9610fe6565b3480156103e9575f5ffd5b506033546001600160a01b03166102a9565b348015610406575f5ffd5b5061041a610415366004612b9b565b610ff4565b6040516101bf9493929190612e05565b348015610435575f5ffd5b506102a9610444366004612e54565b61113f565b348015610454575f5ffd5b5060c95461046e906201000090046001600160401b031681565b6040516001600160401b0390911681526020016101bf565b348015610491575f5ffd5b506065546001600160a01b03166102a9565b3480156104ae575f5ffd5b506101926104bd366004612e77565b61114b565b3480156104cd575f5ffd5b506101926104dc366004612b9b565b61125a565b6104f560c954610100900460ff1660021490565b156105135760405163bae6e2a960e01b815260040160405180910390fd5b600261052160c95460ff1690565b60ff16036105425760405163dfc60d8560e01b815260040160405180910390fd5b61054c60026112cb565b6105546112e1565b505f610564610140840184612ea3565b610572916004908290612ee5565b81019061057f9190612f0c565b90505f5f828060200190518101906105979190613026565b9350505091505f6105bb838760a00160208101906105b59190612b9b565b846113d7565b90506105e56101208701356105d660c0890160a08a01612b9b565b6001600160a01b03169061154e565b6105f560c0870160a08801612b9b565b6001600160a01b0316857fe48bef18455e47bca14864ab6e82dffa29df148b051c09de95aec44ecf13598c8560200151848687516001600160401b0381111561064057610640612c21565b604051908082528060200260200182016040528015610669578160200160208202803683370190505b5060405161067a9493929190613165565b60405180910390a35050505061069060016112cb565b5050565b5f6001600160e01b0319821662bc399d60e11b14806106c357506001600160e01b03198216637f07c94760e01b145b806106de57506001600160e01b031982166301ffc9a760e01b145b92915050565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201839052610100820183905261012082019290925261014081019190915261075260c954610100900460ff1660021490565b156107705760405163bae6e2a960e01b815260040160405180910390fd5b61077982613219565b8060e00151518160c0015151146107a35760405163196e8a4160e31b815260040160405180910390fd5b60808101516001600160a01b03166107ce576040516303f8a7d360e01b815260040160405180910390fd5b60026107dc60c95460ff1690565b60ff16036107fd5760405163dfc60d8560e01b815260040160405180910390fd5b61080760026112cb565b61081760808401606085016132ec565b6001600160401b031634101561084057604051630178ce0b60e31b815260040160405180910390fd5b5f5b61084f60c0850185613307565b90508110156108a35761086560e0850185613307565b828181106108755761087561334c565b905060200201355f1461089b57604051634299323b60e11b815260040160405180910390fd5b600101610842565b506108ce6380ac58cd60e01b6108bf60a0860160808701612b9b565b6001600160a01b031690611559565b6108eb57604051633ee915f560e11b815260040160405180910390fd5b5f5f6108f6856115e6565b6040805161016081019091525f808252929450909250602081016109206080890160608a016132ec565b6001600160401b0316815260200161093e60c0890160a08a01613360565b63ffffffff1681525f6020808301829052604083019190915233606083015260809091019061096f908901896132ec565b6001600160401b031681526020015f6001600160a01b031688602001602081019061099a9190612b9b565b6001600160a01b0316036109ae57336109be565b6109be6040890160208a01612b9b565b6001600160a01b031681526020908101906109f6906109df908a018a6132ec565b6b195c98cdcc8c57dd985d5b1d60a21b5b5f610c52565b6001600160a01b03168152602001610a146080890160608a016132ec565b610a27906001600160401b03163461338f565b815260200184905290505f610a456562726964676560d01b8261113f565b6001600160a01b0316631bdb003734846040518363ffffffff1660e01b8152600401610a719190612aab565b5f6040518083038185885af1158015610a8c573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d908101601f19168201604052610ab491908101906133ad565b96509050610ac86060880160408901612b9b565b6001600160a01b03168660a001516001600160a01b0316827fabbf62a1459339f9ac59136d313a5ccd83d2706cc6d4c04d90642520169144dc8960c0015187602001518c6080016020810190610b1e9190612b9b565b610b2b60c08f018f613307565b8f8060e00190610b3b9190613307565b604051610b4e97969594939291906134fd565b60405180910390a450505050610b6460016112cb565b50919050565b5f6002610b7960c95460ff1690565b60ff1614905090565b6001600160a01b037f0000000000000000000000000167010000000000000000000000000000000003163003610bd35760405162461bcd60e51b8152600401610bca90613559565b60405180910390fd5b7f00000000000000000000000001670100000000000000000000000000000000036001600160a01b0316610c05611ac8565b6001600160a01b031614610c2b5760405162461bcd60e51b8152600401610bca906135a5565b610c3481611ae3565b604080515f80825260208201909252610c4f91839190611aeb565b50565b5f610c5e848484611c55565b90505b9392505050565b610c70611ca7565b610c7a335f611d37565b565b6001600160a01b037f0000000000000000000000000167010000000000000000000000000000000003163003610cc45760405162461bcd60e51b8152600401610bca90613559565b7f00000000000000000000000001670100000000000000000000000000000000036001600160a01b0316610cf6611ac8565b6001600160a01b031614610d1c5760405162461bcd60e51b8152600401610bca906135a5565b610d2582611ae3565b61069082826001611aeb565b5f306001600160a01b037f00000000000000000000000001670100000000000000000000000000000000031614610dd05760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610bca565b505f516020613ff95f395f51905f5290565b610dea611d3b565b610c7a5f611d95565b60655433906001600160a01b03168114610e615760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610bca565b610c4f81611d95565b610e7e60c954610100900460ff1660021490565b15610e9c5760405163bae6e2a960e01b815260040160405180910390fd5b6002610eaa60c95460ff1690565b60ff1603610ecb5760405163dfc60d8560e01b815260040160405180910390fd5b610ed560026112cb565b5f808080610ee5858701876135f1565b93509350935093505f610ef6611dae565b9050610f0183611ece565b5f610f0d8685856113d7565b9050610f226001600160a01b0385163461154e565b836001600160a01b0316856001600160a01b0316835f01517f895f73e418d1bbbad2a311d085fad00e5d98a960e9f2afa4b942071d39bec43a85604001518a6020015186898a516001600160401b03811115610f8057610f80612c21565b604051908082528060200260200182016040528015610fa9578160200160208202803683370190505b50604051610fbb9594939291906136ea565b60405180910390a450505050505061069060016112cb565b610fdb611f0a565b610c7a336001611d37565b5f610fef611ac8565b905090565b61012d6020525f9081526040902080546001820180546001600160401b03831693600160401b9093046001600160a01b031692919061103290613742565b80601f016020809104026020016040519081016040528092919081815260200182805461105e90613742565b80156110a95780601f10611080576101008083540402835291602001916110a9565b820191905f5260205f20905b81548152906001019060200180831161108c57829003601f168201915b5050505050908060020180546110be90613742565b80601f01602080910402602001604051908101604052809291908181526020018280546110ea90613742565b80156111355780601f1061110c57610100808354040283529160200191611135565b820191905f5260205f20905b81548152906001019060200180831161111857829003601f168201915b5050505050905084565b5f610c61468484611c55565b5f54610100900460ff161580801561116957505f54600160ff909116105b806111825750303b15801561118257505f5460ff166001145b6111e55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610bca565b5f805460ff191660011790558015611206575f805461ff0019166101001790555b6112108383611f7b565b8015611255575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b611262611d3b565b606580546001600160a01b0383166001600160a01b031990911681179091556112936033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b61131281600161113f565b6001600160a01b0316336001600160a01b03161461134357604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561137f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113a39190613774565b60208101519092506001600160a01b031633146113d357604051632583296b60e01b815260040160405180910390fd5b5090565b5f46845f01516001600160401b03160361149d575060208301515f5b825181101561149757816001600160a01b03166342842e0e308686858151811061141f5761141f61334c565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064015f604051808303815f87803b158015611476575f5ffd5b505af1158015611488573d5f5f3e3d5ffd5b505050508060010190506113f3565b50610c61565b6114a684611fb5565b90505f5b825181101561154657816001600160a01b03166340c10f19858584815181106114d5576114d561334c565b60200260200101516040518363ffffffff1660e01b815260040161150e9291906001600160a01b03929092168252602082015260400190565b5f604051808303815f87803b158015611525575f5ffd5b505af1158015611537573d5f5f3e3d5ffd5b505050508060010190506114aa565b509392505050565b61069082825a611ffc565b5f6001600160a01b0383163b61157057505f6106de565b6040516301ffc9a760e01b81526001600160e01b0319831660048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa9250505080156115da575060408051601f3d908101601f191682019092526115d7918101906137dc565b60015b156106de579392505050565b604080516080810182525f808252602082015260609181018290528082018290525f61012d8161161c60a0870160808801612b9b565b6001600160a01b03908116825260208201929092526040015f208054909250600160401b900416156118fd576040805160808101825282546001600160401b0381168252600160401b90046001600160a01b0316602082015260018301805491928492908401919061168d90613742565b80601f01602080910402602001604051908101604052809291908181526020018280546116b990613742565b80156117045780601f106116db57610100808354040283529160200191611704565b820191905f5260205f20905b8154815290600101906020018083116116e757829003601f168201915b5050505050815260200160028201805461171d90613742565b80601f016020809104026020016040519081016040528092919081815260200182805461174990613742565b80156117945780601f1061176b57610100808354040283529160200191611794565b820191905f5260205f20905b81548152906001019060200180831161177757829003601f168201915b50505050508152505091505f5b6117ae60c0860186613307565b90508110156118f7576117c760a0860160808701612b9b565b6001600160a01b03166342842e0e33306117e460c08a018a613307565b868181106117f4576117f461334c565b6040516001600160e01b031960e088901b1681526001600160a01b039586166004820152949093166024850152506020909102013560448201526064015f604051808303815f87803b158015611848575f5ffd5b505af115801561185a573d5f5f3e3d5ffd5b5061186f9250505060a0860160808701612b9b565b6001600160a01b03166342966c6861188a60c0880188613307565b8481811061189a5761189a61334c565b905060200201356040518263ffffffff1660e01b81526004016118bf91815260200190565b5f604051808303815f87803b1580156118d6575f5ffd5b505af11580156118e8573d5f5f3e3d5ffd5b505050508060010190506117a1565b50611a3d565b6040518060800160405280466001600160401b0316815260200185608001602081019061192a9190612b9b565b6001600160a01b0316815260200161195061194b60a0880160808901612b9b565b61203f565b815260200161196d61196860a0880160808901612b9b565b6120f1565b905291505f5b61198060c0860186613307565b9050811015611a3b5761199960a0860160808701612b9b565b6001600160a01b03166342842e0e33306119b660c08a018a613307565b868181106119c6576119c661334c565b6040516001600160e01b031960e088901b1681526001600160a01b039586166004820152949093166024850152506020909102013560448201526064015f604051808303815f87803b158015611a1a575f5ffd5b505af1158015611a2c573d5f5f3e3d5ffd5b50505050806001019050611973565b505b5030637f07c9478233611a566060880160408901612b9b565b611a6360c0890189613307565b604051602001611a779594939291906137f7565b60408051601f1981840301815290829052611a9491602401613888565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050509150915091565b5f516020613ff95f395f51905f52546001600160a01b031690565b610c4f611d3b565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611b1e5761125583612137565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611b78575060408051601f3d908101601f19168201909252611b759181019061389a565b60015b611bdb5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610bca565b5f516020613ff95f395f51905f528114611c495760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610bca565b506112558383836121d2565b5f611c6084846121fc565b905081158015611c7757506001600160a01b038116155b15610c6157604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610bca565b611cbb60c954610100900460ff1660021490565b611cd85760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6106905b6033546001600160a01b03163314610c7a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bca565b606580546001600160a01b0319169055610c4f8161229e565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611ddf81600161113f565b6001600160a01b0316336001600160a01b031614611e1057604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611e4c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e709190613774565b91505f611e9183604001516109f06b195c98cdcc8c57dd985d5b1d60a21b90565b9050806001600160a01b031683602001516001600160a01b031614611ec957604051632583296b60e01b815260040160405180910390fd5b505090565b6001600160a01b0381161580611eec57506001600160a01b03811630145b15610c4f57604051635b50f3f960e01b815260040160405180910390fd5b611f1e60c954610100900460ff1660021490565b15611f3c5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611d2d565b806001600160a01b038116611fa35760405163538ba4f960e01b815260040160405180910390fd5b611fac836122ef565b6112558261234d565b80516001600160401b03165f90815261012e60209081526040808320828501516001600160a01b0390811685529252909120541680611ff7576106de826123bd565b919050565b815f0361200857505050565b61202283838360405180602001604052805f815250612598565b61125557604051634c67134d60e11b815260040160405180910390fd5b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516060915f9182916001600160a01b0386169161208591906138b1565b5f60405180830381855afa9150503d805f81146120bd576040519150601f19603f3d011682016040523d82523d5f602084013e6120c2565b606091505b5091509150816120e05760405180602001604052805f8152506120e9565b6120e9816125d5565b949350505050565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516060915f9182916001600160a01b0386169161208591906138b1565b6001600160a01b0381163b6121a45760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610bca565b5f516020613ff95f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b6121db83612742565b5f825111806121e75750805b15611255576121f68383612781565b50505050565b6097545f906001600160a01b03168061222857604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa15801561227a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120e991906138cc565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166123155760405162461bcd60e51b8152600401610bca906138e7565b61231d6127a6565b61233b6001600160a01b038216156123355781611d95565b33611d95565b5060c9805461ff001916610100179055565b5f54610100900460ff166123735760405162461bcd60e51b8152600401610bca906138e7565b6001600160401b0346111561239b5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f6123d16033546001600160a01b031690565b609754602085015185516040808801516060890151915161240296956001600160a01b031694939290602401613932565b60408051601f198184030181529190526020810180516001600160e01b03166377c6257360e11b17905290506124496d627269646765645f65726337323160901b5f61113f565b81604051612456906128dd565b612461929190613993565b604051809103905ff08015801561247a573d5f5f3e3d5ffd5b506001600160a01b038082165f90815261012d60209081526040918290208751815492890151909416600160401b026001600160e01b03199092166001600160401b0390941693909317178255850151919350849160018201906124de9082613a01565b50606082015160028201906124f39082613a01565b505083516001600160401b039081165f90815261012e6020908152604080832082890180516001600160a01b039081168652919093529281902080546001600160a01b03191688851690811790915591518851828a015160608b01519351949750919094169493909316927f44977f2d30fe1e3aee2c1476f2f95aaacaf34e44b9359c403da01fcc93fd751b9261258a9290613abb565b60405180910390a450919050565b5f6001600160a01b0385166125c057604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b606060408251106125f457818060200190518101906106de9190613adf565b815160200361272f575f5b60208160ff161080156126345750828160ff16815181106126225761262261334c565b01602001516001600160f81b03191615155b1561264b578061264381613b10565b9150506125ff565b5f8160ff166001600160401b0381111561266757612667612c21565b6040519080825280601f01601f191660200182016040528015612691576020820181803683370190505b5090505f91505b60208260ff161080156126cd5750838260ff16815181106126bb576126bb61334c565b01602001516001600160f81b03191615155b15610c6157838260ff16815181106126e7576126e761334c565b602001015160f81c60f81b818360ff16815181106127075761270761334c565b60200101906001600160f81b03191690815f1a9053508161272781613b10565b925050612698565b505060408051602081019091525f815290565b61274b81612137565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610c618383604051806060016040528060278152602001614019602791396127cc565b5f54610100900460ff16610c7a5760405162461bcd60e51b8152600401610bca906138e7565b60605f5f856001600160a01b0316856040516127e891906138b1565b5f60405180830381855af49150503d805f8114612820576040519150601f19603f3d011682016040523d82523d5f602084013e612825565b606091505b509150915061283686838387612840565b9695505050505050565b606083156128ae5782515f036128a7576001600160a01b0385163b6128a75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bca565b50816120e9565b6120e983838151156128c35781518083602001fd5b8060405162461bcd60e51b8152600401610bca9190613888565b6104ca80613b2f83390190565b5f5f604083850312156128fb575f5ffd5b82356001600160401b03811115612910575f5ffd5b83016101608186031215612922575f5ffd5b946020939093013593505050565b5f60208284031215612940575f5ffd5b81356001600160e01b031981168114610c61575f5ffd5b6001600160a01b0381168114610c4f575f5ffd5b8035611ff781612957565b5f5f83601f840112612986575f5ffd5b5081356001600160401b0381111561299c575f5ffd5b6020830191508360208285010111156129b3575f5ffd5b9250929050565b5f5f5f5f5f608086880312156129ce575f5ffd5b85356129d981612957565b945060208601356129e981612957565b93506040860135925060608601356001600160401b03811115612a0a575f5ffd5b612a1688828901612976565b969995985093965092949392505050565b5f60208284031215612a37575f5ffd5b81356001600160401b03811115612a4c575f5ffd5b82016101008185031215610c61575f5ffd5b5f5b83811015612a78578181015183820152602001612a60565b50505f910152565b5f8151808452612a97816020860160208601612a5e565b601f01601f19169290920160200192915050565b60208152612ac56020820183516001600160401b03169052565b5f6020830151612ae060408401826001600160401b03169052565b50604083015163ffffffff811660608401525060608301516001600160a01b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160401b03811660e08401525060e08301516001600160a01b038116610100840152506101008301516001600160a01b03811661012084015250610120830151610140830152610140830151610160808401526120e9610180840182612a80565b5f60208284031215612bab575f5ffd5b8135610c6181612957565b6001600160401b0381168114610c4f575f5ffd5b8035611ff781612bb6565b8015158114610c4f575f5ffd5b5f5f5f60608486031215612bf4575f5ffd5b8335612bff81612bb6565b9250602084013591506040840135612c1681612bd5565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b0381118282101715612c5757612c57612c21565b60405290565b60405161010081016001600160401b0381118282101715612c5757612c57612c21565b60405161016081016001600160401b0381118282101715612c5757612c57612c21565b604051601f8201601f191681016001600160401b0381118282101715612ccb57612ccb612c21565b604052919050565b5f6001600160401b03821115612ceb57612ceb612c21565b50601f01601f191660200190565b5f82601f830112612d08575f5ffd5b8135602083015f612d20612d1b84612cd3565b612ca3565b9050828152858383011115612d33575f5ffd5b828260208301375f92810160200192909252509392505050565b5f5f60408385031215612d5e575f5ffd5b8235612d6981612957565b915060208301356001600160401b03811115612d83575f5ffd5b612d8f85828601612cf9565b9150509250929050565b5f5f60408385031215612daa575f5ffd5b823591506020830135612dbc81612957565b809150509250929050565b5f5f60208385031215612dd8575f5ffd5b82356001600160401b03811115612ded575f5ffd5b612df985828601612976565b90969095509350505050565b6001600160401b03851681526001600160a01b03841660208201526080604082018190525f90612e3790830185612a80565b8281036060840152612e498185612a80565b979650505050505050565b5f5f60408385031215612e65575f5ffd5b823591506020830135612dbc81612bd5565b5f5f60408385031215612e88575f5ffd5b8235612e9381612957565b91506020830135612dbc81612957565b5f5f8335601e19843603018112612eb8575f5ffd5b8301803591506001600160401b03821115612ed1575f5ffd5b6020019150368190038213156129b3575f5ffd5b5f5f85851115612ef3575f5ffd5b83861115612eff575f5ffd5b5050820193919092039150565b5f60208284031215612f1c575f5ffd5b81356001600160401b03811115612f31575f5ffd5b6120e984828501612cf9565b8051611ff781612bb6565b8051611ff781612957565b5f82601f830112612f62575f5ffd5b8151602083015f612f75612d1b84612cd3565b9050828152858383011115612f88575f5ffd5b612f96836020830184612a5e565b95945050505050565b5f6001600160401b03821115612fb757612fb7612c21565b5060051b60200190565b5f82601f830112612fd0575f5ffd5b8151612fde612d1b82612f9f565b8082825260208201915060208360051b860101925085831115612fff575f5ffd5b602085015b8381101561301c578051835260209283019201613004565b5095945050505050565b5f5f5f5f60808587031215613039575f5ffd5b84516001600160401b0381111561304e575f5ffd5b85016080818803121561305f575f5ffd5b613067612c35565b815161307281612bb6565b8152602082015161308281612957565b602082015260408201516001600160401b0381111561309f575f5ffd5b6130ab89828501612f53565b60408301525060608201516001600160401b038111156130c9575f5ffd5b6130d589828501612f53565b60608301525094506130eb905060208601612f48565b92506130f960408601612f48565b915060608501516001600160401b03811115613113575f5ffd5b61311f87828801612fc1565b91505092959194509250565b5f8151808452602084019350602083015f5b8281101561315b57815186526020958601959091019060010161313d565b5093949350505050565b6001600160a01b038581168252841660208201526080604082018190525f906131909083018561312b565b8281036060840152612e49818561312b565b63ffffffff81168114610c4f575f5ffd5b8035611ff7816131a2565b5f82601f8301126131cd575f5ffd5b81356131db612d1b82612f9f565b8082825260208201915060208360051b8601019250858311156131fc575f5ffd5b602085015b8381101561301c578035835260209283019201613201565b5f610100823603121561322a575f5ffd5b613232612c5d565b61323b83612bca565b81526132496020840161296b565b602082015261325a6040840161296b565b604082015261326b60608401612bca565b606082015261327c6080840161296b565b608082015261328d60a084016131b3565b60a082015260c08301356001600160401b038111156132aa575f5ffd5b6132b6368286016131be565b60c08301525060e08301356001600160401b038111156132d4575f5ffd5b6132e0368286016131be565b60e08301525092915050565b5f602082840312156132fc575f5ffd5b8135610c6181612bb6565b5f5f8335601e1984360301811261331c575f5ffd5b8301803591506001600160401b03821115613335575f5ffd5b6020019150600581901b36038213156129b3575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613370575f5ffd5b8135610c61816131a2565b634e487b7160e01b5f52601160045260245ffd5b818103818111156106de576106de61337b565b8051611ff7816131a2565b5f5f604083850312156133be575f5ffd5b825160208401519092506001600160401b038111156133db575f5ffd5b830161016081860312156133ed575f5ffd5b6133f5612c80565b6133fe82612f3d565b815261340c60208301612f3d565b602082015261341d604083016133a2565b604082015261342e60608301612f48565b606082015261343f60808301612f3d565b608082015261345060a08301612f48565b60a082015261346160c08301612f3d565b60c082015261347260e08301612f48565b60e08201526134846101008301612f48565b61010082015261012082810151908201526101408201516001600160401b038111156134ae575f5ffd5b6134ba87828501612f53565b6101408301525080925050509250929050565b8183525f6001600160fb1b038311156134e4575f5ffd5b8260051b80836020870137939093016020019392505050565b6001600160401b03881681526001600160a01b0387811660208301528616604082015260a0606082018190525f9061353890830186886134cd565b828103608084015261354b8185876134cd565b9a9950505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f5f5f5f60808587031215613604575f5ffd5b84356001600160401b03811115613619575f5ffd5b85016080818803121561362a575f5ffd5b613632612c35565b813561363d81612bb6565b8152602082013561364d81612957565b602082015260408201356001600160401b0381111561366a575f5ffd5b61367689828501612cf9565b60408301525060608201356001600160401b03811115613694575f5ffd5b6136a089828501612cf9565b60608301525094506136b690506020860161296b565b92506136c46040860161296b565b915060608501356001600160401b038111156136de575f5ffd5b61311f878288016131be565b6001600160401b03861681526001600160a01b0385811660208301528416604082015260a0606082018190525f906137249083018561312b565b8281036080840152613736818561312b565b98975050505050505050565b600181811c9082168061375657607f821691505b602082108103610b6457634e487b7160e01b5f52602260045260245ffd5b5f6060828403128015613785575f5ffd5b50604051606081016001600160401b03811182821017156137a8576137a8612c21565b6040528251815260208301516137bd81612957565b602082015260408301516137d081612bb6565b60408201529392505050565b5f602082840312156137ec575f5ffd5b8151610c6181612bd5565b608081526001600160401b03865116608082015260018060a01b0360208701511660a08201525f6040870151608060c0840152613838610100840182612a80565b90506060880151607f198483030160e08501526138558282612a80565b6001600160a01b0389811660208701528816604086015291506138759050565b82810360608401526137368185876134cd565b602081525f610c616020830184612a80565b5f602082840312156138aa575f5ffd5b5051919050565b5f82516138c2818460208701612a5e565b9190910192915050565b5f602082840312156138dc575f5ffd5b8151610c6181612957565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0387811682528681166020830152851660408201526001600160401b038416606082015260c0608082018190525f9061397490830185612a80565b82810360a08401526139868185612a80565b9998505050505050505050565b6001600160a01b03831681526040602082018190525f90610c5e90830184612a80565b601f82111561125557805f5260205f20601f840160051c810160208510156139db5750805b601f840160051c820191505b818110156139fa575f81556001016139e7565b5050505050565b81516001600160401b03811115613a1a57613a1a612c21565b613a2e81613a288454613742565b846139b6565b6020601f821160018114613a60575f8315613a495750848201515b5f19600385901b1c1916600184901b1784556139fa565b5f84815260208120601f198516915b82811015613a8f5787850151825560209485019460019092019101613a6f565b5084821015613aac57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b604081525f613acd6040830185612a80565b8281036020840152612f968185612a80565b5f60208284031215613aef575f5ffd5b81516001600160401b03811115613b04575f5ffd5b6120e984828501612f53565b5f60ff821660ff8103613b2557613b2561337b565b6001019291505056fe60806040526040516104ca3803806104ca833981016040819052610022916102d2565b61002d82825f610034565b50506103ed565b61003d8361005f565b5f825111806100495750805b1561005a57610058838361009e565b505b505050565b610068816100ca565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606100c383836040518060600160405280602781526020016104a36027913961017d565b9392505050565b6001600160a01b0381163b61013c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f856001600160a01b03168560405161019991906103a0565b5f60405180830381855af49150503d805f81146101d1576040519150601f19603f3d011682016040523d82523d5f602084013e6101d6565b606091505b5090925090506101e8868383876101f2565b9695505050505050565b606083156102605782515f03610259576001600160a01b0385163b6102595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610133565b508161026a565b61026a8383610272565b949350505050565b8151156102825781518083602001fd5b8060405162461bcd60e51b815260040161013391906103bb565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156102ca5781810151838201526020016102b2565b50505f910152565b5f5f604083850312156102e3575f5ffd5b82516001600160a01b03811681146102f9575f5ffd5b60208401519092506001600160401b03811115610314575f5ffd5b8301601f81018513610324575f5ffd5b80516001600160401b0381111561033d5761033d61029c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561036b5761036b61029c565b604052818152828201602001871015610382575f5ffd5b6103938260208301602086016102b0565b8093505050509250929050565b5f82516103b18184602087016102b0565b9190910192915050565b602081525f82518060208401526103d98160408501602087016102b0565b601f01601f19169190910160400192915050565b60aa806103f95f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122055e523a48576516437df6fcf2810806cc0aeefb1755d2891dc02a161b66f632464736f6c634300081b0033", "balance": "0x0" }, - "0x1670000000000000000000000000000000000003": { + "0x1670100000000000000000000000000000000003": { "contractName": "ERC721Vault", "storage": { "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", - "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670000000000000000000000000000000000006", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000000003" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670100000000000000000000000000000000006", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167010000000000000000000000000000000003" }, "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", "balance": "0x0" }, - "0x0167000000000000000000000000000000000004": { + "0x0167010000000000000000000000000000000004": { "contractName": "ERC1155VaultImpl", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f" }, - "code": "0x608060405260043610610195575f3560e01c8063715018a6116100e7578063a86f9d9e11610087578063e30c397811610062578063e30c3978146104a4578063f09a4016146104c1578063f23a6e61146104e0578063f2fde38b1461050c575f5ffd5b8063a86f9d9e14610401578063bc197c8114610420578063e07baba614610467575f5ffd5b80638456cb59116100c25780638456cb591461038d5780638abf6077146103a15780638da5cb5b146103b55780639aa8605c146103d2575f5ffd5b8063715018a61461035257806379ba5097146103665780637f07c9471461037a575f5ffd5b80633ab76e9f116101525780634f1ef2861161012d5780634f1ef286146102cb57806352d1902d146102de5780635c975abb146102f257806367090ccf14610312575f5ffd5b80633ab76e9f146102615780633eb6b8cf146102985780633f4ba83a146102b7575f5ffd5b80630178733a1461019957806301ffc9a7146101ae57806306fdde03146101e25780631f59a8301461020e5780633075db561461022e5780633659cfe614610242575b5f5ffd5b6101ac6101a7366004612861565b61052b565b005b3480156101b9575f5ffd5b506101cd6101c83660046128a7565b6106a1565b60405190151581526020015b60405180910390f35b3480156101ed575f5ffd5b506c195c98cc4c4d4d57dd985d5b1d609a1b5b6040519081526020016101d9565b61022161021c3660046128ce565b6106c0565b6040516101d99190612952565b348015610239575f5ffd5b506101cd610b47565b34801561024d575f5ffd5b506101ac61025c366004612a61565b610b5f565b34801561026c575f5ffd5b50609754610280906001600160a01b031681565b6040516001600160a01b0390911681526020016101d9565b3480156102a3575f5ffd5b506102806102b2366004612aa8565b610c2f565b3480156102c2575f5ffd5b506101ac610c45565b6101ac6102d9366004612c13565b610c59565b3480156102e9575f5ffd5b50610200610d0e565b3480156102fd575f5ffd5b506101cd60c954610100900460ff1660021490565b34801561031d575f5ffd5b5061028061032c366004612c5f565b61012e60209081525f92835260408084209091529082529020546001600160a01b031681565b34801561035d575f5ffd5b506101ac610dbf565b348015610371575f5ffd5b506101ac610dd0565b6101ac610388366004612cd1565b610e47565b348015610398575f5ffd5b506101ac610f73565b3480156103ac575f5ffd5b50610280610f86565b3480156103c0575f5ffd5b506033546001600160a01b0316610280565b3480156103dd575f5ffd5b506103f16103ec366004612a61565b610f94565b6040516101d99493929190612d0f565b34801561040c575f5ffd5b5061028061041b366004612d5e565b6110df565b34801561042b575f5ffd5b5061044e61043a366004612dc1565b63bc197c8160e01b98975050505050505050565b6040516001600160e01b031990911681526020016101d9565b348015610472575f5ffd5b5060c95461048c906201000090046001600160401b031681565b6040516001600160401b0390911681526020016101d9565b3480156104af575f5ffd5b506065546001600160a01b0316610280565b3480156104cc575f5ffd5b506101ac6104db366004612e81565b6110eb565b3480156104eb575f5ffd5b5061044e6104fa366004612ead565b63f23a6e6160e01b9695505050505050565b348015610517575f5ffd5b506101ac610526366004612a61565b611202565b61053f60c954610100900460ff1660021490565b1561055d5760405163bae6e2a960e01b815260040160405180910390fd5b600261056b60c95460ff1690565b60ff160361058c5760405163dfc60d8560e01b815260040160405180910390fd5b6105966002611273565b61059e611289565b505f6105ae610140840184612f23565b6105bc916004908290612f65565b8101906105c99190612f8c565b90505f5f5f838060200190518101906105e291906130a6565b94509450505092505f610609848860a00160208101906106029190612a61565b858561137f565b905061063361012088013561062460c08a0160a08b01612a61565b6001600160a01b03169061146f565b61064360c0880160a08901612a61565b6001600160a01b0316867fe48bef18455e47bca14864ab6e82dffa29df148b051c09de95aec44ecf13598c8660200151848787604051610686949392919061320e565b60405180910390a3505050505061069d6001611273565b5050565b5f6106ab8261147a565b806106ba57506106ba826114c9565b92915050565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201839052610100820183905261012082019290925261014081019190915261072e60c954610100900460ff1660021490565b1561074c5760405163bae6e2a960e01b815260040160405180910390fd5b610755826132c2565b8060e00151518160c00151511461077f5760405163196e8a4160e31b815260040160405180910390fd5b60808101516001600160a01b03166107aa576040516303f8a7d360e01b815260040160405180910390fd5b60026107b860c95460ff1690565b60ff16036107d95760405163dfc60d8560e01b815260040160405180910390fd5b6107e36002611273565b6107f36080840160608501613395565b6001600160401b031634101561081c57604051630178ce0b60e31b815260040160405180910390fd5b5f5b61082b60e08501856133b0565b905081101561087f5761084160e08501856133b0565b82818110610851576108516133f5565b905060200201355f0361087757604051634299323b60e11b815260040160405180910390fd5b60010161081e565b506108aa636cdb3d1360e11b61089b60a0860160808701612a61565b6001600160a01b0316906114fd565b6108c757604051633ee915f560e11b815260040160405180910390fd5b5f5f6108d28561158a565b6040805161016081019091525f808252929450909250602081016108fc6080890160608a01613395565b6001600160401b0316815260200161091a60c0890160a08a01613409565b63ffffffff1681525f6020808301829052604083019190915233606083015260809091019061094b90890189613395565b6001600160401b031681526020015f6001600160a01b03168860200160208101906109769190612a61565b6001600160a01b03160361098a573361099a565b61099a6040890160208a01612a61565b6001600160a01b031681526020908101906109d3906109bb908a018a613395565b6c195c98cc4c4d4d57dd985d5b1d609a1b5b5f610c2f565b6001600160a01b031681526020016109f16080890160608a01613395565b610a04906001600160401b031634613438565b815260200184905290505f610a226562726964676560d01b826110df565b6001600160a01b0316631bdb003734846040518363ffffffff1660e01b8152600401610a4e9190612952565b5f6040518083038185885af1158015610a69573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d908101601f19168201604052610a919190810190613456565b96509050610aa56060880160408901612a61565b6001600160a01b03168660a001516001600160a01b0316827fabbf62a1459339f9ac59136d313a5ccd83d2706cc6d4c04d90642520169144dc8960c0015187602001518c6080016020810190610afb9190612a61565b610b0860c08f018f6133b0565b8f8060e00190610b1891906133b0565b604051610b2b97969594939291906135a6565b60405180910390a450505050610b416001611273565b50919050565b5f6002610b5660c95460ff1690565b60ff1614905090565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000000004163003610bb05760405162461bcd60e51b8152600401610ba790613602565b60405180910390fd5b7f00000000000000000000000001670000000000000000000000000000000000046001600160a01b0316610be2611a4a565b6001600160a01b031614610c085760405162461bcd60e51b8152600401610ba79061364e565b610c1181611a65565b604080515f80825260208201909252610c2c91839190611a6d565b50565b5f610c3b848484611bd7565b90505b9392505050565b610c4d611c29565b610c57335f611cb9565b565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000000004163003610ca15760405162461bcd60e51b8152600401610ba790613602565b7f00000000000000000000000001670000000000000000000000000000000000046001600160a01b0316610cd3611a4a565b6001600160a01b031614610cf95760405162461bcd60e51b8152600401610ba79061364e565b610d0282611a65565b61069d82826001611a6d565b5f306001600160a01b037f00000000000000000000000001670000000000000000000000000000000000041614610dad5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610ba7565b505f5160206141d45f395f51905f5290565b610dc7611cbd565b610c575f611d17565b60655433906001600160a01b03168114610e3e5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610ba7565b610c2c81611d17565b610e5b60c954610100900460ff1660021490565b15610e795760405163bae6e2a960e01b815260040160405180910390fd5b6002610e8760c95460ff1690565b60ff1603610ea85760405163dfc60d8560e01b815260040160405180910390fd5b610eb26002611273565b5f80808080610ec38688018861369a565b945094509450945094505f610ed6611d30565b9050610ee184611e51565b5f610eee8786868661137f565b9050610f036001600160a01b0386163461146f565b846001600160a01b0316866001600160a01b0316835f01517f895f73e418d1bbbad2a311d085fad00e5d98a960e9f2afa4b942071d39bec43a85604001518b60200151868a8a604051610f5a9594939291906137bb565b60405180910390a45050505050505061069d6001611273565b610f7b611e8d565b610c57336001611cb9565b5f610f8f611a4a565b905090565b61012d6020525f9081526040902080546001820180546001600160401b03831693600160401b9093046001600160a01b0316929190610fd290613813565b80601f0160208091040260200160405190810160405280929190818152602001828054610ffe90613813565b80156110495780601f1061102057610100808354040283529160200191611049565b820191905f5260205f20905b81548152906001019060200180831161102c57829003601f168201915b50505050509080600201805461105e90613813565b80601f016020809104026020016040519081016040528092919081815260200182805461108a90613813565b80156110d55780601f106110ac576101008083540402835291602001916110d5565b820191905f5260205f20905b8154815290600101906020018083116110b857829003601f168201915b5050505050905084565b5f610c3e468484611bd7565b5f54610100900460ff161580801561110957505f54600160ff909116105b806111225750303b15801561112257505f5460ff166001145b6111855760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ba7565b5f805460ff1916600117905580156111a6575f805461ff0019166101001790555b6111b08383611efe565b6111b8611f38565b80156111fd575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b61120a611cbd565b606580546001600160a01b0383166001600160a01b0319909116811790915561123b6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b6112ba8160016110df565b6001600160a01b0316336001600160a01b0316146112eb57604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611327573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061134b9190613845565b60208101519092506001600160a01b0316331461137b57604051632583296b60e01b815260040160405180910390fd5b5090565b5f46855f01516001600160401b0316036113fd57506020840151604051631759616b60e11b81526001600160a01b03821690632eb2c2d6906113cb9030908890889088906004016138ad565b5f604051808303815f87803b1580156113e2575f5ffd5b505af11580156113f4573d5f5f3e3d5ffd5b50505050611467565b61140685611f5e565b60405163d81d0a1560e01b81529091506001600160a01b0382169063d81d0a159061143990879087908790600401613906565b5f604051808303815f87803b158015611450575f5ffd5b505af1158015611462573d5f5f3e3d5ffd5b505050505b949350505050565b61069d82825a611fa5565b5f6001600160e01b0319821662bc399d60e11b14806114a957506001600160e01b03198216637f07c94760e01b145b806106ba57506001600160e01b031982166301ffc9a760e01b1492915050565b5f6001600160e01b03198216630271189760e51b14806106ba57506301ffc9a760e01b6001600160e01b03198316146106ba565b5f6001600160a01b0383163b61151457505f6106ba565b6040516301ffc9a760e01b81526001600160e01b0319831660048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa92505050801561157e575060408051601f3d908101601f1916820190925261157b9181019061393b565b60015b156106ba579392505050565b604080516080810182525f808252602082015260609181018290528082018290525f61012d816115c060a0870160808801612a61565b6001600160a01b03908116825260208201929092526040015f208054909250600160401b900416156118b3576040805160808101825282546001600160401b0381168252600160401b90046001600160a01b0316602082015260018301805491928492908401919061163190613813565b80601f016020809104026020016040519081016040528092919081815260200182805461165d90613813565b80156116a85780601f1061167f576101008083540402835291602001916116a8565b820191905f5260205f20905b81548152906001019060200180831161168b57829003601f168201915b505050505081526020016002820180546116c190613813565b80601f01602080910402602001604051908101604052809291908181526020018280546116ed90613813565b80156117385780601f1061170f57610100808354040283529160200191611738565b820191905f5260205f20905b81548152906001019060200180831161171b57829003601f168201915b50505050508152505091508360800160208101906117569190612a61565b6001600160a01b0316632eb2c2d6333061177360c08901896133b0565b61178060e08b018b6133b0565b6040518763ffffffff1660e01b81526004016117a196959493929190613956565b5f604051808303815f87803b1580156117b8575f5ffd5b505af11580156117ca573d5f5f3e3d5ffd5b505050505f5b6117dd60c08601866133b0565b90508110156118ad576117f660a0860160808701612a61565b6001600160a01b031663b390c0ab61181160c08801886133b0565b84818110611821576118216133f5565b90506020020135878060e0019061183891906133b0565b85818110611848576118486133f5565b905060200201356040518363ffffffff1660e01b8152600401611875929190918252602082015260400190565b5f604051808303815f87803b15801561188c575f5ffd5b505af115801561189e573d5f5f3e3d5ffd5b505050508060010190506117d0565b506119b0565b6040518060800160405280466001600160401b031681526020018560800160208101906118e09190612a61565b6001600160a01b0316815260200161190661190160a0880160808901612a61565b611fe8565b815260200161192361191e60a0880160808901612a61565b612092565b9052915061193760a0850160808601612a61565b6001600160a01b0316632eb2c2d6333061195460c08901896133b0565b61196160e08b018b6133b0565b6040518763ffffffff1660e01b815260040161198296959493929190613956565b5f604051808303815f87803b158015611999575f5ffd5b505af11580156119ab573d5f5f3e3d5ffd5b505050505b5030637f07c94782336119c96060880160408901612a61565b6119d660c08901896133b0565b6119e360e08b018b6133b0565b6040516020016119f997969594939291906139b3565b60408051601f1981840301815290829052611a1691602401613a63565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050509150915091565b5f5160206141d45f395f51905f52546001600160a01b031690565b610c2c611cbd565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611aa0576111fd836120d8565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611afa575060408051601f3d908101601f19168201909252611af791810190613a75565b60015b611b5d5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610ba7565b5f5160206141d45f395f51905f528114611bcb5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610ba7565b506111fd838383612173565b5f611be2848461219d565b905081158015611bf957506001600160a01b038116155b15610c3e57604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610ba7565b611c3d60c954610100900460ff1660021490565b611c5a5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b61069d5b6033546001600160a01b03163314610c575760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ba7565b606580546001600160a01b0319169055610c2c8161223f565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611d618160016110df565b6001600160a01b0316336001600160a01b031614611d9257604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611dce573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611df29190613845565b91505f611e1483604001516109cd6c195c98cc4c4d4d57dd985d5b1d609a1b90565b9050806001600160a01b031683602001516001600160a01b031614611e4c57604051632583296b60e01b815260040160405180910390fd5b505090565b6001600160a01b0381161580611e6f57506001600160a01b03811630145b15610c2c57604051635b50f3f960e01b815260040160405180910390fd5b611ea160c954610100900460ff1660021490565b15611ebf5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611caf565b806001600160a01b038116611f265760405163538ba4f960e01b815260040160405180910390fd5b611f2f83612290565b6111fd826122ee565b5f54610100900460ff16610c575760405162461bcd60e51b8152600401610ba790613a8c565b80516001600160401b03165f90815261012e60209081526040808320828501516001600160a01b0390811685529252909120541680611fa0576106ba8261235e565b919050565b815f03611fb157505050565b611fcb83838360405180602001604052805f81525061253a565b6111fd57604051634c67134d60e11b815260040160405180910390fd5b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516060915f9182916001600160a01b0386169161202e9190613ad7565b5f60405180830381855afa9150503d805f8114612066576040519150601f19603f3d011682016040523d82523d5f602084013e61206b565b606091505b5091509150816120895760405180602001604052805f815250611467565b61146781612577565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516060915f9182916001600160a01b0386169161202e9190613ad7565b6001600160a01b0381163b6121455760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610ba7565b5f5160206141d45f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b61217c836126e4565b5f825111806121885750805b156111fd576121978383612723565b50505050565b6097545f906001600160a01b0316806121c957604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa15801561221b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114679190613af2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166122b65760405162461bcd60e51b8152600401610ba790613a8c565b6122be611f38565b6122dc6001600160a01b038216156122d65781611d17565b33611d17565b5060c9805461ff001916610100179055565b5f54610100900460ff166123145760405162461bcd60e51b8152600401610ba790613a8c565b6001600160401b0346111561233c5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f6123726033546001600160a01b031690565b60975460208501518551604080880151606089015191516123a396956001600160a01b031694939290602401613b0d565b60408051601f198184030181529190526020810180516001600160e01b03166377c6257360e11b17905290506123eb6e627269646765645f6572633131353560881b5f6110df565b816040516123f890612854565b612403929190613b6e565b604051809103905ff08015801561241c573d5f5f3e3d5ffd5b506001600160a01b038082165f90815261012d60209081526040918290208751815492890151909416600160401b026001600160e01b03199092166001600160401b0390941693909317178255850151919350849160018201906124809082613bdc565b50606082015160028201906124959082613bdc565b505083516001600160401b039081165f90815261012e6020908152604080832082890180516001600160a01b039081168652919093529281902080546001600160a01b03191688851690811790915591518851828a015160608b01519351949750919094169493909316927f44977f2d30fe1e3aee2c1476f2f95aaacaf34e44b9359c403da01fcc93fd751b9261252c9290613c96565b60405180910390a450919050565b5f6001600160a01b03851661256257604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b6060604082511061259657818060200190518101906106ba9190613cba565b81516020036126d1575f5b60208160ff161080156125d65750828160ff16815181106125c4576125c46133f5565b01602001516001600160f81b03191615155b156125ed57806125e581613ceb565b9150506125a1565b5f8160ff166001600160401b0381111561260957612609612ae7565b6040519080825280601f01601f191660200182016040528015612633576020820181803683370190505b5090505f91505b60208260ff1610801561266f5750838260ff168151811061265d5761265d6133f5565b01602001516001600160f81b03191615155b15610c3e57838260ff1681518110612689576126896133f5565b602001015160f81c60f81b818360ff16815181106126a9576126a96133f5565b60200101906001600160f81b03191690815f1a905350816126c981613ceb565b92505061263a565b505060408051602081019091525f815290565b6126ed816120d8565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610c3e83836040518060600160405280602781526020016141f46027913960605f5f856001600160a01b03168560405161275f9190613ad7565b5f60405180830381855af49150503d805f8114612797576040519150601f19603f3d011682016040523d82523d5f602084013e61279c565b606091505b50915091506127ad868383876127b7565b9695505050505050565b606083156128255782515f0361281e576001600160a01b0385163b61281e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ba7565b5081611467565b611467838381511561283a5781518083602001fd5b8060405162461bcd60e51b8152600401610ba79190613a63565b6104ca80613d0a83390190565b5f5f60408385031215612872575f5ffd5b82356001600160401b03811115612887575f5ffd5b83016101608186031215612899575f5ffd5b946020939093013593505050565b5f602082840312156128b7575f5ffd5b81356001600160e01b031981168114610c3e575f5ffd5b5f602082840312156128de575f5ffd5b81356001600160401b038111156128f3575f5ffd5b82016101008185031215610c3e575f5ffd5b5f5b8381101561291f578181015183820152602001612907565b50505f910152565b5f815180845261293e816020860160208601612905565b601f01601f19169290920160200192915050565b6020815261296c6020820183516001600160401b03169052565b5f602083015161298760408401826001600160401b03169052565b50604083015163ffffffff811660608401525060608301516001600160a01b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160401b03811660e08401525060e08301516001600160a01b038116610100840152506101008301516001600160a01b0381166101208401525061012083015161014083015261014083015161016080840152611467610180840182612927565b6001600160a01b0381168114610c2c575f5ffd5b8035611fa081612a42565b5f60208284031215612a71575f5ffd5b8135610c3e81612a42565b6001600160401b0381168114610c2c575f5ffd5b8035611fa081612a7c565b8015158114610c2c575f5ffd5b5f5f5f60608486031215612aba575f5ffd5b8335612ac581612a7c565b9250602084013591506040840135612adc81612a9b565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b0381118282101715612b1d57612b1d612ae7565b60405290565b60405161010081016001600160401b0381118282101715612b1d57612b1d612ae7565b60405161016081016001600160401b0381118282101715612b1d57612b1d612ae7565b604051601f8201601f191681016001600160401b0381118282101715612b9157612b91612ae7565b604052919050565b5f6001600160401b03821115612bb157612bb1612ae7565b50601f01601f191660200190565b5f82601f830112612bce575f5ffd5b8135602083015f612be6612be184612b99565b612b69565b9050828152858383011115612bf9575f5ffd5b828260208301375f92810160200192909252509392505050565b5f5f60408385031215612c24575f5ffd5b8235612c2f81612a42565b915060208301356001600160401b03811115612c49575f5ffd5b612c5585828601612bbf565b9150509250929050565b5f5f60408385031215612c70575f5ffd5b823591506020830135612c8281612a42565b809150509250929050565b5f5f83601f840112612c9d575f5ffd5b5081356001600160401b03811115612cb3575f5ffd5b602083019150836020828501011115612cca575f5ffd5b9250929050565b5f5f60208385031215612ce2575f5ffd5b82356001600160401b03811115612cf7575f5ffd5b612d0385828601612c8d565b90969095509350505050565b6001600160401b03851681526001600160a01b03841660208201526080604082018190525f90612d4190830185612927565b8281036060840152612d538185612927565b979650505050505050565b5f5f60408385031215612d6f575f5ffd5b823591506020830135612c8281612a9b565b5f5f83601f840112612d91575f5ffd5b5081356001600160401b03811115612da7575f5ffd5b6020830191508360208260051b8501011115612cca575f5ffd5b5f5f5f5f5f5f5f5f60a0898b031215612dd8575f5ffd5b8835612de381612a42565b97506020890135612df381612a42565b965060408901356001600160401b03811115612e0d575f5ffd5b612e198b828c01612d81565b90975095505060608901356001600160401b03811115612e37575f5ffd5b612e438b828c01612d81565b90955093505060808901356001600160401b03811115612e61575f5ffd5b612e6d8b828c01612c8d565b999c989b5096995094979396929594505050565b5f5f60408385031215612e92575f5ffd5b8235612e9d81612a42565b91506020830135612c8281612a42565b5f5f5f5f5f5f60a08789031215612ec2575f5ffd5b8635612ecd81612a42565b95506020870135612edd81612a42565b9450604087013593506060870135925060808701356001600160401b03811115612f05575f5ffd5b612f1189828a01612c8d565b979a9699509497509295939492505050565b5f5f8335601e19843603018112612f38575f5ffd5b8301803591506001600160401b03821115612f51575f5ffd5b602001915036819003821315612cca575f5ffd5b5f5f85851115612f73575f5ffd5b83861115612f7f575f5ffd5b5050820193919092039150565b5f60208284031215612f9c575f5ffd5b81356001600160401b03811115612fb1575f5ffd5b61146784828501612bbf565b8051611fa081612a7c565b8051611fa081612a42565b5f82601f830112612fe2575f5ffd5b8151602083015f612ff5612be184612b99565b9050828152858383011115613008575f5ffd5b613016836020830184612905565b95945050505050565b5f6001600160401b0382111561303757613037612ae7565b5060051b60200190565b5f82601f830112613050575f5ffd5b815161305e612be18261301f565b8082825260208201915060208360051b86010192508583111561307f575f5ffd5b602085015b8381101561309c578051835260209283019201613084565b5095945050505050565b5f5f5f5f5f60a086880312156130ba575f5ffd5b85516001600160401b038111156130cf575f5ffd5b8601608081890312156130e0575f5ffd5b6130e8612afb565b81516130f381612a7c565b8152602082015161310381612a42565b602082015260408201516001600160401b03811115613120575f5ffd5b61312c8a828501612fd3565b60408301525060608201516001600160401b0381111561314a575f5ffd5b6131568a828501612fd3565b606083015250955061316c905060208701612fc8565b935061317a60408701612fc8565b925060608601516001600160401b03811115613194575f5ffd5b6131a088828901613041565b92505060808601516001600160401b038111156131bb575f5ffd5b6131c788828901613041565b9150509295509295909350565b5f8151808452602084019350602083015f5b828110156132045781518652602095860195909101906001016131e6565b5093949350505050565b6001600160a01b038581168252841660208201526080604082018190525f90613239908301856131d4565b8281036060840152612d5381856131d4565b63ffffffff81168114610c2c575f5ffd5b8035611fa08161324b565b5f82601f830112613276575f5ffd5b8135613284612be18261301f565b8082825260208201915060208360051b8601019250858311156132a5575f5ffd5b602085015b8381101561309c5780358352602092830192016132aa565b5f61010082360312156132d3575f5ffd5b6132db612b23565b6132e483612a90565b81526132f260208401612a56565b602082015261330360408401612a56565b604082015261331460608401612a90565b606082015261332560808401612a56565b608082015261333660a0840161325c565b60a082015260c08301356001600160401b03811115613353575f5ffd5b61335f36828601613267565b60c08301525060e08301356001600160401b0381111561337d575f5ffd5b61338936828601613267565b60e08301525092915050565b5f602082840312156133a5575f5ffd5b8135610c3e81612a7c565b5f5f8335601e198436030181126133c5575f5ffd5b8301803591506001600160401b038211156133de575f5ffd5b6020019150600581901b3603821315612cca575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613419575f5ffd5b8135610c3e8161324b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156106ba576106ba613424565b8051611fa08161324b565b5f5f60408385031215613467575f5ffd5b825160208401519092506001600160401b03811115613484575f5ffd5b83016101608186031215613496575f5ffd5b61349e612b46565b6134a782612fbd565b81526134b560208301612fbd565b60208201526134c66040830161344b565b60408201526134d760608301612fc8565b60608201526134e860808301612fbd565b60808201526134f960a08301612fc8565b60a082015261350a60c08301612fbd565b60c082015261351b60e08301612fc8565b60e082015261352d6101008301612fc8565b61010082015261012082810151908201526101408201516001600160401b03811115613557575f5ffd5b61356387828501612fd3565b6101408301525080925050509250929050565b8183525f6001600160fb1b0383111561358d575f5ffd5b8260051b80836020870137939093016020019392505050565b6001600160401b03881681526001600160a01b0387811660208301528616604082015260a0606082018190525f906135e19083018688613576565b82810360808401526135f4818587613576565b9a9950505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f5f5f5f5f60a086880312156136ae575f5ffd5b85356001600160401b038111156136c3575f5ffd5b8601608081890312156136d4575f5ffd5b6136dc612afb565b81356136e781612a7c565b815260208201356136f781612a42565b602082015260408201356001600160401b03811115613714575f5ffd5b6137208a828501612bbf565b60408301525060608201356001600160401b0381111561373e575f5ffd5b61374a8a828501612bbf565b6060830152509550613760905060208701612a56565b935061376e60408701612a56565b925060608601356001600160401b03811115613788575f5ffd5b61379488828901613267565b92505060808601356001600160401b038111156137af575f5ffd5b6131c788828901613267565b6001600160401b03861681526001600160a01b0385811660208301528416604082015260a0606082018190525f906137f5908301856131d4565b828103608084015261380781856131d4565b98975050505050505050565b600181811c9082168061382757607f821691505b602082108103610b4157634e487b7160e01b5f52602260045260245ffd5b5f6060828403128015613856575f5ffd5b50604051606081016001600160401b038111828210171561387957613879612ae7565b60405282518152602083015161388e81612a42565b602082015260408301516138a181612a7c565b60408201529392505050565b6001600160a01b0385811682528416602082015260a0604082018190525f906138d8908301856131d4565b82810360608401526138ea81856131d4565b83810360809094019390935250505f8152602001949350505050565b6001600160a01b03841681526060602082018190525f90613929908301856131d4565b82810360408401526127ad81856131d4565b5f6020828403121561394b575f5ffd5b8151610c3e81612a9b565b6001600160a01b0387811682528616602082015260a0604082018190525f906139829083018688613576565b8281036060840152613995818587613576565b83810360809094019390935250505f81526020019695505050505050565b60a080825288516001600160401b03169082015260208801516001600160a01b031660c08201526040880151608060e08301525f906139f6610120840182612927565b905060608a0151609f1984830301610100850152613a148282612927565b915050613a2c602084018a6001600160a01b03169052565b6001600160a01b03881660408401528281036060840152613a4e818789613576565b905082810360808401526135f4818587613576565b602081525f610c3e6020830184612927565b5f60208284031215613a85575f5ffd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f8251613ae8818460208701612905565b9190910192915050565b5f60208284031215613b02575f5ffd5b8151610c3e81612a42565b6001600160a01b0387811682528681166020830152851660408201526001600160401b038416606082015260c0608082018190525f90613b4f90830185612927565b82810360a0840152613b618185612927565b9998505050505050505050565b6001600160a01b03831681526040602082018190525f90610c3b90830184612927565b601f8211156111fd57805f5260205f20601f840160051c81016020851015613bb65750805b601f840160051c820191505b81811015613bd5575f8155600101613bc2565b5050505050565b81516001600160401b03811115613bf557613bf5612ae7565b613c0981613c038454613813565b84613b91565b6020601f821160018114613c3b575f8315613c245750848201515b5f19600385901b1c1916600184901b178455613bd5565b5f84815260208120601f198516915b82811015613c6a5787850151825560209485019460019092019101613c4a565b5084821015613c8757868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b604081525f613ca86040830185612927565b82810360208401526130168185612927565b5f60208284031215613cca575f5ffd5b81516001600160401b03811115613cdf575f5ffd5b61146784828501612fd3565b5f60ff821660ff8103613d0057613d00613424565b6001019291505056fe60806040526040516104ca3803806104ca833981016040819052610022916102d2565b61002d82825f610034565b50506103ed565b61003d8361005f565b5f825111806100495750805b1561005a57610058838361009e565b505b505050565b610068816100ca565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606100c383836040518060600160405280602781526020016104a36027913961017d565b9392505050565b6001600160a01b0381163b61013c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f856001600160a01b03168560405161019991906103a0565b5f60405180830381855af49150503d805f81146101d1576040519150601f19603f3d011682016040523d82523d5f602084013e6101d6565b606091505b5090925090506101e8868383876101f2565b9695505050505050565b606083156102605782515f03610259576001600160a01b0385163b6102595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610133565b508161026a565b61026a8383610272565b949350505050565b8151156102825781518083602001fd5b8060405162461bcd60e51b815260040161013391906103bb565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156102ca5781810151838201526020016102b2565b50505f910152565b5f5f604083850312156102e3575f5ffd5b82516001600160a01b03811681146102f9575f5ffd5b60208401519092506001600160401b03811115610314575f5ffd5b8301601f81018513610324575f5ffd5b80516001600160401b0381111561033d5761033d61029c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561036b5761036b61029c565b604052818152828201602001871015610382575f5ffd5b6103938260208301602086016102b0565b8093505050509250929050565b5f82516103b18184602087016102b0565b9190910192915050565b602081525f82518060208401526103d98160408501602087016102b0565b601f01601f19169190910160400192915050565b60aa806103f95f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e67f8ea00e362cad72cd2e8e61f89b237848f76dd2a93bc34c0064a232f8158c64736f6c634300081b0033", + "code": "0x608060405260043610610195575f3560e01c8063715018a6116100e7578063a86f9d9e11610087578063e30c397811610062578063e30c3978146104a4578063f09a4016146104c1578063f23a6e61146104e0578063f2fde38b1461050c575f5ffd5b8063a86f9d9e14610401578063bc197c8114610420578063e07baba614610467575f5ffd5b80638456cb59116100c25780638456cb591461038d5780638abf6077146103a15780638da5cb5b146103b55780639aa8605c146103d2575f5ffd5b8063715018a61461035257806379ba5097146103665780637f07c9471461037a575f5ffd5b80633ab76e9f116101525780634f1ef2861161012d5780634f1ef286146102cb57806352d1902d146102de5780635c975abb146102f257806367090ccf14610312575f5ffd5b80633ab76e9f146102615780633eb6b8cf146102985780633f4ba83a146102b7575f5ffd5b80630178733a1461019957806301ffc9a7146101ae57806306fdde03146101e25780631f59a8301461020e5780633075db561461022e5780633659cfe614610242575b5f5ffd5b6101ac6101a7366004612861565b61052b565b005b3480156101b9575f5ffd5b506101cd6101c83660046128a7565b6106a1565b60405190151581526020015b60405180910390f35b3480156101ed575f5ffd5b506c195c98cc4c4d4d57dd985d5b1d609a1b5b6040519081526020016101d9565b61022161021c3660046128ce565b6106c0565b6040516101d99190612952565b348015610239575f5ffd5b506101cd610b47565b34801561024d575f5ffd5b506101ac61025c366004612a61565b610b5f565b34801561026c575f5ffd5b50609754610280906001600160a01b031681565b6040516001600160a01b0390911681526020016101d9565b3480156102a3575f5ffd5b506102806102b2366004612aa8565b610c2f565b3480156102c2575f5ffd5b506101ac610c45565b6101ac6102d9366004612c13565b610c59565b3480156102e9575f5ffd5b50610200610d0e565b3480156102fd575f5ffd5b506101cd60c954610100900460ff1660021490565b34801561031d575f5ffd5b5061028061032c366004612c5f565b61012e60209081525f92835260408084209091529082529020546001600160a01b031681565b34801561035d575f5ffd5b506101ac610dbf565b348015610371575f5ffd5b506101ac610dd0565b6101ac610388366004612cd1565b610e47565b348015610398575f5ffd5b506101ac610f73565b3480156103ac575f5ffd5b50610280610f86565b3480156103c0575f5ffd5b506033546001600160a01b0316610280565b3480156103dd575f5ffd5b506103f16103ec366004612a61565b610f94565b6040516101d99493929190612d0f565b34801561040c575f5ffd5b5061028061041b366004612d5e565b6110df565b34801561042b575f5ffd5b5061044e61043a366004612dc1565b63bc197c8160e01b98975050505050505050565b6040516001600160e01b031990911681526020016101d9565b348015610472575f5ffd5b5060c95461048c906201000090046001600160401b031681565b6040516001600160401b0390911681526020016101d9565b3480156104af575f5ffd5b506065546001600160a01b0316610280565b3480156104cc575f5ffd5b506101ac6104db366004612e81565b6110eb565b3480156104eb575f5ffd5b5061044e6104fa366004612ead565b63f23a6e6160e01b9695505050505050565b348015610517575f5ffd5b506101ac610526366004612a61565b611202565b61053f60c954610100900460ff1660021490565b1561055d5760405163bae6e2a960e01b815260040160405180910390fd5b600261056b60c95460ff1690565b60ff160361058c5760405163dfc60d8560e01b815260040160405180910390fd5b6105966002611273565b61059e611289565b505f6105ae610140840184612f23565b6105bc916004908290612f65565b8101906105c99190612f8c565b90505f5f5f838060200190518101906105e291906130a6565b94509450505092505f610609848860a00160208101906106029190612a61565b858561137f565b905061063361012088013561062460c08a0160a08b01612a61565b6001600160a01b03169061146f565b61064360c0880160a08901612a61565b6001600160a01b0316867fe48bef18455e47bca14864ab6e82dffa29df148b051c09de95aec44ecf13598c8660200151848787604051610686949392919061320e565b60405180910390a3505050505061069d6001611273565b5050565b5f6106ab8261147a565b806106ba57506106ba826114c9565b92915050565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201839052610100820183905261012082019290925261014081019190915261072e60c954610100900460ff1660021490565b1561074c5760405163bae6e2a960e01b815260040160405180910390fd5b610755826132c2565b8060e00151518160c00151511461077f5760405163196e8a4160e31b815260040160405180910390fd5b60808101516001600160a01b03166107aa576040516303f8a7d360e01b815260040160405180910390fd5b60026107b860c95460ff1690565b60ff16036107d95760405163dfc60d8560e01b815260040160405180910390fd5b6107e36002611273565b6107f36080840160608501613395565b6001600160401b031634101561081c57604051630178ce0b60e31b815260040160405180910390fd5b5f5b61082b60e08501856133b0565b905081101561087f5761084160e08501856133b0565b82818110610851576108516133f5565b905060200201355f0361087757604051634299323b60e11b815260040160405180910390fd5b60010161081e565b506108aa636cdb3d1360e11b61089b60a0860160808701612a61565b6001600160a01b0316906114fd565b6108c757604051633ee915f560e11b815260040160405180910390fd5b5f5f6108d28561158a565b6040805161016081019091525f808252929450909250602081016108fc6080890160608a01613395565b6001600160401b0316815260200161091a60c0890160a08a01613409565b63ffffffff1681525f6020808301829052604083019190915233606083015260809091019061094b90890189613395565b6001600160401b031681526020015f6001600160a01b03168860200160208101906109769190612a61565b6001600160a01b03160361098a573361099a565b61099a6040890160208a01612a61565b6001600160a01b031681526020908101906109d3906109bb908a018a613395565b6c195c98cc4c4d4d57dd985d5b1d609a1b5b5f610c2f565b6001600160a01b031681526020016109f16080890160608a01613395565b610a04906001600160401b031634613438565b815260200184905290505f610a226562726964676560d01b826110df565b6001600160a01b0316631bdb003734846040518363ffffffff1660e01b8152600401610a4e9190612952565b5f6040518083038185885af1158015610a69573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d908101601f19168201604052610a919190810190613456565b96509050610aa56060880160408901612a61565b6001600160a01b03168660a001516001600160a01b0316827fabbf62a1459339f9ac59136d313a5ccd83d2706cc6d4c04d90642520169144dc8960c0015187602001518c6080016020810190610afb9190612a61565b610b0860c08f018f6133b0565b8f8060e00190610b1891906133b0565b604051610b2b97969594939291906135a6565b60405180910390a450505050610b416001611273565b50919050565b5f6002610b5660c95460ff1690565b60ff1614905090565b6001600160a01b037f0000000000000000000000000167010000000000000000000000000000000004163003610bb05760405162461bcd60e51b8152600401610ba790613602565b60405180910390fd5b7f00000000000000000000000001670100000000000000000000000000000000046001600160a01b0316610be2611a4a565b6001600160a01b031614610c085760405162461bcd60e51b8152600401610ba79061364e565b610c1181611a65565b604080515f80825260208201909252610c2c91839190611a6d565b50565b5f610c3b848484611bd7565b90505b9392505050565b610c4d611c29565b610c57335f611cb9565b565b6001600160a01b037f0000000000000000000000000167010000000000000000000000000000000004163003610ca15760405162461bcd60e51b8152600401610ba790613602565b7f00000000000000000000000001670100000000000000000000000000000000046001600160a01b0316610cd3611a4a565b6001600160a01b031614610cf95760405162461bcd60e51b8152600401610ba79061364e565b610d0282611a65565b61069d82826001611a6d565b5f306001600160a01b037f00000000000000000000000001670100000000000000000000000000000000041614610dad5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610ba7565b505f5160206141d45f395f51905f5290565b610dc7611cbd565b610c575f611d17565b60655433906001600160a01b03168114610e3e5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610ba7565b610c2c81611d17565b610e5b60c954610100900460ff1660021490565b15610e795760405163bae6e2a960e01b815260040160405180910390fd5b6002610e8760c95460ff1690565b60ff1603610ea85760405163dfc60d8560e01b815260040160405180910390fd5b610eb26002611273565b5f80808080610ec38688018861369a565b945094509450945094505f610ed6611d30565b9050610ee184611e51565b5f610eee8786868661137f565b9050610f036001600160a01b0386163461146f565b846001600160a01b0316866001600160a01b0316835f01517f895f73e418d1bbbad2a311d085fad00e5d98a960e9f2afa4b942071d39bec43a85604001518b60200151868a8a604051610f5a9594939291906137bb565b60405180910390a45050505050505061069d6001611273565b610f7b611e8d565b610c57336001611cb9565b5f610f8f611a4a565b905090565b61012d6020525f9081526040902080546001820180546001600160401b03831693600160401b9093046001600160a01b0316929190610fd290613813565b80601f0160208091040260200160405190810160405280929190818152602001828054610ffe90613813565b80156110495780601f1061102057610100808354040283529160200191611049565b820191905f5260205f20905b81548152906001019060200180831161102c57829003601f168201915b50505050509080600201805461105e90613813565b80601f016020809104026020016040519081016040528092919081815260200182805461108a90613813565b80156110d55780601f106110ac576101008083540402835291602001916110d5565b820191905f5260205f20905b8154815290600101906020018083116110b857829003601f168201915b5050505050905084565b5f610c3e468484611bd7565b5f54610100900460ff161580801561110957505f54600160ff909116105b806111225750303b15801561112257505f5460ff166001145b6111855760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ba7565b5f805460ff1916600117905580156111a6575f805461ff0019166101001790555b6111b08383611efe565b6111b8611f38565b80156111fd575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b61120a611cbd565b606580546001600160a01b0383166001600160a01b0319909116811790915561123b6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b6112ba8160016110df565b6001600160a01b0316336001600160a01b0316146112eb57604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611327573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061134b9190613845565b60208101519092506001600160a01b0316331461137b57604051632583296b60e01b815260040160405180910390fd5b5090565b5f46855f01516001600160401b0316036113fd57506020840151604051631759616b60e11b81526001600160a01b03821690632eb2c2d6906113cb9030908890889088906004016138ad565b5f604051808303815f87803b1580156113e2575f5ffd5b505af11580156113f4573d5f5f3e3d5ffd5b50505050611467565b61140685611f5e565b60405163d81d0a1560e01b81529091506001600160a01b0382169063d81d0a159061143990879087908790600401613906565b5f604051808303815f87803b158015611450575f5ffd5b505af1158015611462573d5f5f3e3d5ffd5b505050505b949350505050565b61069d82825a611fa5565b5f6001600160e01b0319821662bc399d60e11b14806114a957506001600160e01b03198216637f07c94760e01b145b806106ba57506001600160e01b031982166301ffc9a760e01b1492915050565b5f6001600160e01b03198216630271189760e51b14806106ba57506301ffc9a760e01b6001600160e01b03198316146106ba565b5f6001600160a01b0383163b61151457505f6106ba565b6040516301ffc9a760e01b81526001600160e01b0319831660048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa92505050801561157e575060408051601f3d908101601f1916820190925261157b9181019061393b565b60015b156106ba579392505050565b604080516080810182525f808252602082015260609181018290528082018290525f61012d816115c060a0870160808801612a61565b6001600160a01b03908116825260208201929092526040015f208054909250600160401b900416156118b3576040805160808101825282546001600160401b0381168252600160401b90046001600160a01b0316602082015260018301805491928492908401919061163190613813565b80601f016020809104026020016040519081016040528092919081815260200182805461165d90613813565b80156116a85780601f1061167f576101008083540402835291602001916116a8565b820191905f5260205f20905b81548152906001019060200180831161168b57829003601f168201915b505050505081526020016002820180546116c190613813565b80601f01602080910402602001604051908101604052809291908181526020018280546116ed90613813565b80156117385780601f1061170f57610100808354040283529160200191611738565b820191905f5260205f20905b81548152906001019060200180831161171b57829003601f168201915b50505050508152505091508360800160208101906117569190612a61565b6001600160a01b0316632eb2c2d6333061177360c08901896133b0565b61178060e08b018b6133b0565b6040518763ffffffff1660e01b81526004016117a196959493929190613956565b5f604051808303815f87803b1580156117b8575f5ffd5b505af11580156117ca573d5f5f3e3d5ffd5b505050505f5b6117dd60c08601866133b0565b90508110156118ad576117f660a0860160808701612a61565b6001600160a01b031663b390c0ab61181160c08801886133b0565b84818110611821576118216133f5565b90506020020135878060e0019061183891906133b0565b85818110611848576118486133f5565b905060200201356040518363ffffffff1660e01b8152600401611875929190918252602082015260400190565b5f604051808303815f87803b15801561188c575f5ffd5b505af115801561189e573d5f5f3e3d5ffd5b505050508060010190506117d0565b506119b0565b6040518060800160405280466001600160401b031681526020018560800160208101906118e09190612a61565b6001600160a01b0316815260200161190661190160a0880160808901612a61565b611fe8565b815260200161192361191e60a0880160808901612a61565b612092565b9052915061193760a0850160808601612a61565b6001600160a01b0316632eb2c2d6333061195460c08901896133b0565b61196160e08b018b6133b0565b6040518763ffffffff1660e01b815260040161198296959493929190613956565b5f604051808303815f87803b158015611999575f5ffd5b505af11580156119ab573d5f5f3e3d5ffd5b505050505b5030637f07c94782336119c96060880160408901612a61565b6119d660c08901896133b0565b6119e360e08b018b6133b0565b6040516020016119f997969594939291906139b3565b60408051601f1981840301815290829052611a1691602401613a63565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050509150915091565b5f5160206141d45f395f51905f52546001600160a01b031690565b610c2c611cbd565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611aa0576111fd836120d8565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611afa575060408051601f3d908101601f19168201909252611af791810190613a75565b60015b611b5d5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610ba7565b5f5160206141d45f395f51905f528114611bcb5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610ba7565b506111fd838383612173565b5f611be2848461219d565b905081158015611bf957506001600160a01b038116155b15610c3e57604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610ba7565b611c3d60c954610100900460ff1660021490565b611c5a5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b61069d5b6033546001600160a01b03163314610c575760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ba7565b606580546001600160a01b0319169055610c2c8161223f565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611d618160016110df565b6001600160a01b0316336001600160a01b031614611d9257604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611dce573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611df29190613845565b91505f611e1483604001516109cd6c195c98cc4c4d4d57dd985d5b1d609a1b90565b9050806001600160a01b031683602001516001600160a01b031614611e4c57604051632583296b60e01b815260040160405180910390fd5b505090565b6001600160a01b0381161580611e6f57506001600160a01b03811630145b15610c2c57604051635b50f3f960e01b815260040160405180910390fd5b611ea160c954610100900460ff1660021490565b15611ebf5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611caf565b806001600160a01b038116611f265760405163538ba4f960e01b815260040160405180910390fd5b611f2f83612290565b6111fd826122ee565b5f54610100900460ff16610c575760405162461bcd60e51b8152600401610ba790613a8c565b80516001600160401b03165f90815261012e60209081526040808320828501516001600160a01b0390811685529252909120541680611fa0576106ba8261235e565b919050565b815f03611fb157505050565b611fcb83838360405180602001604052805f81525061253a565b6111fd57604051634c67134d60e11b815260040160405180910390fd5b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516060915f9182916001600160a01b0386169161202e9190613ad7565b5f60405180830381855afa9150503d805f8114612066576040519150601f19603f3d011682016040523d82523d5f602084013e61206b565b606091505b5091509150816120895760405180602001604052805f815250611467565b61146781612577565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516060915f9182916001600160a01b0386169161202e9190613ad7565b6001600160a01b0381163b6121455760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610ba7565b5f5160206141d45f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b61217c836126e4565b5f825111806121885750805b156111fd576121978383612723565b50505050565b6097545f906001600160a01b0316806121c957604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa15801561221b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114679190613af2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166122b65760405162461bcd60e51b8152600401610ba790613a8c565b6122be611f38565b6122dc6001600160a01b038216156122d65781611d17565b33611d17565b5060c9805461ff001916610100179055565b5f54610100900460ff166123145760405162461bcd60e51b8152600401610ba790613a8c565b6001600160401b0346111561233c5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f6123726033546001600160a01b031690565b60975460208501518551604080880151606089015191516123a396956001600160a01b031694939290602401613b0d565b60408051601f198184030181529190526020810180516001600160e01b03166377c6257360e11b17905290506123eb6e627269646765645f6572633131353560881b5f6110df565b816040516123f890612854565b612403929190613b6e565b604051809103905ff08015801561241c573d5f5f3e3d5ffd5b506001600160a01b038082165f90815261012d60209081526040918290208751815492890151909416600160401b026001600160e01b03199092166001600160401b0390941693909317178255850151919350849160018201906124809082613bdc565b50606082015160028201906124959082613bdc565b505083516001600160401b039081165f90815261012e6020908152604080832082890180516001600160a01b039081168652919093529281902080546001600160a01b03191688851690811790915591518851828a015160608b01519351949750919094169493909316927f44977f2d30fe1e3aee2c1476f2f95aaacaf34e44b9359c403da01fcc93fd751b9261252c9290613c96565b60405180910390a450919050565b5f6001600160a01b03851661256257604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b6060604082511061259657818060200190518101906106ba9190613cba565b81516020036126d1575f5b60208160ff161080156125d65750828160ff16815181106125c4576125c46133f5565b01602001516001600160f81b03191615155b156125ed57806125e581613ceb565b9150506125a1565b5f8160ff166001600160401b0381111561260957612609612ae7565b6040519080825280601f01601f191660200182016040528015612633576020820181803683370190505b5090505f91505b60208260ff1610801561266f5750838260ff168151811061265d5761265d6133f5565b01602001516001600160f81b03191615155b15610c3e57838260ff1681518110612689576126896133f5565b602001015160f81c60f81b818360ff16815181106126a9576126a96133f5565b60200101906001600160f81b03191690815f1a905350816126c981613ceb565b92505061263a565b505060408051602081019091525f815290565b6126ed816120d8565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610c3e83836040518060600160405280602781526020016141f46027913960605f5f856001600160a01b03168560405161275f9190613ad7565b5f60405180830381855af49150503d805f8114612797576040519150601f19603f3d011682016040523d82523d5f602084013e61279c565b606091505b50915091506127ad868383876127b7565b9695505050505050565b606083156128255782515f0361281e576001600160a01b0385163b61281e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ba7565b5081611467565b611467838381511561283a5781518083602001fd5b8060405162461bcd60e51b8152600401610ba79190613a63565b6104ca80613d0a83390190565b5f5f60408385031215612872575f5ffd5b82356001600160401b03811115612887575f5ffd5b83016101608186031215612899575f5ffd5b946020939093013593505050565b5f602082840312156128b7575f5ffd5b81356001600160e01b031981168114610c3e575f5ffd5b5f602082840312156128de575f5ffd5b81356001600160401b038111156128f3575f5ffd5b82016101008185031215610c3e575f5ffd5b5f5b8381101561291f578181015183820152602001612907565b50505f910152565b5f815180845261293e816020860160208601612905565b601f01601f19169290920160200192915050565b6020815261296c6020820183516001600160401b03169052565b5f602083015161298760408401826001600160401b03169052565b50604083015163ffffffff811660608401525060608301516001600160a01b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160401b03811660e08401525060e08301516001600160a01b038116610100840152506101008301516001600160a01b0381166101208401525061012083015161014083015261014083015161016080840152611467610180840182612927565b6001600160a01b0381168114610c2c575f5ffd5b8035611fa081612a42565b5f60208284031215612a71575f5ffd5b8135610c3e81612a42565b6001600160401b0381168114610c2c575f5ffd5b8035611fa081612a7c565b8015158114610c2c575f5ffd5b5f5f5f60608486031215612aba575f5ffd5b8335612ac581612a7c565b9250602084013591506040840135612adc81612a9b565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b0381118282101715612b1d57612b1d612ae7565b60405290565b60405161010081016001600160401b0381118282101715612b1d57612b1d612ae7565b60405161016081016001600160401b0381118282101715612b1d57612b1d612ae7565b604051601f8201601f191681016001600160401b0381118282101715612b9157612b91612ae7565b604052919050565b5f6001600160401b03821115612bb157612bb1612ae7565b50601f01601f191660200190565b5f82601f830112612bce575f5ffd5b8135602083015f612be6612be184612b99565b612b69565b9050828152858383011115612bf9575f5ffd5b828260208301375f92810160200192909252509392505050565b5f5f60408385031215612c24575f5ffd5b8235612c2f81612a42565b915060208301356001600160401b03811115612c49575f5ffd5b612c5585828601612bbf565b9150509250929050565b5f5f60408385031215612c70575f5ffd5b823591506020830135612c8281612a42565b809150509250929050565b5f5f83601f840112612c9d575f5ffd5b5081356001600160401b03811115612cb3575f5ffd5b602083019150836020828501011115612cca575f5ffd5b9250929050565b5f5f60208385031215612ce2575f5ffd5b82356001600160401b03811115612cf7575f5ffd5b612d0385828601612c8d565b90969095509350505050565b6001600160401b03851681526001600160a01b03841660208201526080604082018190525f90612d4190830185612927565b8281036060840152612d538185612927565b979650505050505050565b5f5f60408385031215612d6f575f5ffd5b823591506020830135612c8281612a9b565b5f5f83601f840112612d91575f5ffd5b5081356001600160401b03811115612da7575f5ffd5b6020830191508360208260051b8501011115612cca575f5ffd5b5f5f5f5f5f5f5f5f60a0898b031215612dd8575f5ffd5b8835612de381612a42565b97506020890135612df381612a42565b965060408901356001600160401b03811115612e0d575f5ffd5b612e198b828c01612d81565b90975095505060608901356001600160401b03811115612e37575f5ffd5b612e438b828c01612d81565b90955093505060808901356001600160401b03811115612e61575f5ffd5b612e6d8b828c01612c8d565b999c989b5096995094979396929594505050565b5f5f60408385031215612e92575f5ffd5b8235612e9d81612a42565b91506020830135612c8281612a42565b5f5f5f5f5f5f60a08789031215612ec2575f5ffd5b8635612ecd81612a42565b95506020870135612edd81612a42565b9450604087013593506060870135925060808701356001600160401b03811115612f05575f5ffd5b612f1189828a01612c8d565b979a9699509497509295939492505050565b5f5f8335601e19843603018112612f38575f5ffd5b8301803591506001600160401b03821115612f51575f5ffd5b602001915036819003821315612cca575f5ffd5b5f5f85851115612f73575f5ffd5b83861115612f7f575f5ffd5b5050820193919092039150565b5f60208284031215612f9c575f5ffd5b81356001600160401b03811115612fb1575f5ffd5b61146784828501612bbf565b8051611fa081612a7c565b8051611fa081612a42565b5f82601f830112612fe2575f5ffd5b8151602083015f612ff5612be184612b99565b9050828152858383011115613008575f5ffd5b613016836020830184612905565b95945050505050565b5f6001600160401b0382111561303757613037612ae7565b5060051b60200190565b5f82601f830112613050575f5ffd5b815161305e612be18261301f565b8082825260208201915060208360051b86010192508583111561307f575f5ffd5b602085015b8381101561309c578051835260209283019201613084565b5095945050505050565b5f5f5f5f5f60a086880312156130ba575f5ffd5b85516001600160401b038111156130cf575f5ffd5b8601608081890312156130e0575f5ffd5b6130e8612afb565b81516130f381612a7c565b8152602082015161310381612a42565b602082015260408201516001600160401b03811115613120575f5ffd5b61312c8a828501612fd3565b60408301525060608201516001600160401b0381111561314a575f5ffd5b6131568a828501612fd3565b606083015250955061316c905060208701612fc8565b935061317a60408701612fc8565b925060608601516001600160401b03811115613194575f5ffd5b6131a088828901613041565b92505060808601516001600160401b038111156131bb575f5ffd5b6131c788828901613041565b9150509295509295909350565b5f8151808452602084019350602083015f5b828110156132045781518652602095860195909101906001016131e6565b5093949350505050565b6001600160a01b038581168252841660208201526080604082018190525f90613239908301856131d4565b8281036060840152612d5381856131d4565b63ffffffff81168114610c2c575f5ffd5b8035611fa08161324b565b5f82601f830112613276575f5ffd5b8135613284612be18261301f565b8082825260208201915060208360051b8601019250858311156132a5575f5ffd5b602085015b8381101561309c5780358352602092830192016132aa565b5f61010082360312156132d3575f5ffd5b6132db612b23565b6132e483612a90565b81526132f260208401612a56565b602082015261330360408401612a56565b604082015261331460608401612a90565b606082015261332560808401612a56565b608082015261333660a0840161325c565b60a082015260c08301356001600160401b03811115613353575f5ffd5b61335f36828601613267565b60c08301525060e08301356001600160401b0381111561337d575f5ffd5b61338936828601613267565b60e08301525092915050565b5f602082840312156133a5575f5ffd5b8135610c3e81612a7c565b5f5f8335601e198436030181126133c5575f5ffd5b8301803591506001600160401b038211156133de575f5ffd5b6020019150600581901b3603821315612cca575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613419575f5ffd5b8135610c3e8161324b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156106ba576106ba613424565b8051611fa08161324b565b5f5f60408385031215613467575f5ffd5b825160208401519092506001600160401b03811115613484575f5ffd5b83016101608186031215613496575f5ffd5b61349e612b46565b6134a782612fbd565b81526134b560208301612fbd565b60208201526134c66040830161344b565b60408201526134d760608301612fc8565b60608201526134e860808301612fbd565b60808201526134f960a08301612fc8565b60a082015261350a60c08301612fbd565b60c082015261351b60e08301612fc8565b60e082015261352d6101008301612fc8565b61010082015261012082810151908201526101408201516001600160401b03811115613557575f5ffd5b61356387828501612fd3565b6101408301525080925050509250929050565b8183525f6001600160fb1b0383111561358d575f5ffd5b8260051b80836020870137939093016020019392505050565b6001600160401b03881681526001600160a01b0387811660208301528616604082015260a0606082018190525f906135e19083018688613576565b82810360808401526135f4818587613576565b9a9950505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f5f5f5f5f60a086880312156136ae575f5ffd5b85356001600160401b038111156136c3575f5ffd5b8601608081890312156136d4575f5ffd5b6136dc612afb565b81356136e781612a7c565b815260208201356136f781612a42565b602082015260408201356001600160401b03811115613714575f5ffd5b6137208a828501612bbf565b60408301525060608201356001600160401b0381111561373e575f5ffd5b61374a8a828501612bbf565b6060830152509550613760905060208701612a56565b935061376e60408701612a56565b925060608601356001600160401b03811115613788575f5ffd5b61379488828901613267565b92505060808601356001600160401b038111156137af575f5ffd5b6131c788828901613267565b6001600160401b03861681526001600160a01b0385811660208301528416604082015260a0606082018190525f906137f5908301856131d4565b828103608084015261380781856131d4565b98975050505050505050565b600181811c9082168061382757607f821691505b602082108103610b4157634e487b7160e01b5f52602260045260245ffd5b5f6060828403128015613856575f5ffd5b50604051606081016001600160401b038111828210171561387957613879612ae7565b60405282518152602083015161388e81612a42565b602082015260408301516138a181612a7c565b60408201529392505050565b6001600160a01b0385811682528416602082015260a0604082018190525f906138d8908301856131d4565b82810360608401526138ea81856131d4565b83810360809094019390935250505f8152602001949350505050565b6001600160a01b03841681526060602082018190525f90613929908301856131d4565b82810360408401526127ad81856131d4565b5f6020828403121561394b575f5ffd5b8151610c3e81612a9b565b6001600160a01b0387811682528616602082015260a0604082018190525f906139829083018688613576565b8281036060840152613995818587613576565b83810360809094019390935250505f81526020019695505050505050565b60a080825288516001600160401b03169082015260208801516001600160a01b031660c08201526040880151608060e08301525f906139f6610120840182612927565b905060608a0151609f1984830301610100850152613a148282612927565b915050613a2c602084018a6001600160a01b03169052565b6001600160a01b03881660408401528281036060840152613a4e818789613576565b905082810360808401526135f4818587613576565b602081525f610c3e6020830184612927565b5f60208284031215613a85575f5ffd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f8251613ae8818460208701612905565b9190910192915050565b5f60208284031215613b02575f5ffd5b8151610c3e81612a42565b6001600160a01b0387811682528681166020830152851660408201526001600160401b038416606082015260c0608082018190525f90613b4f90830185612927565b82810360a0840152613b618185612927565b9998505050505050505050565b6001600160a01b03831681526040602082018190525f90610c3b90830184612927565b601f8211156111fd57805f5260205f20601f840160051c81016020851015613bb65750805b601f840160051c820191505b81811015613bd5575f8155600101613bc2565b5050505050565b81516001600160401b03811115613bf557613bf5612ae7565b613c0981613c038454613813565b84613b91565b6020601f821160018114613c3b575f8315613c245750848201515b5f19600385901b1c1916600184901b178455613bd5565b5f84815260208120601f198516915b82811015613c6a5787850151825560209485019460019092019101613c4a565b5084821015613c8757868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b604081525f613ca86040830185612927565b82810360208401526130168185612927565b5f60208284031215613cca575f5ffd5b81516001600160401b03811115613cdf575f5ffd5b61146784828501612fd3565b5f60ff821660ff8103613d0057613d00613424565b6001019291505056fe60806040526040516104ca3803806104ca833981016040819052610022916102d2565b61002d82825f610034565b50506103ed565b61003d8361005f565b5f825111806100495750805b1561005a57610058838361009e565b505b505050565b610068816100ca565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606100c383836040518060600160405280602781526020016104a36027913961017d565b9392505050565b6001600160a01b0381163b61013c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f856001600160a01b03168560405161019991906103a0565b5f60405180830381855af49150503d805f81146101d1576040519150601f19603f3d011682016040523d82523d5f602084013e6101d6565b606091505b5090925090506101e8868383876101f2565b9695505050505050565b606083156102605782515f03610259576001600160a01b0385163b6102595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610133565b508161026a565b61026a8383610272565b949350505050565b8151156102825781518083602001fd5b8060405162461bcd60e51b815260040161013391906103bb565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156102ca5781810151838201526020016102b2565b50505f910152565b5f5f604083850312156102e3575f5ffd5b82516001600160a01b03811681146102f9575f5ffd5b60208401519092506001600160401b03811115610314575f5ffd5b8301601f81018513610324575f5ffd5b80516001600160401b0381111561033d5761033d61029c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561036b5761036b61029c565b604052818152828201602001871015610382575f5ffd5b6103938260208301602086016102b0565b8093505050509250929050565b5f82516103b18184602087016102b0565b9190910192915050565b602081525f82518060208401526103d98160408501602087016102b0565b601f01601f19169190910160400192915050565b60aa806103f95f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e67f8ea00e362cad72cd2e8e61f89b237848f76dd2a93bc34c0064a232f8158c64736f6c634300081b0033", "balance": "0x0" }, - "0x1670000000000000000000000000000000000004": { + "0x1670100000000000000000000000000000000004": { "contractName": "ERC1155Vault", "storage": { "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", - "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670000000000000000000000000000000000006", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000000004" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670100000000000000000000000000000000006", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167010000000000000000000000000000000004" }, "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", "balance": "0x0" }, - "0x0167000000000000000000000000000000010096": { + "0x0167010000000000000000000000000000010096": { "contractName": "BridgedERC20", "storage": {}, - "code": "0x608060405260043610610233575f3560e01c806370a0823111610129578063a77f1516116100a8578063dd62ed3e1161006d578063dd62ed3e14610684578063e07baba6146106a3578063e30c3978146106e0578063f12506c1146106fd578063f2fde38b14610711575f5ffd5b8063a77f1516146105e7578063a86f9d9e14610608578063a9059cbb14610627578063b8f2e0c514610646578063bb86ef9314610665575f5ffd5b80638456cb59116100ee5780638456cb591461056f5780638abf6077146105835780638da5cb5b1461059757806395d89b41146105b4578063a457c2d7146105c8575f5ffd5b806370a08231146104d3578063715018a61461050757806379ba50971461051b5780637cf8ed0d1461052f5780637e4746341461054f575f5ffd5b806339509351116101b557806342966c681161017a57806342966c681461045757806349d12605146104765780634f1ef2861461048c57806352d1902d1461049f5780635c975abb146104b3575f5ffd5b806339509351146103af5780633ab76e9f146103ce5780633eb6b8cf146104055780633f4ba83a1461042457806340c10f1914610438575f5ffd5b806323b872dd116101fb57806323b872dd146102ea57806326afaadd146103095780633075db561461034d578063313ce567146103615780633659cfe61461038e575f5ffd5b806301ffc9a71461023757806306fdde031461026b578063095ea7b31461028c5780630ae74548146102ab57806318160ddd146102cc575b5f5ffd5b348015610242575f5ffd5b5061025661025136600461218c565b610730565b60405190151581526020015b60405180910390f35b348015610276575f5ffd5b5061027f6107d2565b60405161026291906121d5565b348015610297575f5ffd5b506102566102a636600461221b565b610862565b3480156102b6575f5ffd5b5061012f5461025690600160a01b900460ff1681565b3480156102d7575f5ffd5b5060fd545b604051908152602001610262565b3480156102f5575f5ffd5b50610256610304366004612245565b610879565b348015610314575f5ffd5b5061032e61012d5461012e546001600160a01b0390911691565b604080516001600160a01b039093168352602083019190915201610262565b348015610358575f5ffd5b5061025661089e565b34801561036c575f5ffd5b5061012d54600160a01b900460ff165b60405160ff9091168152602001610262565b348015610399575f5ffd5b506103ad6103a8366004612283565b6108b6565b005b3480156103ba575f5ffd5b506102566103c936600461221b565b610986565b3480156103d9575f5ffd5b506097546103ed906001600160a01b031681565b6040516001600160a01b039091168152602001610262565b348015610410575f5ffd5b506103ed61041f3660046122b2565b6109a7565b34801561042f575f5ffd5b506103ad6109bb565b348015610443575f5ffd5b506103ad61045236600461221b565b6109cf565b348015610462575f5ffd5b506103ad6104713660046122f8565b610ae9565b348015610481575f5ffd5b506102dc61012e5481565b6103ad61049a366004612323565b610c26565b3480156104aa575f5ffd5b506102dc610cdb565b3480156104be575f5ffd5b5061025660c954610100900460ff1660021490565b3480156104de575f5ffd5b506102dc6104ed366004612283565b6001600160a01b03165f90815260fb602052604090205490565b348015610512575f5ffd5b506103ad610d8c565b348015610526575f5ffd5b506103ad610d9d565b34801561053a575f5ffd5b5061012d546103ed906001600160a01b031681565b34801561055a575f5ffd5b5061012f546103ed906001600160a01b031681565b34801561057a575f5ffd5b506103ad610e14565b34801561058e575f5ffd5b506103ed610e27565b3480156105a2575f5ffd5b506033546001600160a01b03166103ed565b3480156105bf575f5ffd5b5061027f610e35565b3480156105d3575f5ffd5b506102566105e236600461221b565b610e44565b3480156105f2575f5ffd5b5061012d5461037c90600160a01b900460ff1681565b348015610613575f5ffd5b506103ed6106223660046123e6565b610ec9565b348015610632575f5ffd5b5061025661064136600461221b565b610ed5565b348015610651575f5ffd5b506103ad610660366004612410565b610ee2565b348015610670575f5ffd5b506103ad61067f36600461247e565b61105f565b34801561068f575f5ffd5b506102dc61069e366004612544565b61121f565b3480156106ae575f5ffd5b5060c9546106c8906201000090046001600160401b031681565b6040516001600160401b039091168152602001610262565b3480156106eb575f5ffd5b506065546001600160a01b03166103ed565b348015610708575f5ffd5b50610256611249565b34801561071c575f5ffd5b506103ad61072b366004612283565b611274565b5f6001600160e01b0319821663093e326b60e21b148061076057506001600160e01b0319821663bb86ef9360e01b145b8061077b57506001600160e01b0319821663b8f2e0c560e01b145b8061079657506001600160e01b031982166336372b0760e01b145b806107b157506001600160e01b0319821663a219a02560e01b145b806107cc57506001600160e01b031982166301ffc9a760e01b145b92915050565b606060fe80546107e19061257b565b80601f016020809104026020016040519081016040528092919081815260200182805461080d9061257b565b80156108585780601f1061082f57610100808354040283529160200191610858565b820191905f5260205f20905b81548152906001019060200180831161083b57829003601f168201915b5050505050905090565b5f3361086f8185856112e5565b5060019392505050565b5f33610886858285611408565b610891858585611480565b60019150505b9392505050565b5f60026108ad60c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000100961630036109075760405162461bcd60e51b81526004016108fe906125b3565b60405180910390fd5b7f00000000000000000000000001670000000000000000000000000000000100966001600160a01b0316610939611634565b6001600160a01b03161461095f5760405162461bcd60e51b81526004016108fe906125ff565b6109688161164f565b604080515f8082526020820190925261098391839190611657565b50565b5f3361086f818585610998838361121f565b6109a2919061264b565b6112e5565b5f6109b38484846117c1565b949350505050565b6109c3611813565b6109cd335f6118a3565b565b6109e360c954610100900460ff1660021490565b15610a015760405163bae6e2a960e01b815260040160405180910390fd5b6002610a0f60c95460ff1690565b60ff1603610a305760405163dfc60d8560e01b815260040160405180910390fd5b610a3a60026118ab565b610a42611249565b15610a605760405163270bf77560e01b815260040160405180910390fd5b61012f546001600160a01b031633819003610ac757826001600160a01b0316816001600160a01b03167fe502aa3e015149f4b76a0b2b5394e3100903c4af27c3ddc98385395d3f55252684604051610aba91815260200190565b60405180910390a3610ad0565b610ad0336118c1565b610ada838361193d565b50610ae560016118ab565b5050565b610afd60c954610100900460ff1660021490565b15610b1b5760405163bae6e2a960e01b815260040160405180910390fd5b6002610b2960c95460ff1690565b60ff1603610b4a5760405163dfc60d8560e01b815260040160405180910390fd5b610b5460026118ab565b610b5c611249565b15610c095761012f546040518281526001600160a01b0390911690339082907f638edf84937fb2534b47cac985ea84d6ea4f4076315b56ea1c784d26b87e2bcb9060200160405180910390a36040516340c10f1960e01b8152336004820152602481018390526001600160a01b038216906340c10f19906044015f604051808303815f87803b158015610bed575f5ffd5b505af1158015610bff573d5f5f3e3d5ffd5b5050505050610c12565b610c12336118c1565b610c1c3382611a07565b61098360016118ab565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000010096163003610c6e5760405162461bcd60e51b81526004016108fe906125b3565b7f00000000000000000000000001670000000000000000000000000000000100966001600160a01b0316610ca0611634565b6001600160a01b031614610cc65760405162461bcd60e51b81526004016108fe906125ff565b610ccf8261164f565b610ae582826001611657565b5f306001600160a01b037f00000000000000000000000001670000000000000000000000000000000100961614610d7a5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016108fe565b505f5160206128085f395f51905f5290565b610d94611b44565b6109cd5f611b9e565b60655433906001600160a01b03168114610e0b5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016108fe565b61098381611b9e565b610e1c611bb7565b6109cd3360016118a3565b5f610e30611634565b905090565b606060ff80546107e19061257b565b5f3381610e51828661121f565b905083811015610eb15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108fe565b610ebe82868684036112e5565b506001949350505050565b5f6108974684846117c1565b5f3361086f818585611480565b610ef660c954610100900460ff1660021490565b15610f145760405163bae6e2a960e01b815260040160405180910390fd5b6a195c98cc8c17dd985d5b1d60aa1b610f2e816001610ec9565b6001600160a01b0316336001600160a01b031614610f5f57604051630d85cccf60e11b815260040160405180910390fd5b6002610f6d60c95460ff1690565b60ff1603610f8e5760405163dfc60d8560e01b815260040160405180910390fd5b610f9860026118ab565b61012f546001600160a01b038481169116148015610fc9575061012f60149054906101000a900460ff161515821515145b15610fe75760405163c118d2f360e01b815260040160405180910390fd5b61012f80546001600160a01b0385166001600160a81b03199091168117600160a01b851515908102919091179092556040805191825260208201929092527fa6b6f959792843a48d9d03d13595f2de7c86ae0ce12ef0fa759dd911b205e565910160405180910390a161105a60016118ab565b505050565b5f54610100900460ff161580801561107d57505f54600160ff909116105b806110965750303b15801561109657505f5460ff166001145b6110f95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016108fe565b5f805460ff19166001179055801561111a575f805461ff0019166101001790555b6111248888611c28565b61112e8a8a611c64565b61119f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8b0181900481028201810190925289815292508991508890819084018382808284375f92019190915250611c9e92505050565b61012d805461012e89905560ff8816600160a01b026001600160a81b03199091166001600160a01b038b16171790558015611213575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6001600160a01b039182165f90815260fc6020908152604080832093909416825291909152205490565b61012f545f906001600160a01b031615801590610e3057505061012f54600160a01b900460ff161590565b61127c611b44565b606580546001600160a01b0383166001600160a01b031990911681179091556112ad6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001600160a01b0383166113475760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108fe565b6001600160a01b0382166113a85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108fe565b6001600160a01b038381165f81815260fc602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f611413848461121f565b90505f19811461147a578181101561146d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016108fe565b61147a84848484036112e5565b50505050565b6001600160a01b0383166114e45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108fe565b6001600160a01b0382166115465760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108fe565b611551838383611cce565b6001600160a01b0383165f90815260fb6020526040902054818110156115c85760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108fe565b6001600160a01b038085165f81815260fb602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116279086815260200190565b60405180910390a361147a565b5f5160206128085f395f51905f52546001600160a01b031690565b610983611b44565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561168a5761105a83611d09565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156116e4575060408051601f3d908101601f191682019092526116e19181019061266a565b60015b6117475760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016108fe565b5f5160206128085f395f51905f5281146117b55760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016108fe565b5061105a838383611da4565b5f6117cc8484611dc8565b9050811580156117e357506001600160a01b038116155b1561089757604051632b0d65db60e01b81526001600160401b0385166004820152602481018490526044016108fe565b61182760c954610100900460ff1660021490565b6118445760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610ae5611b44565b60c9805460ff191660ff92909216919091179055565b6a195c98cc8c17dd985d5b1d60aa1b6118e26033546001600160a01b031690565b6001600160a01b0316336001600160a01b03161415801561191f5750611909816001610ec9565b6001600160a01b0316336001600160a01b031614155b15610ae557604051630d85cccf60e11b815260040160405180910390fd5b6001600160a01b0382166119935760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016108fe565b61199e5f8383611cce565b8060fd5f8282546119af919061264b565b90915550506001600160a01b0382165f81815260fb60209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216611a675760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016108fe565b611a72825f83611cce565b6001600160a01b0382165f90815260fb602052604090205481811015611ae55760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016108fe565b6001600160a01b0383165f81815260fb60209081526040808320868603905560fd80548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6033546001600160a01b031633146109cd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fe565b606580546001600160a01b031916905561098381611e6a565b611bcb60c954610100900460ff1660021490565b15611be95760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611899565b6001600160a01b0382161580611c3c575080155b80611c4657504681145b15610ae55760405163c118d2f360e01b815260040160405180910390fd5b806001600160a01b038116611c8c5760405163538ba4f960e01b815260040160405180910390fd5b611c9583611ebb565b61105a82611f19565b5f54610100900460ff16611cc45760405162461bcd60e51b81526004016108fe90612681565b610ae58282611f89565b611ce260c954610100900460ff1660021490565b15611d005760405163bae6e2a960e01b815260040160405180910390fd5b61105a82611fc8565b6001600160a01b0381163b611d765760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016108fe565b5f5160206128085f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611dad83611ff1565b5f82511180611db95750805b1561105a5761147a8383612030565b6097545f906001600160a01b031680611df457604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611e46573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109b391906126cc565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16611ee15760405162461bcd60e51b81526004016108fe90612681565b611ee9612055565b611f076001600160a01b03821615611f015781611b9e565b33611b9e565b5060c9805461ff001916610100179055565b5f54610100900460ff16611f3f5760405162461bcd60e51b81526004016108fe90612681565b6001600160401b03461115611f675760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f54610100900460ff16611faf5760405162461bcd60e51b81526004016108fe90612681565b60fe611fbb8382612732565b5060ff61105a8282612732565b306001600160a01b0382160361098357604051630c292c9d60e21b815260040160405180910390fd5b611ffa81611d09565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061089783836040518060600160405280602781526020016128286027913961207b565b5f54610100900460ff166109cd5760405162461bcd60e51b81526004016108fe90612681565b60605f5f856001600160a01b03168560405161209791906127ec565b5f60405180830381855af49150503d805f81146120cf576040519150601f19603f3d011682016040523d82523d5f602084013e6120d4565b606091505b50915091506120e5868383876120ef565b9695505050505050565b6060831561215d5782515f03612156576001600160a01b0385163b6121565760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108fe565b50816109b3565b6109b383838151156121725781518083602001fd5b8060405162461bcd60e51b81526004016108fe91906121d5565b5f6020828403121561219c575f5ffd5b81356001600160e01b031981168114610897575f5ffd5b5f5b838110156121cd5781810151838201526020016121b5565b50505f910152565b602081525f82518060208401526121f38160408501602087016121b3565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610983575f5ffd5b5f5f6040838503121561222c575f5ffd5b823561223781612207565b946020939093013593505050565b5f5f5f60608486031215612257575f5ffd5b833561226281612207565b9250602084013561227281612207565b929592945050506040919091013590565b5f60208284031215612293575f5ffd5b813561089781612207565b803580151581146122ad575f5ffd5b919050565b5f5f5f606084860312156122c4575f5ffd5b83356001600160401b03811681146122da575f5ffd5b9250602084013591506122ef6040850161229e565b90509250925092565b5f60208284031215612308575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f60408385031215612334575f5ffd5b823561233f81612207565b915060208301356001600160401b03811115612359575f5ffd5b8301601f81018513612369575f5ffd5b80356001600160401b038111156123825761238261230f565b604051601f8201601f19908116603f011681016001600160401b03811182821017156123b0576123b061230f565b6040528181528282016020018710156123c7575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f604083850312156123f7575f5ffd5b823591506124076020840161229e565b90509250929050565b5f5f60408385031215612421575f5ffd5b823561242c81612207565b91506124076020840161229e565b5f5f83601f84011261244a575f5ffd5b5081356001600160401b03811115612460575f5ffd5b602083019150836020828501011115612477575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f5f60e08a8c031215612496575f5ffd5b89356124a181612207565b985060208a01356124b181612207565b975060408a01356124c181612207565b965060608a0135955060808a013560ff811681146124dd575f5ffd5b945060a08a01356001600160401b038111156124f7575f5ffd5b6125038c828d0161243a565b90955093505060c08a01356001600160401b03811115612521575f5ffd5b61252d8c828d0161243a565b915080935050809150509295985092959850929598565b5f5f60408385031215612555575f5ffd5b823561256081612207565b9150602083013561257081612207565b809150509250929050565b600181811c9082168061258f57607f821691505b6020821081036125ad57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b808201808211156107cc57634e487b7160e01b5f52601160045260245ffd5b5f6020828403121561267a575f5ffd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f602082840312156126dc575f5ffd5b815161089781612207565b601f82111561105a57805f5260205f20601f840160051c8101602085101561270c5750805b601f840160051c820191505b8181101561272b575f8155600101612718565b5050505050565b81516001600160401b0381111561274b5761274b61230f565b61275f81612759845461257b565b846126e7565b6020601f821160018114612791575f831561277a5750848201515b5f19600385901b1c1916600184901b17845561272b565b5f84815260208120601f198516915b828110156127c057878501518255602094850194600190920191016127a0565b50848210156127dd57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f82516127fd8184602087016121b3565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206de11e098828560ed8b32ec4c49b5259fec7bac640db1effdfd9fcc5e0efa77b64736f6c634300081b0033", + "code": "0x608060405260043610610233575f3560e01c806370a0823111610129578063a77f1516116100a8578063dd62ed3e1161006d578063dd62ed3e14610684578063e07baba6146106a3578063e30c3978146106e0578063f12506c1146106fd578063f2fde38b14610711575f5ffd5b8063a77f1516146105e7578063a86f9d9e14610608578063a9059cbb14610627578063b8f2e0c514610646578063bb86ef9314610665575f5ffd5b80638456cb59116100ee5780638456cb591461056f5780638abf6077146105835780638da5cb5b1461059757806395d89b41146105b4578063a457c2d7146105c8575f5ffd5b806370a08231146104d3578063715018a61461050757806379ba50971461051b5780637cf8ed0d1461052f5780637e4746341461054f575f5ffd5b806339509351116101b557806342966c681161017a57806342966c681461045757806349d12605146104765780634f1ef2861461048c57806352d1902d1461049f5780635c975abb146104b3575f5ffd5b806339509351146103af5780633ab76e9f146103ce5780633eb6b8cf146104055780633f4ba83a1461042457806340c10f1914610438575f5ffd5b806323b872dd116101fb57806323b872dd146102ea57806326afaadd146103095780633075db561461034d578063313ce567146103615780633659cfe61461038e575f5ffd5b806301ffc9a71461023757806306fdde031461026b578063095ea7b31461028c5780630ae74548146102ab57806318160ddd146102cc575b5f5ffd5b348015610242575f5ffd5b5061025661025136600461218c565b610730565b60405190151581526020015b60405180910390f35b348015610276575f5ffd5b5061027f6107d2565b60405161026291906121d5565b348015610297575f5ffd5b506102566102a636600461221b565b610862565b3480156102b6575f5ffd5b5061012f5461025690600160a01b900460ff1681565b3480156102d7575f5ffd5b5060fd545b604051908152602001610262565b3480156102f5575f5ffd5b50610256610304366004612245565b610879565b348015610314575f5ffd5b5061032e61012d5461012e546001600160a01b0390911691565b604080516001600160a01b039093168352602083019190915201610262565b348015610358575f5ffd5b5061025661089e565b34801561036c575f5ffd5b5061012d54600160a01b900460ff165b60405160ff9091168152602001610262565b348015610399575f5ffd5b506103ad6103a8366004612283565b6108b6565b005b3480156103ba575f5ffd5b506102566103c936600461221b565b610986565b3480156103d9575f5ffd5b506097546103ed906001600160a01b031681565b6040516001600160a01b039091168152602001610262565b348015610410575f5ffd5b506103ed61041f3660046122b2565b6109a7565b34801561042f575f5ffd5b506103ad6109bb565b348015610443575f5ffd5b506103ad61045236600461221b565b6109cf565b348015610462575f5ffd5b506103ad6104713660046122f8565b610ae9565b348015610481575f5ffd5b506102dc61012e5481565b6103ad61049a366004612323565b610c26565b3480156104aa575f5ffd5b506102dc610cdb565b3480156104be575f5ffd5b5061025660c954610100900460ff1660021490565b3480156104de575f5ffd5b506102dc6104ed366004612283565b6001600160a01b03165f90815260fb602052604090205490565b348015610512575f5ffd5b506103ad610d8c565b348015610526575f5ffd5b506103ad610d9d565b34801561053a575f5ffd5b5061012d546103ed906001600160a01b031681565b34801561055a575f5ffd5b5061012f546103ed906001600160a01b031681565b34801561057a575f5ffd5b506103ad610e14565b34801561058e575f5ffd5b506103ed610e27565b3480156105a2575f5ffd5b506033546001600160a01b03166103ed565b3480156105bf575f5ffd5b5061027f610e35565b3480156105d3575f5ffd5b506102566105e236600461221b565b610e44565b3480156105f2575f5ffd5b5061012d5461037c90600160a01b900460ff1681565b348015610613575f5ffd5b506103ed6106223660046123e6565b610ec9565b348015610632575f5ffd5b5061025661064136600461221b565b610ed5565b348015610651575f5ffd5b506103ad610660366004612410565b610ee2565b348015610670575f5ffd5b506103ad61067f36600461247e565b61105f565b34801561068f575f5ffd5b506102dc61069e366004612544565b61121f565b3480156106ae575f5ffd5b5060c9546106c8906201000090046001600160401b031681565b6040516001600160401b039091168152602001610262565b3480156106eb575f5ffd5b506065546001600160a01b03166103ed565b348015610708575f5ffd5b50610256611249565b34801561071c575f5ffd5b506103ad61072b366004612283565b611274565b5f6001600160e01b0319821663093e326b60e21b148061076057506001600160e01b0319821663bb86ef9360e01b145b8061077b57506001600160e01b0319821663b8f2e0c560e01b145b8061079657506001600160e01b031982166336372b0760e01b145b806107b157506001600160e01b0319821663a219a02560e01b145b806107cc57506001600160e01b031982166301ffc9a760e01b145b92915050565b606060fe80546107e19061257b565b80601f016020809104026020016040519081016040528092919081815260200182805461080d9061257b565b80156108585780601f1061082f57610100808354040283529160200191610858565b820191905f5260205f20905b81548152906001019060200180831161083b57829003601f168201915b5050505050905090565b5f3361086f8185856112e5565b5060019392505050565b5f33610886858285611408565b610891858585611480565b60019150505b9392505050565b5f60026108ad60c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670100000000000000000000000000000100961630036109075760405162461bcd60e51b81526004016108fe906125b3565b60405180910390fd5b7f00000000000000000000000001670100000000000000000000000000000100966001600160a01b0316610939611634565b6001600160a01b03161461095f5760405162461bcd60e51b81526004016108fe906125ff565b6109688161164f565b604080515f8082526020820190925261098391839190611657565b50565b5f3361086f818585610998838361121f565b6109a2919061264b565b6112e5565b5f6109b38484846117c1565b949350505050565b6109c3611813565b6109cd335f6118a3565b565b6109e360c954610100900460ff1660021490565b15610a015760405163bae6e2a960e01b815260040160405180910390fd5b6002610a0f60c95460ff1690565b60ff1603610a305760405163dfc60d8560e01b815260040160405180910390fd5b610a3a60026118ab565b610a42611249565b15610a605760405163270bf77560e01b815260040160405180910390fd5b61012f546001600160a01b031633819003610ac757826001600160a01b0316816001600160a01b03167fe502aa3e015149f4b76a0b2b5394e3100903c4af27c3ddc98385395d3f55252684604051610aba91815260200190565b60405180910390a3610ad0565b610ad0336118c1565b610ada838361193d565b50610ae560016118ab565b5050565b610afd60c954610100900460ff1660021490565b15610b1b5760405163bae6e2a960e01b815260040160405180910390fd5b6002610b2960c95460ff1690565b60ff1603610b4a5760405163dfc60d8560e01b815260040160405180910390fd5b610b5460026118ab565b610b5c611249565b15610c095761012f546040518281526001600160a01b0390911690339082907f638edf84937fb2534b47cac985ea84d6ea4f4076315b56ea1c784d26b87e2bcb9060200160405180910390a36040516340c10f1960e01b8152336004820152602481018390526001600160a01b038216906340c10f19906044015f604051808303815f87803b158015610bed575f5ffd5b505af1158015610bff573d5f5f3e3d5ffd5b5050505050610c12565b610c12336118c1565b610c1c3382611a07565b61098360016118ab565b6001600160a01b037f0000000000000000000000000167010000000000000000000000000000010096163003610c6e5760405162461bcd60e51b81526004016108fe906125b3565b7f00000000000000000000000001670100000000000000000000000000000100966001600160a01b0316610ca0611634565b6001600160a01b031614610cc65760405162461bcd60e51b81526004016108fe906125ff565b610ccf8261164f565b610ae582826001611657565b5f306001600160a01b037f00000000000000000000000001670100000000000000000000000000000100961614610d7a5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016108fe565b505f5160206128085f395f51905f5290565b610d94611b44565b6109cd5f611b9e565b60655433906001600160a01b03168114610e0b5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016108fe565b61098381611b9e565b610e1c611bb7565b6109cd3360016118a3565b5f610e30611634565b905090565b606060ff80546107e19061257b565b5f3381610e51828661121f565b905083811015610eb15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108fe565b610ebe82868684036112e5565b506001949350505050565b5f6108974684846117c1565b5f3361086f818585611480565b610ef660c954610100900460ff1660021490565b15610f145760405163bae6e2a960e01b815260040160405180910390fd5b6a195c98cc8c17dd985d5b1d60aa1b610f2e816001610ec9565b6001600160a01b0316336001600160a01b031614610f5f57604051630d85cccf60e11b815260040160405180910390fd5b6002610f6d60c95460ff1690565b60ff1603610f8e5760405163dfc60d8560e01b815260040160405180910390fd5b610f9860026118ab565b61012f546001600160a01b038481169116148015610fc9575061012f60149054906101000a900460ff161515821515145b15610fe75760405163c118d2f360e01b815260040160405180910390fd5b61012f80546001600160a01b0385166001600160a81b03199091168117600160a01b851515908102919091179092556040805191825260208201929092527fa6b6f959792843a48d9d03d13595f2de7c86ae0ce12ef0fa759dd911b205e565910160405180910390a161105a60016118ab565b505050565b5f54610100900460ff161580801561107d57505f54600160ff909116105b806110965750303b15801561109657505f5460ff166001145b6110f95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016108fe565b5f805460ff19166001179055801561111a575f805461ff0019166101001790555b6111248888611c28565b61112e8a8a611c64565b61119f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8b0181900481028201810190925289815292508991508890819084018382808284375f92019190915250611c9e92505050565b61012d805461012e89905560ff8816600160a01b026001600160a81b03199091166001600160a01b038b16171790558015611213575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6001600160a01b039182165f90815260fc6020908152604080832093909416825291909152205490565b61012f545f906001600160a01b031615801590610e3057505061012f54600160a01b900460ff161590565b61127c611b44565b606580546001600160a01b0383166001600160a01b031990911681179091556112ad6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001600160a01b0383166113475760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108fe565b6001600160a01b0382166113a85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108fe565b6001600160a01b038381165f81815260fc602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f611413848461121f565b90505f19811461147a578181101561146d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016108fe565b61147a84848484036112e5565b50505050565b6001600160a01b0383166114e45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108fe565b6001600160a01b0382166115465760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108fe565b611551838383611cce565b6001600160a01b0383165f90815260fb6020526040902054818110156115c85760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108fe565b6001600160a01b038085165f81815260fb602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116279086815260200190565b60405180910390a361147a565b5f5160206128085f395f51905f52546001600160a01b031690565b610983611b44565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561168a5761105a83611d09565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156116e4575060408051601f3d908101601f191682019092526116e19181019061266a565b60015b6117475760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016108fe565b5f5160206128085f395f51905f5281146117b55760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016108fe565b5061105a838383611da4565b5f6117cc8484611dc8565b9050811580156117e357506001600160a01b038116155b1561089757604051632b0d65db60e01b81526001600160401b0385166004820152602481018490526044016108fe565b61182760c954610100900460ff1660021490565b6118445760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610ae5611b44565b60c9805460ff191660ff92909216919091179055565b6a195c98cc8c17dd985d5b1d60aa1b6118e26033546001600160a01b031690565b6001600160a01b0316336001600160a01b03161415801561191f5750611909816001610ec9565b6001600160a01b0316336001600160a01b031614155b15610ae557604051630d85cccf60e11b815260040160405180910390fd5b6001600160a01b0382166119935760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016108fe565b61199e5f8383611cce565b8060fd5f8282546119af919061264b565b90915550506001600160a01b0382165f81815260fb60209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216611a675760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016108fe565b611a72825f83611cce565b6001600160a01b0382165f90815260fb602052604090205481811015611ae55760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016108fe565b6001600160a01b0383165f81815260fb60209081526040808320868603905560fd80548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6033546001600160a01b031633146109cd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fe565b606580546001600160a01b031916905561098381611e6a565b611bcb60c954610100900460ff1660021490565b15611be95760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611899565b6001600160a01b0382161580611c3c575080155b80611c4657504681145b15610ae55760405163c118d2f360e01b815260040160405180910390fd5b806001600160a01b038116611c8c5760405163538ba4f960e01b815260040160405180910390fd5b611c9583611ebb565b61105a82611f19565b5f54610100900460ff16611cc45760405162461bcd60e51b81526004016108fe90612681565b610ae58282611f89565b611ce260c954610100900460ff1660021490565b15611d005760405163bae6e2a960e01b815260040160405180910390fd5b61105a82611fc8565b6001600160a01b0381163b611d765760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016108fe565b5f5160206128085f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611dad83611ff1565b5f82511180611db95750805b1561105a5761147a8383612030565b6097545f906001600160a01b031680611df457604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611e46573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109b391906126cc565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16611ee15760405162461bcd60e51b81526004016108fe90612681565b611ee9612055565b611f076001600160a01b03821615611f015781611b9e565b33611b9e565b5060c9805461ff001916610100179055565b5f54610100900460ff16611f3f5760405162461bcd60e51b81526004016108fe90612681565b6001600160401b03461115611f675760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f54610100900460ff16611faf5760405162461bcd60e51b81526004016108fe90612681565b60fe611fbb8382612732565b5060ff61105a8282612732565b306001600160a01b0382160361098357604051630c292c9d60e21b815260040160405180910390fd5b611ffa81611d09565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061089783836040518060600160405280602781526020016128286027913961207b565b5f54610100900460ff166109cd5760405162461bcd60e51b81526004016108fe90612681565b60605f5f856001600160a01b03168560405161209791906127ec565b5f60405180830381855af49150503d805f81146120cf576040519150601f19603f3d011682016040523d82523d5f602084013e6120d4565b606091505b50915091506120e5868383876120ef565b9695505050505050565b6060831561215d5782515f03612156576001600160a01b0385163b6121565760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108fe565b50816109b3565b6109b383838151156121725781518083602001fd5b8060405162461bcd60e51b81526004016108fe91906121d5565b5f6020828403121561219c575f5ffd5b81356001600160e01b031981168114610897575f5ffd5b5f5b838110156121cd5781810151838201526020016121b5565b50505f910152565b602081525f82518060208401526121f38160408501602087016121b3565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610983575f5ffd5b5f5f6040838503121561222c575f5ffd5b823561223781612207565b946020939093013593505050565b5f5f5f60608486031215612257575f5ffd5b833561226281612207565b9250602084013561227281612207565b929592945050506040919091013590565b5f60208284031215612293575f5ffd5b813561089781612207565b803580151581146122ad575f5ffd5b919050565b5f5f5f606084860312156122c4575f5ffd5b83356001600160401b03811681146122da575f5ffd5b9250602084013591506122ef6040850161229e565b90509250925092565b5f60208284031215612308575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f60408385031215612334575f5ffd5b823561233f81612207565b915060208301356001600160401b03811115612359575f5ffd5b8301601f81018513612369575f5ffd5b80356001600160401b038111156123825761238261230f565b604051601f8201601f19908116603f011681016001600160401b03811182821017156123b0576123b061230f565b6040528181528282016020018710156123c7575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f604083850312156123f7575f5ffd5b823591506124076020840161229e565b90509250929050565b5f5f60408385031215612421575f5ffd5b823561242c81612207565b91506124076020840161229e565b5f5f83601f84011261244a575f5ffd5b5081356001600160401b03811115612460575f5ffd5b602083019150836020828501011115612477575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f5f60e08a8c031215612496575f5ffd5b89356124a181612207565b985060208a01356124b181612207565b975060408a01356124c181612207565b965060608a0135955060808a013560ff811681146124dd575f5ffd5b945060a08a01356001600160401b038111156124f7575f5ffd5b6125038c828d0161243a565b90955093505060c08a01356001600160401b03811115612521575f5ffd5b61252d8c828d0161243a565b915080935050809150509295985092959850929598565b5f5f60408385031215612555575f5ffd5b823561256081612207565b9150602083013561257081612207565b809150509250929050565b600181811c9082168061258f57607f821691505b6020821081036125ad57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b808201808211156107cc57634e487b7160e01b5f52601160045260245ffd5b5f6020828403121561267a575f5ffd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f602082840312156126dc575f5ffd5b815161089781612207565b601f82111561105a57805f5260205f20601f840160051c8101602085101561270c5750805b601f840160051c820191505b8181101561272b575f8155600101612718565b5050505050565b81516001600160401b0381111561274b5761274b61230f565b61275f81612759845461257b565b846126e7565b6020601f821160018114612791575f831561277a5750848201515b5f19600385901b1c1916600184901b17845561272b565b5f84815260208120601f198516915b828110156127c057878501518255602094850194600190920191016127a0565b50848210156127dd57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f82516127fd8184602087016121b3565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206de11e098828560ed8b32ec4c49b5259fec7bac640db1effdfd9fcc5e0efa77b64736f6c634300081b0033", "balance": "0x0" }, - "0x0167000000000000000000000000000000010097": { + "0x0167010000000000000000000000000000010097": { "contractName": "BridgedERC721", "storage": {}, - "code": "0x608060405260043610610207575f3560e01c80636352211e11610113578063a22cb4651161009d578063e07baba61161006d578063e07baba6146105c3578063e30c397814610600578063e985e9c51461061d578063ef8c4ae614610665578063f2fde38b14610684575f5ffd5b8063a22cb46514610547578063a86f9d9e14610566578063b88d4fde14610585578063c87b56dd146105a4575f5ffd5b80637cf8ed0d116100e35780637cf8ed0d146104ce5780638456cb59146104ee5780638abf6077146105025780638da5cb5b1461051657806395d89b4114610533575f5ffd5b80636352211e1461046857806370a0823114610487578063715018a6146104a657806379ba5097146104ba575f5ffd5b80633eb6b8cf1161019457806342966c681161016457806342966c68146103de57806349d12605146103fd5780634f1ef2861461042157806352d1902d146104345780635c975abb14610448575f5ffd5b80633eb6b8cf1461036d5780633f4ba83a1461038c57806340c10f19146103a057806342842e0e146103bf575f5ffd5b806323b872dd116101da57806323b872dd146102b857806326afaadd146102d75780633075db561461031b5780633659cfe61461032f5780633ab76e9f1461034e575f5ffd5b806301ffc9a71461020b57806306fdde031461023f578063081812fc14610260578063095ea7b314610297575b5f5ffd5b348015610216575f5ffd5b5061022a61022536600461253b565b6106a3565b60405190151581526020015b60405180910390f35b34801561024a575f5ffd5b506102536106e8565b60405161023691906125a3565b34801561026b575f5ffd5b5061027f61027a3660046125b5565b610779565b6040516001600160a01b039091168152602001610236565b3480156102a2575f5ffd5b506102b66102b13660046125e0565b61079f565b005b3480156102c3575f5ffd5b506102b66102d236600461260a565b6108b8565b3480156102e2575f5ffd5b506102fc61015f54610160546001600160a01b0390911691565b604080516001600160a01b039093168352602083019190915201610236565b348015610326575f5ffd5b5061022a6108e9565b34801561033a575f5ffd5b506102b6610349366004612648565b610901565b348015610359575f5ffd5b5060975461027f906001600160a01b031681565b348015610378575f5ffd5b5061027f610387366004612677565b6109c8565b348015610397575f5ffd5b506102b66109de565b3480156103ab575f5ffd5b506102b66103ba3660046125e0565b6109f2565b3480156103ca575f5ffd5b506102b66103d936600461260a565b610abd565b3480156103e9575f5ffd5b506102b66103f83660046125b5565b610ad7565b348015610408575f5ffd5b506104136101605481565b604051908152602001610236565b6102b661042f36600461275a565b610bd6565b34801561043f575f5ffd5b50610413610c8b565b348015610453575f5ffd5b5061022a60c954610100900460ff1660021490565b348015610473575f5ffd5b5061027f6104823660046125b5565b610d3c565b348015610492575f5ffd5b506104136104a1366004612648565b610d9c565b3480156104b1575f5ffd5b506102b6610e21565b3480156104c5575f5ffd5b506102b6610e32565b3480156104d9575f5ffd5b5061015f5461027f906001600160a01b031681565b3480156104f9575f5ffd5b506102b6610ea9565b34801561050d575f5ffd5b5061027f610ebc565b348015610521575f5ffd5b506033546001600160a01b031661027f565b34801561053e575f5ffd5b50610253610eca565b348015610552575f5ffd5b506102b66105613660046127a6565b610eda565b348015610571575f5ffd5b5061027f6105803660046127d9565b610ee5565b348015610590575f5ffd5b506102b661059f3660046127fa565b610ef1565b3480156105af575f5ffd5b506102536105be3660046125b5565b610f29565b3480156105ce575f5ffd5b5060c9546105e8906201000090046001600160401b031681565b6040516001600160401b039091168152602001610236565b34801561060b575f5ffd5b506065546001600160a01b031661027f565b348015610628575f5ffd5b5061022a610637366004612861565b6001600160a01b039182165f9081526101326020908152604080832093909416825291909152205460ff1690565b348015610670575f5ffd5b506102b661067f3660046128dc565b610f52565b34801561068f575f5ffd5b506102b661069e366004612648565b611104565b5f6001600160e01b0319821663093e326b60e21b14806106d357506001600160e01b031982166377c6257360e11b145b806106e257506106e282611175565b92915050565b606061012d80546106f890612989565b80601f016020809104026020016040519081016040528092919081815260200182805461072490612989565b801561076f5780601f106107465761010080835404028352916020019161076f565b820191905f5260205f20905b81548152906001019060200180831161075257829003601f168201915b5050505050905090565b5f610783826111c4565b505f90815261013160205260409020546001600160a01b031690565b5f6107a982610d3c565b9050806001600160a01b0316836001600160a01b03160361081b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061083757506108378133610637565b6108a95760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610812565b6108b38383611223565b505050565b6108c23382611291565b6108de5760405162461bcd60e51b8152600401610812906129c1565b6108b383838361130f565b5f60026108f860c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000100971630036109495760405162461bcd60e51b815260040161081290612a0e565b7f00000000000000000000000001670000000000000000000000000000000100976001600160a01b031661097b611481565b6001600160a01b0316146109a15760405162461bcd60e51b815260040161081290612a5a565b6109aa8161149c565b604080515f808252602082019092526109c5918391906114a4565b50565b5f6109d484848461160e565b90505b9392505050565b6109e6611660565b6109f0335f6116f0565b565b610a0660c954610100900460ff1660021490565b15610a245760405163bae6e2a960e01b815260040160405180910390fd5b6b195c98cdcc8c57dd985d5b1d60a21b610a3f816001610ee5565b6001600160a01b0316336001600160a01b031614610a7057604051630d85cccf60e11b815260040160405180910390fd5b6002610a7e60c95460ff1690565b60ff1603610a9f5760405163dfc60d8560e01b815260040160405180910390fd5b610aa960026116f8565b610ab3838361170e565b6108b360016116f8565b6108b383838360405180602001604052805f815250610ef1565b610aeb60c954610100900460ff1660021490565b15610b095760405163bae6e2a960e01b815260040160405180910390fd5b6b195c98cdcc8c57dd985d5b1d60a21b610b24816001610ee5565b6001600160a01b0316336001600160a01b031614610b5557604051630d85cccf60e11b815260040160405180910390fd5b6002610b6360c95460ff1690565b60ff1603610b845760405163dfc60d8560e01b815260040160405180910390fd5b610b8e60026116f8565b33610b9883610d3c565b6001600160a01b031614610bbf5760405163358bf3d960e01b815260040160405180910390fd5b610bc882611727565b610bd260016116f8565b5050565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000010097163003610c1e5760405162461bcd60e51b815260040161081290612a0e565b7f00000000000000000000000001670000000000000000000000000000000100976001600160a01b0316610c50611481565b6001600160a01b031614610c765760405162461bcd60e51b815260040161081290612a5a565b610c7f8261149c565b610bd2828260016114a4565b5f306001600160a01b037f00000000000000000000000001670000000000000000000000000000000100971614610d2a5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610812565b505f516020612e175f395f51905f5290565b5f81815261012f60205260408120546001600160a01b0316806106e25760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610812565b5f6001600160a01b038216610e055760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610812565b506001600160a01b03165f908152610130602052604090205490565b610e296117c9565b6109f05f611823565b60655433906001600160a01b03168114610ea05760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610812565b6109c581611823565b610eb161183c565b6109f03360016116f0565b5f610ec5611481565b905090565b606061012e80546106f890612989565b610bd23383836118ad565b5f6109d746848461160e565b610efb3383611291565b610f175760405162461bcd60e51b8152600401610812906129c1565b610f238484848461197b565b50505050565b61015f54610160546060916106e2916001600160a01b0390911690610f4d856119ae565b611a3d565b5f54610100900460ff1615808015610f7057505f54600160ff909116105b80610f895750303b158015610f8957505f5460ff166001145b610fec5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610812565b5f805460ff19166001179055801561100d575f805461ff0019166101001790555b6110178787611a87565b6110218989611ac3565b61109283838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8b0181900481028201810190925289815292508991508890819084018382808284375f92019190915250611afd92505050565b61015f80546001600160a01b0319166001600160a01b03891617905561016086905580156110f9575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b61110c6117c9565b606580546001600160a01b0383166001600160a01b0319909116811790915561113d6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f6001600160e01b031982166380ac58cd60e01b14806111a557506001600160e01b03198216635b5e139f60e01b145b806106e257506301ffc9a760e01b6001600160e01b03198316146106e2565b5f81815261012f60205260409020546001600160a01b03166109c55760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610812565b5f8181526101316020526040902080546001600160a01b0319166001600160a01b038416908117909155819061125882610d3c565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f5f61129c83610d3c565b9050806001600160a01b0316846001600160a01b031614806112e357506001600160a01b038082165f908152610132602090815260408083209388168352929052205460ff165b806113075750836001600160a01b03166112fc84610779565b6001600160a01b0316145b949350505050565b826001600160a01b031661132282610d3c565b6001600160a01b0316146113485760405162461bcd60e51b815260040161081290612aa6565b6001600160a01b0382166113aa5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610812565b6113b78383836001611b2d565b826001600160a01b03166113ca82610d3c565b6001600160a01b0316146113f05760405162461bcd60e51b815260040161081290612aa6565b5f8181526101316020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652610130855283862080545f190190559087168086528386208054600101905586865261012f90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b5f516020612e175f395f51905f52546001600160a01b031690565b6109c56117c9565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156114d7576108b383611b6d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611531575060408051601f3d908101601f1916820190925261152e91810190612aeb565b60015b6115945760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610812565b5f516020612e175f395f51905f5281146116025760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610812565b506108b3838383611c08565b5f6116198484611c2c565b90508115801561163057506001600160a01b038116155b156109d757604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610812565b61167460c954610100900460ff1660021490565b6116915760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610bd26117c9565b60c9805460ff191660ff92909216919091179055565b610bd2828260405180602001604052805f815250611cce565b5f61173182610d3c565b9050611740815f846001611b2d565b61174982610d3c565b5f8381526101316020908152604080832080546001600160a01b03199081169091556001600160a01b038516808552610130845282852080545f1901905587855261012f909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6033546001600160a01b031633146109f05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610812565b606580546001600160a01b03191690556109c581611d00565b61185060c954610100900460ff1660021490565b1561186e5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016116e6565b816001600160a01b0316836001600160a01b03160361190e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610812565b6001600160a01b038381165f8181526101326020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61198684848461130f565b61199284848484611d51565b610f235760405162461bcd60e51b815260040161081290612b02565b60605f6119ba83611e4e565b60010190505f816001600160401b038111156119d8576119d86126bd565b6040519080825280601f01601f191660200182016040528015611a02576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611a0c57509392505050565b6060611a53846001600160a01b03166014611f25565b611a5c846119ae565b83604051602001611a6f93929190612b54565b60405160208183030381529060405290509392505050565b6001600160a01b0382161580611a9b575080155b80611aa557504681145b15610bd25760405163c118d2f360e01b815260040160405180910390fd5b806001600160a01b038116611aeb5760405163538ba4f960e01b815260040160405180910390fd5b611af4836120ba565b6108b382612118565b5f54610100900460ff16611b235760405162461bcd60e51b815260040161081290612bdc565b610bd28282612188565b611b4160c954610100900460ff1660021490565b15611b5f5760405163bae6e2a960e01b815260040160405180910390fd5b611b68836121c9565b610f23565b6001600160a01b0381163b611bda5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610812565b5f516020612e175f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611c11836121f2565b5f82511180611c1d5750805b156108b357610f238383612231565b6097545f906001600160a01b031680611c5857604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611caa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113079190612c27565b611cd88383612256565b611ce45f848484611d51565b6108b35760405162461bcd60e51b815260040161081290612b02565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6001600160a01b0384163b15611e4357604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d94903390899088908890600401612c42565b6020604051808303815f875af1925050508015611dce575060408051601f3d908101601f19168201909252611dcb91810190612c74565b60015b611e29573d808015611dfb576040519150601f19603f3d011682016040523d82523d5f602084013e611e00565b606091505b5080515f03611e215760405162461bcd60e51b815260040161081290612b02565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611307565b506001949350505050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611e8c5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611eb8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611ed657662386f26fc10000830492506010015b6305f5e1008310611eee576305f5e100830492506008015b6127108310611f0257612710830492506004015b60648310611f14576064830492506002015b600a83106106e25760010192915050565b60605f611f33836002612ca3565b611f3e906002612cba565b6001600160401b03811115611f5557611f556126bd565b6040519080825280601f01601f191660200182016040528015611f7f576020820181803683370190505b509050600360fc1b815f81518110611f9957611f99612ccd565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611fc757611fc7612ccd565b60200101906001600160f81b03191690815f1a9053505f611fe9846002612ca3565b611ff4906001612cba565b90505b600181111561206b576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061202857612028612ccd565b1a60f81b82828151811061203e5761203e612ccd565b60200101906001600160f81b03191690815f1a90535060049490941c9361206481612ce1565b9050611ff7565b5083156109d75760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610812565b5f54610100900460ff166120e05760405162461bcd60e51b815260040161081290612bdc565b6120e86123ef565b6121066001600160a01b038216156121005781611823565b33611823565b5060c9805461ff001916610100179055565b5f54610100900460ff1661213e5760405162461bcd60e51b815260040161081290612bdc565b6001600160401b034611156121665760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f54610100900460ff166121ae5760405162461bcd60e51b815260040161081290612bdc565b61012d6121bb8382612d41565b5061012e6108b38282612d41565b306001600160a01b038216036109c557604051630c292c9d60e21b815260040160405180910390fd5b6121fb81611b6d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606109d78383604051806060016040528060278152602001612e3760279139612415565b6001600160a01b0382166122ac5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610812565b5f81815261012f60205260409020546001600160a01b0316156123115760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610812565b61231e5f83836001611b2d565b5f81815261012f60205260409020546001600160a01b0316156123835760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610812565b6001600160a01b0382165f818152610130602090815260408083208054600101905584835261012f90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f54610100900460ff166109f05760405162461bcd60e51b815260040161081290612bdc565b60605f5f856001600160a01b0316856040516124319190612dfb565b5f60405180830381855af49150503d805f8114612469576040519150601f19603f3d011682016040523d82523d5f602084013e61246e565b606091505b509150915061247f86838387612489565b9695505050505050565b606083156124f75782515f036124f0576001600160a01b0385163b6124f05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610812565b5081611307565b611307838381511561250c5781518083602001fd5b8060405162461bcd60e51b815260040161081291906125a3565b6001600160e01b0319811681146109c5575f5ffd5b5f6020828403121561254b575f5ffd5b81356109d781612526565b5f5b83811015612570578181015183820152602001612558565b50505f910152565b5f815180845261258f816020860160208601612556565b601f01601f19169290920160200192915050565b602081525f6109d76020830184612578565b5f602082840312156125c5575f5ffd5b5035919050565b6001600160a01b03811681146109c5575f5ffd5b5f5f604083850312156125f1575f5ffd5b82356125fc816125cc565b946020939093013593505050565b5f5f5f6060848603121561261c575f5ffd5b8335612627816125cc565b92506020840135612637816125cc565b929592945050506040919091013590565b5f60208284031215612658575f5ffd5b81356109d7816125cc565b80358015158114612672575f5ffd5b919050565b5f5f5f60608486031215612689575f5ffd5b83356001600160401b038116811461269f575f5ffd5b9250602084013591506126b460408501612663565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126126e0575f5ffd5b81356001600160401b038111156126f9576126f96126bd565b604051601f8201601f19908116603f011681016001600160401b0381118282101715612727576127276126bd565b60405281815283820160200185101561273e575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f6040838503121561276b575f5ffd5b8235612776816125cc565b915060208301356001600160401b03811115612790575f5ffd5b61279c858286016126d1565b9150509250929050565b5f5f604083850312156127b7575f5ffd5b82356127c2816125cc565b91506127d060208401612663565b90509250929050565b5f5f604083850312156127ea575f5ffd5b823591506127d060208401612663565b5f5f5f5f6080858703121561280d575f5ffd5b8435612818816125cc565b93506020850135612828816125cc565b92506040850135915060608501356001600160401b03811115612849575f5ffd5b612855878288016126d1565b91505092959194509250565b5f5f60408385031215612872575f5ffd5b823561287d816125cc565b9150602083013561288d816125cc565b809150509250929050565b5f5f83601f8401126128a8575f5ffd5b5081356001600160401b038111156128be575f5ffd5b6020830191508360208285010111156128d5575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f60c0898b0312156128f3575f5ffd5b88356128fe816125cc565b9750602089013561290e816125cc565b9650604089013561291e816125cc565b95506060890135945060808901356001600160401b0381111561293f575f5ffd5b61294b8b828c01612898565b90955093505060a08901356001600160401b03811115612969575f5ffd5b6129758b828c01612898565b999c989b5096995094979396929594505050565b600181811c9082168061299d57607f821691505b6020821081036129bb57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b5f60208284031215612afb575f5ffd5b5051919050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6832ba3432b932bab69d60b91b81525f8451612b77816009850160208901612556565b600160fe1b6009918401918201528451612b9881600a840160208901612556565b600981830101915050712f746f6b656e5552493f75696e743235363d60701b60018201528351612bcf816013840160208801612556565b0160130195945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215612c37575f5ffd5b81516109d7816125cc565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061247f90830184612578565b5f60208284031215612c84575f5ffd5b81516109d781612526565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176106e2576106e2612c8f565b808201808211156106e2576106e2612c8f565b634e487b7160e01b5f52603260045260245ffd5b5f81612cef57612cef612c8f565b505f190190565b601f8211156108b357805f5260205f20601f840160051c81016020851015612d1b5750805b601f840160051c820191505b81811015612d3a575f8155600101612d27565b5050505050565b81516001600160401b03811115612d5a57612d5a6126bd565b612d6e81612d688454612989565b84612cf6565b6020601f821160018114612da0575f8315612d895750848201515b5f19600385901b1c1916600184901b178455612d3a565b5f84815260208120601f198516915b82811015612dcf5787850151825560209485019460019092019101612daf565b5084821015612dec57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f8251612e0c818460208701612556565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212205ca793a2312f9b2fc8fc6bda4c8492cc141ddbe707fcc60e6d2cb7bff225a87a64736f6c634300081b0033", + "code": "0x608060405260043610610207575f3560e01c80636352211e11610113578063a22cb4651161009d578063e07baba61161006d578063e07baba6146105c3578063e30c397814610600578063e985e9c51461061d578063ef8c4ae614610665578063f2fde38b14610684575f5ffd5b8063a22cb46514610547578063a86f9d9e14610566578063b88d4fde14610585578063c87b56dd146105a4575f5ffd5b80637cf8ed0d116100e35780637cf8ed0d146104ce5780638456cb59146104ee5780638abf6077146105025780638da5cb5b1461051657806395d89b4114610533575f5ffd5b80636352211e1461046857806370a0823114610487578063715018a6146104a657806379ba5097146104ba575f5ffd5b80633eb6b8cf1161019457806342966c681161016457806342966c68146103de57806349d12605146103fd5780634f1ef2861461042157806352d1902d146104345780635c975abb14610448575f5ffd5b80633eb6b8cf1461036d5780633f4ba83a1461038c57806340c10f19146103a057806342842e0e146103bf575f5ffd5b806323b872dd116101da57806323b872dd146102b857806326afaadd146102d75780633075db561461031b5780633659cfe61461032f5780633ab76e9f1461034e575f5ffd5b806301ffc9a71461020b57806306fdde031461023f578063081812fc14610260578063095ea7b314610297575b5f5ffd5b348015610216575f5ffd5b5061022a61022536600461253b565b6106a3565b60405190151581526020015b60405180910390f35b34801561024a575f5ffd5b506102536106e8565b60405161023691906125a3565b34801561026b575f5ffd5b5061027f61027a3660046125b5565b610779565b6040516001600160a01b039091168152602001610236565b3480156102a2575f5ffd5b506102b66102b13660046125e0565b61079f565b005b3480156102c3575f5ffd5b506102b66102d236600461260a565b6108b8565b3480156102e2575f5ffd5b506102fc61015f54610160546001600160a01b0390911691565b604080516001600160a01b039093168352602083019190915201610236565b348015610326575f5ffd5b5061022a6108e9565b34801561033a575f5ffd5b506102b6610349366004612648565b610901565b348015610359575f5ffd5b5060975461027f906001600160a01b031681565b348015610378575f5ffd5b5061027f610387366004612677565b6109c8565b348015610397575f5ffd5b506102b66109de565b3480156103ab575f5ffd5b506102b66103ba3660046125e0565b6109f2565b3480156103ca575f5ffd5b506102b66103d936600461260a565b610abd565b3480156103e9575f5ffd5b506102b66103f83660046125b5565b610ad7565b348015610408575f5ffd5b506104136101605481565b604051908152602001610236565b6102b661042f36600461275a565b610bd6565b34801561043f575f5ffd5b50610413610c8b565b348015610453575f5ffd5b5061022a60c954610100900460ff1660021490565b348015610473575f5ffd5b5061027f6104823660046125b5565b610d3c565b348015610492575f5ffd5b506104136104a1366004612648565b610d9c565b3480156104b1575f5ffd5b506102b6610e21565b3480156104c5575f5ffd5b506102b6610e32565b3480156104d9575f5ffd5b5061015f5461027f906001600160a01b031681565b3480156104f9575f5ffd5b506102b6610ea9565b34801561050d575f5ffd5b5061027f610ebc565b348015610521575f5ffd5b506033546001600160a01b031661027f565b34801561053e575f5ffd5b50610253610eca565b348015610552575f5ffd5b506102b66105613660046127a6565b610eda565b348015610571575f5ffd5b5061027f6105803660046127d9565b610ee5565b348015610590575f5ffd5b506102b661059f3660046127fa565b610ef1565b3480156105af575f5ffd5b506102536105be3660046125b5565b610f29565b3480156105ce575f5ffd5b5060c9546105e8906201000090046001600160401b031681565b6040516001600160401b039091168152602001610236565b34801561060b575f5ffd5b506065546001600160a01b031661027f565b348015610628575f5ffd5b5061022a610637366004612861565b6001600160a01b039182165f9081526101326020908152604080832093909416825291909152205460ff1690565b348015610670575f5ffd5b506102b661067f3660046128dc565b610f52565b34801561068f575f5ffd5b506102b661069e366004612648565b611104565b5f6001600160e01b0319821663093e326b60e21b14806106d357506001600160e01b031982166377c6257360e11b145b806106e257506106e282611175565b92915050565b606061012d80546106f890612989565b80601f016020809104026020016040519081016040528092919081815260200182805461072490612989565b801561076f5780601f106107465761010080835404028352916020019161076f565b820191905f5260205f20905b81548152906001019060200180831161075257829003601f168201915b5050505050905090565b5f610783826111c4565b505f90815261013160205260409020546001600160a01b031690565b5f6107a982610d3c565b9050806001600160a01b0316836001600160a01b03160361081b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061083757506108378133610637565b6108a95760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610812565b6108b38383611223565b505050565b6108c23382611291565b6108de5760405162461bcd60e51b8152600401610812906129c1565b6108b383838361130f565b5f60026108f860c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670100000000000000000000000000000100971630036109495760405162461bcd60e51b815260040161081290612a0e565b7f00000000000000000000000001670100000000000000000000000000000100976001600160a01b031661097b611481565b6001600160a01b0316146109a15760405162461bcd60e51b815260040161081290612a5a565b6109aa8161149c565b604080515f808252602082019092526109c5918391906114a4565b50565b5f6109d484848461160e565b90505b9392505050565b6109e6611660565b6109f0335f6116f0565b565b610a0660c954610100900460ff1660021490565b15610a245760405163bae6e2a960e01b815260040160405180910390fd5b6b195c98cdcc8c57dd985d5b1d60a21b610a3f816001610ee5565b6001600160a01b0316336001600160a01b031614610a7057604051630d85cccf60e11b815260040160405180910390fd5b6002610a7e60c95460ff1690565b60ff1603610a9f5760405163dfc60d8560e01b815260040160405180910390fd5b610aa960026116f8565b610ab3838361170e565b6108b360016116f8565b6108b383838360405180602001604052805f815250610ef1565b610aeb60c954610100900460ff1660021490565b15610b095760405163bae6e2a960e01b815260040160405180910390fd5b6b195c98cdcc8c57dd985d5b1d60a21b610b24816001610ee5565b6001600160a01b0316336001600160a01b031614610b5557604051630d85cccf60e11b815260040160405180910390fd5b6002610b6360c95460ff1690565b60ff1603610b845760405163dfc60d8560e01b815260040160405180910390fd5b610b8e60026116f8565b33610b9883610d3c565b6001600160a01b031614610bbf5760405163358bf3d960e01b815260040160405180910390fd5b610bc882611727565b610bd260016116f8565b5050565b6001600160a01b037f0000000000000000000000000167010000000000000000000000000000010097163003610c1e5760405162461bcd60e51b815260040161081290612a0e565b7f00000000000000000000000001670100000000000000000000000000000100976001600160a01b0316610c50611481565b6001600160a01b031614610c765760405162461bcd60e51b815260040161081290612a5a565b610c7f8261149c565b610bd2828260016114a4565b5f306001600160a01b037f00000000000000000000000001670100000000000000000000000000000100971614610d2a5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610812565b505f516020612e175f395f51905f5290565b5f81815261012f60205260408120546001600160a01b0316806106e25760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610812565b5f6001600160a01b038216610e055760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610812565b506001600160a01b03165f908152610130602052604090205490565b610e296117c9565b6109f05f611823565b60655433906001600160a01b03168114610ea05760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610812565b6109c581611823565b610eb161183c565b6109f03360016116f0565b5f610ec5611481565b905090565b606061012e80546106f890612989565b610bd23383836118ad565b5f6109d746848461160e565b610efb3383611291565b610f175760405162461bcd60e51b8152600401610812906129c1565b610f238484848461197b565b50505050565b61015f54610160546060916106e2916001600160a01b0390911690610f4d856119ae565b611a3d565b5f54610100900460ff1615808015610f7057505f54600160ff909116105b80610f895750303b158015610f8957505f5460ff166001145b610fec5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610812565b5f805460ff19166001179055801561100d575f805461ff0019166101001790555b6110178787611a87565b6110218989611ac3565b61109283838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8b0181900481028201810190925289815292508991508890819084018382808284375f92019190915250611afd92505050565b61015f80546001600160a01b0319166001600160a01b03891617905561016086905580156110f9575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b61110c6117c9565b606580546001600160a01b0383166001600160a01b0319909116811790915561113d6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f6001600160e01b031982166380ac58cd60e01b14806111a557506001600160e01b03198216635b5e139f60e01b145b806106e257506301ffc9a760e01b6001600160e01b03198316146106e2565b5f81815261012f60205260409020546001600160a01b03166109c55760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610812565b5f8181526101316020526040902080546001600160a01b0319166001600160a01b038416908117909155819061125882610d3c565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f5f61129c83610d3c565b9050806001600160a01b0316846001600160a01b031614806112e357506001600160a01b038082165f908152610132602090815260408083209388168352929052205460ff165b806113075750836001600160a01b03166112fc84610779565b6001600160a01b0316145b949350505050565b826001600160a01b031661132282610d3c565b6001600160a01b0316146113485760405162461bcd60e51b815260040161081290612aa6565b6001600160a01b0382166113aa5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610812565b6113b78383836001611b2d565b826001600160a01b03166113ca82610d3c565b6001600160a01b0316146113f05760405162461bcd60e51b815260040161081290612aa6565b5f8181526101316020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652610130855283862080545f190190559087168086528386208054600101905586865261012f90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b5f516020612e175f395f51905f52546001600160a01b031690565b6109c56117c9565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156114d7576108b383611b6d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611531575060408051601f3d908101601f1916820190925261152e91810190612aeb565b60015b6115945760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610812565b5f516020612e175f395f51905f5281146116025760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610812565b506108b3838383611c08565b5f6116198484611c2c565b90508115801561163057506001600160a01b038116155b156109d757604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610812565b61167460c954610100900460ff1660021490565b6116915760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610bd26117c9565b60c9805460ff191660ff92909216919091179055565b610bd2828260405180602001604052805f815250611cce565b5f61173182610d3c565b9050611740815f846001611b2d565b61174982610d3c565b5f8381526101316020908152604080832080546001600160a01b03199081169091556001600160a01b038516808552610130845282852080545f1901905587855261012f909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6033546001600160a01b031633146109f05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610812565b606580546001600160a01b03191690556109c581611d00565b61185060c954610100900460ff1660021490565b1561186e5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016116e6565b816001600160a01b0316836001600160a01b03160361190e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610812565b6001600160a01b038381165f8181526101326020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61198684848461130f565b61199284848484611d51565b610f235760405162461bcd60e51b815260040161081290612b02565b60605f6119ba83611e4e565b60010190505f816001600160401b038111156119d8576119d86126bd565b6040519080825280601f01601f191660200182016040528015611a02576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611a0c57509392505050565b6060611a53846001600160a01b03166014611f25565b611a5c846119ae565b83604051602001611a6f93929190612b54565b60405160208183030381529060405290509392505050565b6001600160a01b0382161580611a9b575080155b80611aa557504681145b15610bd25760405163c118d2f360e01b815260040160405180910390fd5b806001600160a01b038116611aeb5760405163538ba4f960e01b815260040160405180910390fd5b611af4836120ba565b6108b382612118565b5f54610100900460ff16611b235760405162461bcd60e51b815260040161081290612bdc565b610bd28282612188565b611b4160c954610100900460ff1660021490565b15611b5f5760405163bae6e2a960e01b815260040160405180910390fd5b611b68836121c9565b610f23565b6001600160a01b0381163b611bda5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610812565b5f516020612e175f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611c11836121f2565b5f82511180611c1d5750805b156108b357610f238383612231565b6097545f906001600160a01b031680611c5857604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611caa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113079190612c27565b611cd88383612256565b611ce45f848484611d51565b6108b35760405162461bcd60e51b815260040161081290612b02565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6001600160a01b0384163b15611e4357604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d94903390899088908890600401612c42565b6020604051808303815f875af1925050508015611dce575060408051601f3d908101601f19168201909252611dcb91810190612c74565b60015b611e29573d808015611dfb576040519150601f19603f3d011682016040523d82523d5f602084013e611e00565b606091505b5080515f03611e215760405162461bcd60e51b815260040161081290612b02565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611307565b506001949350505050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611e8c5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611eb8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611ed657662386f26fc10000830492506010015b6305f5e1008310611eee576305f5e100830492506008015b6127108310611f0257612710830492506004015b60648310611f14576064830492506002015b600a83106106e25760010192915050565b60605f611f33836002612ca3565b611f3e906002612cba565b6001600160401b03811115611f5557611f556126bd565b6040519080825280601f01601f191660200182016040528015611f7f576020820181803683370190505b509050600360fc1b815f81518110611f9957611f99612ccd565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611fc757611fc7612ccd565b60200101906001600160f81b03191690815f1a9053505f611fe9846002612ca3565b611ff4906001612cba565b90505b600181111561206b576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061202857612028612ccd565b1a60f81b82828151811061203e5761203e612ccd565b60200101906001600160f81b03191690815f1a90535060049490941c9361206481612ce1565b9050611ff7565b5083156109d75760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610812565b5f54610100900460ff166120e05760405162461bcd60e51b815260040161081290612bdc565b6120e86123ef565b6121066001600160a01b038216156121005781611823565b33611823565b5060c9805461ff001916610100179055565b5f54610100900460ff1661213e5760405162461bcd60e51b815260040161081290612bdc565b6001600160401b034611156121665760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f54610100900460ff166121ae5760405162461bcd60e51b815260040161081290612bdc565b61012d6121bb8382612d41565b5061012e6108b38282612d41565b306001600160a01b038216036109c557604051630c292c9d60e21b815260040160405180910390fd5b6121fb81611b6d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606109d78383604051806060016040528060278152602001612e3760279139612415565b6001600160a01b0382166122ac5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610812565b5f81815261012f60205260409020546001600160a01b0316156123115760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610812565b61231e5f83836001611b2d565b5f81815261012f60205260409020546001600160a01b0316156123835760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610812565b6001600160a01b0382165f818152610130602090815260408083208054600101905584835261012f90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f54610100900460ff166109f05760405162461bcd60e51b815260040161081290612bdc565b60605f5f856001600160a01b0316856040516124319190612dfb565b5f60405180830381855af49150503d805f8114612469576040519150601f19603f3d011682016040523d82523d5f602084013e61246e565b606091505b509150915061247f86838387612489565b9695505050505050565b606083156124f75782515f036124f0576001600160a01b0385163b6124f05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610812565b5081611307565b611307838381511561250c5781518083602001fd5b8060405162461bcd60e51b815260040161081291906125a3565b6001600160e01b0319811681146109c5575f5ffd5b5f6020828403121561254b575f5ffd5b81356109d781612526565b5f5b83811015612570578181015183820152602001612558565b50505f910152565b5f815180845261258f816020860160208601612556565b601f01601f19169290920160200192915050565b602081525f6109d76020830184612578565b5f602082840312156125c5575f5ffd5b5035919050565b6001600160a01b03811681146109c5575f5ffd5b5f5f604083850312156125f1575f5ffd5b82356125fc816125cc565b946020939093013593505050565b5f5f5f6060848603121561261c575f5ffd5b8335612627816125cc565b92506020840135612637816125cc565b929592945050506040919091013590565b5f60208284031215612658575f5ffd5b81356109d7816125cc565b80358015158114612672575f5ffd5b919050565b5f5f5f60608486031215612689575f5ffd5b83356001600160401b038116811461269f575f5ffd5b9250602084013591506126b460408501612663565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126126e0575f5ffd5b81356001600160401b038111156126f9576126f96126bd565b604051601f8201601f19908116603f011681016001600160401b0381118282101715612727576127276126bd565b60405281815283820160200185101561273e575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f6040838503121561276b575f5ffd5b8235612776816125cc565b915060208301356001600160401b03811115612790575f5ffd5b61279c858286016126d1565b9150509250929050565b5f5f604083850312156127b7575f5ffd5b82356127c2816125cc565b91506127d060208401612663565b90509250929050565b5f5f604083850312156127ea575f5ffd5b823591506127d060208401612663565b5f5f5f5f6080858703121561280d575f5ffd5b8435612818816125cc565b93506020850135612828816125cc565b92506040850135915060608501356001600160401b03811115612849575f5ffd5b612855878288016126d1565b91505092959194509250565b5f5f60408385031215612872575f5ffd5b823561287d816125cc565b9150602083013561288d816125cc565b809150509250929050565b5f5f83601f8401126128a8575f5ffd5b5081356001600160401b038111156128be575f5ffd5b6020830191508360208285010111156128d5575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f60c0898b0312156128f3575f5ffd5b88356128fe816125cc565b9750602089013561290e816125cc565b9650604089013561291e816125cc565b95506060890135945060808901356001600160401b0381111561293f575f5ffd5b61294b8b828c01612898565b90955093505060a08901356001600160401b03811115612969575f5ffd5b6129758b828c01612898565b999c989b5096995094979396929594505050565b600181811c9082168061299d57607f821691505b6020821081036129bb57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b5f60208284031215612afb575f5ffd5b5051919050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6832ba3432b932bab69d60b91b81525f8451612b77816009850160208901612556565b600160fe1b6009918401918201528451612b9881600a840160208901612556565b600981830101915050712f746f6b656e5552493f75696e743235363d60701b60018201528351612bcf816013840160208801612556565b0160130195945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215612c37575f5ffd5b81516109d7816125cc565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061247f90830184612578565b5f60208284031215612c84575f5ffd5b81516109d781612526565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176106e2576106e2612c8f565b808201808211156106e2576106e2612c8f565b634e487b7160e01b5f52603260045260245ffd5b5f81612cef57612cef612c8f565b505f190190565b601f8211156108b357805f5260205f20601f840160051c81016020851015612d1b5750805b601f840160051c820191505b81811015612d3a575f8155600101612d27565b5050505050565b81516001600160401b03811115612d5a57612d5a6126bd565b612d6e81612d688454612989565b84612cf6565b6020601f821160018114612da0575f8315612d895750848201515b5f19600385901b1c1916600184901b178455612d3a565b5f84815260208120601f198516915b82811015612dcf5787850151825560209485019460019092019101612daf565b5084821015612dec57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f8251612e0c818460208701612556565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212205ca793a2312f9b2fc8fc6bda4c8492cc141ddbe707fcc60e6d2cb7bff225a87a64736f6c634300081b0033", "balance": "0x0" }, - "0x0167000000000000000000000000000000010098": { + "0x0167010000000000000000000000000000010098": { "contractName": "BridgedERC1155", "storage": {}, - "code": "0x6080604052600436106101e5575f3560e01c8063715018a611610108578063a86f9d9e1161009d578063e30c39781161006d578063e30c39781461056f578063e985e9c51461058c578063ef8c4ae6146105d4578063f242432a146105f3578063f2fde38b14610612575f5ffd5b8063a86f9d9e146104d5578063b390c0ab146104f4578063d81d0a1514610513578063e07baba614610532575f5ffd5b80638abf6077116100d85780638abf6077146104715780638da5cb5b1461048557806395d89b41146104a2578063a22cb465146104b6575f5ffd5b8063715018a61461041557806379ba5097146104295780637cf8ed0d1461043d5780638456cb591461045d575f5ffd5b80633ab76e9f1161017e5780634e1273f41161014e5780634e1273f4146103a25780634f1ef286146103ce57806352d1902d146103e15780635c975abb146103f5575f5ffd5b80633ab76e9f146103225780633eb6b8cf146103595780633f4ba83a1461037857806349d126051461038c575f5ffd5b806326afaadd116101b957806326afaadd1461028a5780632eb2c2d6146102ce5780633075db56146102ef5780633659cfe614610303575f5ffd5b8062fdd58e146101e957806301ffc9a71461021b57806306fdde031461024a5780630e89341c1461026b575b5f5ffd5b3480156101f4575f5ffd5b506102086102033660046126ae565b610631565b6040519081526020015b60405180910390f35b348015610226575f5ffd5b5061023a6102353660046126ed565b6106cb565b6040519015158152602001610212565b348015610255575f5ffd5b5061025e61070a565b6040516102129190612755565b348015610276575f5ffd5b5061025e610285366004612767565b610797565b348015610295575f5ffd5b506102af61015f54610160546001600160a01b0390911691565b604080516001600160a01b039093168352602083019190915201610212565b3480156102d9575f5ffd5b506102ed6102e83660046128c0565b61082a565b005b3480156102fa575f5ffd5b5061023a610876565b34801561030e575f5ffd5b506102ed61031d366004612970565b61088e565b34801561032d575f5ffd5b50609754610341906001600160a01b031681565b6040516001600160a01b039091168152602001610212565b348015610364575f5ffd5b5061034161037336600461299f565b610955565b348015610383575f5ffd5b506102ed61096b565b348015610397575f5ffd5b506102086101605481565b3480156103ad575f5ffd5b506103c16103bc3660046129e5565b61097f565b6040516102129190612aee565b6102ed6103dc366004612b00565b610a9e565b3480156103ec575f5ffd5b50610208610b57565b348015610400575f5ffd5b5061023a60c954610100900460ff1660021490565b348015610420575f5ffd5b506102ed610c09565b348015610434575f5ffd5b506102ed610c1a565b348015610448575f5ffd5b5061015f54610341906001600160a01b031681565b348015610468575f5ffd5b506102ed610c91565b34801561047c575f5ffd5b50610341610ca4565b348015610490575f5ffd5b506033546001600160a01b0316610341565b3480156104ad575f5ffd5b5061025e610cb2565b3480156104c1575f5ffd5b506102ed6104d0366004612b42565b610cc0565b3480156104e0575f5ffd5b506103416104ef366004612b75565b610ccb565b3480156104ff575f5ffd5b506102ed61050e366004612b96565b610cd7565b34801561051e575f5ffd5b506102ed61052d366004612bfd565b610da9565b34801561053d575f5ffd5b5060c954610557906201000090046001600160401b031681565b6040516001600160401b039091168152602001610212565b34801561057a575f5ffd5b506065546001600160a01b0316610341565b348015610597575f5ffd5b5061023a6105a6366004612c7d565b6001600160a01b039182165f90815261012e6020908152604080832093909416825291909152205460ff1690565b3480156105df575f5ffd5b506102ed6105ee366004612cf1565b610eed565b3480156105fe575f5ffd5b506102ed61060d366004612d9e565b61106d565b34801561061d575f5ffd5b506102ed61062c366004612970565b6110b2565b5f6001600160a01b0383166106a05760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b505f81815261012d602090815260408083206001600160a01b03861684529091529020545b92915050565b5f6001600160e01b03198216634d22606360e01b14806106fb57506001600160e01b031982166377c6257360e11b145b806106c557506106c582611123565b610162805461071890612df5565b80601f016020809104026020016040519081016040528092919081815260200182805461074490612df5565b801561078f5780601f106107665761010080835404028352916020019161078f565b820191905f5260205f20905b81548152906001019060200180831161077257829003601f168201915b505050505081565b606061012f80546107a790612df5565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390612df5565b801561081e5780601f106107f55761010080835404028352916020019161081e565b820191905f5260205f20905b81548152906001019060200180831161080157829003601f168201915b50505050509050919050565b6001600160a01b038516331480610846575061084685336105a6565b6108625760405162461bcd60e51b815260040161069790612e2d565b61086f8585858585611172565b5050505050565b5f600261088560c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000100981630036108d65760405162461bcd60e51b815260040161069790612e7b565b7f00000000000000000000000001670000000000000000000000000000000100986001600160a01b031661090861130d565b6001600160a01b03161461092e5760405162461bcd60e51b815260040161069790612ec7565b61093781611328565b604080515f8082526020820190925261095291839190611330565b50565b5f61096184848461149a565b90505b9392505050565b6109736114ec565b61097d335f61157c565b565b606081518351146109e45760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610697565b5f83516001600160401b038111156109fe576109fe61277e565b604051908082528060200260200182016040528015610a27578160200160208202803683370190505b5090505f5b8451811015610a9657610a71858281518110610a4a57610a4a612f13565b6020026020010151858381518110610a6457610a64612f13565b6020026020010151610631565b828281518110610a8357610a83612f13565b6020908102919091010152600101610a2c565b509392505050565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000010098163003610ae65760405162461bcd60e51b815260040161069790612e7b565b7f00000000000000000000000001670000000000000000000000000000000100986001600160a01b0316610b1861130d565b6001600160a01b031614610b3e5760405162461bcd60e51b815260040161069790612ec7565b610b4782611328565b610b5382826001611330565b5050565b5f306001600160a01b037f00000000000000000000000001670000000000000000000000000000000100981614610bf65760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610697565b505f5160206134ec5f395f51905f525b90565b610c11611580565b61097d5f6115da565b60655433906001600160a01b03168114610c885760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610697565b610952816115da565b610c996115f3565b61097d33600161157c565b5f610cad61130d565b905090565b610161805461071890612df5565b610b53338383611664565b5f61096446848461149a565b610ceb60c954610100900460ff1660021490565b15610d095760405163bae6e2a960e01b815260040160405180910390fd5b6c195c98cc4c4d4d57dd985d5b1d609a1b610d25816001610ccb565b6001600160a01b0316336001600160a01b031614610d5657604051630d85cccf60e11b815260040160405180910390fd5b6002610d6460c95460ff1690565b60ff1603610d855760405163dfc60d8560e01b815260040160405180910390fd5b610d8f6002611744565b610d9a33848461175a565b610da46001611744565b505050565b610dbd60c954610100900460ff1660021490565b15610ddb5760405163bae6e2a960e01b815260040160405180910390fd5b6c195c98cc4c4d4d57dd985d5b1d609a1b610df7816001610ccb565b6001600160a01b0316336001600160a01b031614610e2857604051630d85cccf60e11b815260040160405180910390fd5b6002610e3660c95460ff1690565b60ff1603610e575760405163dfc60d8560e01b815260040160405180910390fd5b610e616002611744565b610edb868686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050604080516020808a028281018201909352898252909350899250889182918501908490808284375f920182905250604080516020810190915290815292506118ee915050565b610ee56001611744565b505050505050565b5f54610100900460ff1615808015610f0b57505f54600160ff909116105b80610f245750303b158015610f2457505f5460ff166001145b610f875760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610697565b5f805460ff191660011790558015610fa8575f805461ff0019166101001790555b610fb28787611a70565b610fbc8989611aac565b610fdd610fd8888860405180602001604052805f815250611ae6565b611b30565b61015f80546001600160a01b0319166001600160a01b03891617905561016086905561016161100d858783612f6b565b5061016261101c838583612f6b565b508015611062575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6001600160a01b038516331480611089575061108985336105a6565b6110a55760405162461bcd60e51b815260040161069790612e2d565b61086f8585858585611b5f565b6110ba611580565b606580546001600160a01b0383166001600160a01b031990911681179091556110eb6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f6001600160e01b03198216636cdb3d1360e11b148061115357506001600160e01b031982166303a24d0760e21b145b806106c557506301ffc9a760e01b6001600160e01b03198316146106c5565b81518351146111935760405162461bcd60e51b815260040161069790613024565b6001600160a01b0384166111b95760405162461bcd60e51b81526004016106979061306c565b336111c8818787878787611c8e565b5f5b84518110156112a7575f8582815181106111e6576111e6612f13565b602002602001015190505f85838151811061120357611203612f13565b6020908102919091018101515f84815261012d835260408082206001600160a01b038e1683529093529190912054909150818110156112545760405162461bcd60e51b8152600401610697906130b1565b5f83815261012d602090815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061129390849061310f565b9091555050600190930192506111ca915050565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516112f7929190613122565b60405180910390a4610ee5818787878787611cce565b5f5160206134ec5f395f51905f52546001600160a01b031690565b610952611580565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561136357610da483611e28565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113bd575060408051601f3d908101601f191682019092526113ba9181019061314f565b60015b6114205760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610697565b5f5160206134ec5f395f51905f52811461148e5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610697565b50610da4838383611ec3565b5f6114a58484611eed565b9050811580156114bc57506001600160a01b038116155b1561096457604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610697565b61150060c954610100900460ff1660021490565b61151d5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610b535b6033546001600160a01b0316331461097d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610697565b606580546001600160a01b031916905561095281611f97565b61160760c954610100900460ff1660021490565b156116255760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611572565b816001600160a01b0316836001600160a01b0316036116d75760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610697565b6001600160a01b038381165f81815261012e6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60c9805460ff191660ff92909216919091179055565b6001600160a01b0383166117bc5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610697565b335f6117c784611fe8565b90505f6117d384611fe8565b90506117f183875f858560405180602001604052805f815250611c8e565b5f85815261012d602090815260408083206001600160a01b038a168452909152902054848110156118705760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610697565b5f86815261012d602090815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a460408051602081019091525f90525b50505050505050565b6001600160a01b03841661194e5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610697565b815183511461196f5760405162461bcd60e51b815260040161069790613024565b3361197e815f87878787611c8e565b5f5b8451811015611a0a5783818151811061199b5761199b612f13565b602002602001015161012d5f8784815181106119b9576119b9612f13565b602002602001015181526020019081526020015f205f886001600160a01b03166001600160a01b031681526020019081526020015f205f8282546119fd919061310f565b9091555050600101611980565b50846001600160a01b03165f6001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611a5a929190613122565b60405180910390a461086f815f87878787611cce565b6001600160a01b0382161580611a84575080155b80611a8e57504681145b15610b535760405163c118d2f360e01b815260040160405180910390fd5b806001600160a01b038116611ad45760405163538ba4f960e01b815260040160405180910390fd5b611add83612031565b610da48261208f565b6060611afc846001600160a01b031660146120ff565b611b0584612294565b83604051602001611b1893929190613166565b60405160208183030381529060405290509392505050565b5f54610100900460ff16611b565760405162461bcd60e51b8152600401610697906131ee565b61095281612323565b6001600160a01b038416611b855760405162461bcd60e51b81526004016106979061306c565b335f611b9085611fe8565b90505f611b9c85611fe8565b9050611bac838989858589611c8e565b5f86815261012d602090815260408083206001600160a01b038c16845290915290205485811015611bef5760405162461bcd60e51b8152600401610697906130b1565b5f87815261012d602090815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611c2e90849061310f565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611062848a8a8a8a8a612352565b611ca260c954610100900460ff1660021490565b15611cc05760405163bae6e2a960e01b815260040160405180910390fd5b611cc98461240c565b610ee5565b6001600160a01b0384163b15610ee55760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611d129089908990889088908890600401613239565b6020604051808303815f875af1925050508015611d4c575060408051601f3d908101601f19168201909252611d4991810190613296565b60015b611df857611d586132b1565b806308c379a003611d915750611d6c6132c9565b80611d775750611d93565b8060405162461bcd60e51b81526004016106979190612755565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610697565b6001600160e01b0319811663bc197c8160e01b146118e55760405162461bcd60e51b815260040161069790613343565b6001600160a01b0381163b611e955760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610697565b5f5160206134ec5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611ecc83612435565b5f82511180611ed85750805b15610da457611ee78383612474565b50505050565b6097545f906001600160a01b031680611f1957604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611f6b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f8f919061338b565b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6040805160018082528183019092526060915f91906020808301908036833701905050905082815f8151811061202057612020612f13565b602090810291909101015292915050565b5f54610100900460ff166120575760405162461bcd60e51b8152600401610697906131ee565b61205f612499565b61207d6001600160a01b0382161561207757816115da565b336115da565b5060c9805461ff001916610100179055565b5f54610100900460ff166120b55760405162461bcd60e51b8152600401610697906131ee565b6001600160401b034611156120dd5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b60605f61210d8360026133a6565b61211890600261310f565b6001600160401b0381111561212f5761212f61277e565b6040519080825280601f01601f191660200182016040528015612159576020820181803683370190505b509050600360fc1b815f8151811061217357612173612f13565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106121a1576121a1612f13565b60200101906001600160f81b03191690815f1a9053505f6121c38460026133a6565b6121ce90600161310f565b90505b6001811115612245576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061220257612202612f13565b1a60f81b82828151811061221857612218612f13565b60200101906001600160f81b03191690815f1a90535060049490941c9361223e816133bd565b90506121d1565b5083156109645760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610697565b60605f6122a0836124bf565b60010190505f816001600160401b038111156122be576122be61277e565b6040519080825280601f01601f1916602001820160405280156122e8576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846122f257509392505050565b5f54610100900460ff166123495760405162461bcd60e51b8152600401610697906131ee565b61095281612596565b6001600160a01b0384163b15610ee55760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061239690899089908890889088906004016133d2565b6020604051808303815f875af19250505080156123d0575060408051601f3d908101601f191682019092526123cd91810190613296565b60015b6123dc57611d586132b1565b6001600160e01b0319811663f23a6e6160e01b146118e55760405162461bcd60e51b815260040161069790613343565b306001600160a01b0382160361095257604051630c292c9d60e21b815260040160405180910390fd5b61243e81611e28565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610964838360405180606001604052806027815260200161350c602791396125a3565b5f54610100900460ff1661097d5760405162461bcd60e51b8152600401610697906131ee565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106124fd5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612529576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061254757662386f26fc10000830492506010015b6305f5e100831061255f576305f5e100830492506008015b612710831061257357612710830492506004015b60648310612585576064830492506002015b600a83106106c55760010192915050565b61012f610b538282613416565b60605f5f856001600160a01b0316856040516125bf91906134d0565b5f60405180830381855af49150503d805f81146125f7576040519150601f19603f3d011682016040523d82523d5f602084013e6125fc565b606091505b509150915061260d86838387612617565b9695505050505050565b606083156126855782515f0361267e576001600160a01b0385163b61267e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610697565b5081611f8f565b611f8f8383815115611d775781518083602001fd5b6001600160a01b0381168114610952575f5ffd5b5f5f604083850312156126bf575f5ffd5b82356126ca8161269a565b946020939093013593505050565b6001600160e01b031981168114610952575f5ffd5b5f602082840312156126fd575f5ffd5b8135610964816126d8565b5f5b8381101561272257818101518382015260200161270a565b50505f910152565b5f8151808452612741816020860160208601612708565b601f01601f19169290920160200192915050565b602081525f610964602083018461272a565b5f60208284031215612777575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b601f8201601f191681016001600160401b03811182821017156127b7576127b761277e565b6040525050565b5f6001600160401b038211156127d6576127d661277e565b5060051b60200190565b5f82601f8301126127ef575f5ffd5b81356127fa816127be565b6040516128078282612792565b80915082815260208101915060208360051b86010192508583111561282a575f5ffd5b602085015b8381101561284757803583526020928301920161282f565b5095945050505050565b5f82601f830112612860575f5ffd5b81356001600160401b038111156128795761287961277e565b604051612890601f8301601f191660200182612792565b8181528460208386010111156128a4575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f5f60a086880312156128d4575f5ffd5b85356128df8161269a565b945060208601356128ef8161269a565b935060408601356001600160401b03811115612909575f5ffd5b612915888289016127e0565b93505060608601356001600160401b03811115612930575f5ffd5b61293c888289016127e0565b92505060808601356001600160401b03811115612957575f5ffd5b61296388828901612851565b9150509295509295909350565b5f60208284031215612980575f5ffd5b81356109648161269a565b8035801515811461299a575f5ffd5b919050565b5f5f5f606084860312156129b1575f5ffd5b83356001600160401b03811681146129c7575f5ffd5b9250602084013591506129dc6040850161298b565b90509250925092565b5f5f604083850312156129f6575f5ffd5b82356001600160401b03811115612a0b575f5ffd5b8301601f81018513612a1b575f5ffd5b8035612a26816127be565b604051612a338282612792565b80915082815260208101915060208360051b850101925087831115612a56575f5ffd5b6020840193505b82841015612a81578335612a708161269a565b825260209384019390910190612a5d565b945050505060208301356001600160401b03811115612a9e575f5ffd5b612aaa858286016127e0565b9150509250929050565b5f8151808452602084019350602083015f5b82811015612ae4578151865260209586019590910190600101612ac6565b5093949350505050565b602081525f6109646020830184612ab4565b5f5f60408385031215612b11575f5ffd5b8235612b1c8161269a565b915060208301356001600160401b03811115612b36575f5ffd5b612aaa85828601612851565b5f5f60408385031215612b53575f5ffd5b8235612b5e8161269a565b9150612b6c6020840161298b565b90509250929050565b5f5f60408385031215612b86575f5ffd5b82359150612b6c6020840161298b565b5f5f60408385031215612ba7575f5ffd5b50508035926020909101359150565b5f5f83601f840112612bc6575f5ffd5b5081356001600160401b03811115612bdc575f5ffd5b6020830191508360208260051b8501011115612bf6575f5ffd5b9250929050565b5f5f5f5f5f60608688031215612c11575f5ffd5b8535612c1c8161269a565b945060208601356001600160401b03811115612c36575f5ffd5b612c4288828901612bb6565b90955093505060408601356001600160401b03811115612c60575f5ffd5b612c6c88828901612bb6565b969995985093965092949392505050565b5f5f60408385031215612c8e575f5ffd5b8235612c998161269a565b91506020830135612ca98161269a565b809150509250929050565b5f5f83601f840112612cc4575f5ffd5b5081356001600160401b03811115612cda575f5ffd5b602083019150836020828501011115612bf6575f5ffd5b5f5f5f5f5f5f5f5f60c0898b031215612d08575f5ffd5b8835612d138161269a565b97506020890135612d238161269a565b96506040890135612d338161269a565b95506060890135945060808901356001600160401b03811115612d54575f5ffd5b612d608b828c01612cb4565b90955093505060a08901356001600160401b03811115612d7e575f5ffd5b612d8a8b828c01612cb4565b999c989b5096995094979396929594505050565b5f5f5f5f5f60a08688031215612db2575f5ffd5b8535612dbd8161269a565b94506020860135612dcd8161269a565b9350604086013592506060860135915060808601356001600160401b03811115612957575f5ffd5b600181811c90821680612e0957607f821691505b602082108103612e2757634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b601f821115610da457805f5260205f20601f840160051c81016020851015612f4c5750805b601f840160051c820191505b8181101561086f575f8155600101612f58565b6001600160401b03831115612f8257612f8261277e565b612f9683612f908354612df5565b83612f27565b5f601f841160018114612fc7575f8515612fb05750838201355b5f19600387901b1c1916600186901b17835561086f565b5f83815260208120601f198716915b82811015612ff65786850135825560209485019460019092019101612fd6565b5086821015613012575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156106c5576106c56130fb565b604081525f6131346040830185612ab4565b82810360208401526131468185612ab4565b95945050505050565b5f6020828403121561315f575f5ffd5b5051919050565b6832ba3432b932bab69d60b91b81525f8451613189816009850160208901612708565b600160fe1b60099184019182015284516131aa81600a840160208901612708565b600981830101915050712f746f6b656e5552493f75696e743235363d60701b600182015283516131e1816013840160208801612708565b0160130195945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0386811682528516602082015260a0604082018190525f9061326490830186612ab4565b82810360608401526132768186612ab4565b9050828103608084015261328a818561272a565b98975050505050505050565b5f602082840312156132a6575f5ffd5b8151610964816126d8565b5f60033d1115610c065760045f5f3e505f5160e01c90565b5f60443d10156132d65790565b6040513d600319016004823e80513d60248201116001600160401b03821117156132ff57505090565b80820180516001600160401b0381111561331a575050505090565b3d8401600319018282016020011115613334575050505090565b610a9660208285010185612792565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b5f6020828403121561339b575f5ffd5b81516109648161269a565b80820281158282048414176106c5576106c56130fb565b5f816133cb576133cb6130fb565b505f190190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f9061340b9083018461272a565b979650505050505050565b81516001600160401b0381111561342f5761342f61277e565b6134438161343d8454612df5565b84612f27565b6020601f821160018114613475575f831561345e5750848201515b5f19600385901b1c1916600184901b17845561086f565b5f84815260208120601f198516915b828110156134a45787850151825560209485019460019092019101613484565b50848210156134c157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f82516134e1818460208701612708565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220056c58b99db557dce285f996f441ca995a4a77b2754e41fc6af5e46a7185c22664736f6c634300081b0033", + "code": "0x6080604052600436106101e5575f3560e01c8063715018a611610108578063a86f9d9e1161009d578063e30c39781161006d578063e30c39781461056f578063e985e9c51461058c578063ef8c4ae6146105d4578063f242432a146105f3578063f2fde38b14610612575f5ffd5b8063a86f9d9e146104d5578063b390c0ab146104f4578063d81d0a1514610513578063e07baba614610532575f5ffd5b80638abf6077116100d85780638abf6077146104715780638da5cb5b1461048557806395d89b41146104a2578063a22cb465146104b6575f5ffd5b8063715018a61461041557806379ba5097146104295780637cf8ed0d1461043d5780638456cb591461045d575f5ffd5b80633ab76e9f1161017e5780634e1273f41161014e5780634e1273f4146103a25780634f1ef286146103ce57806352d1902d146103e15780635c975abb146103f5575f5ffd5b80633ab76e9f146103225780633eb6b8cf146103595780633f4ba83a1461037857806349d126051461038c575f5ffd5b806326afaadd116101b957806326afaadd1461028a5780632eb2c2d6146102ce5780633075db56146102ef5780633659cfe614610303575f5ffd5b8062fdd58e146101e957806301ffc9a71461021b57806306fdde031461024a5780630e89341c1461026b575b5f5ffd5b3480156101f4575f5ffd5b506102086102033660046126ae565b610631565b6040519081526020015b60405180910390f35b348015610226575f5ffd5b5061023a6102353660046126ed565b6106cb565b6040519015158152602001610212565b348015610255575f5ffd5b5061025e61070a565b6040516102129190612755565b348015610276575f5ffd5b5061025e610285366004612767565b610797565b348015610295575f5ffd5b506102af61015f54610160546001600160a01b0390911691565b604080516001600160a01b039093168352602083019190915201610212565b3480156102d9575f5ffd5b506102ed6102e83660046128c0565b61082a565b005b3480156102fa575f5ffd5b5061023a610876565b34801561030e575f5ffd5b506102ed61031d366004612970565b61088e565b34801561032d575f5ffd5b50609754610341906001600160a01b031681565b6040516001600160a01b039091168152602001610212565b348015610364575f5ffd5b5061034161037336600461299f565b610955565b348015610383575f5ffd5b506102ed61096b565b348015610397575f5ffd5b506102086101605481565b3480156103ad575f5ffd5b506103c16103bc3660046129e5565b61097f565b6040516102129190612aee565b6102ed6103dc366004612b00565b610a9e565b3480156103ec575f5ffd5b50610208610b57565b348015610400575f5ffd5b5061023a60c954610100900460ff1660021490565b348015610420575f5ffd5b506102ed610c09565b348015610434575f5ffd5b506102ed610c1a565b348015610448575f5ffd5b5061015f54610341906001600160a01b031681565b348015610468575f5ffd5b506102ed610c91565b34801561047c575f5ffd5b50610341610ca4565b348015610490575f5ffd5b506033546001600160a01b0316610341565b3480156104ad575f5ffd5b5061025e610cb2565b3480156104c1575f5ffd5b506102ed6104d0366004612b42565b610cc0565b3480156104e0575f5ffd5b506103416104ef366004612b75565b610ccb565b3480156104ff575f5ffd5b506102ed61050e366004612b96565b610cd7565b34801561051e575f5ffd5b506102ed61052d366004612bfd565b610da9565b34801561053d575f5ffd5b5060c954610557906201000090046001600160401b031681565b6040516001600160401b039091168152602001610212565b34801561057a575f5ffd5b506065546001600160a01b0316610341565b348015610597575f5ffd5b5061023a6105a6366004612c7d565b6001600160a01b039182165f90815261012e6020908152604080832093909416825291909152205460ff1690565b3480156105df575f5ffd5b506102ed6105ee366004612cf1565b610eed565b3480156105fe575f5ffd5b506102ed61060d366004612d9e565b61106d565b34801561061d575f5ffd5b506102ed61062c366004612970565b6110b2565b5f6001600160a01b0383166106a05760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b505f81815261012d602090815260408083206001600160a01b03861684529091529020545b92915050565b5f6001600160e01b03198216634d22606360e01b14806106fb57506001600160e01b031982166377c6257360e11b145b806106c557506106c582611123565b610162805461071890612df5565b80601f016020809104026020016040519081016040528092919081815260200182805461074490612df5565b801561078f5780601f106107665761010080835404028352916020019161078f565b820191905f5260205f20905b81548152906001019060200180831161077257829003601f168201915b505050505081565b606061012f80546107a790612df5565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390612df5565b801561081e5780601f106107f55761010080835404028352916020019161081e565b820191905f5260205f20905b81548152906001019060200180831161080157829003601f168201915b50505050509050919050565b6001600160a01b038516331480610846575061084685336105a6565b6108625760405162461bcd60e51b815260040161069790612e2d565b61086f8585858585611172565b5050505050565b5f600261088560c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670100000000000000000000000000000100981630036108d65760405162461bcd60e51b815260040161069790612e7b565b7f00000000000000000000000001670100000000000000000000000000000100986001600160a01b031661090861130d565b6001600160a01b03161461092e5760405162461bcd60e51b815260040161069790612ec7565b61093781611328565b604080515f8082526020820190925261095291839190611330565b50565b5f61096184848461149a565b90505b9392505050565b6109736114ec565b61097d335f61157c565b565b606081518351146109e45760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610697565b5f83516001600160401b038111156109fe576109fe61277e565b604051908082528060200260200182016040528015610a27578160200160208202803683370190505b5090505f5b8451811015610a9657610a71858281518110610a4a57610a4a612f13565b6020026020010151858381518110610a6457610a64612f13565b6020026020010151610631565b828281518110610a8357610a83612f13565b6020908102919091010152600101610a2c565b509392505050565b6001600160a01b037f0000000000000000000000000167010000000000000000000000000000010098163003610ae65760405162461bcd60e51b815260040161069790612e7b565b7f00000000000000000000000001670100000000000000000000000000000100986001600160a01b0316610b1861130d565b6001600160a01b031614610b3e5760405162461bcd60e51b815260040161069790612ec7565b610b4782611328565b610b5382826001611330565b5050565b5f306001600160a01b037f00000000000000000000000001670100000000000000000000000000000100981614610bf65760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610697565b505f5160206134ec5f395f51905f525b90565b610c11611580565b61097d5f6115da565b60655433906001600160a01b03168114610c885760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610697565b610952816115da565b610c996115f3565b61097d33600161157c565b5f610cad61130d565b905090565b610161805461071890612df5565b610b53338383611664565b5f61096446848461149a565b610ceb60c954610100900460ff1660021490565b15610d095760405163bae6e2a960e01b815260040160405180910390fd5b6c195c98cc4c4d4d57dd985d5b1d609a1b610d25816001610ccb565b6001600160a01b0316336001600160a01b031614610d5657604051630d85cccf60e11b815260040160405180910390fd5b6002610d6460c95460ff1690565b60ff1603610d855760405163dfc60d8560e01b815260040160405180910390fd5b610d8f6002611744565b610d9a33848461175a565b610da46001611744565b505050565b610dbd60c954610100900460ff1660021490565b15610ddb5760405163bae6e2a960e01b815260040160405180910390fd5b6c195c98cc4c4d4d57dd985d5b1d609a1b610df7816001610ccb565b6001600160a01b0316336001600160a01b031614610e2857604051630d85cccf60e11b815260040160405180910390fd5b6002610e3660c95460ff1690565b60ff1603610e575760405163dfc60d8560e01b815260040160405180910390fd5b610e616002611744565b610edb868686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050604080516020808a028281018201909352898252909350899250889182918501908490808284375f920182905250604080516020810190915290815292506118ee915050565b610ee56001611744565b505050505050565b5f54610100900460ff1615808015610f0b57505f54600160ff909116105b80610f245750303b158015610f2457505f5460ff166001145b610f875760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610697565b5f805460ff191660011790558015610fa8575f805461ff0019166101001790555b610fb28787611a70565b610fbc8989611aac565b610fdd610fd8888860405180602001604052805f815250611ae6565b611b30565b61015f80546001600160a01b0319166001600160a01b03891617905561016086905561016161100d858783612f6b565b5061016261101c838583612f6b565b508015611062575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6001600160a01b038516331480611089575061108985336105a6565b6110a55760405162461bcd60e51b815260040161069790612e2d565b61086f8585858585611b5f565b6110ba611580565b606580546001600160a01b0383166001600160a01b031990911681179091556110eb6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f6001600160e01b03198216636cdb3d1360e11b148061115357506001600160e01b031982166303a24d0760e21b145b806106c557506301ffc9a760e01b6001600160e01b03198316146106c5565b81518351146111935760405162461bcd60e51b815260040161069790613024565b6001600160a01b0384166111b95760405162461bcd60e51b81526004016106979061306c565b336111c8818787878787611c8e565b5f5b84518110156112a7575f8582815181106111e6576111e6612f13565b602002602001015190505f85838151811061120357611203612f13565b6020908102919091018101515f84815261012d835260408082206001600160a01b038e1683529093529190912054909150818110156112545760405162461bcd60e51b8152600401610697906130b1565b5f83815261012d602090815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061129390849061310f565b9091555050600190930192506111ca915050565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516112f7929190613122565b60405180910390a4610ee5818787878787611cce565b5f5160206134ec5f395f51905f52546001600160a01b031690565b610952611580565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561136357610da483611e28565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113bd575060408051601f3d908101601f191682019092526113ba9181019061314f565b60015b6114205760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610697565b5f5160206134ec5f395f51905f52811461148e5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610697565b50610da4838383611ec3565b5f6114a58484611eed565b9050811580156114bc57506001600160a01b038116155b1561096457604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610697565b61150060c954610100900460ff1660021490565b61151d5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610b535b6033546001600160a01b0316331461097d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610697565b606580546001600160a01b031916905561095281611f97565b61160760c954610100900460ff1660021490565b156116255760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611572565b816001600160a01b0316836001600160a01b0316036116d75760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610697565b6001600160a01b038381165f81815261012e6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60c9805460ff191660ff92909216919091179055565b6001600160a01b0383166117bc5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610697565b335f6117c784611fe8565b90505f6117d384611fe8565b90506117f183875f858560405180602001604052805f815250611c8e565b5f85815261012d602090815260408083206001600160a01b038a168452909152902054848110156118705760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610697565b5f86815261012d602090815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a460408051602081019091525f90525b50505050505050565b6001600160a01b03841661194e5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610697565b815183511461196f5760405162461bcd60e51b815260040161069790613024565b3361197e815f87878787611c8e565b5f5b8451811015611a0a5783818151811061199b5761199b612f13565b602002602001015161012d5f8784815181106119b9576119b9612f13565b602002602001015181526020019081526020015f205f886001600160a01b03166001600160a01b031681526020019081526020015f205f8282546119fd919061310f565b9091555050600101611980565b50846001600160a01b03165f6001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611a5a929190613122565b60405180910390a461086f815f87878787611cce565b6001600160a01b0382161580611a84575080155b80611a8e57504681145b15610b535760405163c118d2f360e01b815260040160405180910390fd5b806001600160a01b038116611ad45760405163538ba4f960e01b815260040160405180910390fd5b611add83612031565b610da48261208f565b6060611afc846001600160a01b031660146120ff565b611b0584612294565b83604051602001611b1893929190613166565b60405160208183030381529060405290509392505050565b5f54610100900460ff16611b565760405162461bcd60e51b8152600401610697906131ee565b61095281612323565b6001600160a01b038416611b855760405162461bcd60e51b81526004016106979061306c565b335f611b9085611fe8565b90505f611b9c85611fe8565b9050611bac838989858589611c8e565b5f86815261012d602090815260408083206001600160a01b038c16845290915290205485811015611bef5760405162461bcd60e51b8152600401610697906130b1565b5f87815261012d602090815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611c2e90849061310f565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611062848a8a8a8a8a612352565b611ca260c954610100900460ff1660021490565b15611cc05760405163bae6e2a960e01b815260040160405180910390fd5b611cc98461240c565b610ee5565b6001600160a01b0384163b15610ee55760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611d129089908990889088908890600401613239565b6020604051808303815f875af1925050508015611d4c575060408051601f3d908101601f19168201909252611d4991810190613296565b60015b611df857611d586132b1565b806308c379a003611d915750611d6c6132c9565b80611d775750611d93565b8060405162461bcd60e51b81526004016106979190612755565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610697565b6001600160e01b0319811663bc197c8160e01b146118e55760405162461bcd60e51b815260040161069790613343565b6001600160a01b0381163b611e955760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610697565b5f5160206134ec5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611ecc83612435565b5f82511180611ed85750805b15610da457611ee78383612474565b50505050565b6097545f906001600160a01b031680611f1957604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611f6b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f8f919061338b565b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6040805160018082528183019092526060915f91906020808301908036833701905050905082815f8151811061202057612020612f13565b602090810291909101015292915050565b5f54610100900460ff166120575760405162461bcd60e51b8152600401610697906131ee565b61205f612499565b61207d6001600160a01b0382161561207757816115da565b336115da565b5060c9805461ff001916610100179055565b5f54610100900460ff166120b55760405162461bcd60e51b8152600401610697906131ee565b6001600160401b034611156120dd5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b60605f61210d8360026133a6565b61211890600261310f565b6001600160401b0381111561212f5761212f61277e565b6040519080825280601f01601f191660200182016040528015612159576020820181803683370190505b509050600360fc1b815f8151811061217357612173612f13565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106121a1576121a1612f13565b60200101906001600160f81b03191690815f1a9053505f6121c38460026133a6565b6121ce90600161310f565b90505b6001811115612245576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061220257612202612f13565b1a60f81b82828151811061221857612218612f13565b60200101906001600160f81b03191690815f1a90535060049490941c9361223e816133bd565b90506121d1565b5083156109645760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610697565b60605f6122a0836124bf565b60010190505f816001600160401b038111156122be576122be61277e565b6040519080825280601f01601f1916602001820160405280156122e8576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846122f257509392505050565b5f54610100900460ff166123495760405162461bcd60e51b8152600401610697906131ee565b61095281612596565b6001600160a01b0384163b15610ee55760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061239690899089908890889088906004016133d2565b6020604051808303815f875af19250505080156123d0575060408051601f3d908101601f191682019092526123cd91810190613296565b60015b6123dc57611d586132b1565b6001600160e01b0319811663f23a6e6160e01b146118e55760405162461bcd60e51b815260040161069790613343565b306001600160a01b0382160361095257604051630c292c9d60e21b815260040160405180910390fd5b61243e81611e28565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610964838360405180606001604052806027815260200161350c602791396125a3565b5f54610100900460ff1661097d5760405162461bcd60e51b8152600401610697906131ee565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106124fd5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612529576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061254757662386f26fc10000830492506010015b6305f5e100831061255f576305f5e100830492506008015b612710831061257357612710830492506004015b60648310612585576064830492506002015b600a83106106c55760010192915050565b61012f610b538282613416565b60605f5f856001600160a01b0316856040516125bf91906134d0565b5f60405180830381855af49150503d805f81146125f7576040519150601f19603f3d011682016040523d82523d5f602084013e6125fc565b606091505b509150915061260d86838387612617565b9695505050505050565b606083156126855782515f0361267e576001600160a01b0385163b61267e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610697565b5081611f8f565b611f8f8383815115611d775781518083602001fd5b6001600160a01b0381168114610952575f5ffd5b5f5f604083850312156126bf575f5ffd5b82356126ca8161269a565b946020939093013593505050565b6001600160e01b031981168114610952575f5ffd5b5f602082840312156126fd575f5ffd5b8135610964816126d8565b5f5b8381101561272257818101518382015260200161270a565b50505f910152565b5f8151808452612741816020860160208601612708565b601f01601f19169290920160200192915050565b602081525f610964602083018461272a565b5f60208284031215612777575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b601f8201601f191681016001600160401b03811182821017156127b7576127b761277e565b6040525050565b5f6001600160401b038211156127d6576127d661277e565b5060051b60200190565b5f82601f8301126127ef575f5ffd5b81356127fa816127be565b6040516128078282612792565b80915082815260208101915060208360051b86010192508583111561282a575f5ffd5b602085015b8381101561284757803583526020928301920161282f565b5095945050505050565b5f82601f830112612860575f5ffd5b81356001600160401b038111156128795761287961277e565b604051612890601f8301601f191660200182612792565b8181528460208386010111156128a4575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f5f60a086880312156128d4575f5ffd5b85356128df8161269a565b945060208601356128ef8161269a565b935060408601356001600160401b03811115612909575f5ffd5b612915888289016127e0565b93505060608601356001600160401b03811115612930575f5ffd5b61293c888289016127e0565b92505060808601356001600160401b03811115612957575f5ffd5b61296388828901612851565b9150509295509295909350565b5f60208284031215612980575f5ffd5b81356109648161269a565b8035801515811461299a575f5ffd5b919050565b5f5f5f606084860312156129b1575f5ffd5b83356001600160401b03811681146129c7575f5ffd5b9250602084013591506129dc6040850161298b565b90509250925092565b5f5f604083850312156129f6575f5ffd5b82356001600160401b03811115612a0b575f5ffd5b8301601f81018513612a1b575f5ffd5b8035612a26816127be565b604051612a338282612792565b80915082815260208101915060208360051b850101925087831115612a56575f5ffd5b6020840193505b82841015612a81578335612a708161269a565b825260209384019390910190612a5d565b945050505060208301356001600160401b03811115612a9e575f5ffd5b612aaa858286016127e0565b9150509250929050565b5f8151808452602084019350602083015f5b82811015612ae4578151865260209586019590910190600101612ac6565b5093949350505050565b602081525f6109646020830184612ab4565b5f5f60408385031215612b11575f5ffd5b8235612b1c8161269a565b915060208301356001600160401b03811115612b36575f5ffd5b612aaa85828601612851565b5f5f60408385031215612b53575f5ffd5b8235612b5e8161269a565b9150612b6c6020840161298b565b90509250929050565b5f5f60408385031215612b86575f5ffd5b82359150612b6c6020840161298b565b5f5f60408385031215612ba7575f5ffd5b50508035926020909101359150565b5f5f83601f840112612bc6575f5ffd5b5081356001600160401b03811115612bdc575f5ffd5b6020830191508360208260051b8501011115612bf6575f5ffd5b9250929050565b5f5f5f5f5f60608688031215612c11575f5ffd5b8535612c1c8161269a565b945060208601356001600160401b03811115612c36575f5ffd5b612c4288828901612bb6565b90955093505060408601356001600160401b03811115612c60575f5ffd5b612c6c88828901612bb6565b969995985093965092949392505050565b5f5f60408385031215612c8e575f5ffd5b8235612c998161269a565b91506020830135612ca98161269a565b809150509250929050565b5f5f83601f840112612cc4575f5ffd5b5081356001600160401b03811115612cda575f5ffd5b602083019150836020828501011115612bf6575f5ffd5b5f5f5f5f5f5f5f5f60c0898b031215612d08575f5ffd5b8835612d138161269a565b97506020890135612d238161269a565b96506040890135612d338161269a565b95506060890135945060808901356001600160401b03811115612d54575f5ffd5b612d608b828c01612cb4565b90955093505060a08901356001600160401b03811115612d7e575f5ffd5b612d8a8b828c01612cb4565b999c989b5096995094979396929594505050565b5f5f5f5f5f60a08688031215612db2575f5ffd5b8535612dbd8161269a565b94506020860135612dcd8161269a565b9350604086013592506060860135915060808601356001600160401b03811115612957575f5ffd5b600181811c90821680612e0957607f821691505b602082108103612e2757634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b601f821115610da457805f5260205f20601f840160051c81016020851015612f4c5750805b601f840160051c820191505b8181101561086f575f8155600101612f58565b6001600160401b03831115612f8257612f8261277e565b612f9683612f908354612df5565b83612f27565b5f601f841160018114612fc7575f8515612fb05750838201355b5f19600387901b1c1916600186901b17835561086f565b5f83815260208120601f198716915b82811015612ff65786850135825560209485019460019092019101612fd6565b5086821015613012575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156106c5576106c56130fb565b604081525f6131346040830185612ab4565b82810360208401526131468185612ab4565b95945050505050565b5f6020828403121561315f575f5ffd5b5051919050565b6832ba3432b932bab69d60b91b81525f8451613189816009850160208901612708565b600160fe1b60099184019182015284516131aa81600a840160208901612708565b600981830101915050712f746f6b656e5552493f75696e743235363d60701b600182015283516131e1816013840160208801612708565b0160130195945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0386811682528516602082015260a0604082018190525f9061326490830186612ab4565b82810360608401526132768186612ab4565b9050828103608084015261328a818561272a565b98975050505050505050565b5f602082840312156132a6575f5ffd5b8151610964816126d8565b5f60033d1115610c065760045f5f3e505f5160e01c90565b5f60443d10156132d65790565b6040513d600319016004823e80513d60248201116001600160401b03821117156132ff57505090565b80820180516001600160401b0381111561331a575050505090565b3d8401600319018282016020011115613334575050505090565b610a9660208285010185612792565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b5f6020828403121561339b575f5ffd5b81516109648161269a565b80820281158282048414176106c5576106c56130fb565b5f816133cb576133cb6130fb565b505f190190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f9061340b9083018461272a565b979650505050505050565b81516001600160401b0381111561342f5761342f61277e565b6134438161343d8454612df5565b84612f27565b6020601f821160018114613475575f831561345e5750848201515b5f19600385901b1c1916600184901b17845561086f565b5f84815260208120601f198516915b828110156134a45787850151825560209485019460019092019101613484565b50848210156134c157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f82516134e1818460208701612708565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220056c58b99db557dce285f996f441ca995a4a77b2754e41fc6af5e46a7185c22664736f6c634300081b0033", "balance": "0x0" }, - "0x0167000000000000000000000000000000000005": { + "0x0167010000000000000000000000000000000005": { "contractName": "SignalServiceImpl", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f" }, - "code": "0x6080604052600436106101c5575f3560e01c806379ba5097116100f2578063a86f9d9e11610092578063e30c397811610062578063e30c39781461052f578063f09a40161461054c578063f2fde38b1461056b578063fe9fbb801461058a575f5ffd5b8063a86f9d9e1461048e578063ce9d0820146104ad578063dfc8ff1d146104cc578063e07baba61461050a575f5ffd5b80638da5cb5b116100cd5780638da5cb5b14610414578063910af6ed1461043157806391f3f74b146104505780639b527cfa1461046f575f5ffd5b806379ba5097146103d85780638456cb59146103ec5780638abf607714610400575f5ffd5b80633eb6b8cf1161016857806352d1902d1161013857806352d1902d146103715780635c975abb1461038557806366ca2bc0146103a5578063715018a6146103c4575f5ffd5b80633eb6b8cf146102fe5780633f4ba83a1461031d5780634f1ef286146103315780634f90a67414610344575f5ffd5b8063355bcc3d116101a3578063355bcc3d146102325780633659cfe6146102895780633ab76e9f146102a85780633ced0e08146102df575f5ffd5b80632d1fb389146101c95780633075db56146101ea57806332676bc614610213575b5f5ffd5b3480156101d4575f5ffd5b506101e86101e336600461351b565b6105b8565b005b3480156101f5575f5ffd5b506101fe61065e565b60405190151581526020015b60405180910390f35b34801561021e575f5ffd5b506101fe61022d36600461354e565b610676565b34801561023d575f5ffd5b5061027161024c36600461358e565b60fb60209081525f92835260408084209091529082529020546001600160401b031681565b6040516001600160401b03909116815260200161020a565b348015610294575f5ffd5b506101e86102a33660046135a8565b61068c565b3480156102b3575f5ffd5b506097546102c7906001600160a01b031681565b6040516001600160a01b03909116815260200161020a565b3480156102ea575f5ffd5b506101fe6102f93660046135c3565b61075c565b348015610309575f5ffd5b506102c7610318366004613604565b6107a3565b348015610328575f5ffd5b506101e86107b9565b6101e861033f366004613714565b6107cd565b34801561034f575f5ffd5b5061036361035e3660046135c3565b610886565b60405190815260200161020a565b34801561037c575f5ffd5b506103636108cc565b348015610390575f5ffd5b506101fe60c954610100900460ff1660021490565b3480156103b0575f5ffd5b506103636103bf366004613760565b61097d565b3480156103cf575f5ffd5b506101e8610989565b3480156103e3575f5ffd5b506101e861099a565b3480156103f7575f5ffd5b506101e8610a11565b34801561040b575f5ffd5b506102c7610a24565b34801561041f575f5ffd5b506033546001600160a01b03166102c7565b34801561043c575f5ffd5b5061036361044b366004613777565b610a32565b34801561045b575f5ffd5b5061036361046a36600461380c565b610b0d565b34801561047a575f5ffd5b50610363610489366004613848565b610b78565b348015610499575f5ffd5b506102c76104a8366004613878565b610ba4565b3480156104b8575f5ffd5b506101e86104c7366004613777565b610bb0565b3480156104d7575f5ffd5b506104eb6104e6366004613848565b610bc6565b604080516001600160401b03909316835260208301919091520161020a565b348015610515575f5ffd5b5060c954610271906201000090046001600160401b031681565b34801561053a575f5ffd5b506065546001600160a01b03166102c7565b348015610557575f5ffd5b506101e8610566366004613899565b610c5a565b348015610576575f5ffd5b506101e86105853660046135a8565b610d69565b348015610595575f5ffd5b506101fe6105a43660046135a8565b60fc6020525f908152604090205460ff1681565b6105c0610dda565b6001600160a01b0382165f90815260fc602052604090205481151560ff909116151503610600576040516398f26f4560e01b815260040160405180910390fd5b6001600160a01b0382165f81815260fc6020908152604091829020805460ff191685151590811790915591519182527f4c0079b9bcd37cd5d29a13938effd97c881798cbc6bd52a3026a29d94b27d1bf910160405180910390a25050565b5f600261066d60c95460ff1690565b60ff1614905090565b5f6106818383610e34565b151590505b92915050565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000051630036106dd5760405162461bcd60e51b81526004016106d4906138d0565b60405180910390fd5b7f00000000000000000000000001670000000000000000000000000000000000056001600160a01b031661070f610e96565b6001600160a01b0316146107355760405162461bcd60e51b81526004016106d49061391c565b61073e81610eb1565b604080515f8082526020820190925261075991839190610eb9565b50565b5f8180820361077e5760405163ec73295960e01b815260040160405180910390fd5b5f61078a878787610b78565b9050836107973083610e34565b14979650505050505050565b5f6107af848484611023565b90505b9392505050565b6107c1611075565b6107cb335f611105565b565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000051630036108155760405162461bcd60e51b81526004016106d4906138d0565b7f00000000000000000000000001670000000000000000000000000000000000056001600160a01b0316610847610e96565b6001600160a01b03161461086d5760405162461bcd60e51b81526004016106d49061391c565b61087682610eb1565b61088282826001610eb9565b5050565b335f90815260fc602052604081205460ff166108b557604051631f67751f60e01b815260040160405180910390fd5b6108c18585858561111e565b90505b949350505050565b5f306001600160a01b037f0000000000000000000000000167000000000000000000000000000000000005161461096b5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016106d4565b505f516020613eb05f395f51905f5290565b5f610686338384611200565b610991610dda565b6107cb5f6112d9565b60655433906001600160a01b03168114610a085760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016106d4565b610759816112d9565b610a196112f2565b6107cb336001611105565b5f610a2d610e96565b905090565b5f610a4760c954610100900460ff1660021490565b15610a655760405163bae6e2a960e01b815260040160405180910390fd5b6002610a7360c95460ff1690565b60ff1603610a945760405163dfc60d8560e01b815260040160405180910390fd5b60c9805460ff191660021790555f610ab187878787876001611363565b90505f5b8151811015610af457610ae0828281518110610ad357610ad3613968565b602002602001015161181f565b610aea9084613990565b9250600101610ab5565b505060c9805460ff191660011790555b95945050505050565b6040516514d251d3905360d21b60208201526001600160c01b031960c085901b1660268201526bffffffffffffffffffffffff19606084901b16602e820152604281018290525f906062015b6040516020818303038152906040528051906020012090509392505050565b604080516001600160401b03808616602083015291810184905290821660608201525f90608001610b59565b5f6107b2468484611023565b610bbe85858585855f611363565b505050505050565b5f5f826001600160401b03165f03610c02576001600160401b038086165f90815260fb6020908152604080832088845290915290205416610c04565b825b91506001600160401b03821615610c52575f610c21868685610b78565b9050610c2d3082610e34565b91505f829003610c505760405163738afa0560e01b815260040160405180910390fd5b505b935093915050565b5f54610100900460ff1615808015610c7857505f54600160ff909116105b80610c915750303b158015610c9157505f5460ff166001145b610cf45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106d4565b5f805460ff191660011790558015610d15575f805461ff0019166101001790555b610d1f8383611963565b8015610d64575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610d71610dda565b606580546001600160a01b0383166001600160a01b03199091168117909155610da26033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6033546001600160a01b031633146107cb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106d4565b5f826001600160a01b038116610e5d5760405163538ba4f960e01b815260040160405180910390fd5b825f819003610e7f5760405163ec73295960e01b815260040160405180910390fd5b5f610e8b468787610b0d565b549695505050505050565b5f516020613eb05f395f51905f52546001600160a01b031690565b610759610dda565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610eec57610d648361199d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610f46575060408051601f3d908101601f19168201909252610f43918101906139a3565b60015b610fa95760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016106d4565b5f516020613eb05f395f51905f5281146110175760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016106d4565b50610d64838383611a38565b5f61102e8484611a62565b90508115801561104557506001600160a01b038116155b156107b257604051632b0d65db60e01b81526001600160401b0385166004820152602481018490526044016106d4565b61108960c954610100900460ff1660021490565b6110a65760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b604051630c2b8f8f60e11b815260040160405180910390fd5b5f61112a858585610b78565b9050611137308284611200565b506001600160401b038581165f90815260fb60209081526040808320888452909152902054818516911610156111a1576001600160401b038581165f90815260fb602090815260408083208884529091529020805467ffffffffffffffff19169185169190911790555b83836001600160401b0316866001600160401b03167fde247c825b1fb2d7ff9e0e771cba6f9e757ad04479fcdc135d88ae91fd50b37d85856040516111f0929190918252602082015260400190565b60405180910390a4949350505050565b5f836001600160a01b0381166112295760405163538ba4f960e01b815260040160405180910390fd5b835f81900361124b5760405163ec73295960e01b815260040160405180910390fd5b835f81900361126d5760405163ec73295960e01b815260040160405180910390fd5b611278468888610b0d565b858155604080516001600160a01b038a16815260208101899052908101829052606081018790529094507f0ad2d108660a211f47bf7fb43a0443cae181624995d3d42b88ee6879d200e9739060800160405180910390a15050509392505050565b606580546001600160a01b031916905561075981611b04565b61130660c954610100900460ff1660021490565b156113245760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016110fb565b6060856001600160a01b03811661138d5760405163538ba4f960e01b815260040160405180910390fd5b855f8190036113af5760405163ec73295960e01b815260040160405180910390fd5b5f6113bc86880188613a77565b905080515f036113df57604051630b92daef60e21b815260040160405180910390fd5b5f600182516113ee9190613bbd565b6001600160401b038111156114055761140561363d565b60405190808252806020026020018201604052801561142e578160200160208202803683370190505b50905085156114c15781516001600160401b038111156114505761145061363d565b6040519080825280602002602001820160405280156114bd57816020015b6114aa6040805160e0810182525f80825260208201819052918101829052606081018290526080810182905260a081018290529060c082015290565b81526020019060019003908161146e5790505b5094505b8a8a8a805f6114e2856d7369676e616c5f7365727669636560901b836107a3565b9050306001600160a01b0382160361150d57604051637556223560e11b815260040160405180910390fd5b6115456040805160c0810182525f80825260208201819052918101829052906060820190815260200160608152602001606081525090565b5f5f5f5f5b8b518110156117d3578b818151811061156557611565613968565b602002602001015194505f5b818110156115cf57855f01516001600160401b03168c828151811061159857611598613968565b60200260200101516001600160401b0316036115c7576040516348362c2760e11b815260040160405180910390fd5b600101611571565b506115de8a8a8a8a898b611b55565b93508a5181149150811561161e5784516001600160401b03164614611616576040516338bf822760e21b815260040160405180910390fd5b3095506116c9565b845f01518b828151811061163457611634613968565b6001600160401b0392831660209182029290920101528551161580611662575084516001600160401b031646145b1561168057604051637556223560e11b815260040160405180910390fd5b845161169e906d7369676e616c5f7365727669636560901b5f6107a3565b9550306001600160a01b038716036116c957604051637556223560e11b815260040160405180910390fd5b608085015151151592508f1561175d576040518060e00160405280866040015181526020018581526020018b6001600160401b0316815260200186602001516001600160401b03168152602001841515815260200183151581526020018660600151600381111561173c5761173c613bd0565b8152508f828151811061175157611751613968565b60200260200101819052505b6117b88a8461178c577fc6cdc4f2acf13acb10f410085b821f7b7113b303e9a4799023f928317396aaf56117ae565b7f73e6d340850343cc6f001515dc593377337c95a6ffe034fe1e844d4dab5da1695b8760200151610b78565b604086015186519b509699509750949550879460010161154a565b508515806117ea57506117e63088610e34565b8614155b156118085760405163738afa0560e01b815260040160405180910390fd5b505050505050505050505050509695505050505050565b5f8060038360c00151600381111561183957611839613bd0565b148061185a575060028360c00151600381111561185857611858613bd0565b145b905080801561186a575082608001515b801561187857508260a00151155b156118ba57600191506118b883604001517f73e6d340850343cc6f001515dc593377337c95a6ffe034fe1e844d4dab5da1698560600151865f015161111e565b505b5f60038460c0015160038111156118d3576118d3613bd0565b14806118f4575060018460c0015160038111156118f2576118f2613bd0565b145b9050808015611910575083608001518061191057508360a00151155b1561195c57611920600184613990565b925061195a84604001517fc6cdc4f2acf13acb10f410085b821f7b7113b303e9a4799023f928317396aaf58660600151876020015161111e565b505b5050919050565b806001600160a01b03811661198b5760405163538ba4f960e01b815260040160405180910390fd5b61199483611bf4565b610d6482611c52565b6001600160a01b0381163b611a0a5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016106d4565b5f516020613eb05f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611a4183611cc2565b5f82511180611a4d5750805b15610d6457611a5c8383611d01565b50505050565b6097545f906001600160a01b031680611a8e57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611ae0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c49190613be4565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f856001600160a01b038116611b7e5760405163538ba4f960e01b815260040160405180910390fd5b855f819003611ba05760405163ec73295960e01b815260040160405180910390fd5b855f819003611bc25760405163ec73295960e01b815260040160405180910390fd5b611be6866040015186611bd68d8d8d610b0d565b8a8a608001518b60a00151611d26565b9a9950505050505050505050565b5f54610100900460ff16611c1a5760405162461bcd60e51b81526004016106d490613bff565b611c22611e33565b611c406001600160a01b03821615611c3a57816112d9565b336112d9565b5060c9805461ff001916610100179055565b5f54610100900460ff16611c785760405162461bcd60e51b81526004016106d490613bff565b6001600160401b03461115611ca05760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b611ccb8161199d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606107b28383604051806060016040528060278152602001613ed060279139611e59565b5f82515f14611dce576040516bffffffffffffffffffffffff19606088901b1660208201525f90611d6a90603401604051602081830303815290604052858a611ecd565b905080515f03611d8d57604051630414cd5b60e31b815260040160405180910390fd5b5f611d9782611ee6565b9050611dbc81600281518110611daf57611daf613968565b6020026020010151611ef9565b611dc590613c4a565b92505050611dd1565b50855b5f611e0886604051602001611de891815260200190565b60408051601f19818403018152919052611e0187611f78565b8585611f8b565b905080611e2857604051638d9a4db360e01b815260040160405180910390fd5b509695505050505050565b5f54610100900460ff166107cb5760405162461bcd60e51b81526004016106d490613bff565b60605f5f856001600160a01b031685604051611e759190613c92565b5f60405180830381855af49150503d805f8114611ead576040519150601f19603f3d011682016040523d82523d5f602084013e611eb2565b606091505b5091509150611ec386838387611fa4565b9695505050505050565b60605f611ed98561201c565b9050610b0481858561204e565b6060610686611ef4836128bc565b61290e565b60605f5f5f611f0785612a8c565b919450925090505f816001811115611f2157611f21613bd0565b14611f3f576040516307fe6cb960e21b815260040160405180910390fd5b611f498284613990565b855114611f6957604051630b8aa6f760e31b815260040160405180910390fd5b610b0485602001518484612d6f565b6060610686611f8683612dff565b612f13565b5f5f611f968661201c565b9050611ec381868686612f6b565b606083156120125782515f0361200b576001600160a01b0385163b61200b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106d4565b50816108c4565b6108c48383612f91565b6060818051906020012060405160200161203891815260200190565b6040516020818303038152906040529050919050565b60605f8451116120985760405162461bcd60e51b81526020600482015260156024820152744d65726b6c65547269653a20656d707479206b657960581b60448201526064016106d4565b5f6120a284612fbb565b90505f6120ae8661309e565b90505f846040516020016120c491815260200190565b60408051601f1981840301815291905290505f805b8451811015612865575f8582815181106120f5576120f5613968565b6020026020010151905084518311156121675760405162461bcd60e51b815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201526d0e8c2d840d6caf240d8cadccee8d60931b60648201526084016106d4565b825f0361220557805180516020918201206040516121b49261218e92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b6122005760405162461bcd60e51b815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016106d4565b6122fb565b80515160201161228b578051805160209182012060405161222f9261218e92910190815260200190565b6122005760405162461bcd60e51b815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e6044820152660c2d840d0c2e6d60cb1b60648201526084016106d4565b8051845160208087019190912082519190920120146122fb5760405162461bcd60e51b815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f646044820152650ca40d0c2e6d60d31b60648201526084016106d4565b61230760106001613990565b8160200151510361249f5784518303612439576123348160200151601081518110611daf57611daf613968565b96505f8751116123ac5760405162461bcd60e51b815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016106d4565b600186516123ba9190613bbd565b821461242e5760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016106d4565b5050505050506107b2565b5f85848151811061244c5761244c613968565b602001015160f81c60f81b60f81c90505f82602001518260ff168151811061247657612476613968565b60200260200101519050612489816130ff565b9550612496600186613990565b9450505061285c565b600281602001515103612803575f6124b682613123565b90505f815f815181106124cb576124cb613968565b016020015160f81c90505f6124e1600283613cc1565b6124ec906002613ce2565b90505f6124fc848360ff16613146565b90505f6125098a89613146565b90505f612516838361317b565b90508083511461258e5760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016106d4565b60ff8516600214806125a3575060ff85166003145b15612743578082511461261e5760405162461bcd60e51b815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016106d4565b6126388760200151600181518110611daf57611daf613968565b9c505f8d51116126b05760405162461bcd60e51b815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016106d4565b60018c516126be9190613bbd565b88146127325760405162461bcd60e51b815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016106d4565b5050505050505050505050506107b2565b60ff85161580612756575060ff85166001145b1561279557612782876020015160018151811061277557612775613968565b60200260200101516130ff565b995061278e818a613990565b98506127f8565b60405162461bcd60e51b815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f64652077697468604482015271040c2dc40eadcd6dcdeeedc40e0e4caccd2f60731b60648201526084016106d4565b50505050505061285c565b60405162461bcd60e51b815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e706172736561604482015267626c65206e6f646560c01b60648201526084016106d4565b506001016120d9565b5060405162461bcd60e51b815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c656044820152646d656e747360d81b60648201526084016106d4565b604080518082019091525f808252602082015281515f036128f057604051635ab458fb60e01b815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b60605f5f5f61291c85612a8c565b91945092509050600181600181111561293757612937613bd0565b14612955576040516325ce355f60e11b815260040160405180910390fd5b84516129618385613990565b1461297f57604051630b8aa6f760e31b815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091525f80825260208201528152602001906001900390816129965790505093505f835b8651811015612a80575f5f612a056040518060400160405280858c5f01516129e99190613bbd565b8152602001858c602001516129fe9190613990565b9052612a8c565b509150915060405180604001604052808383612a219190613990565b8152602001848b60200151612a369190613990565b815250888581518110612a4b57612a4b613968565b6020908102919091010152612a61600185613990565b9350612a6d8183613990565b612a779084613990565b925050506129c1565b50845250919392505050565b5f5f5f835f01515f03612ab257604051635ab458fb60e01b815260040160405180910390fd5b602084015180515f1a607f8111612ad4575f60015f9450945094505050612d68565b60b78111612b69575f612ae8608083613bbd565b905080875f015111612b0d576040516366c9448560e01b815260040160405180910390fd5b6001838101516001600160f81b0319169082148015612b395750600160ff1b6001600160f81b03198216105b15612b575760405163babb01dd60e01b815260040160405180910390fd5b506001955093505f9250612d68915050565b60bf8111612c47575f612b7d60b783613bbd565b905080875f015111612ba2576040516366c9448560e01b815260040160405180910390fd5b60018301516001600160f81b0319165f819003612bd25760405163babb01dd60e01b815260040160405180910390fd5b600184015160088302610100031c60378111612c015760405163babb01dd60e01b815260040160405180910390fd5b612c0b8184613990565b895111612c2b576040516366c9448560e01b815260040160405180910390fd5b612c36836001613990565b975095505f9450612d689350505050565b60f78111612c91575f612c5b60c083613bbd565b905080875f015111612c80576040516366c9448560e01b815260040160405180910390fd5b600195509350849250612d68915050565b5f612c9d60f783613bbd565b905080875f015111612cc2576040516366c9448560e01b815260040160405180910390fd5b60018301516001600160f81b0319165f819003612cf25760405163babb01dd60e01b815260040160405180910390fd5b600184015160088302610100031c60378111612d215760405163babb01dd60e01b815260040160405180910390fd5b612d2b8184613990565b895111612d4b576040516366c9448560e01b815260040160405180910390fd5b612d56836001613990565b9750955060019450612d689350505050565b9193909250565b6060816001600160401b03811115612d8957612d8961363d565b6040519080825280601f01601f191660200182016040528015612db3576020820181803683370190505b50905081156107b2575f612dc78486613990565b9050602082015f5b84811015612de7578281015182820152602001612dcf565b84811115612df5575f858301525b5050509392505050565b60605f82604051602001612e1591815260200190565b60408051601f1981840301815291905290505f5b6020811015612e6157818181518110612e4457612e44613968565b01602001516001600160f81b0319165f03612e6157600101612e29565b612e6c816020613bbd565b6001600160401b03811115612e8357612e8361363d565b6040519080825280601f01601f191660200182016040528015612ead576020820181803683370190505b5092505f5b835181101561195a578282612ec681613cfb565b935081518110612ed857612ed8613968565b602001015160f81c60f81b848281518110612ef557612ef5613968565b60200101906001600160f81b03191690815f1a905350600101612eb2565b606081516001148015612f3f57506080825f81518110612f3557612f35613968565b016020015160f81c105b15612f48575090565b612f54825160806131fe565b82604051602001612038929190613d13565b919050565b5f6108c184612f7b87868661204e565b8051602091820120825192909101919091201490565b815115612fa15781518083602001fd5b8060405162461bcd60e51b81526004016106d49190613d41565b8051606090806001600160401b03811115612fd857612fd861363d565b60405190808252806020026020018201604052801561301d57816020015b6040805180820190915260608082526020820152815260200190600190039081612ff65790505b5091505f5b8181101561195c57604051806040016040528085838151811061304757613047613968565b6020026020010151815260200161307686848151811061306957613069613968565b6020026020010151611ee6565b81525083828151811061308b5761308b613968565b6020908102919091010152600101613022565b606080604051905082518060011b603f8101601f191683016040528083525060208401602083015f5b838110156130f4578060011b8201818401515f1a8060041c8253600f8116600183015350506001016130c7565b509295945050505050565b60606020825f01511061311a5761311582611ef9565b610686565b610686826133a3565b606061068661314183602001515f81518110611daf57611daf613968565b61309e565b606082518210613164575060408051602081019091525f8152610686565b6107b283838486516131769190613bbd565b6133b7565b5f5f825184511061318d578251613190565b83515b90505b80821080156131e757508282815181106131af576131af613968565b602001015160f81c60f81b6001600160f81b0319168483815181106131d6576131d6613968565b01602001516001600160f81b031916145b156131f757816001019150613193565b5092915050565b6060603883101561326257604080516001808252818301909252906020820181803683370190505090506132328284613d73565b60f81b815f8151811061324757613247613968565b60200101906001600160f81b03191690815f1a905350610686565b5f60015b6132708186613d8c565b15613296578161327f81613cfb565b925061328f905061010082613d9f565b9050613266565b6132a1826001613990565b6001600160401b038111156132b8576132b861363d565b6040519080825280601f01601f1916602001820160405280156132e2576020820181803683370190505b5092506132ef8483613d73565b6132fa906037613d73565b60f81b835f8151811061330f5761330f613968565b60200101906001600160f81b03191690815f1a905350600190505b81811161339b5761010061333e8284613bbd565b61334a90610100613e91565b6133549087613d8c565b61335e9190613e9c565b60f81b83828151811061337357613373613968565b60200101906001600160f81b03191690815f1a9053508061339381613cfb565b91505061332a565b505092915050565b606061068682602001515f845f0151612d6f565b60608182601f0110156133fd5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016106d4565b8282840110156134405760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016106d4565b818301845110156134875760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016106d4565b6060821580156134a55760405191505f8252602082016040526134ef565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156134de5780518352602092830192016134c6565b5050858452601f01601f1916604052505b50949350505050565b6001600160a01b0381168114610759575f5ffd5b80358015158114612f66575f5ffd5b5f5f6040838503121561352c575f5ffd5b8235613537816134f8565b91506135456020840161350c565b90509250929050565b5f5f6040838503121561355f575f5ffd5b823561356a816134f8565b946020939093013593505050565b80356001600160401b0381168114612f66575f5ffd5b5f5f6040838503121561359f575f5ffd5b61356a83613578565b5f602082840312156135b8575f5ffd5b81356107b2816134f8565b5f5f5f5f608085870312156135d6575f5ffd5b6135df85613578565b9350602085013592506135f460408601613578565b9396929550929360600135925050565b5f5f5f60608486031215613616575f5ffd5b61361f84613578565b9250602084013591506136346040850161350c565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b03811182821017156136735761367361363d565b60405290565b604051601f8201601f191681016001600160401b03811182821017156136a1576136a161363d565b604052919050565b5f82601f8301126136b8575f5ffd5b81356001600160401b038111156136d1576136d161363d565b6136e4601f8201601f1916602001613679565b8181528460208386010111156136f8575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215613725575f5ffd5b8235613730816134f8565b915060208301356001600160401b0381111561374a575f5ffd5b613756858286016136a9565b9150509250929050565b5f60208284031215613770575f5ffd5b5035919050565b5f5f5f5f5f6080868803121561378b575f5ffd5b61379486613578565b945060208601356137a4816134f8565b93506040860135925060608601356001600160401b038111156137c5575f5ffd5b8601601f810188136137d5575f5ffd5b80356001600160401b038111156137ea575f5ffd5b8860208284010111156137fb575f5ffd5b959894975092955050506020019190565b5f5f5f6060848603121561381e575f5ffd5b61382784613578565b92506020840135613837816134f8565b929592945050506040919091013590565b5f5f5f6060848603121561385a575f5ffd5b61386384613578565b92506020840135915061363460408501613578565b5f5f60408385031215613889575f5ffd5b823591506135456020840161350c565b5f5f604083850312156138aa575f5ffd5b82356138b5816134f8565b915060208301356138c5816134f8565b809150509250929050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808201808211156106865761068661397c565b5f602082840312156139b3575f5ffd5b5051919050565b5f6001600160401b038211156139d2576139d261363d565b5060051b60200190565b803560048110612f66575f5ffd5b5f82601f8301126139f9575f5ffd5b8135613a0c613a07826139ba565b613679565b8082825260208201915060208360051b860101925085831115613a2d575f5ffd5b602085015b83811015613a6d5780356001600160401b03811115613a4f575f5ffd5b613a5e886020838a01016136a9565b84525060209283019201613a32565b5095945050505050565b5f60208284031215613a87575f5ffd5b81356001600160401b03811115613a9c575f5ffd5b8201601f81018413613aac575f5ffd5b8035613aba613a07826139ba565b8082825260208201915060208360051b850101925086831115613adb575f5ffd5b602084015b83811015611e285780356001600160401b03811115613afd575f5ffd5b850160c0818a03601f19011215613b12575f5ffd5b613b1a613651565b613b2660208301613578565b8152613b3460408301613578565b602082015260608201356040820152613b4f608083016139dc565b606082015260a08201356001600160401b03811115613b6c575f5ffd5b613b7b8b6020838601016139ea565b60808301525060c08201356001600160401b03811115613b99575f5ffd5b613ba88b6020838601016139ea565b60a08301525084525060209283019201613ae0565b818103818111156106865761068661397c565b634e487b7160e01b5f52602160045260245ffd5b5f60208284031215613bf4575f5ffd5b81516107b2816134f8565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b80516020808301519190811015613c6a575f198160200360031b1b821691505b50919050565b5f5b83811015613c8a578181015183820152602001613c72565b50505f910152565b5f8251613ca3818460208701613c70565b9190910192915050565b634e487b7160e01b5f52601260045260245ffd5b5f60ff831680613cd357613cd3613cad565b8060ff84160691505092915050565b60ff82811682821603908111156106865761068661397c565b5f60018201613d0c57613d0c61397c565b5060010190565b5f8351613d24818460208801613c70565b835190830190613d38818360208801613c70565b01949350505050565b602081525f8251806020840152613d5f816040850160208701613c70565b601f01601f19169190910160400192915050565b60ff81811683821601908111156106865761068661397c565b5f82613d9a57613d9a613cad565b500490565b80820281158282048414176106865761068661397c565b6001815b6001841115610c5257808504811115613dd557613dd561397c565b6001841615613de357908102905b60019390931c928002613dba565b5f82613dff57506001610686565b81613e0b57505f610686565b8160018114613e215760028114613e2b57613e47565b6001915050610686565b60ff841115613e3c57613e3c61397c565b50506001821b610686565b5060208310610133831016604e8410600b8410161715613e6a575081810a610686565b613e765f198484613db6565b805f1904821115613e8957613e8961397c565b029392505050565b5f6107b28383613df1565b5f82613eaa57613eaa613cad565b50069056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122088e374295b28e7ad8361a3b961be9595b9248bb8792c867a5bea9cc2824409f764736f6c634300081b0033", + "code": "0x6080604052600436106101c5575f3560e01c806379ba5097116100f2578063a86f9d9e11610092578063e30c397811610062578063e30c39781461052f578063f09a40161461054c578063f2fde38b1461056b578063fe9fbb801461058a575f5ffd5b8063a86f9d9e1461048e578063ce9d0820146104ad578063dfc8ff1d146104cc578063e07baba61461050a575f5ffd5b80638da5cb5b116100cd5780638da5cb5b14610414578063910af6ed1461043157806391f3f74b146104505780639b527cfa1461046f575f5ffd5b806379ba5097146103d85780638456cb59146103ec5780638abf607714610400575f5ffd5b80633eb6b8cf1161016857806352d1902d1161013857806352d1902d146103715780635c975abb1461038557806366ca2bc0146103a5578063715018a6146103c4575f5ffd5b80633eb6b8cf146102fe5780633f4ba83a1461031d5780634f1ef286146103315780634f90a67414610344575f5ffd5b8063355bcc3d116101a3578063355bcc3d146102325780633659cfe6146102895780633ab76e9f146102a85780633ced0e08146102df575f5ffd5b80632d1fb389146101c95780633075db56146101ea57806332676bc614610213575b5f5ffd5b3480156101d4575f5ffd5b506101e86101e336600461351b565b6105b8565b005b3480156101f5575f5ffd5b506101fe61065e565b60405190151581526020015b60405180910390f35b34801561021e575f5ffd5b506101fe61022d36600461354e565b610676565b34801561023d575f5ffd5b5061027161024c36600461358e565b60fb60209081525f92835260408084209091529082529020546001600160401b031681565b6040516001600160401b03909116815260200161020a565b348015610294575f5ffd5b506101e86102a33660046135a8565b61068c565b3480156102b3575f5ffd5b506097546102c7906001600160a01b031681565b6040516001600160a01b03909116815260200161020a565b3480156102ea575f5ffd5b506101fe6102f93660046135c3565b61075c565b348015610309575f5ffd5b506102c7610318366004613604565b6107a3565b348015610328575f5ffd5b506101e86107b9565b6101e861033f366004613714565b6107cd565b34801561034f575f5ffd5b5061036361035e3660046135c3565b610886565b60405190815260200161020a565b34801561037c575f5ffd5b506103636108cc565b348015610390575f5ffd5b506101fe60c954610100900460ff1660021490565b3480156103b0575f5ffd5b506103636103bf366004613760565b61097d565b3480156103cf575f5ffd5b506101e8610989565b3480156103e3575f5ffd5b506101e861099a565b3480156103f7575f5ffd5b506101e8610a11565b34801561040b575f5ffd5b506102c7610a24565b34801561041f575f5ffd5b506033546001600160a01b03166102c7565b34801561043c575f5ffd5b5061036361044b366004613777565b610a32565b34801561045b575f5ffd5b5061036361046a36600461380c565b610b0d565b34801561047a575f5ffd5b50610363610489366004613848565b610b78565b348015610499575f5ffd5b506102c76104a8366004613878565b610ba4565b3480156104b8575f5ffd5b506101e86104c7366004613777565b610bb0565b3480156104d7575f5ffd5b506104eb6104e6366004613848565b610bc6565b604080516001600160401b03909316835260208301919091520161020a565b348015610515575f5ffd5b5060c954610271906201000090046001600160401b031681565b34801561053a575f5ffd5b506065546001600160a01b03166102c7565b348015610557575f5ffd5b506101e8610566366004613899565b610c5a565b348015610576575f5ffd5b506101e86105853660046135a8565b610d69565b348015610595575f5ffd5b506101fe6105a43660046135a8565b60fc6020525f908152604090205460ff1681565b6105c0610dda565b6001600160a01b0382165f90815260fc602052604090205481151560ff909116151503610600576040516398f26f4560e01b815260040160405180910390fd5b6001600160a01b0382165f81815260fc6020908152604091829020805460ff191685151590811790915591519182527f4c0079b9bcd37cd5d29a13938effd97c881798cbc6bd52a3026a29d94b27d1bf910160405180910390a25050565b5f600261066d60c95460ff1690565b60ff1614905090565b5f6106818383610e34565b151590505b92915050565b6001600160a01b037f00000000000000000000000001670100000000000000000000000000000000051630036106dd5760405162461bcd60e51b81526004016106d4906138d0565b60405180910390fd5b7f00000000000000000000000001670100000000000000000000000000000000056001600160a01b031661070f610e96565b6001600160a01b0316146107355760405162461bcd60e51b81526004016106d49061391c565b61073e81610eb1565b604080515f8082526020820190925261075991839190610eb9565b50565b5f8180820361077e5760405163ec73295960e01b815260040160405180910390fd5b5f61078a878787610b78565b9050836107973083610e34565b14979650505050505050565b5f6107af848484611023565b90505b9392505050565b6107c1611075565b6107cb335f611105565b565b6001600160a01b037f00000000000000000000000001670100000000000000000000000000000000051630036108155760405162461bcd60e51b81526004016106d4906138d0565b7f00000000000000000000000001670100000000000000000000000000000000056001600160a01b0316610847610e96565b6001600160a01b03161461086d5760405162461bcd60e51b81526004016106d49061391c565b61087682610eb1565b61088282826001610eb9565b5050565b335f90815260fc602052604081205460ff166108b557604051631f67751f60e01b815260040160405180910390fd5b6108c18585858561111e565b90505b949350505050565b5f306001600160a01b037f0000000000000000000000000167010000000000000000000000000000000005161461096b5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016106d4565b505f516020613eb05f395f51905f5290565b5f610686338384611200565b610991610dda565b6107cb5f6112d9565b60655433906001600160a01b03168114610a085760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016106d4565b610759816112d9565b610a196112f2565b6107cb336001611105565b5f610a2d610e96565b905090565b5f610a4760c954610100900460ff1660021490565b15610a655760405163bae6e2a960e01b815260040160405180910390fd5b6002610a7360c95460ff1690565b60ff1603610a945760405163dfc60d8560e01b815260040160405180910390fd5b60c9805460ff191660021790555f610ab187878787876001611363565b90505f5b8151811015610af457610ae0828281518110610ad357610ad3613968565b602002602001015161181f565b610aea9084613990565b9250600101610ab5565b505060c9805460ff191660011790555b95945050505050565b6040516514d251d3905360d21b60208201526001600160c01b031960c085901b1660268201526bffffffffffffffffffffffff19606084901b16602e820152604281018290525f906062015b6040516020818303038152906040528051906020012090509392505050565b604080516001600160401b03808616602083015291810184905290821660608201525f90608001610b59565b5f6107b2468484611023565b610bbe85858585855f611363565b505050505050565b5f5f826001600160401b03165f03610c02576001600160401b038086165f90815260fb6020908152604080832088845290915290205416610c04565b825b91506001600160401b03821615610c52575f610c21868685610b78565b9050610c2d3082610e34565b91505f829003610c505760405163738afa0560e01b815260040160405180910390fd5b505b935093915050565b5f54610100900460ff1615808015610c7857505f54600160ff909116105b80610c915750303b158015610c9157505f5460ff166001145b610cf45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106d4565b5f805460ff191660011790558015610d15575f805461ff0019166101001790555b610d1f8383611963565b8015610d64575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610d71610dda565b606580546001600160a01b0383166001600160a01b03199091168117909155610da26033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6033546001600160a01b031633146107cb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106d4565b5f826001600160a01b038116610e5d5760405163538ba4f960e01b815260040160405180910390fd5b825f819003610e7f5760405163ec73295960e01b815260040160405180910390fd5b5f610e8b468787610b0d565b549695505050505050565b5f516020613eb05f395f51905f52546001600160a01b031690565b610759610dda565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610eec57610d648361199d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610f46575060408051601f3d908101601f19168201909252610f43918101906139a3565b60015b610fa95760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016106d4565b5f516020613eb05f395f51905f5281146110175760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016106d4565b50610d64838383611a38565b5f61102e8484611a62565b90508115801561104557506001600160a01b038116155b156107b257604051632b0d65db60e01b81526001600160401b0385166004820152602481018490526044016106d4565b61108960c954610100900460ff1660021490565b6110a65760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b604051630c2b8f8f60e11b815260040160405180910390fd5b5f61112a858585610b78565b9050611137308284611200565b506001600160401b038581165f90815260fb60209081526040808320888452909152902054818516911610156111a1576001600160401b038581165f90815260fb602090815260408083208884529091529020805467ffffffffffffffff19169185169190911790555b83836001600160401b0316866001600160401b03167fde247c825b1fb2d7ff9e0e771cba6f9e757ad04479fcdc135d88ae91fd50b37d85856040516111f0929190918252602082015260400190565b60405180910390a4949350505050565b5f836001600160a01b0381166112295760405163538ba4f960e01b815260040160405180910390fd5b835f81900361124b5760405163ec73295960e01b815260040160405180910390fd5b835f81900361126d5760405163ec73295960e01b815260040160405180910390fd5b611278468888610b0d565b858155604080516001600160a01b038a16815260208101899052908101829052606081018790529094507f0ad2d108660a211f47bf7fb43a0443cae181624995d3d42b88ee6879d200e9739060800160405180910390a15050509392505050565b606580546001600160a01b031916905561075981611b04565b61130660c954610100900460ff1660021490565b156113245760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016110fb565b6060856001600160a01b03811661138d5760405163538ba4f960e01b815260040160405180910390fd5b855f8190036113af5760405163ec73295960e01b815260040160405180910390fd5b5f6113bc86880188613a77565b905080515f036113df57604051630b92daef60e21b815260040160405180910390fd5b5f600182516113ee9190613bbd565b6001600160401b038111156114055761140561363d565b60405190808252806020026020018201604052801561142e578160200160208202803683370190505b50905085156114c15781516001600160401b038111156114505761145061363d565b6040519080825280602002602001820160405280156114bd57816020015b6114aa6040805160e0810182525f80825260208201819052918101829052606081018290526080810182905260a081018290529060c082015290565b81526020019060019003908161146e5790505b5094505b8a8a8a805f6114e2856d7369676e616c5f7365727669636560901b836107a3565b9050306001600160a01b0382160361150d57604051637556223560e11b815260040160405180910390fd5b6115456040805160c0810182525f80825260208201819052918101829052906060820190815260200160608152602001606081525090565b5f5f5f5f5b8b518110156117d3578b818151811061156557611565613968565b602002602001015194505f5b818110156115cf57855f01516001600160401b03168c828151811061159857611598613968565b60200260200101516001600160401b0316036115c7576040516348362c2760e11b815260040160405180910390fd5b600101611571565b506115de8a8a8a8a898b611b55565b93508a5181149150811561161e5784516001600160401b03164614611616576040516338bf822760e21b815260040160405180910390fd5b3095506116c9565b845f01518b828151811061163457611634613968565b6001600160401b0392831660209182029290920101528551161580611662575084516001600160401b031646145b1561168057604051637556223560e11b815260040160405180910390fd5b845161169e906d7369676e616c5f7365727669636560901b5f6107a3565b9550306001600160a01b038716036116c957604051637556223560e11b815260040160405180910390fd5b608085015151151592508f1561175d576040518060e00160405280866040015181526020018581526020018b6001600160401b0316815260200186602001516001600160401b03168152602001841515815260200183151581526020018660600151600381111561173c5761173c613bd0565b8152508f828151811061175157611751613968565b60200260200101819052505b6117b88a8461178c577fc6cdc4f2acf13acb10f410085b821f7b7113b303e9a4799023f928317396aaf56117ae565b7f73e6d340850343cc6f001515dc593377337c95a6ffe034fe1e844d4dab5da1695b8760200151610b78565b604086015186519b509699509750949550879460010161154a565b508515806117ea57506117e63088610e34565b8614155b156118085760405163738afa0560e01b815260040160405180910390fd5b505050505050505050505050509695505050505050565b5f8060038360c00151600381111561183957611839613bd0565b148061185a575060028360c00151600381111561185857611858613bd0565b145b905080801561186a575082608001515b801561187857508260a00151155b156118ba57600191506118b883604001517f73e6d340850343cc6f001515dc593377337c95a6ffe034fe1e844d4dab5da1698560600151865f015161111e565b505b5f60038460c0015160038111156118d3576118d3613bd0565b14806118f4575060018460c0015160038111156118f2576118f2613bd0565b145b9050808015611910575083608001518061191057508360a00151155b1561195c57611920600184613990565b925061195a84604001517fc6cdc4f2acf13acb10f410085b821f7b7113b303e9a4799023f928317396aaf58660600151876020015161111e565b505b5050919050565b806001600160a01b03811661198b5760405163538ba4f960e01b815260040160405180910390fd5b61199483611bf4565b610d6482611c52565b6001600160a01b0381163b611a0a5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016106d4565b5f516020613eb05f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611a4183611cc2565b5f82511180611a4d5750805b15610d6457611a5c8383611d01565b50505050565b6097545f906001600160a01b031680611a8e57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611ae0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c49190613be4565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f856001600160a01b038116611b7e5760405163538ba4f960e01b815260040160405180910390fd5b855f819003611ba05760405163ec73295960e01b815260040160405180910390fd5b855f819003611bc25760405163ec73295960e01b815260040160405180910390fd5b611be6866040015186611bd68d8d8d610b0d565b8a8a608001518b60a00151611d26565b9a9950505050505050505050565b5f54610100900460ff16611c1a5760405162461bcd60e51b81526004016106d490613bff565b611c22611e33565b611c406001600160a01b03821615611c3a57816112d9565b336112d9565b5060c9805461ff001916610100179055565b5f54610100900460ff16611c785760405162461bcd60e51b81526004016106d490613bff565b6001600160401b03461115611ca05760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b611ccb8161199d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606107b28383604051806060016040528060278152602001613ed060279139611e59565b5f82515f14611dce576040516bffffffffffffffffffffffff19606088901b1660208201525f90611d6a90603401604051602081830303815290604052858a611ecd565b905080515f03611d8d57604051630414cd5b60e31b815260040160405180910390fd5b5f611d9782611ee6565b9050611dbc81600281518110611daf57611daf613968565b6020026020010151611ef9565b611dc590613c4a565b92505050611dd1565b50855b5f611e0886604051602001611de891815260200190565b60408051601f19818403018152919052611e0187611f78565b8585611f8b565b905080611e2857604051638d9a4db360e01b815260040160405180910390fd5b509695505050505050565b5f54610100900460ff166107cb5760405162461bcd60e51b81526004016106d490613bff565b60605f5f856001600160a01b031685604051611e759190613c92565b5f60405180830381855af49150503d805f8114611ead576040519150601f19603f3d011682016040523d82523d5f602084013e611eb2565b606091505b5091509150611ec386838387611fa4565b9695505050505050565b60605f611ed98561201c565b9050610b0481858561204e565b6060610686611ef4836128bc565b61290e565b60605f5f5f611f0785612a8c565b919450925090505f816001811115611f2157611f21613bd0565b14611f3f576040516307fe6cb960e21b815260040160405180910390fd5b611f498284613990565b855114611f6957604051630b8aa6f760e31b815260040160405180910390fd5b610b0485602001518484612d6f565b6060610686611f8683612dff565b612f13565b5f5f611f968661201c565b9050611ec381868686612f6b565b606083156120125782515f0361200b576001600160a01b0385163b61200b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106d4565b50816108c4565b6108c48383612f91565b6060818051906020012060405160200161203891815260200190565b6040516020818303038152906040529050919050565b60605f8451116120985760405162461bcd60e51b81526020600482015260156024820152744d65726b6c65547269653a20656d707479206b657960581b60448201526064016106d4565b5f6120a284612fbb565b90505f6120ae8661309e565b90505f846040516020016120c491815260200190565b60408051601f1981840301815291905290505f805b8451811015612865575f8582815181106120f5576120f5613968565b6020026020010151905084518311156121675760405162461bcd60e51b815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201526d0e8c2d840d6caf240d8cadccee8d60931b60648201526084016106d4565b825f0361220557805180516020918201206040516121b49261218e92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b6122005760405162461bcd60e51b815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016106d4565b6122fb565b80515160201161228b578051805160209182012060405161222f9261218e92910190815260200190565b6122005760405162461bcd60e51b815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e6044820152660c2d840d0c2e6d60cb1b60648201526084016106d4565b8051845160208087019190912082519190920120146122fb5760405162461bcd60e51b815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f646044820152650ca40d0c2e6d60d31b60648201526084016106d4565b61230760106001613990565b8160200151510361249f5784518303612439576123348160200151601081518110611daf57611daf613968565b96505f8751116123ac5760405162461bcd60e51b815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016106d4565b600186516123ba9190613bbd565b821461242e5760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016106d4565b5050505050506107b2565b5f85848151811061244c5761244c613968565b602001015160f81c60f81b60f81c90505f82602001518260ff168151811061247657612476613968565b60200260200101519050612489816130ff565b9550612496600186613990565b9450505061285c565b600281602001515103612803575f6124b682613123565b90505f815f815181106124cb576124cb613968565b016020015160f81c90505f6124e1600283613cc1565b6124ec906002613ce2565b90505f6124fc848360ff16613146565b90505f6125098a89613146565b90505f612516838361317b565b90508083511461258e5760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016106d4565b60ff8516600214806125a3575060ff85166003145b15612743578082511461261e5760405162461bcd60e51b815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016106d4565b6126388760200151600181518110611daf57611daf613968565b9c505f8d51116126b05760405162461bcd60e51b815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016106d4565b60018c516126be9190613bbd565b88146127325760405162461bcd60e51b815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016106d4565b5050505050505050505050506107b2565b60ff85161580612756575060ff85166001145b1561279557612782876020015160018151811061277557612775613968565b60200260200101516130ff565b995061278e818a613990565b98506127f8565b60405162461bcd60e51b815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f64652077697468604482015271040c2dc40eadcd6dcdeeedc40e0e4caccd2f60731b60648201526084016106d4565b50505050505061285c565b60405162461bcd60e51b815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e706172736561604482015267626c65206e6f646560c01b60648201526084016106d4565b506001016120d9565b5060405162461bcd60e51b815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c656044820152646d656e747360d81b60648201526084016106d4565b604080518082019091525f808252602082015281515f036128f057604051635ab458fb60e01b815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b60605f5f5f61291c85612a8c565b91945092509050600181600181111561293757612937613bd0565b14612955576040516325ce355f60e11b815260040160405180910390fd5b84516129618385613990565b1461297f57604051630b8aa6f760e31b815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091525f80825260208201528152602001906001900390816129965790505093505f835b8651811015612a80575f5f612a056040518060400160405280858c5f01516129e99190613bbd565b8152602001858c602001516129fe9190613990565b9052612a8c565b509150915060405180604001604052808383612a219190613990565b8152602001848b60200151612a369190613990565b815250888581518110612a4b57612a4b613968565b6020908102919091010152612a61600185613990565b9350612a6d8183613990565b612a779084613990565b925050506129c1565b50845250919392505050565b5f5f5f835f01515f03612ab257604051635ab458fb60e01b815260040160405180910390fd5b602084015180515f1a607f8111612ad4575f60015f9450945094505050612d68565b60b78111612b69575f612ae8608083613bbd565b905080875f015111612b0d576040516366c9448560e01b815260040160405180910390fd5b6001838101516001600160f81b0319169082148015612b395750600160ff1b6001600160f81b03198216105b15612b575760405163babb01dd60e01b815260040160405180910390fd5b506001955093505f9250612d68915050565b60bf8111612c47575f612b7d60b783613bbd565b905080875f015111612ba2576040516366c9448560e01b815260040160405180910390fd5b60018301516001600160f81b0319165f819003612bd25760405163babb01dd60e01b815260040160405180910390fd5b600184015160088302610100031c60378111612c015760405163babb01dd60e01b815260040160405180910390fd5b612c0b8184613990565b895111612c2b576040516366c9448560e01b815260040160405180910390fd5b612c36836001613990565b975095505f9450612d689350505050565b60f78111612c91575f612c5b60c083613bbd565b905080875f015111612c80576040516366c9448560e01b815260040160405180910390fd5b600195509350849250612d68915050565b5f612c9d60f783613bbd565b905080875f015111612cc2576040516366c9448560e01b815260040160405180910390fd5b60018301516001600160f81b0319165f819003612cf25760405163babb01dd60e01b815260040160405180910390fd5b600184015160088302610100031c60378111612d215760405163babb01dd60e01b815260040160405180910390fd5b612d2b8184613990565b895111612d4b576040516366c9448560e01b815260040160405180910390fd5b612d56836001613990565b9750955060019450612d689350505050565b9193909250565b6060816001600160401b03811115612d8957612d8961363d565b6040519080825280601f01601f191660200182016040528015612db3576020820181803683370190505b50905081156107b2575f612dc78486613990565b9050602082015f5b84811015612de7578281015182820152602001612dcf565b84811115612df5575f858301525b5050509392505050565b60605f82604051602001612e1591815260200190565b60408051601f1981840301815291905290505f5b6020811015612e6157818181518110612e4457612e44613968565b01602001516001600160f81b0319165f03612e6157600101612e29565b612e6c816020613bbd565b6001600160401b03811115612e8357612e8361363d565b6040519080825280601f01601f191660200182016040528015612ead576020820181803683370190505b5092505f5b835181101561195a578282612ec681613cfb565b935081518110612ed857612ed8613968565b602001015160f81c60f81b848281518110612ef557612ef5613968565b60200101906001600160f81b03191690815f1a905350600101612eb2565b606081516001148015612f3f57506080825f81518110612f3557612f35613968565b016020015160f81c105b15612f48575090565b612f54825160806131fe565b82604051602001612038929190613d13565b919050565b5f6108c184612f7b87868661204e565b8051602091820120825192909101919091201490565b815115612fa15781518083602001fd5b8060405162461bcd60e51b81526004016106d49190613d41565b8051606090806001600160401b03811115612fd857612fd861363d565b60405190808252806020026020018201604052801561301d57816020015b6040805180820190915260608082526020820152815260200190600190039081612ff65790505b5091505f5b8181101561195c57604051806040016040528085838151811061304757613047613968565b6020026020010151815260200161307686848151811061306957613069613968565b6020026020010151611ee6565b81525083828151811061308b5761308b613968565b6020908102919091010152600101613022565b606080604051905082518060011b603f8101601f191683016040528083525060208401602083015f5b838110156130f4578060011b8201818401515f1a8060041c8253600f8116600183015350506001016130c7565b509295945050505050565b60606020825f01511061311a5761311582611ef9565b610686565b610686826133a3565b606061068661314183602001515f81518110611daf57611daf613968565b61309e565b606082518210613164575060408051602081019091525f8152610686565b6107b283838486516131769190613bbd565b6133b7565b5f5f825184511061318d578251613190565b83515b90505b80821080156131e757508282815181106131af576131af613968565b602001015160f81c60f81b6001600160f81b0319168483815181106131d6576131d6613968565b01602001516001600160f81b031916145b156131f757816001019150613193565b5092915050565b6060603883101561326257604080516001808252818301909252906020820181803683370190505090506132328284613d73565b60f81b815f8151811061324757613247613968565b60200101906001600160f81b03191690815f1a905350610686565b5f60015b6132708186613d8c565b15613296578161327f81613cfb565b925061328f905061010082613d9f565b9050613266565b6132a1826001613990565b6001600160401b038111156132b8576132b861363d565b6040519080825280601f01601f1916602001820160405280156132e2576020820181803683370190505b5092506132ef8483613d73565b6132fa906037613d73565b60f81b835f8151811061330f5761330f613968565b60200101906001600160f81b03191690815f1a905350600190505b81811161339b5761010061333e8284613bbd565b61334a90610100613e91565b6133549087613d8c565b61335e9190613e9c565b60f81b83828151811061337357613373613968565b60200101906001600160f81b03191690815f1a9053508061339381613cfb565b91505061332a565b505092915050565b606061068682602001515f845f0151612d6f565b60608182601f0110156133fd5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016106d4565b8282840110156134405760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016106d4565b818301845110156134875760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016106d4565b6060821580156134a55760405191505f8252602082016040526134ef565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156134de5780518352602092830192016134c6565b5050858452601f01601f1916604052505b50949350505050565b6001600160a01b0381168114610759575f5ffd5b80358015158114612f66575f5ffd5b5f5f6040838503121561352c575f5ffd5b8235613537816134f8565b91506135456020840161350c565b90509250929050565b5f5f6040838503121561355f575f5ffd5b823561356a816134f8565b946020939093013593505050565b80356001600160401b0381168114612f66575f5ffd5b5f5f6040838503121561359f575f5ffd5b61356a83613578565b5f602082840312156135b8575f5ffd5b81356107b2816134f8565b5f5f5f5f608085870312156135d6575f5ffd5b6135df85613578565b9350602085013592506135f460408601613578565b9396929550929360600135925050565b5f5f5f60608486031215613616575f5ffd5b61361f84613578565b9250602084013591506136346040850161350c565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b03811182821017156136735761367361363d565b60405290565b604051601f8201601f191681016001600160401b03811182821017156136a1576136a161363d565b604052919050565b5f82601f8301126136b8575f5ffd5b81356001600160401b038111156136d1576136d161363d565b6136e4601f8201601f1916602001613679565b8181528460208386010111156136f8575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215613725575f5ffd5b8235613730816134f8565b915060208301356001600160401b0381111561374a575f5ffd5b613756858286016136a9565b9150509250929050565b5f60208284031215613770575f5ffd5b5035919050565b5f5f5f5f5f6080868803121561378b575f5ffd5b61379486613578565b945060208601356137a4816134f8565b93506040860135925060608601356001600160401b038111156137c5575f5ffd5b8601601f810188136137d5575f5ffd5b80356001600160401b038111156137ea575f5ffd5b8860208284010111156137fb575f5ffd5b959894975092955050506020019190565b5f5f5f6060848603121561381e575f5ffd5b61382784613578565b92506020840135613837816134f8565b929592945050506040919091013590565b5f5f5f6060848603121561385a575f5ffd5b61386384613578565b92506020840135915061363460408501613578565b5f5f60408385031215613889575f5ffd5b823591506135456020840161350c565b5f5f604083850312156138aa575f5ffd5b82356138b5816134f8565b915060208301356138c5816134f8565b809150509250929050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808201808211156106865761068661397c565b5f602082840312156139b3575f5ffd5b5051919050565b5f6001600160401b038211156139d2576139d261363d565b5060051b60200190565b803560048110612f66575f5ffd5b5f82601f8301126139f9575f5ffd5b8135613a0c613a07826139ba565b613679565b8082825260208201915060208360051b860101925085831115613a2d575f5ffd5b602085015b83811015613a6d5780356001600160401b03811115613a4f575f5ffd5b613a5e886020838a01016136a9565b84525060209283019201613a32565b5095945050505050565b5f60208284031215613a87575f5ffd5b81356001600160401b03811115613a9c575f5ffd5b8201601f81018413613aac575f5ffd5b8035613aba613a07826139ba565b8082825260208201915060208360051b850101925086831115613adb575f5ffd5b602084015b83811015611e285780356001600160401b03811115613afd575f5ffd5b850160c0818a03601f19011215613b12575f5ffd5b613b1a613651565b613b2660208301613578565b8152613b3460408301613578565b602082015260608201356040820152613b4f608083016139dc565b606082015260a08201356001600160401b03811115613b6c575f5ffd5b613b7b8b6020838601016139ea565b60808301525060c08201356001600160401b03811115613b99575f5ffd5b613ba88b6020838601016139ea565b60a08301525084525060209283019201613ae0565b818103818111156106865761068661397c565b634e487b7160e01b5f52602160045260245ffd5b5f60208284031215613bf4575f5ffd5b81516107b2816134f8565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b80516020808301519190811015613c6a575f198160200360031b1b821691505b50919050565b5f5b83811015613c8a578181015183820152602001613c72565b50505f910152565b5f8251613ca3818460208701613c70565b9190910192915050565b634e487b7160e01b5f52601260045260245ffd5b5f60ff831680613cd357613cd3613cad565b8060ff84160691505092915050565b60ff82811682821603908111156106865761068661397c565b5f60018201613d0c57613d0c61397c565b5060010190565b5f8351613d24818460208801613c70565b835190830190613d38818360208801613c70565b01949350505050565b602081525f8251806020840152613d5f816040850160208701613c70565b601f01601f19169190910160400192915050565b60ff81811683821601908111156106865761068661397c565b5f82613d9a57613d9a613cad565b500490565b80820281158282048414176106865761068661397c565b6001815b6001841115610c5257808504811115613dd557613dd561397c565b6001841615613de357908102905b60019390931c928002613dba565b5f82613dff57506001610686565b81613e0b57505f610686565b8160018114613e215760028114613e2b57613e47565b6001915050610686565b60ff841115613e3c57613e3c61397c565b50506001821b610686565b5060208310610133831016604e8410600b8410161715613e6a575081810a610686565b613e765f198484613db6565b805f1904821115613e8957613e8961397c565b029392505050565b5f6107b28383613df1565b5f82613eaa57613eaa613cad565b50069056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122088e374295b28e7ad8361a3b961be9595b9248bb8792c867a5bea9cc2824409f764736f6c634300081b0033", "balance": "0x0" }, - "0x1670000000000000000000000000000000000005": { + "0x1670100000000000000000000000000000000005": { "contractName": "SignalService", "storage": { "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", - "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670000000000000000000000000000000000006", - "0xdf3a3dd9c4001d1115304f0841a31ee7b79b184f45ef381343fdf0ae529fbcb4": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000000005" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670100000000000000000000000000000000006", + "0x301006667fd8aa626b63e5445e5183081bd1b69d132f18fac530bd2d66888167": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167010000000000000000000000000000000005" }, "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", "balance": "0x0" }, - "0x0167000000000000000000000000000000010001": { + "0x0167010000000000000000000000000000010001": { "contractName": "TaikoL2Impl", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f" }, - "code": "0x6080604052600436106101fc575f3560e01c80638456cb5911610113578063da69d3db1161009d578063e902461a1161006d578063e902461a146105ca578063ee82ac5e146105e9578063f2fde38b14610608578063f940e38514610627578063fd85eb2d14610646575f5ffd5b8063da69d3db14610554578063dac5df7814610573578063e07baba614610588578063e30c3978146105ad575f5ffd5b8063a7137c0f116100e3578063a7137c0f1461047c578063a7e022d1146104a2578063a86f9d9e146104de578063b8c7b30c146104fd578063c3f909d41461051c575f5ffd5b80638456cb59146104125780638abf6077146104265780638da5cb5b1461043a5780639ee512f214610457575f5ffd5b80633eb6b8cf11610194578063539b8ade11610164578063539b8ade146103855780635950f9f1146103ab5780635c975abb146103ca578063715018a6146103ea57806379ba5097146103fe575f5ffd5b80633eb6b8cf1461031d5780633f4ba83a1461033c5780634f1ef2861461035057806352d1902d14610363575f5ffd5b806333d5ac9b116101cf57806333d5ac9b1461028d578063356aec04146102b35780633659cfe6146102c55780633ab76e9f146102e6575f5ffd5b806312622e5b14610200578063136dc4a81461023c5780632f9804731461025b5780633075db5614610279575b5f5ffd5b34801561020b575f5ffd5b5060fe5461021f906001600160401b031681565b6040516001600160401b0390911681526020015b60405180910390f35b348015610247575f5ffd5b5061021f6102563660046125c0565b610665565b348015610266575f5ffd5b505f5b6040519015158152602001610233565b348015610284575f5ffd5b5061026961067b565b348015610298575f5ffd5b5060fd5461021f90600160401b90046001600160401b031681565b3480156102be575f5ffd5b505f61021f565b3480156102d0575f5ffd5b506102e46102df366004612614565b610693565b005b3480156102f1575f5ffd5b50609754610305906001600160a01b031681565b6040516001600160a01b039091168152602001610233565b348015610328575f5ffd5b5061030561033736600461263c565b610763565b348015610347575f5ffd5b506102e461076f565b6102e461035e36600461268d565b610783565b34801561036e575f5ffd5b5061037761083c565b604051908152602001610233565b348015610390575f5ffd5b5060fd5461021f90600160801b90046001600160401b031681565b3480156103b6575f5ffd5b506102e46103c5366004612750565b6108ed565b3480156103d5575f5ffd5b5061026960c954610100900460ff1660021490565b3480156103f5575f5ffd5b506102e4610af6565b348015610409575f5ffd5b506102e4610b07565b34801561041d575f5ffd5b506102e4610b7e565b348015610431575f5ffd5b50610305610b91565b348015610445575f5ffd5b506033546001600160a01b0316610305565b348015610462575f5ffd5b5061030571777735367b36bc9b61c50022d9d0700db4ec81565b348015610487575f5ffd5b5060fd5461021f90600160c01b90046001600160401b031681565b3480156104ad575f5ffd5b506104c16104bc3660046127b8565b610b9f565b604080519283526001600160401b03909116602083015201610233565b3480156104e9575f5ffd5b506103056104f83660046127e9565b610c15565b348015610508575f5ffd5b5060fd5461021f906001600160401b031681565b348015610527575f5ffd5b50610530610c2a565b60408051825163ffffffff16815260209283015160ff169281019290925201610233565b34801561055f575f5ffd5b506102e461056e366004612817565b610c5b565b34801561057e575f5ffd5b5061037760fc5481565b348015610593575f5ffd5b5060c95461021f906201000090046001600160401b031681565b3480156105b8575f5ffd5b506065546001600160a01b0316610305565b3480156105d5575f5ffd5b506104c16105e436600461285f565b610d2b565b3480156105f4575f5ffd5b506103776106033660046128a7565b610e0d565b348015610613575f5ffd5b506102e4610622366004612614565b610e45565b348015610632575f5ffd5b506102e46106413660046128be565b610eb6565b348015610651575f5ffd5b506102e46106603660046128ea565b611075565b5f6106718484846114df565b90505b9392505050565b5f600261068a60c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000100011630036106e45760405162461bcd60e51b81526004016106db9061292b565b60405180910390fd5b7f00000000000000000000000001670000000000000000000000000000000100016001600160a01b031661071661159a565b6001600160a01b03161461073c5760405162461bcd60e51b81526004016106db90612977565b610745816115b5565b604080515f80825260208201909252610760918391906115bd565b50565b5f610671848484611727565b610777611779565b610781335f611809565b565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000100011630036107cb5760405162461bcd60e51b81526004016106db9061292b565b7f00000000000000000000000001670000000000000000000000000000000100016001600160a01b03166107fd61159a565b6001600160a01b0316146108235760405162461bcd60e51b81526004016106db90612977565b61082c826115b5565b610838828260016115bd565b5050565b5f306001600160a01b037f000000000000000000000000016700000000000000000000000000000001000116146108db5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016106db565b505f516020612c045f395f51905f5290565b5f54610100900460ff161580801561090b57505f54600160ff909116105b806109245750303b15801561092457505f5460ff166001145b6109875760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106db565b5f805460ff1916600117905580156109a8575f805461ff0019166101001790555b6109b28585611811565b6001600160401b03831615806109d0575046836001600160401b0316145b156109ee576040516308279a2560e31b815260040160405180910390fd5b600146111580610a0457506001600160401b0346115b15610a2257604051638f972ecb60e01b815260040160405180910390fd5b4315610a6c5743600103610a53575f610a3c6001436129d7565b5f81815260fb602052604090209040905550610a6c565b604051635a0f9e4160e11b815260040160405180910390fd5b60fe80546001600160401b0380861667ffffffffffffffff199283161790925560fd805492851692909116919091179055610aa64361184b565b5060fc558015610aef575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610afe6118db565b6107815f611935565b60655433906001600160a01b03168114610b755760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016106db565b61076081611935565b610b8661194e565b610781336001611809565b5f610b9a61159a565b905090565b5f5f5f610baa610c2a565b9050610c09816020015160ff16825f015163ffffffff16610bcb91906129ea565b60fd5483516001600160401b038083169263ffffffff90921691610bf891600160401b909104168a612a01565b610c029190612a20565b875f6119bf565b90969095509350505050565b5f610c21468484611727565b90505b92915050565b604080518082019091525f8082526020820152610b9a60408051808201909152630393870081526008602082015290565b825f819003610c7d5760405163ec73295960e01b815260040160405180910390fd5b826001600160401b0316805f03610ca75760405163ec73295960e01b815260040160405180910390fd5b3371777735367b36bc9b61c50022d9d0700db4ec14610cd957604051636494e9f760e01b815260040160405180910390fd5b6002610ce760c95460ff1690565b60ff1603610d085760405163dfc60d8560e01b815260040160405180910390fd5b610d126002611a48565b604051631799c89b60e01b815260040160405180910390fd5b5f8080610d3e6060880160408901612a60565b610d4e9063ffffffff1687612a20565b9050610d6060a0880160808901612a60565b63ffffffff1615801590610d915750610d7f60a0880160808901612a60565b63ffffffff16816001600160401b0316115b15610daf57610da660a0880160808901612a60565b63ffffffff1690505b5f610dbd6020890189612a79565b60ff16610dd060608a0160408b01612a60565b63ffffffff16610de091906129ea565b9050610dfe81878488610df960808e0160608f01612a99565b6119bf565b93509350505094509492505050565b5f438210610e1c57505f919050565b43610e2983610100612ab2565b10610e3357504090565b505f90815260fb602052604090205490565b610e4d6118db565b606580546001600160a01b0383166001600160a01b03199091168117909155610e7e6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b610eca60c954610100900460ff1660021490565b15610ee85760405163bae6e2a960e01b815260040160405180910390fd5b693bb4ba34323930bbb2b960b11b610f086033546001600160a01b031690565b6001600160a01b0316336001600160a01b031614158015610f455750610f2f816001610c15565b6001600160a01b0316336001600160a01b031614155b15610f6357604051630d85cccf60e11b815260040160405180910390fd5b6002610f7160c95460ff1690565b60ff1603610f925760405163dfc60d8560e01b815260040160405180910390fd5b610f9c6002611a48565b6001600160a01b038216610fc35760405163053fd54760e01b815260040160405180910390fd5b6001600160a01b038316610fe957610fe46001600160a01b03831647611a5e565b611066565b6040516370a0823160e01b81523060048201526110669083906001600160a01b038616906370a0823190602401602060405180830381865afa158015611031573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110559190612a49565b6001600160a01b0386169190611a69565b6110706001611a48565b505050565b825f8190036110975760405163ec73295960e01b815260040160405180910390fd5b846001600160401b0316805f036110c15760405163ec73295960e01b815260040160405180910390fd5b6110d16060840160408501612a60565b63ffffffff16805f036110f75760405163ec73295960e01b815260040160405180910390fd5b6111046020850185612a79565b60ff16805f036111275760405163ec73295960e01b815260040160405180910390fd5b3371777735367b36bc9b61c50022d9d0700db4ec1461115957604051636494e9f760e01b815260040160405180910390fd5b600261116760c95460ff1690565b60ff16036111885760405163dfc60d8560e01b815260040160405180910390fd5b6111926002611a48565b5f61119e6001436129d7565b90505f5f6111ab8361184b565b915091508160fc54146111d15760405163d719258d60e01b815260040160405180910390fd5b60fc55505f6111e36020880188612a79565b60ff166111f66060890160408a01612a60565b63ffffffff166112069190612a20565b60fd549091506001600160401b03808316600160c01b90920416146112a15760fd54600160c01b90046001600160401b0316156112805760fd5461125e906001600160401b0380821691600160c01b90041683610665565b60fd805467ffffffffffffffff19166001600160401b03929092169190911790555b60fd80546001600160c01b0316600160c01b6001600160401b038416021790555b5060fd545f9081906112db9089906112c990600160801b90046001600160401b0316426129d7565b60fd546001600160401b03168c610d2b565b915091506112e65f90565b1580156112f35750814814155b15611311576040516336d54d4f60e11b815260040160405180910390fd5b60fd805467ffffffffffffffff19166001600160401b039283161790819055600160401b90048116908b16111590506114365761135f6d7369676e616c5f7365727669636560901b5f610c15565b60fe546040516313e4299d60e21b81526001600160401b0391821660048201527f73e6d340850343cc6f001515dc593377337c95a6ffe034fe1e844d4dab5da1696024820152908b166044820152606481018a90526001600160a01b039190911690634f90a674906084016020604051808303815f875af11580156113e6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061140a9190612a49565b5060fd80546fffffffffffffffff00000000000000001916600160401b6001600160401b038c16021790555b5f81815260fb60205260409081902082409081905560fd80546001600160401b03428116600160801b0267ffffffffffffffff60801b1983168117909355935192937f41c3f410f5c8ac36bb46b1dccef0de0f964087c9e688795fa02ecfa2c20b3fe4936114c1938693908316921691909117909182526001600160401b0316602082015260400190565b60405180910390a150506114d56001611a48565b5050505050505050565b5f826001600160401b03165f036114f7575080610674565b670de0b6b3a76400005f6001600160401b0380861690611519908616846129ea565b6115239190612ad9565b90506001600160ff1b0381111561154d57604051636296f1b960e11b815260040160405180910390fd5b5f61155782611abb565b90505f828802828702015f81126001811461157657858204925061157a565b5f92505b5061158e9050816001600160401b03611cd8565b98975050505050505050565b5f516020612c045f395f51905f52546001600160a01b031690565b6107606118db565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156115f05761107083611cec565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561164a575060408051601f3d908101601f1916820190925261164791810190612a49565b60015b6116ad5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016106db565b5f516020612c045f395f51905f52811461171b5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016106db565b50611070838383611d87565b5f6117328484611db1565b90508115801561174957506001600160a01b038116155b1561067457604051632b0d65db60e01b81526001600160401b0385166004820152602481018490526044016106db565b61178d60c954610100900460ff1660021490565b6117aa5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6108386118db565b806001600160a01b0381166118395760405163538ba4f960e01b815260040160405180910390fd5b61184283611e5b565b61107082611eb9565b5f5f611855612585565b5f5b60ff8110801561186a5750806001018510155b1561189b575f198186030180408360ff8306610100811061188d5761188d612aec565b602002015250600101611857565b5046611fe0820152612000812092508340816118b860ff87612b00565b61010081106118c9576118c9612aec565b60200201526120009020919391925050565b6033546001600160a01b031633146107815760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106db565b606580546001600160a01b031916905561076081611f29565b61196260c954610100900460ff1660021490565b156119805760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016117ff565b5f80806119db63ffffffff86166001600160401b038916612ab2565b9050856001600160401b031681116119f4576001611a07565b611a076001600160401b038716826129d7565b9050611a266001600160401b03611a2083878316611f7a565b90611cd8565b9150611a3b826001600160401b031689611f8f565b9250509550959350505050565b60c9805460ff191660ff92909216919091179055565b61083882825a611fbe565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611070908490612001565b6fffffffffffffffffffffffffffffffff811160071b81811c6001600160401b031060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b175f8213611b1757631615e6385f526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d6c8c3f38e95a6b1ff2ab1c3b343619018302821d6d02384773bdf1ac5676facced60901901830290911d6cb9a025d814b29c212b8b1a07cd1901909102780a09507084cc699bb0e71ea869ffffffffffffffffffffffff190105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b5f818311611ce65782610c21565b50919050565b6001600160a01b0381163b611d595760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016106db565b5f516020612c045f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611d90836120d4565b5f82511180611d9c5750805b1561107057611dab8383612113565b50505050565b6097545f906001600160a01b031680611ddd57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611e2f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e539190612b13565b949350505050565b5f54610100900460ff16611e815760405162461bcd60e51b81526004016106db90612b2e565b611e89612138565b611ea76001600160a01b03821615611ea15781611935565b33611935565b5060c9805461ff001916610100179055565b5f54610100900460ff16611edf5760405162461bcd60e51b81526004016106db90612b2e565b6001600160401b03461115611f075760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f818311611f885781610c21565b5090919050565b5f5f82611f9c858561215e565b611fa69190612ad9565b90508015611fb45780611e53565b5060019392505050565b815f03611fca57505050565b611fe483838360405180602001604052805f8152506121d8565b61107057604051634c67134d60e11b815260040160405180910390fd5b5f612055826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166122159092919063ffffffff16565b905080515f14806120755750808060200190518101906120759190612b79565b6110705760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106db565b6120dd81611cec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610c218383604051806060016040528060278152602001612c2460279139612223565b5f54610100900460ff166107815760405162461bcd60e51b81526004016106db90612b2e565b5f815f0361217f57604051636296f1b960e11b815260040160405180910390fd5b5f8261219385670de0b6b3a76400006129ea565b61219d9190612ad9565b9050680755bf798b4a1bf1e48111156121bc5750680755bf798b4a1bf1e45b670de0b6b3a76400006121ce82612297565b611e539190612ad9565b5f6001600160a01b03851661220057604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b606061067184845f85612411565b60605f5f856001600160a01b03168560405161223f9190612bb6565b5f60405180830381855af49150503d805f8114612277576040519150601f19603f3d011682016040523d82523d5f602084013e61227c565b606091505b509150915061228d868383876124e8565b9695505050505050565b5f68023f2fa8f6da5b9d281982136122ae57919050565b680755bf798b4a1bf1e582126122cb5763a37bfec95f526004601cfd5b6503782dace9d9604e83901b0591505f60606bb17217f7d1cf79abc9e3b39884821b056001605f1b01901d6bb17217f7d1cf79abc9e3b39881029093036c240c330e9fb2d9cbaf0fd5aafb1981018102606090811d6d0277594991cfc85f6e2461837cd9018202811d6d1a521255e34f6a5061b25ef1c9c319018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d6e02c72388d9f74f51a9331fed693f1419018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084016d01d3967ed30fc4f89c02bab5708119010290911d6e0587f503bb6ea29d25fcb740196450019091026d360d7aeea093263ecc6e0ecb291760621b010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6060824710156124725760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106db565b5f5f866001600160a01b0316858760405161248d9190612bb6565b5f6040518083038185875af1925050503d805f81146124c7576040519150601f19603f3d011682016040523d82523d5f602084013e6124cc565b606091505b50915091506124dd878383876124e8565b979650505050505050565b606083156125565782515f0361254f576001600160a01b0385163b61254f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106db565b5081611e53565b611e53838381511561256b5781518083602001fd5b8060405162461bcd60e51b81526004016106db9190612bd1565b604051806120000160405280610100906020820280368337509192915050565b80356001600160401b03811681146125bb575f5ffd5b919050565b5f5f5f606084860312156125d2575f5ffd5b6125db846125a5565b92506125e9602085016125a5565b91506125f7604085016125a5565b90509250925092565b6001600160a01b0381168114610760575f5ffd5b5f60208284031215612624575f5ffd5b813561067481612600565b8015158114610760575f5ffd5b5f5f5f6060848603121561264e575f5ffd5b612657846125a5565b925060208401359150604084013561266e8161262f565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561269e575f5ffd5b82356126a981612600565b915060208301356001600160401b038111156126c3575f5ffd5b8301601f810185136126d3575f5ffd5b80356001600160401b038111156126ec576126ec612679565b604051601f8201601f19908116603f011681016001600160401b038111828210171561271a5761271a612679565b604052818152828201602001871015612731575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f5f5f60808587031215612763575f5ffd5b843561276e81612600565b9350602085013561277e81612600565b925061278c604086016125a5565b915061279a606086016125a5565b905092959194509250565b803563ffffffff811681146125bb575f5ffd5b5f5f604083850312156127c9575f5ffd5b6127d2836125a5565b91506127e0602084016127a5565b90509250929050565b5f5f604083850312156127fa575f5ffd5b82359150602083013561280c8161262f565b809150509250929050565b5f5f5f5f6080858703121561282a575f5ffd5b8435935060208501359250612841604086016125a5565b915061279a606086016127a5565b5f60a08284031215611ce6575f5ffd5b5f5f5f5f6101008587031215612873575f5ffd5b61287d868661284f565b935061288b60a086016125a5565b925061289960c086016125a5565b915061279a60e086016127a5565b5f602082840312156128b7575f5ffd5b5035919050565b5f5f604083850312156128cf575f5ffd5b82356128da81612600565b9150602083013561280c81612600565b5f5f5f5f61010085870312156128fe575f5ffd5b612907856125a5565b93506020850135925061291c604086016127a5565b915061279a866060870161284f565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610c2457610c246129c3565b8082028115828204841417610c2457610c246129c3565b6001600160401b038281168282160390811115610c2457610c246129c3565b6001600160401b038181168382160290811690818114612a4257612a426129c3565b5092915050565b5f60208284031215612a59575f5ffd5b5051919050565b5f60208284031215612a70575f5ffd5b610c21826127a5565b5f60208284031215612a89575f5ffd5b813560ff81168114610674575f5ffd5b5f60208284031215612aa9575f5ffd5b610c21826125a5565b80820180821115610c2457610c246129c3565b634e487b7160e01b5f52601260045260245ffd5b5f82612ae757612ae7612ac5565b500490565b634e487b7160e01b5f52603260045260245ffd5b5f82612b0e57612b0e612ac5565b500690565b5f60208284031215612b23575f5ffd5b815161067481612600565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215612b89575f5ffd5b81516106748161262f565b5f5b83811015612bae578181015183820152602001612b96565b50505f910152565b5f8251612bc7818460208701612b94565b9190910192915050565b602081525f8251806020840152612bef816040850160208701612b94565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220effaa84efcacfc056fb02202f151620faec2208bfd9251bf5034a0d35854a32e64736f6c634300081b0033", + "code": "0x6080604052600436106101fc575f3560e01c80638456cb5911610113578063da69d3db1161009d578063e902461a1161006d578063e902461a146105ca578063ee82ac5e146105e9578063f2fde38b14610608578063f940e38514610627578063fd85eb2d14610646575f5ffd5b8063da69d3db14610554578063dac5df7814610573578063e07baba614610588578063e30c3978146105ad575f5ffd5b8063a7137c0f116100e3578063a7137c0f1461047c578063a7e022d1146104a2578063a86f9d9e146104de578063b8c7b30c146104fd578063c3f909d41461051c575f5ffd5b80638456cb59146104125780638abf6077146104265780638da5cb5b1461043a5780639ee512f214610457575f5ffd5b80633eb6b8cf11610194578063539b8ade11610164578063539b8ade146103855780635950f9f1146103ab5780635c975abb146103ca578063715018a6146103ea57806379ba5097146103fe575f5ffd5b80633eb6b8cf1461031d5780633f4ba83a1461033c5780634f1ef2861461035057806352d1902d14610363575f5ffd5b806333d5ac9b116101cf57806333d5ac9b1461028d578063356aec04146102b35780633659cfe6146102c55780633ab76e9f146102e6575f5ffd5b806312622e5b14610200578063136dc4a81461023c5780632f9804731461025b5780633075db5614610279575b5f5ffd5b34801561020b575f5ffd5b5060fe5461021f906001600160401b031681565b6040516001600160401b0390911681526020015b60405180910390f35b348015610247575f5ffd5b5061021f6102563660046125c0565b610665565b348015610266575f5ffd5b505f5b6040519015158152602001610233565b348015610284575f5ffd5b5061026961067b565b348015610298575f5ffd5b5060fd5461021f90600160401b90046001600160401b031681565b3480156102be575f5ffd5b505f61021f565b3480156102d0575f5ffd5b506102e46102df366004612614565b610693565b005b3480156102f1575f5ffd5b50609754610305906001600160a01b031681565b6040516001600160a01b039091168152602001610233565b348015610328575f5ffd5b5061030561033736600461263c565b610763565b348015610347575f5ffd5b506102e461076f565b6102e461035e36600461268d565b610783565b34801561036e575f5ffd5b5061037761083c565b604051908152602001610233565b348015610390575f5ffd5b5060fd5461021f90600160801b90046001600160401b031681565b3480156103b6575f5ffd5b506102e46103c5366004612750565b6108ed565b3480156103d5575f5ffd5b5061026960c954610100900460ff1660021490565b3480156103f5575f5ffd5b506102e4610af6565b348015610409575f5ffd5b506102e4610b07565b34801561041d575f5ffd5b506102e4610b7e565b348015610431575f5ffd5b50610305610b91565b348015610445575f5ffd5b506033546001600160a01b0316610305565b348015610462575f5ffd5b5061030571777735367b36bc9b61c50022d9d0700db4ec81565b348015610487575f5ffd5b5060fd5461021f90600160c01b90046001600160401b031681565b3480156104ad575f5ffd5b506104c16104bc3660046127b8565b610b9f565b604080519283526001600160401b03909116602083015201610233565b3480156104e9575f5ffd5b506103056104f83660046127e9565b610c15565b348015610508575f5ffd5b5060fd5461021f906001600160401b031681565b348015610527575f5ffd5b50610530610c2a565b60408051825163ffffffff16815260209283015160ff169281019290925201610233565b34801561055f575f5ffd5b506102e461056e366004612817565b610c5b565b34801561057e575f5ffd5b5061037760fc5481565b348015610593575f5ffd5b5060c95461021f906201000090046001600160401b031681565b3480156105b8575f5ffd5b506065546001600160a01b0316610305565b3480156105d5575f5ffd5b506104c16105e436600461285f565b610d2b565b3480156105f4575f5ffd5b506103776106033660046128a7565b610e0d565b348015610613575f5ffd5b506102e4610622366004612614565b610e45565b348015610632575f5ffd5b506102e46106413660046128be565b610eb6565b348015610651575f5ffd5b506102e46106603660046128ea565b611075565b5f6106718484846114df565b90505b9392505050565b5f600261068a60c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670100000000000000000000000000000100011630036106e45760405162461bcd60e51b81526004016106db9061292b565b60405180910390fd5b7f00000000000000000000000001670100000000000000000000000000000100016001600160a01b031661071661159a565b6001600160a01b03161461073c5760405162461bcd60e51b81526004016106db90612977565b610745816115b5565b604080515f80825260208201909252610760918391906115bd565b50565b5f610671848484611727565b610777611779565b610781335f611809565b565b6001600160a01b037f00000000000000000000000001670100000000000000000000000000000100011630036107cb5760405162461bcd60e51b81526004016106db9061292b565b7f00000000000000000000000001670100000000000000000000000000000100016001600160a01b03166107fd61159a565b6001600160a01b0316146108235760405162461bcd60e51b81526004016106db90612977565b61082c826115b5565b610838828260016115bd565b5050565b5f306001600160a01b037f000000000000000000000000016701000000000000000000000000000001000116146108db5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016106db565b505f516020612c045f395f51905f5290565b5f54610100900460ff161580801561090b57505f54600160ff909116105b806109245750303b15801561092457505f5460ff166001145b6109875760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106db565b5f805460ff1916600117905580156109a8575f805461ff0019166101001790555b6109b28585611811565b6001600160401b03831615806109d0575046836001600160401b0316145b156109ee576040516308279a2560e31b815260040160405180910390fd5b600146111580610a0457506001600160401b0346115b15610a2257604051638f972ecb60e01b815260040160405180910390fd5b4315610a6c5743600103610a53575f610a3c6001436129d7565b5f81815260fb602052604090209040905550610a6c565b604051635a0f9e4160e11b815260040160405180910390fd5b60fe80546001600160401b0380861667ffffffffffffffff199283161790925560fd805492851692909116919091179055610aa64361184b565b5060fc558015610aef575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610afe6118db565b6107815f611935565b60655433906001600160a01b03168114610b755760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016106db565b61076081611935565b610b8661194e565b610781336001611809565b5f610b9a61159a565b905090565b5f5f5f610baa610c2a565b9050610c09816020015160ff16825f015163ffffffff16610bcb91906129ea565b60fd5483516001600160401b038083169263ffffffff90921691610bf891600160401b909104168a612a01565b610c029190612a20565b875f6119bf565b90969095509350505050565b5f610c21468484611727565b90505b92915050565b604080518082019091525f8082526020820152610b9a60408051808201909152630393870081526008602082015290565b825f819003610c7d5760405163ec73295960e01b815260040160405180910390fd5b826001600160401b0316805f03610ca75760405163ec73295960e01b815260040160405180910390fd5b3371777735367b36bc9b61c50022d9d0700db4ec14610cd957604051636494e9f760e01b815260040160405180910390fd5b6002610ce760c95460ff1690565b60ff1603610d085760405163dfc60d8560e01b815260040160405180910390fd5b610d126002611a48565b604051631799c89b60e01b815260040160405180910390fd5b5f8080610d3e6060880160408901612a60565b610d4e9063ffffffff1687612a20565b9050610d6060a0880160808901612a60565b63ffffffff1615801590610d915750610d7f60a0880160808901612a60565b63ffffffff16816001600160401b0316115b15610daf57610da660a0880160808901612a60565b63ffffffff1690505b5f610dbd6020890189612a79565b60ff16610dd060608a0160408b01612a60565b63ffffffff16610de091906129ea565b9050610dfe81878488610df960808e0160608f01612a99565b6119bf565b93509350505094509492505050565b5f438210610e1c57505f919050565b43610e2983610100612ab2565b10610e3357504090565b505f90815260fb602052604090205490565b610e4d6118db565b606580546001600160a01b0383166001600160a01b03199091168117909155610e7e6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b610eca60c954610100900460ff1660021490565b15610ee85760405163bae6e2a960e01b815260040160405180910390fd5b693bb4ba34323930bbb2b960b11b610f086033546001600160a01b031690565b6001600160a01b0316336001600160a01b031614158015610f455750610f2f816001610c15565b6001600160a01b0316336001600160a01b031614155b15610f6357604051630d85cccf60e11b815260040160405180910390fd5b6002610f7160c95460ff1690565b60ff1603610f925760405163dfc60d8560e01b815260040160405180910390fd5b610f9c6002611a48565b6001600160a01b038216610fc35760405163053fd54760e01b815260040160405180910390fd5b6001600160a01b038316610fe957610fe46001600160a01b03831647611a5e565b611066565b6040516370a0823160e01b81523060048201526110669083906001600160a01b038616906370a0823190602401602060405180830381865afa158015611031573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110559190612a49565b6001600160a01b0386169190611a69565b6110706001611a48565b505050565b825f8190036110975760405163ec73295960e01b815260040160405180910390fd5b846001600160401b0316805f036110c15760405163ec73295960e01b815260040160405180910390fd5b6110d16060840160408501612a60565b63ffffffff16805f036110f75760405163ec73295960e01b815260040160405180910390fd5b6111046020850185612a79565b60ff16805f036111275760405163ec73295960e01b815260040160405180910390fd5b3371777735367b36bc9b61c50022d9d0700db4ec1461115957604051636494e9f760e01b815260040160405180910390fd5b600261116760c95460ff1690565b60ff16036111885760405163dfc60d8560e01b815260040160405180910390fd5b6111926002611a48565b5f61119e6001436129d7565b90505f5f6111ab8361184b565b915091508160fc54146111d15760405163d719258d60e01b815260040160405180910390fd5b60fc55505f6111e36020880188612a79565b60ff166111f66060890160408a01612a60565b63ffffffff166112069190612a20565b60fd549091506001600160401b03808316600160c01b90920416146112a15760fd54600160c01b90046001600160401b0316156112805760fd5461125e906001600160401b0380821691600160c01b90041683610665565b60fd805467ffffffffffffffff19166001600160401b03929092169190911790555b60fd80546001600160c01b0316600160c01b6001600160401b038416021790555b5060fd545f9081906112db9089906112c990600160801b90046001600160401b0316426129d7565b60fd546001600160401b03168c610d2b565b915091506112e65f90565b1580156112f35750814814155b15611311576040516336d54d4f60e11b815260040160405180910390fd5b60fd805467ffffffffffffffff19166001600160401b039283161790819055600160401b90048116908b16111590506114365761135f6d7369676e616c5f7365727669636560901b5f610c15565b60fe546040516313e4299d60e21b81526001600160401b0391821660048201527f73e6d340850343cc6f001515dc593377337c95a6ffe034fe1e844d4dab5da1696024820152908b166044820152606481018a90526001600160a01b039190911690634f90a674906084016020604051808303815f875af11580156113e6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061140a9190612a49565b5060fd80546fffffffffffffffff00000000000000001916600160401b6001600160401b038c16021790555b5f81815260fb60205260409081902082409081905560fd80546001600160401b03428116600160801b0267ffffffffffffffff60801b1983168117909355935192937f41c3f410f5c8ac36bb46b1dccef0de0f964087c9e688795fa02ecfa2c20b3fe4936114c1938693908316921691909117909182526001600160401b0316602082015260400190565b60405180910390a150506114d56001611a48565b5050505050505050565b5f826001600160401b03165f036114f7575080610674565b670de0b6b3a76400005f6001600160401b0380861690611519908616846129ea565b6115239190612ad9565b90506001600160ff1b0381111561154d57604051636296f1b960e11b815260040160405180910390fd5b5f61155782611abb565b90505f828802828702015f81126001811461157657858204925061157a565b5f92505b5061158e9050816001600160401b03611cd8565b98975050505050505050565b5f516020612c045f395f51905f52546001600160a01b031690565b6107606118db565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156115f05761107083611cec565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561164a575060408051601f3d908101601f1916820190925261164791810190612a49565b60015b6116ad5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016106db565b5f516020612c045f395f51905f52811461171b5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016106db565b50611070838383611d87565b5f6117328484611db1565b90508115801561174957506001600160a01b038116155b1561067457604051632b0d65db60e01b81526001600160401b0385166004820152602481018490526044016106db565b61178d60c954610100900460ff1660021490565b6117aa5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6108386118db565b806001600160a01b0381166118395760405163538ba4f960e01b815260040160405180910390fd5b61184283611e5b565b61107082611eb9565b5f5f611855612585565b5f5b60ff8110801561186a5750806001018510155b1561189b575f198186030180408360ff8306610100811061188d5761188d612aec565b602002015250600101611857565b5046611fe0820152612000812092508340816118b860ff87612b00565b61010081106118c9576118c9612aec565b60200201526120009020919391925050565b6033546001600160a01b031633146107815760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106db565b606580546001600160a01b031916905561076081611f29565b61196260c954610100900460ff1660021490565b156119805760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016117ff565b5f80806119db63ffffffff86166001600160401b038916612ab2565b9050856001600160401b031681116119f4576001611a07565b611a076001600160401b038716826129d7565b9050611a266001600160401b03611a2083878316611f7a565b90611cd8565b9150611a3b826001600160401b031689611f8f565b9250509550959350505050565b60c9805460ff191660ff92909216919091179055565b61083882825a611fbe565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611070908490612001565b6fffffffffffffffffffffffffffffffff811160071b81811c6001600160401b031060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b175f8213611b1757631615e6385f526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d6c8c3f38e95a6b1ff2ab1c3b343619018302821d6d02384773bdf1ac5676facced60901901830290911d6cb9a025d814b29c212b8b1a07cd1901909102780a09507084cc699bb0e71ea869ffffffffffffffffffffffff190105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b5f818311611ce65782610c21565b50919050565b6001600160a01b0381163b611d595760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016106db565b5f516020612c045f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611d90836120d4565b5f82511180611d9c5750805b1561107057611dab8383612113565b50505050565b6097545f906001600160a01b031680611ddd57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611e2f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e539190612b13565b949350505050565b5f54610100900460ff16611e815760405162461bcd60e51b81526004016106db90612b2e565b611e89612138565b611ea76001600160a01b03821615611ea15781611935565b33611935565b5060c9805461ff001916610100179055565b5f54610100900460ff16611edf5760405162461bcd60e51b81526004016106db90612b2e565b6001600160401b03461115611f075760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f818311611f885781610c21565b5090919050565b5f5f82611f9c858561215e565b611fa69190612ad9565b90508015611fb45780611e53565b5060019392505050565b815f03611fca57505050565b611fe483838360405180602001604052805f8152506121d8565b61107057604051634c67134d60e11b815260040160405180910390fd5b5f612055826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166122159092919063ffffffff16565b905080515f14806120755750808060200190518101906120759190612b79565b6110705760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106db565b6120dd81611cec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610c218383604051806060016040528060278152602001612c2460279139612223565b5f54610100900460ff166107815760405162461bcd60e51b81526004016106db90612b2e565b5f815f0361217f57604051636296f1b960e11b815260040160405180910390fd5b5f8261219385670de0b6b3a76400006129ea565b61219d9190612ad9565b9050680755bf798b4a1bf1e48111156121bc5750680755bf798b4a1bf1e45b670de0b6b3a76400006121ce82612297565b611e539190612ad9565b5f6001600160a01b03851661220057604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b606061067184845f85612411565b60605f5f856001600160a01b03168560405161223f9190612bb6565b5f60405180830381855af49150503d805f8114612277576040519150601f19603f3d011682016040523d82523d5f602084013e61227c565b606091505b509150915061228d868383876124e8565b9695505050505050565b5f68023f2fa8f6da5b9d281982136122ae57919050565b680755bf798b4a1bf1e582126122cb5763a37bfec95f526004601cfd5b6503782dace9d9604e83901b0591505f60606bb17217f7d1cf79abc9e3b39884821b056001605f1b01901d6bb17217f7d1cf79abc9e3b39881029093036c240c330e9fb2d9cbaf0fd5aafb1981018102606090811d6d0277594991cfc85f6e2461837cd9018202811d6d1a521255e34f6a5061b25ef1c9c319018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d6e02c72388d9f74f51a9331fed693f1419018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084016d01d3967ed30fc4f89c02bab5708119010290911d6e0587f503bb6ea29d25fcb740196450019091026d360d7aeea093263ecc6e0ecb291760621b010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6060824710156124725760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106db565b5f5f866001600160a01b0316858760405161248d9190612bb6565b5f6040518083038185875af1925050503d805f81146124c7576040519150601f19603f3d011682016040523d82523d5f602084013e6124cc565b606091505b50915091506124dd878383876124e8565b979650505050505050565b606083156125565782515f0361254f576001600160a01b0385163b61254f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106db565b5081611e53565b611e53838381511561256b5781518083602001fd5b8060405162461bcd60e51b81526004016106db9190612bd1565b604051806120000160405280610100906020820280368337509192915050565b80356001600160401b03811681146125bb575f5ffd5b919050565b5f5f5f606084860312156125d2575f5ffd5b6125db846125a5565b92506125e9602085016125a5565b91506125f7604085016125a5565b90509250925092565b6001600160a01b0381168114610760575f5ffd5b5f60208284031215612624575f5ffd5b813561067481612600565b8015158114610760575f5ffd5b5f5f5f6060848603121561264e575f5ffd5b612657846125a5565b925060208401359150604084013561266e8161262f565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561269e575f5ffd5b82356126a981612600565b915060208301356001600160401b038111156126c3575f5ffd5b8301601f810185136126d3575f5ffd5b80356001600160401b038111156126ec576126ec612679565b604051601f8201601f19908116603f011681016001600160401b038111828210171561271a5761271a612679565b604052818152828201602001871015612731575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f5f5f60808587031215612763575f5ffd5b843561276e81612600565b9350602085013561277e81612600565b925061278c604086016125a5565b915061279a606086016125a5565b905092959194509250565b803563ffffffff811681146125bb575f5ffd5b5f5f604083850312156127c9575f5ffd5b6127d2836125a5565b91506127e0602084016127a5565b90509250929050565b5f5f604083850312156127fa575f5ffd5b82359150602083013561280c8161262f565b809150509250929050565b5f5f5f5f6080858703121561282a575f5ffd5b8435935060208501359250612841604086016125a5565b915061279a606086016127a5565b5f60a08284031215611ce6575f5ffd5b5f5f5f5f6101008587031215612873575f5ffd5b61287d868661284f565b935061288b60a086016125a5565b925061289960c086016125a5565b915061279a60e086016127a5565b5f602082840312156128b7575f5ffd5b5035919050565b5f5f604083850312156128cf575f5ffd5b82356128da81612600565b9150602083013561280c81612600565b5f5f5f5f61010085870312156128fe575f5ffd5b612907856125a5565b93506020850135925061291c604086016127a5565b915061279a866060870161284f565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610c2457610c246129c3565b8082028115828204841417610c2457610c246129c3565b6001600160401b038281168282160390811115610c2457610c246129c3565b6001600160401b038181168382160290811690818114612a4257612a426129c3565b5092915050565b5f60208284031215612a59575f5ffd5b5051919050565b5f60208284031215612a70575f5ffd5b610c21826127a5565b5f60208284031215612a89575f5ffd5b813560ff81168114610674575f5ffd5b5f60208284031215612aa9575f5ffd5b610c21826125a5565b80820180821115610c2457610c246129c3565b634e487b7160e01b5f52601260045260245ffd5b5f82612ae757612ae7612ac5565b500490565b634e487b7160e01b5f52603260045260245ffd5b5f82612b0e57612b0e612ac5565b500690565b5f60208284031215612b23575f5ffd5b815161067481612600565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215612b89575f5ffd5b81516106748161262f565b5f5b83811015612bae578181015183820152602001612b96565b50505f910152565b5f8251612bc7818460208701612b94565b9190910192915050565b602081525f8251806020840152612bef816040850160208701612b94565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220effaa84efcacfc056fb02202f151620faec2208bfd9251bf5034a0d35854a32e64736f6c634300081b0033", "balance": "0x0" }, - "0x1670000000000000000000000000000000010001": { + "0x1670100000000000000000000000000000010001": { "contractName": "TaikoL2", "storage": { "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", - "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670000000000000000000000000000000010002", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670100000000000000000000000000000010002", "0x00000000000000000000000000000000000000000000000000000000000000fe": "0x0000000000000000000000000000000000000000000000000000000000007a69", - "0x00000000000000000000000000000000000000000000000000000000000000fd": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x00000000000000000000000000000000000000000000000000000000000000fc": "0x56648745cb667f52a0ae5eb338ad021411cede74141e72933401adba6c132b01", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000010001" + "0x00000000000000000000000000000000000000000000000000000000000000fd": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000000000000000000000000000000000000000000fc": "0xc1dacae4531cef33c3d19601822ade91f548e191b030fa88c5964199df8c2a8f", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167010000000000000000000000000000010001" }, "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", "balance": "0x0" }, - "0x0167000000000000000000000000000000010002": { + "0x0167010000000000000000000000000000010002": { "contractName": "RollupAddressManagerImpl", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f" }, - "code": "0x608060405260043610610126575f3560e01c80635c975abb116100a85780638da5cb5b1161006d5780638da5cb5b14610301578063a86f9d9e1461031e578063d8f4648f1461033d578063e07baba61461035c578063e30c39781461039b578063f2fde38b146103b8575f5ffd5b80635c975abb14610291578063715018a6146102b157806379ba5097146102c55780638456cb59146102d95780638abf6077146102ed575f5ffd5b80633ab76e9f116100ee5780633ab76e9f1461020a5780633eb6b8cf146102295780633f4ba83a146102485780634f1ef2861461025c57806352d1902d1461026f575f5ffd5b8063069489a21461012a57806319ab453c1461014057806328f713cc1461015f5780633075db56146101c75780633659cfe6146101eb575b5f5ffd5b348015610135575f5ffd5b5061013e6103d7565b005b34801561014b575f5ffd5b5061013e61015a36600461110e565b610487565b34801561016a575f5ffd5b506101aa610179366004611145565b67ffffffffffffffff919091165f90815260fb6020908152604080832093835292905220546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101d2575f5ffd5b506101db61055f565b60405190151581526020016101be565b3480156101f6575f5ffd5b5061013e61020536600461110e565b610577565b348015610215575f5ffd5b506097546101aa906001600160a01b031681565b348015610234575f5ffd5b506101aa61024336600461117c565b61063e565b348015610253575f5ffd5b5061013e610654565b61013e61026a3660046111c9565b610668565b34801561027a575f5ffd5b5061028361071d565b6040519081526020016101be565b34801561029c575f5ffd5b506101db60c954610100900460ff1660021490565b3480156102bc575f5ffd5b5061013e6107ce565b3480156102d0575f5ffd5b5061013e6107df565b3480156102e4575f5ffd5b5061013e610856565b3480156102f8575f5ffd5b506101aa610869565b34801561030c575f5ffd5b506033546001600160a01b03166101aa565b348015610329575f5ffd5b506101aa61033836600461128f565b610877565b348015610348575f5ffd5b5061013e6103573660046112b9565b610883565b348015610367575f5ffd5b5060c9546103829062010000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101be565b3480156103a6575f5ffd5b506065546001600160a01b03166101aa565b3480156103c3575f5ffd5b5061013e6103d236600461110e565b610961565b6103df6109d2565b5f54600290610100900460ff161580156103ff57505f5460ff8083169116105b6104245760405162461bcd60e51b815260040161041b906112f6565b60405180910390fd5b5f8054609780546001600160a01b0319163017905561ffff191660ff83169081176101001761ff0019169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b5f54610100900460ff16158080156104a557505f54600160ff909116105b806104be5750303b1580156104be57505f5460ff166001145b6104da5760405162461bcd60e51b815260040161041b906112f6565b5f805460ff1916600117905580156104fb575f805461ff0019166101001790555b61050482610a2c565b609780546001600160a01b03191630179055801561055b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b5f600261056e60c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000100021630036105bf5760405162461bcd60e51b815260040161041b90611344565b7f00000000000000000000000001670000000000000000000000000000000100026001600160a01b03166105f1610a8a565b6001600160a01b0316146106175760405162461bcd60e51b815260040161041b90611390565b61062081610aa5565b604080515f8082526020820190925261063b91839190610aad565b50565b5f61064a848484610c1c565b90505b9392505050565b61065c610c6f565b610666335f610d00565b565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000100021630036106b05760405162461bcd60e51b815260040161041b90611344565b7f00000000000000000000000001670000000000000000000000000000000100026001600160a01b03166106e2610a8a565b6001600160a01b0316146107085760405162461bcd60e51b815260040161041b90611390565b61071182610aa5565b61055b82826001610aad565b5f306001600160a01b037f000000000000000000000000016700000000000000000000000000000001000216146107bc5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161041b565b505f5160206114c95f395f51905f5290565b6107d66109d2565b6106665f610d19565b60655433906001600160a01b0316811461084d5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b606482015260840161041b565b61063b81610d19565b61085e610d32565b610666336001610d00565b5f610872610a8a565b905090565b5f61064d468484610c1c565b61088b6109d2565b67ffffffffffffffff83165f90815260fb602090815260408083208584529091529020546001600160a01b039081169082168190036108dd5760405163a883089360e01b815260040160405180910390fd5b67ffffffffffffffff84165f81815260fb6020908152604080832087845282529182902080546001600160a01b0319166001600160a01b038781169182179092558351908152908516918101919091528592917f500dcd607a98daece9bccc2511bf6032471252929de73caf507aae0e082f8453910160405180910390a350505050565b6109696109d2565b606580546001600160a01b0383166001600160a01b0319909116811790915561099a6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6033546001600160a01b031633146106665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161041b565b5f54610100900460ff16610a525760405162461bcd60e51b815260040161041b906113dc565b610a5a610da3565b610a786001600160a01b03821615610a725781610d19565b33610d19565b5060c9805461ff001916610100179055565b5f5160206114c95f395f51905f52546001600160a01b031690565b61063b6109d2565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610ae557610ae083610dc9565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b3f575060408051601f3d908101601f19168201909252610b3c91810190611427565b60015b610ba25760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161041b565b5f5160206114c95f395f51905f528114610c105760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161041b565b50610ae0838383610e64565b5f610c278484610e8e565b905081158015610c3e57506001600160a01b038116155b1561064d57604051632b0d65db60e01b815267ffffffffffffffff851660048201526024810184905260440161041b565b610c8360c954610100900460ff1660021490565b610ca05760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff0019909116620100004267ffffffffffffffff1602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b604051630c2b8f8f60e11b815260040160405180910390fd5b606580546001600160a01b031916905561063b81610f39565b610d4660c954610100900460ff1660021490565b15610d645760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610cf6565b5f54610100900460ff166106665760405162461bcd60e51b815260040161041b906113dc565b6001600160a01b0381163b610e365760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161041b565b5f5160206114c95f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b610e6d83610f8a565b5f82511180610e795750805b15610ae057610e888383610fc9565b50505050565b6097545f906001600160a01b031680610eba57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b815267ffffffffffffffff85166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015610f0d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f31919061143e565b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b610f9381610dc9565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061064d83836040518060600160405280602781526020016114e96027913960605f5f856001600160a01b031685604051611005919061147b565b5f60405180830381855af49150503d805f811461103d576040519150601f19603f3d011682016040523d82523d5f602084013e611042565b606091505b50915091506110538683838761105d565b9695505050505050565b606083156110cb5782515f036110c4576001600160a01b0385163b6110c45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161041b565b5081610f31565b610f3183838151156110e05781518083602001fd5b8060405162461bcd60e51b815260040161041b9190611496565b6001600160a01b038116811461063b575f5ffd5b5f6020828403121561111e575f5ffd5b813561064d816110fa565b803567ffffffffffffffff81168114611140575f5ffd5b919050565b5f5f60408385031215611156575f5ffd5b61115f83611129565b946020939093013593505050565b80358015158114611140575f5ffd5b5f5f5f6060848603121561118e575f5ffd5b61119784611129565b9250602084013591506111ac6040850161116d565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156111da575f5ffd5b82356111e5816110fa565b9150602083013567ffffffffffffffff811115611200575f5ffd5b8301601f81018513611210575f5ffd5b803567ffffffffffffffff81111561122a5761122a6111b5565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715611259576112596111b5565b604052818152828201602001871015611270575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f604083850312156112a0575f5ffd5b823591506112b06020840161116d565b90509250929050565b5f5f5f606084860312156112cb575f5ffd5b6112d484611129565b92506020840135915060408401356112eb816110fa565b809150509250925092565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215611437575f5ffd5b5051919050565b5f6020828403121561144e575f5ffd5b815161064d816110fa565b5f5b8381101561147357818101518382015260200161145b565b50505f910152565b5f825161148c818460208701611459565b9190910192915050565b602081525f82518060208401526114b4816040850160208701611459565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220086d22e71c4d170ad7ce74f948ce47f2f39076babb18c7b950d99c756006877464736f6c634300081b0033", + "code": "0x608060405260043610610126575f3560e01c80635c975abb116100a85780638da5cb5b1161006d5780638da5cb5b14610301578063a86f9d9e1461031e578063d8f4648f1461033d578063e07baba61461035c578063e30c39781461039b578063f2fde38b146103b8575f5ffd5b80635c975abb14610291578063715018a6146102b157806379ba5097146102c55780638456cb59146102d95780638abf6077146102ed575f5ffd5b80633ab76e9f116100ee5780633ab76e9f1461020a5780633eb6b8cf146102295780633f4ba83a146102485780634f1ef2861461025c57806352d1902d1461026f575f5ffd5b8063069489a21461012a57806319ab453c1461014057806328f713cc1461015f5780633075db56146101c75780633659cfe6146101eb575b5f5ffd5b348015610135575f5ffd5b5061013e6103d7565b005b34801561014b575f5ffd5b5061013e61015a36600461110e565b610487565b34801561016a575f5ffd5b506101aa610179366004611145565b67ffffffffffffffff919091165f90815260fb6020908152604080832093835292905220546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101d2575f5ffd5b506101db61055f565b60405190151581526020016101be565b3480156101f6575f5ffd5b5061013e61020536600461110e565b610577565b348015610215575f5ffd5b506097546101aa906001600160a01b031681565b348015610234575f5ffd5b506101aa61024336600461117c565b61063e565b348015610253575f5ffd5b5061013e610654565b61013e61026a3660046111c9565b610668565b34801561027a575f5ffd5b5061028361071d565b6040519081526020016101be565b34801561029c575f5ffd5b506101db60c954610100900460ff1660021490565b3480156102bc575f5ffd5b5061013e6107ce565b3480156102d0575f5ffd5b5061013e6107df565b3480156102e4575f5ffd5b5061013e610856565b3480156102f8575f5ffd5b506101aa610869565b34801561030c575f5ffd5b506033546001600160a01b03166101aa565b348015610329575f5ffd5b506101aa61033836600461128f565b610877565b348015610348575f5ffd5b5061013e6103573660046112b9565b610883565b348015610367575f5ffd5b5060c9546103829062010000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101be565b3480156103a6575f5ffd5b506065546001600160a01b03166101aa565b3480156103c3575f5ffd5b5061013e6103d236600461110e565b610961565b6103df6109d2565b5f54600290610100900460ff161580156103ff57505f5460ff8083169116105b6104245760405162461bcd60e51b815260040161041b906112f6565b60405180910390fd5b5f8054609780546001600160a01b0319163017905561ffff191660ff83169081176101001761ff0019169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b5f54610100900460ff16158080156104a557505f54600160ff909116105b806104be5750303b1580156104be57505f5460ff166001145b6104da5760405162461bcd60e51b815260040161041b906112f6565b5f805460ff1916600117905580156104fb575f805461ff0019166101001790555b61050482610a2c565b609780546001600160a01b03191630179055801561055b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b5f600261056e60c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670100000000000000000000000000000100021630036105bf5760405162461bcd60e51b815260040161041b90611344565b7f00000000000000000000000001670100000000000000000000000000000100026001600160a01b03166105f1610a8a565b6001600160a01b0316146106175760405162461bcd60e51b815260040161041b90611390565b61062081610aa5565b604080515f8082526020820190925261063b91839190610aad565b50565b5f61064a848484610c1c565b90505b9392505050565b61065c610c6f565b610666335f610d00565b565b6001600160a01b037f00000000000000000000000001670100000000000000000000000000000100021630036106b05760405162461bcd60e51b815260040161041b90611344565b7f00000000000000000000000001670100000000000000000000000000000100026001600160a01b03166106e2610a8a565b6001600160a01b0316146107085760405162461bcd60e51b815260040161041b90611390565b61071182610aa5565b61055b82826001610aad565b5f306001600160a01b037f000000000000000000000000016701000000000000000000000000000001000216146107bc5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161041b565b505f5160206114c95f395f51905f5290565b6107d66109d2565b6106665f610d19565b60655433906001600160a01b0316811461084d5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b606482015260840161041b565b61063b81610d19565b61085e610d32565b610666336001610d00565b5f610872610a8a565b905090565b5f61064d468484610c1c565b61088b6109d2565b67ffffffffffffffff83165f90815260fb602090815260408083208584529091529020546001600160a01b039081169082168190036108dd5760405163a883089360e01b815260040160405180910390fd5b67ffffffffffffffff84165f81815260fb6020908152604080832087845282529182902080546001600160a01b0319166001600160a01b038781169182179092558351908152908516918101919091528592917f500dcd607a98daece9bccc2511bf6032471252929de73caf507aae0e082f8453910160405180910390a350505050565b6109696109d2565b606580546001600160a01b0383166001600160a01b0319909116811790915561099a6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6033546001600160a01b031633146106665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161041b565b5f54610100900460ff16610a525760405162461bcd60e51b815260040161041b906113dc565b610a5a610da3565b610a786001600160a01b03821615610a725781610d19565b33610d19565b5060c9805461ff001916610100179055565b5f5160206114c95f395f51905f52546001600160a01b031690565b61063b6109d2565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610ae557610ae083610dc9565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b3f575060408051601f3d908101601f19168201909252610b3c91810190611427565b60015b610ba25760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161041b565b5f5160206114c95f395f51905f528114610c105760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161041b565b50610ae0838383610e64565b5f610c278484610e8e565b905081158015610c3e57506001600160a01b038116155b1561064d57604051632b0d65db60e01b815267ffffffffffffffff851660048201526024810184905260440161041b565b610c8360c954610100900460ff1660021490565b610ca05760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff0019909116620100004267ffffffffffffffff1602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b604051630c2b8f8f60e11b815260040160405180910390fd5b606580546001600160a01b031916905561063b81610f39565b610d4660c954610100900460ff1660021490565b15610d645760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610cf6565b5f54610100900460ff166106665760405162461bcd60e51b815260040161041b906113dc565b6001600160a01b0381163b610e365760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161041b565b5f5160206114c95f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b610e6d83610f8a565b5f82511180610e795750805b15610ae057610e888383610fc9565b50505050565b6097545f906001600160a01b031680610eba57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b815267ffffffffffffffff85166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015610f0d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f31919061143e565b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b610f9381610dc9565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061064d83836040518060600160405280602781526020016114e96027913960605f5f856001600160a01b031685604051611005919061147b565b5f60405180830381855af49150503d805f811461103d576040519150601f19603f3d011682016040523d82523d5f602084013e611042565b606091505b50915091506110538683838761105d565b9695505050505050565b606083156110cb5782515f036110c4576001600160a01b0385163b6110c45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161041b565b5081610f31565b610f3183838151156110e05781518083602001fd5b8060405162461bcd60e51b815260040161041b9190611496565b6001600160a01b038116811461063b575f5ffd5b5f6020828403121561111e575f5ffd5b813561064d816110fa565b803567ffffffffffffffff81168114611140575f5ffd5b919050565b5f5f60408385031215611156575f5ffd5b61115f83611129565b946020939093013593505050565b80358015158114611140575f5ffd5b5f5f5f6060848603121561118e575f5ffd5b61119784611129565b9250602084013591506111ac6040850161116d565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156111da575f5ffd5b82356111e5816110fa565b9150602083013567ffffffffffffffff811115611200575f5ffd5b8301601f81018513611210575f5ffd5b803567ffffffffffffffff81111561122a5761122a6111b5565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715611259576112596111b5565b604052818152828201602001871015611270575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f604083850312156112a0575f5ffd5b823591506112b06020840161116d565b90509250929050565b5f5f5f606084860312156112cb575f5ffd5b6112d484611129565b92506020840135915060408401356112eb816110fa565b809150509250925092565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215611437575f5ffd5b5051919050565b5f6020828403121561144e575f5ffd5b815161064d816110fa565b5f5b8381101561147357818101518382015260200161145b565b50505f910152565b5f825161148c818460208701611459565b9190910192915050565b602081525f82518060208401526114b4816040850160208701611459565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220086d22e71c4d170ad7ce74f948ce47f2f39076babb18c7b950d99c756006877464736f6c634300081b0033", "balance": "0x0" }, - "0x1670000000000000000000000000000000010002": { + "0x1670100000000000000000000000000000010002": { "contractName": "RollupAddressManager", "storage": { "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", - "0x6f603ad772aee14bf097b20bcdc2c1ce5646bfcfbe0e42c192e55416269268c9": "0x0000000000000000000000001670000000000000000000000000000000010001", - "0xee78643889fcb54c297d0ecf866d9df7d829a8c978e52394d135cdb40a501e38": "0x0000000000000000000000001670000000000000000000000000000000000001", - "0xd724ebf31fb7ffa376a4d5d51b51967009df0c86a4dfef5f55507cde2eb36739": "0x0000000000000000000000001670000000000000000000000000000000000005", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000010002" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f", + "0x1bd2b99f99179300cf02ec1d7601bc5aa76d7eff5110d5c1e971d6dad552d55c": "0x0000000000000000000000001670100000000000000000000000000000010001", + "0xe5868eccbe729200743507b6a76ef4952ff4776d6f6e681ea64d7940675418c0": "0x0000000000000000000000001670100000000000000000000000000000000001", + "0x84e8aac80b10d1364654096d750848d40210c937caf853cdc47e8784ad6cf9d5": "0x0000000000000000000000001670100000000000000000000000000000000005", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167010000000000000000000000000000010002" }, "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", "balance": "0x0" }, - "0xbB21206518394cd6DaF38A6C31A3B1461b77CBC8": { + "0x7A4ea15A1713C80C7f6aE5Cd0036415B9dd4af36": { "contractName": "LibNetwork", "storage": {}, "code": "0x730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212204213774d0b1a3b266888223284a425ae694a8c5e97b18403ec7f442200eae55a64736f6c634300081b0033", "balance": "0x0" }, - "0x0167000000000000000000000000000000010099": { + "0x0167010000000000000000000000000000010099": { "contractName": "RegularERC20", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000003": "0x526567756c617245524332300000000000000000000000000000000000000018", "0x0000000000000000000000000000000000000000000000000000000000000004": "0x52474c0000000000000000000000000000000000000000000000000000000006", "0x0000000000000000000000000000000000000000000000000000000000000002": "0x00000000000000000000000000000000000000000000000000000000001f4000", - "0x1fe6b582a6b4d9b61da9024a045cb9bafc343b4b12713ba001e47b3500867413": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x8577e88969d2fa50020a5de3ec00ef722a6ad13741e7d7b5288609c0c312c113": "0x00000000000000000000000000000000000000000000000000000000000fa000", "0xaaa7f9b700b86a1f8ec5dacd0ca81e3b1ea8214dae2b1856095f9d44c1f5b380": "0x00000000000000000000000000000000000000000000000000000000000fa000" }, "code": "0x608060405234801561000f575f5ffd5b50600436106100a6575f3560e01c8063395093511161006e578063395093511461011f57806370a082311461013257806395d89b411461015a578063a457c2d714610162578063a9059cbb14610175578063dd62ed3e14610188575f5ffd5b806306fdde03146100aa578063095ea7b3146100c857806318160ddd146100eb57806323b872dd146100fd578063313ce56714610110575b5f5ffd5b6100b261019b565b6040516100bf919061068a565b60405180910390f35b6100db6100d63660046106f0565b61022b565b60405190151581526020016100bf565b6002545b6040519081526020016100bf565b6100db61010b366004610718565b610244565b604051601281526020016100bf565b6100db61012d3660046106f0565b610267565b6100ef610140366004610752565b6001600160a01b03165f9081526020819052604090205490565b6100b2610288565b6100db6101703660046106f0565b610297565b6100db6101833660046106f0565b610316565b6100ef610196366004610772565b610323565b6060600380546101aa906107a3565b80601f01602080910402602001604051908101604052809291908181526020018280546101d6906107a3565b80156102215780601f106101f857610100808354040283529160200191610221565b820191905f5260205f20905b81548152906001019060200180831161020457829003601f168201915b5050505050905090565b5f3361023881858561034d565b60019150505b92915050565b5f33610251858285610470565b61025c8585856104e8565b506001949350505050565b5f336102388185856102798383610323565b61028391906107db565b61034d565b6060600480546101aa906107a3565b5f33816102a48286610323565b9050838110156103095760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61025c828686840361034d565b5f336102388185856104e8565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103af5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610300565b6001600160a01b0382166104105760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610300565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f61047b8484610323565b90505f1981146104e257818110156104d55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610300565b6104e2848484840361034d565b50505050565b6001600160a01b03831661054c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610300565b6001600160a01b0382166105ae5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610300565b6001600160a01b0383165f90815260208190526040902054818110156106255760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610300565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104e2565b602081525f82518060208401525f5b818110156106b65760208186018101516040868401015201610699565b505f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b03811681146106eb575f5ffd5b919050565b5f5f60408385031215610701575f5ffd5b61070a836106d5565b946020939093013593505050565b5f5f5f6060848603121561072a575f5ffd5b610733846106d5565b9250610741602085016106d5565b929592945050506040919091013590565b5f60208284031215610762575f5ffd5b61076b826106d5565b9392505050565b5f5f60408385031215610783575f5ffd5b61078c836106d5565b915061079a602084016106d5565b90509250929050565b600181811c908216806107b757607f821691505b6020821081036107d557634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561023e57634e487b7160e01b5f52601160045260245ffdfea2646970667358221220a1403924b9774521e0b2e4d325575d166c7612abf0d4b532ee23317cd4225a6b64736f6c634300081b0033", diff --git a/packages/protocol/test/genesis/data/genesis_alloc.json b/packages/protocol/test/genesis/data/genesis_alloc.json index 31c8726254..d2a81cde70 100644 --- a/packages/protocol/test/genesis/data/genesis_alloc.json +++ b/packages/protocol/test/genesis/data/genesis_alloc.json @@ -1,214 +1,214 @@ { - "0xDf08F82De32B8d460adbE8D72043E3a7e25A3B39": { + "0x91c34396e640e3bB4eE80f2e523c23dDa2b3f78F": { "balance": "0x3635c9adc5dea00000" }, "0x79fcdef22feed20eddacbb2587640e45491b757f": { "balance": "0x3635c9adc5dea00000" }, - "0x0167000000000000000000000000000000000006": { + "0x0167010000000000000000000000000000000006": { "contractName": "SharedAddressManagerImpl", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f" }, - "code": "0x608060405260043610610126575f3560e01c80635c975abb116100a85780638da5cb5b1161006d5780638da5cb5b14610301578063a86f9d9e1461031e578063d8f4648f1461033d578063e07baba61461035c578063e30c39781461039b578063f2fde38b146103b8575f5ffd5b80635c975abb14610291578063715018a6146102b157806379ba5097146102c55780638456cb59146102d95780638abf6077146102ed575f5ffd5b80633ab76e9f116100ee5780633ab76e9f1461020a5780633eb6b8cf146102295780633f4ba83a146102485780634f1ef2861461025c57806352d1902d1461026f575f5ffd5b8063069489a21461012a57806319ab453c1461014057806328f713cc1461015f5780633075db56146101c75780633659cfe6146101eb575b5f5ffd5b348015610135575f5ffd5b5061013e6103d7565b005b34801561014b575f5ffd5b5061013e61015a36600461110e565b610487565b34801561016a575f5ffd5b506101aa610179366004611145565b67ffffffffffffffff919091165f90815260fb6020908152604080832093835292905220546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101d2575f5ffd5b506101db61055f565b60405190151581526020016101be565b3480156101f6575f5ffd5b5061013e61020536600461110e565b610577565b348015610215575f5ffd5b506097546101aa906001600160a01b031681565b348015610234575f5ffd5b506101aa61024336600461117c565b61063e565b348015610253575f5ffd5b5061013e610654565b61013e61026a3660046111c9565b610668565b34801561027a575f5ffd5b5061028361071d565b6040519081526020016101be565b34801561029c575f5ffd5b506101db60c954610100900460ff1660021490565b3480156102bc575f5ffd5b5061013e6107ce565b3480156102d0575f5ffd5b5061013e6107df565b3480156102e4575f5ffd5b5061013e610856565b3480156102f8575f5ffd5b506101aa610869565b34801561030c575f5ffd5b506033546001600160a01b03166101aa565b348015610329575f5ffd5b506101aa61033836600461128f565b610877565b348015610348575f5ffd5b5061013e6103573660046112b9565b610883565b348015610367575f5ffd5b5060c9546103829062010000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101be565b3480156103a6575f5ffd5b506065546001600160a01b03166101aa565b3480156103c3575f5ffd5b5061013e6103d236600461110e565b610961565b6103df6109d2565b5f54600290610100900460ff161580156103ff57505f5460ff8083169116105b6104245760405162461bcd60e51b815260040161041b906112f6565b60405180910390fd5b5f8054609780546001600160a01b0319163017905561ffff191660ff83169081176101001761ff0019169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b5f54610100900460ff16158080156104a557505f54600160ff909116105b806104be5750303b1580156104be57505f5460ff166001145b6104da5760405162461bcd60e51b815260040161041b906112f6565b5f805460ff1916600117905580156104fb575f805461ff0019166101001790555b61050482610a2c565b609780546001600160a01b03191630179055801561055b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b5f600261056e60c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000061630036105bf5760405162461bcd60e51b815260040161041b90611344565b7f00000000000000000000000001670000000000000000000000000000000000066001600160a01b03166105f1610a8a565b6001600160a01b0316146106175760405162461bcd60e51b815260040161041b90611390565b61062081610aa5565b604080515f8082526020820190925261063b91839190610aad565b50565b5f61064a848484610c1c565b90505b9392505050565b61065c610c6f565b610666335f610d00565b565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000061630036106b05760405162461bcd60e51b815260040161041b90611344565b7f00000000000000000000000001670000000000000000000000000000000000066001600160a01b03166106e2610a8a565b6001600160a01b0316146107085760405162461bcd60e51b815260040161041b90611390565b61071182610aa5565b61055b82826001610aad565b5f306001600160a01b037f000000000000000000000000016700000000000000000000000000000000000616146107bc5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161041b565b505f5160206114c95f395f51905f5290565b6107d66109d2565b6106665f610d19565b60655433906001600160a01b0316811461084d5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b606482015260840161041b565b61063b81610d19565b61085e610d32565b610666336001610d00565b5f610872610a8a565b905090565b5f61064d468484610c1c565b61088b6109d2565b67ffffffffffffffff83165f90815260fb602090815260408083208584529091529020546001600160a01b039081169082168190036108dd5760405163a883089360e01b815260040160405180910390fd5b67ffffffffffffffff84165f81815260fb6020908152604080832087845282529182902080546001600160a01b0319166001600160a01b038781169182179092558351908152908516918101919091528592917f500dcd607a98daece9bccc2511bf6032471252929de73caf507aae0e082f8453910160405180910390a350505050565b6109696109d2565b606580546001600160a01b0383166001600160a01b0319909116811790915561099a6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6033546001600160a01b031633146106665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161041b565b5f54610100900460ff16610a525760405162461bcd60e51b815260040161041b906113dc565b610a5a610da3565b610a786001600160a01b03821615610a725781610d19565b33610d19565b5060c9805461ff001916610100179055565b5f5160206114c95f395f51905f52546001600160a01b031690565b61063b6109d2565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610ae557610ae083610dc9565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b3f575060408051601f3d908101601f19168201909252610b3c91810190611427565b60015b610ba25760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161041b565b5f5160206114c95f395f51905f528114610c105760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161041b565b50610ae0838383610e64565b5f610c278484610e8e565b905081158015610c3e57506001600160a01b038116155b1561064d57604051632b0d65db60e01b815267ffffffffffffffff851660048201526024810184905260440161041b565b610c8360c954610100900460ff1660021490565b610ca05760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff0019909116620100004267ffffffffffffffff1602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b604051630c2b8f8f60e11b815260040160405180910390fd5b606580546001600160a01b031916905561063b81610f39565b610d4660c954610100900460ff1660021490565b15610d645760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610cf6565b5f54610100900460ff166106665760405162461bcd60e51b815260040161041b906113dc565b6001600160a01b0381163b610e365760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161041b565b5f5160206114c95f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b610e6d83610f8a565b5f82511180610e795750805b15610ae057610e888383610fc9565b50505050565b6097545f906001600160a01b031680610eba57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b815267ffffffffffffffff85166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015610f0d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f31919061143e565b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b610f9381610dc9565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061064d83836040518060600160405280602781526020016114e96027913960605f5f856001600160a01b031685604051611005919061147b565b5f60405180830381855af49150503d805f811461103d576040519150601f19603f3d011682016040523d82523d5f602084013e611042565b606091505b50915091506110538683838761105d565b9695505050505050565b606083156110cb5782515f036110c4576001600160a01b0385163b6110c45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161041b565b5081610f31565b610f3183838151156110e05781518083602001fd5b8060405162461bcd60e51b815260040161041b9190611496565b6001600160a01b038116811461063b575f5ffd5b5f6020828403121561111e575f5ffd5b813561064d816110fa565b803567ffffffffffffffff81168114611140575f5ffd5b919050565b5f5f60408385031215611156575f5ffd5b61115f83611129565b946020939093013593505050565b80358015158114611140575f5ffd5b5f5f5f6060848603121561118e575f5ffd5b61119784611129565b9250602084013591506111ac6040850161116d565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156111da575f5ffd5b82356111e5816110fa565b9150602083013567ffffffffffffffff811115611200575f5ffd5b8301601f81018513611210575f5ffd5b803567ffffffffffffffff81111561122a5761122a6111b5565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715611259576112596111b5565b604052818152828201602001871015611270575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f604083850312156112a0575f5ffd5b823591506112b06020840161116d565b90509250929050565b5f5f5f606084860312156112cb575f5ffd5b6112d484611129565b92506020840135915060408401356112eb816110fa565b809150509250925092565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215611437575f5ffd5b5051919050565b5f6020828403121561144e575f5ffd5b815161064d816110fa565b5f5b8381101561147357818101518382015260200161145b565b50505f910152565b5f825161148c818460208701611459565b9190910192915050565b602081525f82518060208401526114b4816040850160208701611459565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220086d22e71c4d170ad7ce74f948ce47f2f39076babb18c7b950d99c756006877464736f6c634300081b0033", + "code": "0x608060405260043610610126575f3560e01c80635c975abb116100a85780638da5cb5b1161006d5780638da5cb5b14610301578063a86f9d9e1461031e578063d8f4648f1461033d578063e07baba61461035c578063e30c39781461039b578063f2fde38b146103b8575f5ffd5b80635c975abb14610291578063715018a6146102b157806379ba5097146102c55780638456cb59146102d95780638abf6077146102ed575f5ffd5b80633ab76e9f116100ee5780633ab76e9f1461020a5780633eb6b8cf146102295780633f4ba83a146102485780634f1ef2861461025c57806352d1902d1461026f575f5ffd5b8063069489a21461012a57806319ab453c1461014057806328f713cc1461015f5780633075db56146101c75780633659cfe6146101eb575b5f5ffd5b348015610135575f5ffd5b5061013e6103d7565b005b34801561014b575f5ffd5b5061013e61015a36600461110e565b610487565b34801561016a575f5ffd5b506101aa610179366004611145565b67ffffffffffffffff919091165f90815260fb6020908152604080832093835292905220546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101d2575f5ffd5b506101db61055f565b60405190151581526020016101be565b3480156101f6575f5ffd5b5061013e61020536600461110e565b610577565b348015610215575f5ffd5b506097546101aa906001600160a01b031681565b348015610234575f5ffd5b506101aa61024336600461117c565b61063e565b348015610253575f5ffd5b5061013e610654565b61013e61026a3660046111c9565b610668565b34801561027a575f5ffd5b5061028361071d565b6040519081526020016101be565b34801561029c575f5ffd5b506101db60c954610100900460ff1660021490565b3480156102bc575f5ffd5b5061013e6107ce565b3480156102d0575f5ffd5b5061013e6107df565b3480156102e4575f5ffd5b5061013e610856565b3480156102f8575f5ffd5b506101aa610869565b34801561030c575f5ffd5b506033546001600160a01b03166101aa565b348015610329575f5ffd5b506101aa61033836600461128f565b610877565b348015610348575f5ffd5b5061013e6103573660046112b9565b610883565b348015610367575f5ffd5b5060c9546103829062010000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101be565b3480156103a6575f5ffd5b506065546001600160a01b03166101aa565b3480156103c3575f5ffd5b5061013e6103d236600461110e565b610961565b6103df6109d2565b5f54600290610100900460ff161580156103ff57505f5460ff8083169116105b6104245760405162461bcd60e51b815260040161041b906112f6565b60405180910390fd5b5f8054609780546001600160a01b0319163017905561ffff191660ff83169081176101001761ff0019169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b5f54610100900460ff16158080156104a557505f54600160ff909116105b806104be5750303b1580156104be57505f5460ff166001145b6104da5760405162461bcd60e51b815260040161041b906112f6565b5f805460ff1916600117905580156104fb575f805461ff0019166101001790555b61050482610a2c565b609780546001600160a01b03191630179055801561055b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b5f600261056e60c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670100000000000000000000000000000000061630036105bf5760405162461bcd60e51b815260040161041b90611344565b7f00000000000000000000000001670100000000000000000000000000000000066001600160a01b03166105f1610a8a565b6001600160a01b0316146106175760405162461bcd60e51b815260040161041b90611390565b61062081610aa5565b604080515f8082526020820190925261063b91839190610aad565b50565b5f61064a848484610c1c565b90505b9392505050565b61065c610c6f565b610666335f610d00565b565b6001600160a01b037f00000000000000000000000001670100000000000000000000000000000000061630036106b05760405162461bcd60e51b815260040161041b90611344565b7f00000000000000000000000001670100000000000000000000000000000000066001600160a01b03166106e2610a8a565b6001600160a01b0316146107085760405162461bcd60e51b815260040161041b90611390565b61071182610aa5565b61055b82826001610aad565b5f306001600160a01b037f000000000000000000000000016701000000000000000000000000000000000616146107bc5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161041b565b505f5160206114c95f395f51905f5290565b6107d66109d2565b6106665f610d19565b60655433906001600160a01b0316811461084d5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b606482015260840161041b565b61063b81610d19565b61085e610d32565b610666336001610d00565b5f610872610a8a565b905090565b5f61064d468484610c1c565b61088b6109d2565b67ffffffffffffffff83165f90815260fb602090815260408083208584529091529020546001600160a01b039081169082168190036108dd5760405163a883089360e01b815260040160405180910390fd5b67ffffffffffffffff84165f81815260fb6020908152604080832087845282529182902080546001600160a01b0319166001600160a01b038781169182179092558351908152908516918101919091528592917f500dcd607a98daece9bccc2511bf6032471252929de73caf507aae0e082f8453910160405180910390a350505050565b6109696109d2565b606580546001600160a01b0383166001600160a01b0319909116811790915561099a6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6033546001600160a01b031633146106665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161041b565b5f54610100900460ff16610a525760405162461bcd60e51b815260040161041b906113dc565b610a5a610da3565b610a786001600160a01b03821615610a725781610d19565b33610d19565b5060c9805461ff001916610100179055565b5f5160206114c95f395f51905f52546001600160a01b031690565b61063b6109d2565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610ae557610ae083610dc9565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b3f575060408051601f3d908101601f19168201909252610b3c91810190611427565b60015b610ba25760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161041b565b5f5160206114c95f395f51905f528114610c105760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161041b565b50610ae0838383610e64565b5f610c278484610e8e565b905081158015610c3e57506001600160a01b038116155b1561064d57604051632b0d65db60e01b815267ffffffffffffffff851660048201526024810184905260440161041b565b610c8360c954610100900460ff1660021490565b610ca05760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff0019909116620100004267ffffffffffffffff1602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b604051630c2b8f8f60e11b815260040160405180910390fd5b606580546001600160a01b031916905561063b81610f39565b610d4660c954610100900460ff1660021490565b15610d645760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610cf6565b5f54610100900460ff166106665760405162461bcd60e51b815260040161041b906113dc565b6001600160a01b0381163b610e365760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161041b565b5f5160206114c95f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b610e6d83610f8a565b5f82511180610e795750805b15610ae057610e888383610fc9565b50505050565b6097545f906001600160a01b031680610eba57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b815267ffffffffffffffff85166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015610f0d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f31919061143e565b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b610f9381610dc9565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061064d83836040518060600160405280602781526020016114e96027913960605f5f856001600160a01b031685604051611005919061147b565b5f60405180830381855af49150503d805f811461103d576040519150601f19603f3d011682016040523d82523d5f602084013e611042565b606091505b50915091506110538683838761105d565b9695505050505050565b606083156110cb5782515f036110c4576001600160a01b0385163b6110c45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161041b565b5081610f31565b610f3183838151156110e05781518083602001fd5b8060405162461bcd60e51b815260040161041b9190611496565b6001600160a01b038116811461063b575f5ffd5b5f6020828403121561111e575f5ffd5b813561064d816110fa565b803567ffffffffffffffff81168114611140575f5ffd5b919050565b5f5f60408385031215611156575f5ffd5b61115f83611129565b946020939093013593505050565b80358015158114611140575f5ffd5b5f5f5f6060848603121561118e575f5ffd5b61119784611129565b9250602084013591506111ac6040850161116d565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156111da575f5ffd5b82356111e5816110fa565b9150602083013567ffffffffffffffff811115611200575f5ffd5b8301601f81018513611210575f5ffd5b803567ffffffffffffffff81111561122a5761122a6111b5565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715611259576112596111b5565b604052818152828201602001871015611270575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f604083850312156112a0575f5ffd5b823591506112b06020840161116d565b90509250929050565b5f5f5f606084860312156112cb575f5ffd5b6112d484611129565b92506020840135915060408401356112eb816110fa565b809150509250925092565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215611437575f5ffd5b5051919050565b5f6020828403121561144e575f5ffd5b815161064d816110fa565b5f5b8381101561147357818101518382015260200161145b565b50505f910152565b5f825161148c818460208701611459565b9190910192915050565b602081525f82518060208401526114b4816040850160208701611459565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220086d22e71c4d170ad7ce74f948ce47f2f39076babb18c7b950d99c756006877464736f6c634300081b0033", "balance": "0x0" }, - "0x1670000000000000000000000000000000000006": { + "0x1670100000000000000000000000000000000006": { "contractName": "SharedAddressManager", "storage": { "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", - "0xee78643889fcb54c297d0ecf866d9df7d829a8c978e52394d135cdb40a501e38": "0x0000000000000000000000001670000000000000000000000000000000000001", - "0x1b59c5b714a9474274d08839cd27e78ebbcde0eb67d55f88e6a8162fdf746fb6": "0x0000000000000000000000001670000000000000000000000000000000000002", - "0x86f2835ec2a9687ca2e2a16b9bca18cc21a3eb0801913c2c1024c94dae29a56f": "0x0000000000000000000000001670000000000000000000000000000000000003", - "0xceda61f04213e952bfa0631c1d6a46e0243feddef01b15830df6d44a883942ef": "0x0000000000000000000000001670000000000000000000000000000000000004", - "0xd724ebf31fb7ffa376a4d5d51b51967009df0c86a4dfef5f55507cde2eb36739": "0x0000000000000000000000001670000000000000000000000000000000000005", - "0x7c370492eefc4caa8cbb896169c5fc4597f28c57333bb43e31066f4f66652c55": "0x0000000000000000000000000167000000000000000000000000000000010096", - "0xe6965834a21a9e0a0de81d5e0ea99e149f660508a785a52be0ad77b96b5b1c5c": "0x0000000000000000000000000167000000000000000000000000000000010097", - "0x83e96d9214b47c6368e642dca9daced8ea339555eb83dac20d7cbfb0cc0f5c7b": "0x0000000000000000000000000167000000000000000000000000000000010098", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000000006" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f", + "0xe5868eccbe729200743507b6a76ef4952ff4776d6f6e681ea64d7940675418c0": "0x0000000000000000000000001670100000000000000000000000000000000001", + "0xac615b65b35c3ba4f3c515a78b7c7087cf20a185f9b50892a5aee8f38a94a2a3": "0x0000000000000000000000001670100000000000000000000000000000000002", + "0x14cb34ed2e94c2835324f4eb54fd6848cf7921d0bf9f4fb32c4024aa57aa1984": "0x0000000000000000000000001670100000000000000000000000000000000003", + "0xb2033e35b11225145ffd6e0525438c45f3904a68265a4ffbb67d58cb05a01cc5": "0x0000000000000000000000001670100000000000000000000000000000000004", + "0x84e8aac80b10d1364654096d750848d40210c937caf853cdc47e8784ad6cf9d5": "0x0000000000000000000000001670100000000000000000000000000000000005", + "0x9a06f3c0b2f5a00a447c9f6319a508edf25cf66bc3f3c78f4ae49dd92666d942": "0x0000000000000000000000000167010000000000000000000000000000010096", + "0x9f59effaee3d6269d0c2edb48468d6b7b24b0d51e8dbf63ea89d415b3ba3c4c3": "0x0000000000000000000000000167010000000000000000000000000000010097", + "0xd2c72e61a4567b7f7a7370a9e5ee40577297986a376fbdb74245f5bd58472e83": "0x0000000000000000000000000167010000000000000000000000000000010098", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167010000000000000000000000000000000006" }, "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", "balance": "0x0" }, - "0x0167000000000000000000000000000000000001": { + "0x0167010000000000000000000000000000000001": { "contractName": "BridgeImpl", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f" }, - "code": "0x60806040526004361061021d575f3560e01c806382b5e8891161011e578063b8acae0e116100a8578063e07baba61161006d578063e07baba61461066b578063e30c3978146106a8578063eefbf17e146106c5578063f09a4016146106eb578063f2fde38b1461070a575f5ffd5b8063b8acae0e146105af578063be880c81146105ce578063c012fa77146105e4578063d0496d6a14610603578063d1aaa5df1461064b575f5ffd5b80638e3881a9116100ee5780638e3881a9146104fe578063913b16cb1461053c5780639efc7a2e1461055b578063a730cdfb1461057a578063a86f9d9e14610590575f5ffd5b806382b5e8891461049a5780638456cb59146104b95780638abf6077146104cd5780638da5cb5b146104e1575f5ffd5b80633f4ba83a116101aa5780635c975abb1161016f5780635c975abb146103ff57806360620c6b1461041f578063715018a61461043e57806379ba5097146104525780637cbadfaa14610466575f5ffd5b80633f4ba83a14610381578063422770fa146103955780634f1ef286146103b957806352d1902d146103cc5780635862f6e1146103e0575f5ffd5b80633075db56116101f05780633075db56146102ad5780633659cfe6146102d15780633ab76e9f146102f05780633c6cf473146103275780633eb6b8cf14610362575f5ffd5b80630432873c14610221578063069489a2146102425780631bdb0037146102565780632035065e14610280575b5f5ffd5b34801561022c575f5ffd5b5061024061023b366004612f28565b610729565b005b34801561024d575f5ffd5b50610240610a27565b610269610264366004612f76565b610ade565b604051610277929190613102565b60405180910390f35b34801561028b575f5ffd5b5061029f61029a36600461311a565b610e94565b6040516102779291906131d7565b3480156102b8575f5ffd5b506102c1611354565b6040519015158152602001610277565b3480156102dc575f5ffd5b506102406102eb366004613226565b61136c565b3480156102fb575f5ffd5b5060975461030f906001600160a01b031681565b6040516001600160a01b039091168152602001610277565b348015610332575f5ffd5b50610355610341366004613241565b60fc6020525f908152604090205460ff1681565b6040516102779190613258565b34801561036d575f5ffd5b5061030f61037c36600461327c565b611433565b34801561038c575f5ffd5b50610240611449565b3480156103a0575f5ffd5b506103ab62030d4081565b604051908152602001610277565b6102406103c736600461337f565b61145d565b3480156103d7575f5ffd5b506103ab611516565b3480156103eb575f5ffd5b506102c16103fa36600461311a565b6115c8565b34801561040a575f5ffd5b506102c160c954610100900460ff1660021490565b34801561042a575f5ffd5b506102c1610439366004612f76565b611633565b348015610449575f5ffd5b50610240611701565b34801561045d575f5ffd5b50610240611712565b348015610471575f5ffd5b50610485610480366004613241565b611789565b60405163ffffffff9091168152602001610277565b3480156104a5575f5ffd5b506102406104b4366004613226565b6117a7565b3480156104c4575f5ffd5b50610240611827565b3480156104d8575f5ffd5b5061030f61183a565b3480156104ec575f5ffd5b506033546001600160a01b031661030f565b348015610509575f5ffd5b5061051d6105183660046133cb565b611848565b6040805192151583526001600160a01b03909116602083015201610277565b348015610547575f5ffd5b50610240610556366004612f76565b611874565b348015610566575f5ffd5b5061024061057536600461311a565b611a63565b348015610585575f5ffd5b506104856201d4c081565b34801561059b575f5ffd5b5061030f6105aa3660046133e4565b611d67565b3480156105ba575f5ffd5b506102c16105c936600461311a565b611d73565b3480156105d9575f5ffd5b50610485620c350081565b3480156105ef575f5ffd5b506103ab6105fe366004613507565b611dd4565b34801561060e575f5ffd5b50610617611e03565b60408051825181526020808401516001600160a01b031690820152918101516001600160401b031690820152606001610277565b348015610656575f5ffd5b506103ab610665366004613241565b60031890565b348015610676575f5ffd5b5060c954610690906201000090046001600160401b031681565b6040516001600160401b039091168152602001610277565b3480156106b3575f5ffd5b506065546001600160a01b031661030f565b3480156106d0575f5ffd5b5060fb5461069090600160401b90046001600160401b031681565b3480156106f6575f5ffd5b50610240610705366004613538565b611eaa565b348015610715575f5ffd5b50610240610724366004613226565b611f71565b61073960e0830160c084016133cb565b46816001600160401b03161461076257604051631c6c777560e31b815260040160405180910390fd5b61077260a08401608085016133cb565b6001600160401b0381161580610790575046816001600160401b0316145b156107ae57604051631c6c777560e31b815260040160405180910390fd5b6107c260c954610100900460ff1660021490565b156107e05760405163bae6e2a960e01b815260040160405180910390fd5b60026107ee60c95460ff1690565b60ff160361080f5760405163dfc60d8560e01b815260040160405180910390fd5b6108196002611fe2565b5f6108266105fe86613564565b9050610833816001611ff8565b61084185610120013561204a565b61085e576040516335856fbd60e21b815260040160405180910390fd5b5f6108838661087e6d7369676e616c5f7365727669636560901b5f611d67565b6120eb565b156108ce576108c78661012001356188b860405180602001604052805f8152508960e00160208101906108b69190613226565b6001600160a01b03169291906121e2565b9050610948565b6108de606087016040880161356f565b63ffffffff1615806108ed5750845b801561091b5750610905610100870160e08801613226565b6001600160a01b0316336001600160a01b031614155b15610939576040516372b6e1c360e11b815260040160405180910390fd5b61094586835a5f61221f565b90505b801561095e57610959826002612316565b610a15565b84156109fc5761096f826003612316565b61098a6d7369676e616c5f7365727669636560901b5f611d67565b60405163019b28af60e61b81526003841860048201526001600160a01b0391909116906366ca2bc0906024016020604051808303815f875af11580156109d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109f69190613588565b50610a15565b60405163161e3ead60e01b815260040160405180910390fd5b5050610a216001611fe2565b50505050565b610a2f6123d3565b5f54600290610100900460ff16158015610a4f57505f5460ff8083169116105b610a745760405162461bcd60e51b8152600401610a6b9061359f565b60405180910390fd5b5f805460fb805467ffffffffffffffff1916905560ff82815561010083815561ff001991851661ffff19909316831717169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201839052610140820152610b4460c0840160a08501613226565b6001600160a01b038116610b6b5760405163538ba4f960e01b815260040160405180910390fd5b610b7c610100850160e08601613226565b6001600160a01b038116610ba35760405163538ba4f960e01b815260040160405180910390fd5b610bb360e0860160c087016133cb565b6001600160401b0381161580610bd1575046816001600160401b0316145b15610bef57604051631c6c777560e31b815260040160405180910390fd5b610c0360c954610100900460ff1660021490565b15610c215760405163bae6e2a960e01b815260040160405180910390fd5b6002610c2f60c95460ff1690565b60ff1603610c505760405163dfc60d8560e01b815260040160405180910390fd5b610c5a6002611fe2565b610c6a606087016040880161356f565b63ffffffff165f03610cb257610c8660408701602088016133cb565b6001600160401b031615610cad5760405163c9f5178760e01b815260040160405180910390fd5b610cda565b610cbb8661242d565b5f03610cda576040516308c2ad5360e01b815260040160405180910390fd5b5f610cee61051860e0890160c08a016133cb565b50905080610d0f57604051631c6c777560e31b815260040160405180910390fd5b34610d206040890160208a016133cb565b610d38906001600160401b03166101208a0135613601565b14610d5657604051634ac2abdf60e11b815260040160405180910390fd5b610d5f87613564565b60fb8054919650600160401b9091046001600160401b0316906008610d8383613614565b82546101009290920a6001600160401b03818102199093169183160217909155908116865233606087015246166080860152610dbe85611dd4565b9550857fe33fd33b4f45b95b1c196242240c5b5233129d724b578f95b66ce8d8aae9351786604051610df0919061363e565b60405180910390a2610e136d7369676e616c5f7365727669636560901b5f611d67565b6001600160a01b03166366ca2bc0876040518263ffffffff1660e01b8152600401610e4091815260200190565b6020604051808303815f875af1158015610e5c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e809190613588565b5050610e8c6001611fe2565b505050915091565b5f5f610eaa60c954610100900460ff1660021490565b15610ec85760405163bae6e2a960e01b815260040160405180910390fd5b6002610ed660c95460ff1690565b60ff1603610ef75760405163dfc60d8560e01b815260040160405180910390fd5b610f016002611fe2565b5f5a905046610f1660e0880160c089016133cb565b6001600160401b031614610f3d57604051631c6c777560e31b815260040160405180910390fd5b610f4d60a08701608088016133cb565b6001600160401b03161580610f79575046610f6e60a08801608089016133cb565b6001600160401b0316145b15610f9757604051631c6c777560e31b815260040160405180910390fd5b604080516080810182525f808252602082018190529181018290526060810191909152610fcb610100880160e08901613226565b6001600160a01b031633148015606083015261103a57610ff1606088016040890161356f565b63ffffffff165f03611016576040516372b6e1c360e11b815260040160405180910390fd5b62030d4085111561103a57604051631e3b03c960e01b815260040160405180910390fd5b5f6110476105fe89613564565b9050611053815f611ff8565b5f61106f6d7369676e616c5f7365727669636560901b5f611d67565b63ffffffff881660208501529050611099818361109260a08d0160808e016133cb565b8b8b612480565b63ffffffff166040808501919091526110d8906110bb908b0160208c016133cb565b6110d3906001600160401b03166101208c0135613601565b61204a565b6110f5576040516335856fbd60e21b815260040160405180910390fd5b5f6111008a836120eb565b1561111957506002955060019450610120890135611160565b5f8460600151611129575a611132565b6111328b61242d565b90506111448b8583886060015161221f565b1561115557600297505f965061115e565b60019750600296505b505b61117060408b0160208c016133cb565b6001600160401b0316156112d15761118e60408b0160208c016133cb565b6111a1906001600160401b031682613601565b9050836060015180156111c857506111bf60608b0160408c0161356f565b63ffffffff1615155b156112d157604084015163ffffffff16614e20025a6112056111ee6101408e018e613650565b6020601f909101819004026101a00160041b919050565b63ffffffff9081168801919091036201d4c00181168087525f91839161122e9183919061252b16565b0390505f61124260608e0160408f0161356f565b63ffffffff168d602001602081019061125b91906133cb565b6001600160401b031683028161127357611273613699565b0490505f48830290505f6112b78f602001602081019061129391906133cb565b6001600160401b0316848410156112af5784840160011c6112b1565b845b90612540565b958690039590506112cb33826188b8612554565b50505050505b6112f9816188b86112e96101008e0160e08f01613226565b6001600160a01b03169190612554565b6113038388612316565b827f8580f507761043ecdd2bdca084d6fb0109150b3d9842d854d34e3dea6d69387d8b86604051611335929190613831565b60405180910390a2505050505061134c6001611fe2565b935093915050565b5f600261136360c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000011630036113b45760405162461bcd60e51b8152600401610a6b90613885565b7f00000000000000000000000001670000000000000000000000000000000000016001600160a01b03166113e6612597565b6001600160a01b03161461140c5760405162461bcd60e51b8152600401610a6b906138d1565b611415816125b2565b604080515f80825260208201909252611430918391906125ba565b50565b5f61143f848484612724565b90505b9392505050565b611451612776565b61145b335f612806565b565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000011630036114a55760405162461bcd60e51b8152600401610a6b90613885565b7f00000000000000000000000001670000000000000000000000000000000000016001600160a01b03166114d7612597565b6001600160a01b0316146114fd5760405162461bcd60e51b8152600401610a6b906138d1565b611506826125b2565b611512828260016125ba565b5050565b5f306001600160a01b037f000000000000000000000000016700000000000000000000000000000000000116146115b55760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610a6b565b505f516020613aeb5f395f51905f525b90565b5f466115da60a08601608087016133cb565b6001600160401b0316146115ef57505f611442565b61143f61160d6d7369676e616c5f7365727669636560901b5f611d67565b61161c6106656105fe88613564565b61162c60e0880160c089016133cb565b86866128b3565b5f4661164560a08401608085016133cb565b6001600160401b03161461165a57505f919050565b6116756d7369676e616c5f7365727669636560901b5f611d67565b6001600160a01b03166332676bc6306116906105fe86613564565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa1580156116d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116fb919061391d565b92915050565b6117096123d3565b61145b5f612935565b60655433906001600160a01b031681146117805760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610a6b565b61143081612935565b5f6116fb620c35006101a06020601f8601819004020160041b613938565b806001600160a01b0381166117cf5760405163538ba4f960e01b815260040160405180910390fd5b6040516317066a5760e21b81523060048201526001600160a01b03831690635c19a95c906024015f604051808303815f87803b15801561180d575f5ffd5b505af115801561181f573d5f5f3e3d5ffd5b505050505050565b61182f61294e565b61145b336001612806565b5f611843612597565b905090565b5f5f61185f836562726964676560d01b6001611433565b6001600160a01b038116151594909350915050565b61188460e0820160c083016133cb565b46816001600160401b0316146118ad57604051631c6c777560e31b815260040160405180910390fd5b6118bd60a08301608084016133cb565b6001600160401b03811615806118db575046816001600160401b0316145b156118f957604051631c6c777560e31b815260040160405180910390fd5b61190d60c954610100900460ff1660021490565b1561192b5760405163bae6e2a960e01b815260040160405180910390fd5b600261193960c95460ff1690565b60ff160361195a5760405163dfc60d8560e01b815260040160405180910390fd5b6119646002611fe2565b611975610100840160e08501613226565b6001600160a01b0316336001600160a01b0316146119a6576040516372b6e1c360e11b815260040160405180910390fd5b5f6119b36105fe85613564565b90506119c0816001611ff8565b6119cb816003612316565b6119e66d7369676e616c5f7365727669636560901b5f611d67565b60405163019b28af60e61b81526003831860048201526001600160a01b0391909116906366ca2bc0906024016020604051808303815f875af1158015611a2e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a529190613588565b5050611a5e6001611fe2565b505050565b611a7360a08401608085016133cb565b46816001600160401b031614611a9c57604051631c6c777560e31b815260040160405180910390fd5b611aac60e0850160c086016133cb565b6001600160401b0381161580611aca575046816001600160401b0316145b15611ae857604051631c6c777560e31b815260040160405180910390fd5b611afc60c954610100900460ff1660021490565b15611b1a5760405163bae6e2a960e01b815260040160405180910390fd5b6002611b2860c95460ff1690565b60ff1603611b495760405163dfc60d8560e01b815260040160405180910390fd5b611b536002611fe2565b5f611b606105fe87613564565b9050611b6c815f611ff8565b5f611b886d7369676e616c5f7365727669636560901b5f611d67565b604051631933b5e360e11b8152306004820152602481018490529091506001600160a01b038216906332676bc690604401602060405180830381865afa158015611bd4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bf8919061391d565b611c155760405163ab035ad560e01b815260040160405180910390fd5b611c348160038418611c2d60e08b0160c08c016133cb565b8989612480565b50611c40826004612316565b611c4e87610120013561204a565b611c6b576040516335856fbd60e21b815260040160405180910390fd5b611c9462bc399d60e11b611c8560808a0160608b01613226565b6001600160a01b0316906129bf565b15611d3857611cb38230611cae60a08b0160808c016133cb565b612a4c565b611cc36080880160608901613226565b6001600160a01b0316630178733a88610120013589856040518463ffffffff1660e01b8152600401611cf6929190613954565b5f604051808303818588803b158015611d0d575f5ffd5b505af1158015611d1f573d5f5f3e3d5ffd5b5050505050611d335f195f1b5f1980612a4c565b611d54565b611d546101208801356188b86112e960c08b0160a08c01613226565b5050611d606001611fe2565b5050505050565b5f611442468484612724565b5f46611d8560e0860160c087016133cb565b6001600160401b031614611d9a57505f611442565b61143f611db86d7369676e616c5f7365727669636560901b5f611d67565b611dc46105fe87613564565b61162c60a08801608089016133cb565b5f81604051602001611de69190613975565b604051602081830303815290604052805190602001209050919050565b604080516060810182525f8082526020820181905291810191909152611e7a604080516060810182525f8082526020820181905291810191909152506040805160608101825260fd54815260fe546001600160a01b0381166020830152600160a01b90046001600160401b03169181019190915290565b80519091501580611e8c575080515f19145b156115c557604051635ceed17360e01b815260040160405180910390fd5b5f54610100900460ff1615808015611ec857505f54600160ff909116105b80611ee15750303b158015611ee157505f5460ff166001145b611efd5760405162461bcd60e51b8152600401610a6b9061359f565b5f805460ff191660011790558015611f1e575f805461ff0019166101001790555b611f288383612aa1565b8015611a5e575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b611f796123d3565b606580546001600160a01b0383166001600160a01b03199091168117909155611faa6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b80600481111561200a5761200a6131af565b5f83815260fc602052604090205460ff16600481111561202c5761202c6131af565b14611512576040516319d893ad60e21b815260040160405180910390fd5b5f5f6120676c38bab7ba30afb6b0b730b3b2b960991b6001611d67565b90506001600160a01b0381166120805750600192915050565b6040516315c638fb60e31b81525f6004820152602481018490526001600160a01b0382169063ae31c7d8906044015f604051808303815f87803b1580156120c5575f5ffd5b505af19250505080156120d6575060015b6120e257505f92915050565b50600192915050565b5f806120ff61012085016101008601613226565b6001600160a01b031603612115575060016116fb565b3061212861012085016101008601613226565b6001600160a01b03160361213e575060016116fb565b6001600160a01b03821661215a61012085016101008601613226565b6001600160a01b031603612170575060016116fb565b6004612180610140850185613650565b9050101580156121b75750637f07c94760e01b6121a1610140850185613650565b6121aa916139ab565b6001600160e01b03191614155b801561144257506114426121d361012085016101008601613226565b6001600160a01b03163b151590565b5f6001600160a01b03851661220a57604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b5f306122316080870160608801613226565b6001600160a01b031603612247576122476139e3565b825f0361225557505f61230e565b612279846122696080880160608901613226565b611cae60a0890160808a016133cb565b5f61228c61012087016101008801613226565b90506101208601355f6122a3610140890189613650565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525084519495509384935083925090506020850186888cf194505a905085156122fd576122fd8188612adb565b6123095f198080612a4c565b505050505b949350505050565b806004811115612328576123286131af565b5f83815260fc602052604090205460ff16600481111561234a5761234a6131af565b03612368576040516319d893ad60e21b815260040160405180910390fd5b5f82815260fc60205260409020805482919060ff19166001836004811115612392576123926131af565b0217905550817f6c51882bc2ed67617f77a1e9b9a25d2caad8448647ecb093b357a603b2575634826040516123c79190613258565b60405180910390a25050565b6033546001600160a01b0316331461145b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a6b565b5f80612447612440610140850185613650565b9050611789565b63ffffffff16905080612478612463606086016040870161356f565b63ffffffff168361252b90919063ffffffff16565b039392505050565b5f856001600160a01b031663910af6ed856124a5876562726964676560d01b5f611433565b8887876040518663ffffffff1660e01b81526004016124c89594939291906139f7565b6020604051808303815f875af1925050508015612502575060408051601f3d908101601f191682019092526124ff91810190613588565b60015b61251f576040516314504c7360e31b815260040160405180910390fd5b90505b95945050505050565b5f8183116125395781611442565b5090919050565b5f81831161254e5782611442565b50919050565b815f0361256057505050565b61257a83838360405180602001604052805f8152506121e2565b611a5e57604051634c67134d60e11b815260040160405180910390fd5b5f516020613aeb5f395f51905f52546001600160a01b031690565b6114306123d3565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156125ed57611a5e83612aef565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612647575060408051601f3d908101601f1916820190925261264491810190613588565b60015b6126aa5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610a6b565b5f516020613aeb5f395f51905f5281146127185760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610a6b565b50611a5e838383612b8a565b5f61272f8484612bae565b90508115801561274657506001600160a01b038116155b1561144257604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610a6b565b61278a60c954610100900460ff1660021490565b6127a75760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6033546001600160a01b038381169116148061284e57506128396d636861696e5f7761746368646f6760901b6001611d67565b6001600160a01b0316826001600160a01b0316145b15612857575050565b808015612891575061287c6e6272696467655f7761746368646f6760881b6001611d67565b6001600160a01b0316826001600160a01b0316145b1561289a575050565b604051630d85cccf60e11b815260040160405180910390fd5b5f856001600160a01b031663ce9d0820856128d8876562726964676560d01b5f611433565b8887876040518663ffffffff1660e01b81526004016128fb9594939291906139f7565b5f6040518083038186803b158015612911575f5ffd5b505afa925050508015612922575060015b61292d57505f612522565b506001612522565b606580546001600160a01b031916905561143081612c50565b61296260c954610100900460ff1660021490565b156129805760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016127fc565b5f6001600160a01b0383163b6129d657505f6116fb565b6040516301ffc9a760e01b81526001600160e01b0319831660048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa925050508015612a40575060408051601f3d908101601f19168201909252612a3d9181019061391d565b60015b156116fb579392505050565b604080516060810182528481526001600160a01b03909316602084018190526001600160401b03909216920182905260fd9290925560fe8054600160a01b9092026001600160e01b0319909216909217179055565b806001600160a01b038116612ac95760405163538ba4f960e01b815260040160405180910390fd5b612ad283612ca1565b611a5e82612cff565b612ae6603f82613a38565b82101561151257fe5b6001600160a01b0381163b612b5c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610a6b565b5f516020613aeb5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b612b9383612d6f565b5f82511180612b9f5750805b15611a5e57610a218383612dae565b6097545f906001600160a01b031680612bda57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015612c2c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061230e9190613a57565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16612cc75760405162461bcd60e51b8152600401610a6b90613a72565b612ccf612dd3565b612ced6001600160a01b03821615612ce75781612935565b33612935565b5060c9805461ff001916610100179055565b5f54610100900460ff16612d255760405162461bcd60e51b8152600401610a6b90613a72565b6001600160401b03461115612d4d5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b612d7881612aef565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606114428383604051806060016040528060278152602001613b0b60279139612df9565b5f54610100900460ff1661145b5760405162461bcd60e51b8152600401610a6b90613a72565b60605f5f856001600160a01b031685604051612e159190613abd565b5f60405180830381855af49150503d805f8114612e4d576040519150601f19603f3d011682016040523d82523d5f602084013e612e52565b606091505b5091509150612e6386838387612e6d565b9695505050505050565b60608315612edb5782515f03612ed4576001600160a01b0385163b612ed45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a6b565b508161230e565b61230e8383815115612ef05781518083602001fd5b8060405162461bcd60e51b8152600401610a6b9190613ad8565b5f610160828403121561254e575f5ffd5b8015158114611430575f5ffd5b5f5f60408385031215612f39575f5ffd5b82356001600160401b03811115612f4e575f5ffd5b612f5a85828601612f0a565b9250506020830135612f6b81612f1b565b809150509250929050565b5f60208284031215612f86575f5ffd5b81356001600160401b03811115612f9b575f5ffd5b61230e84828501612f0a565b5f5b83811015612fc1578181015183820152602001612fa9565b50505f910152565b5f8151808452612fe0816020860160208601612fa7565b601f01601f19169290920160200192915050565b80516001600160401b031682525f602082015161301c60208501826001600160401b03169052565b506040820151613034604085018263ffffffff169052565b50606082015161304f60608501826001600160a01b03169052565b50608082015161306a60808501826001600160401b03169052565b5060a082015161308560a08501826001600160a01b03169052565b5060c08201516130a060c08501826001600160401b03169052565b5060e08201516130bb60e08501826001600160a01b03169052565b506101008201516130d86101008501826001600160a01b03169052565b5061012082015161012084015261014082015161016061014085015261230e610160850182612fc9565b828152604060208201525f61143f6040830184612ff4565b5f5f5f6040848603121561312c575f5ffd5b83356001600160401b03811115613141575f5ffd5b61314d86828701612f0a565b93505060208401356001600160401b03811115613168575f5ffd5b8401601f81018613613178575f5ffd5b80356001600160401b0381111561318d575f5ffd5b86602082840101111561319e575f5ffd5b939660209190910195509293505050565b634e487b7160e01b5f52602160045260245ffd5b600581106131d3576131d36131af565b9052565b604081016131e582856131c3565b600483106131f5576131f56131af565b8260208301529392505050565b6001600160a01b0381168114611430575f5ffd5b803561322181613202565b919050565b5f60208284031215613236575f5ffd5b813561144281613202565b5f60208284031215613251575f5ffd5b5035919050565b602081016116fb82846131c3565b80356001600160401b0381168114613221575f5ffd5b5f5f5f6060848603121561328e575f5ffd5b61329784613266565b92506020840135915060408401356132ae81612f1b565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405161016081016001600160401b03811182821017156132f0576132f06132b9565b60405290565b5f82601f830112613305575f5ffd5b81356001600160401b0381111561331e5761331e6132b9565b604051601f8201601f19908116603f011681016001600160401b038111828210171561334c5761334c6132b9565b604052818152838201602001851015613363575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215613390575f5ffd5b823561339b81613202565b915060208301356001600160401b038111156133b5575f5ffd5b6133c1858286016132f6565b9150509250929050565b5f602082840312156133db575f5ffd5b61144282613266565b5f5f604083850312156133f5575f5ffd5b823591506020830135612f6b81612f1b565b803563ffffffff81168114613221575f5ffd5b5f610160828403121561342b575f5ffd5b6134336132cd565b905061343e82613266565b815261344c60208301613266565b602082015261345d60408301613407565b604082015261346e60608301613216565b606082015261347f60808301613266565b608082015261349060a08301613216565b60a08201526134a160c08301613266565b60c08201526134b260e08301613216565b60e08201526134c46101008301613216565b61010082015261012082810135908201526101408201356001600160401b038111156134ee575f5ffd5b6134fa848285016132f6565b6101408301525092915050565b5f60208284031215613517575f5ffd5b81356001600160401b0381111561352c575f5ffd5b61230e8482850161341a565b5f5f60408385031215613549575f5ffd5b823561355481613202565b91506020830135612f6b81613202565b5f6116fb368361341a565b5f6020828403121561357f575f5ffd5b61144282613407565b5f60208284031215613598575f5ffd5b5051919050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156116fb576116fb6135ed565b5f6001600160401b0382166001600160401b038103613635576136356135ed565b60010192915050565b602081525f6114426020830184612ff4565b5f5f8335601e19843603018112613665575f5ffd5b8301803591506001600160401b0382111561367e575f5ffd5b602001915036819003821315613692575f5ffd5b9250929050565b634e487b7160e01b5f52601260045260245ffd5b5f5f8335601e198436030181126136c2575f5ffd5b83016020810192503590506001600160401b038111156136e0575f5ffd5b803603821315613692575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6137308261372383613266565b6001600160401b03169052565b5f61373d60208301613266565b6001600160401b0316602084015261375760408301613407565b63ffffffff16604084015261376e60608301613216565b6001600160a01b0316606084015261378860808301613266565b6001600160401b031660808401526137a260a08301613216565b6001600160a01b031660a08401526137bc60c08301613266565b6001600160401b031660c08401526137d660e08301613216565b6001600160a01b031660e08401526137f16101008301613216565b6001600160a01b031661010084015261012082810135908401526138196101408301836136ad565b610160610140860152612522610160860182846136ee565b60a081525f61384360a0830185613716565b905063ffffffff835116602083015263ffffffff602084015116604083015263ffffffff60408401511660608301526060830151151560808301529392505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f6020828403121561392d575f5ffd5b815161144281612f1b565b63ffffffff81811683821601908111156116fb576116fb6135ed565b604081525f6139666040830185613716565b90508260208301529392505050565b60408152600d60408201526c5441494b4f5f4d45535341474560981b6060820152608060208201525f6114426080830184612ff4565b80356001600160e01b031981169060048410156139dc576001600160e01b0319600485900360031b81901b82161691505b5092915050565b634e487b7160e01b5f52600160045260245ffd5b6001600160401b038616815260018060a01b0385166020820152836040820152608060608201525f613a2d6080830184866136ee565b979650505050505050565b5f82613a5257634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215613a67575f5ffd5b815161144281613202565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f8251613ace818460208701612fa7565b9190910192915050565b602081525f6114426020830184612fc956fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220fe7f47dabd46879b9404e8d06f7ee77f2c51d0391f21575037dda2b3e15ccfb164736f6c634300081b0033", + "code": "0x60806040526004361061021d575f3560e01c806382b5e8891161011e578063b8acae0e116100a8578063e07baba61161006d578063e07baba61461066b578063e30c3978146106a8578063eefbf17e146106c5578063f09a4016146106eb578063f2fde38b1461070a575f5ffd5b8063b8acae0e146105af578063be880c81146105ce578063c012fa77146105e4578063d0496d6a14610603578063d1aaa5df1461064b575f5ffd5b80638e3881a9116100ee5780638e3881a9146104fe578063913b16cb1461053c5780639efc7a2e1461055b578063a730cdfb1461057a578063a86f9d9e14610590575f5ffd5b806382b5e8891461049a5780638456cb59146104b95780638abf6077146104cd5780638da5cb5b146104e1575f5ffd5b80633f4ba83a116101aa5780635c975abb1161016f5780635c975abb146103ff57806360620c6b1461041f578063715018a61461043e57806379ba5097146104525780637cbadfaa14610466575f5ffd5b80633f4ba83a14610381578063422770fa146103955780634f1ef286146103b957806352d1902d146103cc5780635862f6e1146103e0575f5ffd5b80633075db56116101f05780633075db56146102ad5780633659cfe6146102d15780633ab76e9f146102f05780633c6cf473146103275780633eb6b8cf14610362575f5ffd5b80630432873c14610221578063069489a2146102425780631bdb0037146102565780632035065e14610280575b5f5ffd5b34801561022c575f5ffd5b5061024061023b366004612f28565b610729565b005b34801561024d575f5ffd5b50610240610a27565b610269610264366004612f76565b610ade565b604051610277929190613102565b60405180910390f35b34801561028b575f5ffd5b5061029f61029a36600461311a565b610e94565b6040516102779291906131d7565b3480156102b8575f5ffd5b506102c1611354565b6040519015158152602001610277565b3480156102dc575f5ffd5b506102406102eb366004613226565b61136c565b3480156102fb575f5ffd5b5060975461030f906001600160a01b031681565b6040516001600160a01b039091168152602001610277565b348015610332575f5ffd5b50610355610341366004613241565b60fc6020525f908152604090205460ff1681565b6040516102779190613258565b34801561036d575f5ffd5b5061030f61037c36600461327c565b611433565b34801561038c575f5ffd5b50610240611449565b3480156103a0575f5ffd5b506103ab62030d4081565b604051908152602001610277565b6102406103c736600461337f565b61145d565b3480156103d7575f5ffd5b506103ab611516565b3480156103eb575f5ffd5b506102c16103fa36600461311a565b6115c8565b34801561040a575f5ffd5b506102c160c954610100900460ff1660021490565b34801561042a575f5ffd5b506102c1610439366004612f76565b611633565b348015610449575f5ffd5b50610240611701565b34801561045d575f5ffd5b50610240611712565b348015610471575f5ffd5b50610485610480366004613241565b611789565b60405163ffffffff9091168152602001610277565b3480156104a5575f5ffd5b506102406104b4366004613226565b6117a7565b3480156104c4575f5ffd5b50610240611827565b3480156104d8575f5ffd5b5061030f61183a565b3480156104ec575f5ffd5b506033546001600160a01b031661030f565b348015610509575f5ffd5b5061051d6105183660046133cb565b611848565b6040805192151583526001600160a01b03909116602083015201610277565b348015610547575f5ffd5b50610240610556366004612f76565b611874565b348015610566575f5ffd5b5061024061057536600461311a565b611a63565b348015610585575f5ffd5b506104856201d4c081565b34801561059b575f5ffd5b5061030f6105aa3660046133e4565b611d67565b3480156105ba575f5ffd5b506102c16105c936600461311a565b611d73565b3480156105d9575f5ffd5b50610485620c350081565b3480156105ef575f5ffd5b506103ab6105fe366004613507565b611dd4565b34801561060e575f5ffd5b50610617611e03565b60408051825181526020808401516001600160a01b031690820152918101516001600160401b031690820152606001610277565b348015610656575f5ffd5b506103ab610665366004613241565b60031890565b348015610676575f5ffd5b5060c954610690906201000090046001600160401b031681565b6040516001600160401b039091168152602001610277565b3480156106b3575f5ffd5b506065546001600160a01b031661030f565b3480156106d0575f5ffd5b5060fb5461069090600160401b90046001600160401b031681565b3480156106f6575f5ffd5b50610240610705366004613538565b611eaa565b348015610715575f5ffd5b50610240610724366004613226565b611f71565b61073960e0830160c084016133cb565b46816001600160401b03161461076257604051631c6c777560e31b815260040160405180910390fd5b61077260a08401608085016133cb565b6001600160401b0381161580610790575046816001600160401b0316145b156107ae57604051631c6c777560e31b815260040160405180910390fd5b6107c260c954610100900460ff1660021490565b156107e05760405163bae6e2a960e01b815260040160405180910390fd5b60026107ee60c95460ff1690565b60ff160361080f5760405163dfc60d8560e01b815260040160405180910390fd5b6108196002611fe2565b5f6108266105fe86613564565b9050610833816001611ff8565b61084185610120013561204a565b61085e576040516335856fbd60e21b815260040160405180910390fd5b5f6108838661087e6d7369676e616c5f7365727669636560901b5f611d67565b6120eb565b156108ce576108c78661012001356188b860405180602001604052805f8152508960e00160208101906108b69190613226565b6001600160a01b03169291906121e2565b9050610948565b6108de606087016040880161356f565b63ffffffff1615806108ed5750845b801561091b5750610905610100870160e08801613226565b6001600160a01b0316336001600160a01b031614155b15610939576040516372b6e1c360e11b815260040160405180910390fd5b61094586835a5f61221f565b90505b801561095e57610959826002612316565b610a15565b84156109fc5761096f826003612316565b61098a6d7369676e616c5f7365727669636560901b5f611d67565b60405163019b28af60e61b81526003841860048201526001600160a01b0391909116906366ca2bc0906024016020604051808303815f875af11580156109d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109f69190613588565b50610a15565b60405163161e3ead60e01b815260040160405180910390fd5b5050610a216001611fe2565b50505050565b610a2f6123d3565b5f54600290610100900460ff16158015610a4f57505f5460ff8083169116105b610a745760405162461bcd60e51b8152600401610a6b9061359f565b60405180910390fd5b5f805460fb805467ffffffffffffffff1916905560ff82815561010083815561ff001991851661ffff19909316831717169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201839052610140820152610b4460c0840160a08501613226565b6001600160a01b038116610b6b5760405163538ba4f960e01b815260040160405180910390fd5b610b7c610100850160e08601613226565b6001600160a01b038116610ba35760405163538ba4f960e01b815260040160405180910390fd5b610bb360e0860160c087016133cb565b6001600160401b0381161580610bd1575046816001600160401b0316145b15610bef57604051631c6c777560e31b815260040160405180910390fd5b610c0360c954610100900460ff1660021490565b15610c215760405163bae6e2a960e01b815260040160405180910390fd5b6002610c2f60c95460ff1690565b60ff1603610c505760405163dfc60d8560e01b815260040160405180910390fd5b610c5a6002611fe2565b610c6a606087016040880161356f565b63ffffffff165f03610cb257610c8660408701602088016133cb565b6001600160401b031615610cad5760405163c9f5178760e01b815260040160405180910390fd5b610cda565b610cbb8661242d565b5f03610cda576040516308c2ad5360e01b815260040160405180910390fd5b5f610cee61051860e0890160c08a016133cb565b50905080610d0f57604051631c6c777560e31b815260040160405180910390fd5b34610d206040890160208a016133cb565b610d38906001600160401b03166101208a0135613601565b14610d5657604051634ac2abdf60e11b815260040160405180910390fd5b610d5f87613564565b60fb8054919650600160401b9091046001600160401b0316906008610d8383613614565b82546101009290920a6001600160401b03818102199093169183160217909155908116865233606087015246166080860152610dbe85611dd4565b9550857fe33fd33b4f45b95b1c196242240c5b5233129d724b578f95b66ce8d8aae9351786604051610df0919061363e565b60405180910390a2610e136d7369676e616c5f7365727669636560901b5f611d67565b6001600160a01b03166366ca2bc0876040518263ffffffff1660e01b8152600401610e4091815260200190565b6020604051808303815f875af1158015610e5c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e809190613588565b5050610e8c6001611fe2565b505050915091565b5f5f610eaa60c954610100900460ff1660021490565b15610ec85760405163bae6e2a960e01b815260040160405180910390fd5b6002610ed660c95460ff1690565b60ff1603610ef75760405163dfc60d8560e01b815260040160405180910390fd5b610f016002611fe2565b5f5a905046610f1660e0880160c089016133cb565b6001600160401b031614610f3d57604051631c6c777560e31b815260040160405180910390fd5b610f4d60a08701608088016133cb565b6001600160401b03161580610f79575046610f6e60a08801608089016133cb565b6001600160401b0316145b15610f9757604051631c6c777560e31b815260040160405180910390fd5b604080516080810182525f808252602082018190529181018290526060810191909152610fcb610100880160e08901613226565b6001600160a01b031633148015606083015261103a57610ff1606088016040890161356f565b63ffffffff165f03611016576040516372b6e1c360e11b815260040160405180910390fd5b62030d4085111561103a57604051631e3b03c960e01b815260040160405180910390fd5b5f6110476105fe89613564565b9050611053815f611ff8565b5f61106f6d7369676e616c5f7365727669636560901b5f611d67565b63ffffffff881660208501529050611099818361109260a08d0160808e016133cb565b8b8b612480565b63ffffffff166040808501919091526110d8906110bb908b0160208c016133cb565b6110d3906001600160401b03166101208c0135613601565b61204a565b6110f5576040516335856fbd60e21b815260040160405180910390fd5b5f6111008a836120eb565b1561111957506002955060019450610120890135611160565b5f8460600151611129575a611132565b6111328b61242d565b90506111448b8583886060015161221f565b1561115557600297505f965061115e565b60019750600296505b505b61117060408b0160208c016133cb565b6001600160401b0316156112d15761118e60408b0160208c016133cb565b6111a1906001600160401b031682613601565b9050836060015180156111c857506111bf60608b0160408c0161356f565b63ffffffff1615155b156112d157604084015163ffffffff16614e20025a6112056111ee6101408e018e613650565b6020601f909101819004026101a00160041b919050565b63ffffffff9081168801919091036201d4c00181168087525f91839161122e9183919061252b16565b0390505f61124260608e0160408f0161356f565b63ffffffff168d602001602081019061125b91906133cb565b6001600160401b031683028161127357611273613699565b0490505f48830290505f6112b78f602001602081019061129391906133cb565b6001600160401b0316848410156112af5784840160011c6112b1565b845b90612540565b958690039590506112cb33826188b8612554565b50505050505b6112f9816188b86112e96101008e0160e08f01613226565b6001600160a01b03169190612554565b6113038388612316565b827f8580f507761043ecdd2bdca084d6fb0109150b3d9842d854d34e3dea6d69387d8b86604051611335929190613831565b60405180910390a2505050505061134c6001611fe2565b935093915050565b5f600261136360c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670100000000000000000000000000000000011630036113b45760405162461bcd60e51b8152600401610a6b90613885565b7f00000000000000000000000001670100000000000000000000000000000000016001600160a01b03166113e6612597565b6001600160a01b03161461140c5760405162461bcd60e51b8152600401610a6b906138d1565b611415816125b2565b604080515f80825260208201909252611430918391906125ba565b50565b5f61143f848484612724565b90505b9392505050565b611451612776565b61145b335f612806565b565b6001600160a01b037f00000000000000000000000001670100000000000000000000000000000000011630036114a55760405162461bcd60e51b8152600401610a6b90613885565b7f00000000000000000000000001670100000000000000000000000000000000016001600160a01b03166114d7612597565b6001600160a01b0316146114fd5760405162461bcd60e51b8152600401610a6b906138d1565b611506826125b2565b611512828260016125ba565b5050565b5f306001600160a01b037f000000000000000000000000016701000000000000000000000000000000000116146115b55760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610a6b565b505f516020613aeb5f395f51905f525b90565b5f466115da60a08601608087016133cb565b6001600160401b0316146115ef57505f611442565b61143f61160d6d7369676e616c5f7365727669636560901b5f611d67565b61161c6106656105fe88613564565b61162c60e0880160c089016133cb565b86866128b3565b5f4661164560a08401608085016133cb565b6001600160401b03161461165a57505f919050565b6116756d7369676e616c5f7365727669636560901b5f611d67565b6001600160a01b03166332676bc6306116906105fe86613564565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381865afa1580156116d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116fb919061391d565b92915050565b6117096123d3565b61145b5f612935565b60655433906001600160a01b031681146117805760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610a6b565b61143081612935565b5f6116fb620c35006101a06020601f8601819004020160041b613938565b806001600160a01b0381166117cf5760405163538ba4f960e01b815260040160405180910390fd5b6040516317066a5760e21b81523060048201526001600160a01b03831690635c19a95c906024015f604051808303815f87803b15801561180d575f5ffd5b505af115801561181f573d5f5f3e3d5ffd5b505050505050565b61182f61294e565b61145b336001612806565b5f611843612597565b905090565b5f5f61185f836562726964676560d01b6001611433565b6001600160a01b038116151594909350915050565b61188460e0820160c083016133cb565b46816001600160401b0316146118ad57604051631c6c777560e31b815260040160405180910390fd5b6118bd60a08301608084016133cb565b6001600160401b03811615806118db575046816001600160401b0316145b156118f957604051631c6c777560e31b815260040160405180910390fd5b61190d60c954610100900460ff1660021490565b1561192b5760405163bae6e2a960e01b815260040160405180910390fd5b600261193960c95460ff1690565b60ff160361195a5760405163dfc60d8560e01b815260040160405180910390fd5b6119646002611fe2565b611975610100840160e08501613226565b6001600160a01b0316336001600160a01b0316146119a6576040516372b6e1c360e11b815260040160405180910390fd5b5f6119b36105fe85613564565b90506119c0816001611ff8565b6119cb816003612316565b6119e66d7369676e616c5f7365727669636560901b5f611d67565b60405163019b28af60e61b81526003831860048201526001600160a01b0391909116906366ca2bc0906024016020604051808303815f875af1158015611a2e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a529190613588565b5050611a5e6001611fe2565b505050565b611a7360a08401608085016133cb565b46816001600160401b031614611a9c57604051631c6c777560e31b815260040160405180910390fd5b611aac60e0850160c086016133cb565b6001600160401b0381161580611aca575046816001600160401b0316145b15611ae857604051631c6c777560e31b815260040160405180910390fd5b611afc60c954610100900460ff1660021490565b15611b1a5760405163bae6e2a960e01b815260040160405180910390fd5b6002611b2860c95460ff1690565b60ff1603611b495760405163dfc60d8560e01b815260040160405180910390fd5b611b536002611fe2565b5f611b606105fe87613564565b9050611b6c815f611ff8565b5f611b886d7369676e616c5f7365727669636560901b5f611d67565b604051631933b5e360e11b8152306004820152602481018490529091506001600160a01b038216906332676bc690604401602060405180830381865afa158015611bd4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bf8919061391d565b611c155760405163ab035ad560e01b815260040160405180910390fd5b611c348160038418611c2d60e08b0160c08c016133cb565b8989612480565b50611c40826004612316565b611c4e87610120013561204a565b611c6b576040516335856fbd60e21b815260040160405180910390fd5b611c9462bc399d60e11b611c8560808a0160608b01613226565b6001600160a01b0316906129bf565b15611d3857611cb38230611cae60a08b0160808c016133cb565b612a4c565b611cc36080880160608901613226565b6001600160a01b0316630178733a88610120013589856040518463ffffffff1660e01b8152600401611cf6929190613954565b5f604051808303818588803b158015611d0d575f5ffd5b505af1158015611d1f573d5f5f3e3d5ffd5b5050505050611d335f195f1b5f1980612a4c565b611d54565b611d546101208801356188b86112e960c08b0160a08c01613226565b5050611d606001611fe2565b5050505050565b5f611442468484612724565b5f46611d8560e0860160c087016133cb565b6001600160401b031614611d9a57505f611442565b61143f611db86d7369676e616c5f7365727669636560901b5f611d67565b611dc46105fe87613564565b61162c60a08801608089016133cb565b5f81604051602001611de69190613975565b604051602081830303815290604052805190602001209050919050565b604080516060810182525f8082526020820181905291810191909152611e7a604080516060810182525f8082526020820181905291810191909152506040805160608101825260fd54815260fe546001600160a01b0381166020830152600160a01b90046001600160401b03169181019190915290565b80519091501580611e8c575080515f19145b156115c557604051635ceed17360e01b815260040160405180910390fd5b5f54610100900460ff1615808015611ec857505f54600160ff909116105b80611ee15750303b158015611ee157505f5460ff166001145b611efd5760405162461bcd60e51b8152600401610a6b9061359f565b5f805460ff191660011790558015611f1e575f805461ff0019166101001790555b611f288383612aa1565b8015611a5e575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b611f796123d3565b606580546001600160a01b0383166001600160a01b03199091168117909155611faa6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b80600481111561200a5761200a6131af565b5f83815260fc602052604090205460ff16600481111561202c5761202c6131af565b14611512576040516319d893ad60e21b815260040160405180910390fd5b5f5f6120676c38bab7ba30afb6b0b730b3b2b960991b6001611d67565b90506001600160a01b0381166120805750600192915050565b6040516315c638fb60e31b81525f6004820152602481018490526001600160a01b0382169063ae31c7d8906044015f604051808303815f87803b1580156120c5575f5ffd5b505af19250505080156120d6575060015b6120e257505f92915050565b50600192915050565b5f806120ff61012085016101008601613226565b6001600160a01b031603612115575060016116fb565b3061212861012085016101008601613226565b6001600160a01b03160361213e575060016116fb565b6001600160a01b03821661215a61012085016101008601613226565b6001600160a01b031603612170575060016116fb565b6004612180610140850185613650565b9050101580156121b75750637f07c94760e01b6121a1610140850185613650565b6121aa916139ab565b6001600160e01b03191614155b801561144257506114426121d361012085016101008601613226565b6001600160a01b03163b151590565b5f6001600160a01b03851661220a57604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b5f306122316080870160608801613226565b6001600160a01b031603612247576122476139e3565b825f0361225557505f61230e565b612279846122696080880160608901613226565b611cae60a0890160808a016133cb565b5f61228c61012087016101008801613226565b90506101208601355f6122a3610140890189613650565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92018290525084519495509384935083925090506020850186888cf194505a905085156122fd576122fd8188612adb565b6123095f198080612a4c565b505050505b949350505050565b806004811115612328576123286131af565b5f83815260fc602052604090205460ff16600481111561234a5761234a6131af565b03612368576040516319d893ad60e21b815260040160405180910390fd5b5f82815260fc60205260409020805482919060ff19166001836004811115612392576123926131af565b0217905550817f6c51882bc2ed67617f77a1e9b9a25d2caad8448647ecb093b357a603b2575634826040516123c79190613258565b60405180910390a25050565b6033546001600160a01b0316331461145b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a6b565b5f80612447612440610140850185613650565b9050611789565b63ffffffff16905080612478612463606086016040870161356f565b63ffffffff168361252b90919063ffffffff16565b039392505050565b5f856001600160a01b031663910af6ed856124a5876562726964676560d01b5f611433565b8887876040518663ffffffff1660e01b81526004016124c89594939291906139f7565b6020604051808303815f875af1925050508015612502575060408051601f3d908101601f191682019092526124ff91810190613588565b60015b61251f576040516314504c7360e31b815260040160405180910390fd5b90505b95945050505050565b5f8183116125395781611442565b5090919050565b5f81831161254e5782611442565b50919050565b815f0361256057505050565b61257a83838360405180602001604052805f8152506121e2565b611a5e57604051634c67134d60e11b815260040160405180910390fd5b5f516020613aeb5f395f51905f52546001600160a01b031690565b6114306123d3565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156125ed57611a5e83612aef565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612647575060408051601f3d908101601f1916820190925261264491810190613588565b60015b6126aa5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610a6b565b5f516020613aeb5f395f51905f5281146127185760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610a6b565b50611a5e838383612b8a565b5f61272f8484612bae565b90508115801561274657506001600160a01b038116155b1561144257604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610a6b565b61278a60c954610100900460ff1660021490565b6127a75760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6033546001600160a01b038381169116148061284e57506128396d636861696e5f7761746368646f6760901b6001611d67565b6001600160a01b0316826001600160a01b0316145b15612857575050565b808015612891575061287c6e6272696467655f7761746368646f6760881b6001611d67565b6001600160a01b0316826001600160a01b0316145b1561289a575050565b604051630d85cccf60e11b815260040160405180910390fd5b5f856001600160a01b031663ce9d0820856128d8876562726964676560d01b5f611433565b8887876040518663ffffffff1660e01b81526004016128fb9594939291906139f7565b5f6040518083038186803b158015612911575f5ffd5b505afa925050508015612922575060015b61292d57505f612522565b506001612522565b606580546001600160a01b031916905561143081612c50565b61296260c954610100900460ff1660021490565b156129805760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016127fc565b5f6001600160a01b0383163b6129d657505f6116fb565b6040516301ffc9a760e01b81526001600160e01b0319831660048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa925050508015612a40575060408051601f3d908101601f19168201909252612a3d9181019061391d565b60015b156116fb579392505050565b604080516060810182528481526001600160a01b03909316602084018190526001600160401b03909216920182905260fd9290925560fe8054600160a01b9092026001600160e01b0319909216909217179055565b806001600160a01b038116612ac95760405163538ba4f960e01b815260040160405180910390fd5b612ad283612ca1565b611a5e82612cff565b612ae6603f82613a38565b82101561151257fe5b6001600160a01b0381163b612b5c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610a6b565b5f516020613aeb5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b612b9383612d6f565b5f82511180612b9f5750805b15611a5e57610a218383612dae565b6097545f906001600160a01b031680612bda57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015612c2c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061230e9190613a57565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16612cc75760405162461bcd60e51b8152600401610a6b90613a72565b612ccf612dd3565b612ced6001600160a01b03821615612ce75781612935565b33612935565b5060c9805461ff001916610100179055565b5f54610100900460ff16612d255760405162461bcd60e51b8152600401610a6b90613a72565b6001600160401b03461115612d4d5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b612d7881612aef565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606114428383604051806060016040528060278152602001613b0b60279139612df9565b5f54610100900460ff1661145b5760405162461bcd60e51b8152600401610a6b90613a72565b60605f5f856001600160a01b031685604051612e159190613abd565b5f60405180830381855af49150503d805f8114612e4d576040519150601f19603f3d011682016040523d82523d5f602084013e612e52565b606091505b5091509150612e6386838387612e6d565b9695505050505050565b60608315612edb5782515f03612ed4576001600160a01b0385163b612ed45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610a6b565b508161230e565b61230e8383815115612ef05781518083602001fd5b8060405162461bcd60e51b8152600401610a6b9190613ad8565b5f610160828403121561254e575f5ffd5b8015158114611430575f5ffd5b5f5f60408385031215612f39575f5ffd5b82356001600160401b03811115612f4e575f5ffd5b612f5a85828601612f0a565b9250506020830135612f6b81612f1b565b809150509250929050565b5f60208284031215612f86575f5ffd5b81356001600160401b03811115612f9b575f5ffd5b61230e84828501612f0a565b5f5b83811015612fc1578181015183820152602001612fa9565b50505f910152565b5f8151808452612fe0816020860160208601612fa7565b601f01601f19169290920160200192915050565b80516001600160401b031682525f602082015161301c60208501826001600160401b03169052565b506040820151613034604085018263ffffffff169052565b50606082015161304f60608501826001600160a01b03169052565b50608082015161306a60808501826001600160401b03169052565b5060a082015161308560a08501826001600160a01b03169052565b5060c08201516130a060c08501826001600160401b03169052565b5060e08201516130bb60e08501826001600160a01b03169052565b506101008201516130d86101008501826001600160a01b03169052565b5061012082015161012084015261014082015161016061014085015261230e610160850182612fc9565b828152604060208201525f61143f6040830184612ff4565b5f5f5f6040848603121561312c575f5ffd5b83356001600160401b03811115613141575f5ffd5b61314d86828701612f0a565b93505060208401356001600160401b03811115613168575f5ffd5b8401601f81018613613178575f5ffd5b80356001600160401b0381111561318d575f5ffd5b86602082840101111561319e575f5ffd5b939660209190910195509293505050565b634e487b7160e01b5f52602160045260245ffd5b600581106131d3576131d36131af565b9052565b604081016131e582856131c3565b600483106131f5576131f56131af565b8260208301529392505050565b6001600160a01b0381168114611430575f5ffd5b803561322181613202565b919050565b5f60208284031215613236575f5ffd5b813561144281613202565b5f60208284031215613251575f5ffd5b5035919050565b602081016116fb82846131c3565b80356001600160401b0381168114613221575f5ffd5b5f5f5f6060848603121561328e575f5ffd5b61329784613266565b92506020840135915060408401356132ae81612f1b565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405161016081016001600160401b03811182821017156132f0576132f06132b9565b60405290565b5f82601f830112613305575f5ffd5b81356001600160401b0381111561331e5761331e6132b9565b604051601f8201601f19908116603f011681016001600160401b038111828210171561334c5761334c6132b9565b604052818152838201602001851015613363575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215613390575f5ffd5b823561339b81613202565b915060208301356001600160401b038111156133b5575f5ffd5b6133c1858286016132f6565b9150509250929050565b5f602082840312156133db575f5ffd5b61144282613266565b5f5f604083850312156133f5575f5ffd5b823591506020830135612f6b81612f1b565b803563ffffffff81168114613221575f5ffd5b5f610160828403121561342b575f5ffd5b6134336132cd565b905061343e82613266565b815261344c60208301613266565b602082015261345d60408301613407565b604082015261346e60608301613216565b606082015261347f60808301613266565b608082015261349060a08301613216565b60a08201526134a160c08301613266565b60c08201526134b260e08301613216565b60e08201526134c46101008301613216565b61010082015261012082810135908201526101408201356001600160401b038111156134ee575f5ffd5b6134fa848285016132f6565b6101408301525092915050565b5f60208284031215613517575f5ffd5b81356001600160401b0381111561352c575f5ffd5b61230e8482850161341a565b5f5f60408385031215613549575f5ffd5b823561355481613202565b91506020830135612f6b81613202565b5f6116fb368361341a565b5f6020828403121561357f575f5ffd5b61144282613407565b5f60208284031215613598575f5ffd5b5051919050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156116fb576116fb6135ed565b5f6001600160401b0382166001600160401b038103613635576136356135ed565b60010192915050565b602081525f6114426020830184612ff4565b5f5f8335601e19843603018112613665575f5ffd5b8301803591506001600160401b0382111561367e575f5ffd5b602001915036819003821315613692575f5ffd5b9250929050565b634e487b7160e01b5f52601260045260245ffd5b5f5f8335601e198436030181126136c2575f5ffd5b83016020810192503590506001600160401b038111156136e0575f5ffd5b803603821315613692575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6137308261372383613266565b6001600160401b03169052565b5f61373d60208301613266565b6001600160401b0316602084015261375760408301613407565b63ffffffff16604084015261376e60608301613216565b6001600160a01b0316606084015261378860808301613266565b6001600160401b031660808401526137a260a08301613216565b6001600160a01b031660a08401526137bc60c08301613266565b6001600160401b031660c08401526137d660e08301613216565b6001600160a01b031660e08401526137f16101008301613216565b6001600160a01b031661010084015261012082810135908401526138196101408301836136ad565b610160610140860152612522610160860182846136ee565b60a081525f61384360a0830185613716565b905063ffffffff835116602083015263ffffffff602084015116604083015263ffffffff60408401511660608301526060830151151560808301529392505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f6020828403121561392d575f5ffd5b815161144281612f1b565b63ffffffff81811683821601908111156116fb576116fb6135ed565b604081525f6139666040830185613716565b90508260208301529392505050565b60408152600d60408201526c5441494b4f5f4d45535341474560981b6060820152608060208201525f6114426080830184612ff4565b80356001600160e01b031981169060048410156139dc576001600160e01b0319600485900360031b81901b82161691505b5092915050565b634e487b7160e01b5f52600160045260245ffd5b6001600160401b038616815260018060a01b0385166020820152836040820152608060608201525f613a2d6080830184866136ee565b979650505050505050565b5f82613a5257634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215613a67575f5ffd5b815161144281613202565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f8251613ace818460208701612fa7565b9190910192915050565b602081525f6114426020830184612fc956fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220fe7f47dabd46879b9404e8d06f7ee77f2c51d0391f21575037dda2b3e15ccfb164736f6c634300081b0033", "balance": "0x0" }, - "0x1670000000000000000000000000000000000001": { + "0x1670100000000000000000000000000000000001": { "contractName": "Bridge", "storage": { "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", - "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670000000000000000000000000000000000006", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000000001" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670100000000000000000000000000000000006", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167010000000000000000000000000000000001" }, "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", "balance": "0x033b2dc55cae685664a00000" }, - "0x0167000000000000000000000000000000000002": { + "0x0167010000000000000000000000000000000002": { "contractName": "ERC20VaultImpl", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f" }, - "code": "0x6080604052600436106101ba575f3560e01c806367090ccf116100f25780639aa8605c11610092578063e07baba611610062578063e07baba6146104e3578063e30c397814610520578063f09a40161461053d578063f2fde38b1461055c575f5ffd5b80639aa8605c1461045e578063a86f9d9e1461048e578063b84d9ffe146104ad578063d56ad7ac146104cd575f5ffd5b80637f07c947116100cd5780637f07c947146104065780638456cb59146104195780638abf60771461042d5780638da5cb5b14610441575f5ffd5b806367090ccf1461039e578063715018a6146103de57806379ba5097146103f2575f5ffd5b80633659cfe61161015d5780633f4ba83a116101385780633f4ba83a146103435780634f1ef2861461035757806352d1902d1461036a5780635c975abb1461037e575f5ffd5b80633659cfe6146102e65780633ab76e9f146103055780633eb6b8cf14610324575f5ffd5b806306fdde031161019857806306fdde031461024c5780630e7eeb791461026c5780630ecd8be91461029b5780633075db56146102d2575f5ffd5b80630178733a146101be57806301ffc9a7146101d3578063066fe7b414610207575b5f5ffd5b6101d16101cc36600461330a565b61057b565b005b3480156101de575f5ffd5b506101f26101ed366004613350565b610709565b60405190151581526020015b60405180910390f35b348015610212575f5ffd5b5061023e61022136600461338b565b61013060209081525f928352604080842090915290825290205481565b6040519081526020016101fe565b348015610257575f5ffd5b506a195c98cc8c17dd985d5b1d60aa1b61023e565b348015610277575f5ffd5b506101f26102863660046133b9565b61012f6020525f908152604090205460ff1681565b3480156102a6575f5ffd5b506102ba6102b53660046133d4565b610759565b6040516001600160a01b0390911681526020016101fe565b3480156102dd575f5ffd5b506101f2610e67565b3480156102f1575f5ffd5b506101d16103003660046133b9565b610e7f565b348015610310575f5ffd5b506097546102ba906001600160a01b031681565b34801561032f575f5ffd5b506102ba61033e36600461343c565b610f4f565b34801561034e575f5ffd5b506101d1610f65565b6101d1610365366004613584565b610f79565b348015610375575f5ffd5b5061023e61102e565b348015610389575f5ffd5b506101f260c954610100900460ff1660021490565b3480156103a9575f5ffd5b506102ba6103b836600461338b565b61012e60209081525f92835260408084209091529082529020546001600160a01b031681565b3480156103e9575f5ffd5b506101d16110df565b3480156103fd575f5ffd5b506101d16110f0565b6101d16104143660046135d0565b611167565b348015610424575f5ffd5b506101d16112b7565b348015610438575f5ffd5b506102ba6112ca565b34801561044c575f5ffd5b506033546001600160a01b03166102ba565b348015610469575f5ffd5b5061047d6104783660046133b9565b6112d8565b6040516101fe959493929190613689565b348015610499575f5ffd5b506102ba6104a83660046136e2565b61142d565b6104c06104bb366004613705565b611439565b6040516101fe919061371e565b3480156104d8575f5ffd5b5061023e6276a70081565b3480156104ee575f5ffd5b5060c954610508906201000090046001600160401b031681565b6040516001600160401b0390911681526020016101fe565b34801561052b575f5ffd5b506065546001600160a01b03166102ba565b348015610548575f5ffd5b506101d161055736600461380e565b61187c565b348015610567575f5ffd5b506101d16105763660046133b9565b61198b565b61058f60c954610100900460ff1660021490565b156105ad5760405163bae6e2a960e01b815260040160405180910390fd5b60026105bb60c95460ff1690565b60ff16036105dc5760405163dfc60d8560e01b815260040160405180910390fd5b6105e660026119fc565b6105ee611a12565b505f6105fe61014084018461382a565b61060c916004908290613873565b810190610619919061389a565b90505f5f828060200190518101906106319190613946565b9350505091505f610655838760a001602081019061064f91906133b9565b84611b08565b905061067f61012087013561067060c0890160a08a016133b9565b6001600160a01b031690611bb0565b61068f60c0870160a088016133b9565b6001600160a01b0316857f3dea0f5955b148debf6212261e03bd80eaf8534bee43780452d16637dcc22dd5856020015184866040516106ef939291906001600160a01b039384168152919092166020820152604081019190915260600190565b60405180910390a35050505061070560016119fc565b5050565b5f6001600160e01b0319821662bc399d60e11b148061073857506001600160e01b03198216637f07c94760e01b145b8061075357506001600160e01b031982166301ffc9a760e01b145b92915050565b5f610762611bbb565b600261077060c95460ff1690565b60ff16036107915760405163dfc60d8560e01b815260040160405180910390fd5b61079b60026119fc565b6001600160a01b03821615806107d157506001600160a01b038281165f90815261012d6020526040902054600160401b90041615155b806107e457506001600160a01b0382163b155b156108025760405163dc63f98760e01b815260040160405180910390fd5b5f61081360408501602086016133b9565b6001600160a01b0316148061083c5750466108316020850185613a3a565b6001600160401b0316145b1561085a57604051638257f7f560e01b815260040160405180910390fd5b6001600160a01b0382165f90815261012f602052604090205460ff1615610894576040516375c42fc160e01b815260040160405180910390fd5b5f610130816108a66020870187613a3a565b6001600160401b031681526020019081526020015f205f8560200160208101906108d091906133b9565b6001600160a01b0316815260208101919091526040015f205490506108f86276a70082613a69565b4210156109185760405163231d35fb60e11b815260040160405180910390fd5b61012e5f6109296020870187613a3a565b6001600160401b031681526020019081526020015f205f85602001602081019061095391906133b9565b6001600160a01b03908116825260208201929092526040015f20541691508115610cb9576001600160a01b038281165f90815261012d60209081526040808320815160a08101835281546001600160401b0381168252600160401b810490961693810193909352600160e01b90940460ff1690820152600183018054929391926060840191906109e290613a7c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0e90613a7c565b8015610a595780601f10610a3057610100808354040283529160200191610a59565b820191905f5260205f20905b815481529060010190602001808311610a3c57829003601f168201915b50505050508152602001600282018054610a7290613a7c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9e90613a7c565b8015610ae95780601f10610ac057610100808354040283529160200191610ae9565b820191905f5260205f20905b815481529060010190602001808311610acc57829003601f168201915b505050505081525050905080604051602001610b059190613b13565b6040516020818303038152906040528051906020012085604051602001610b2c9190613b99565b6040516020818303038152906040528051906020012014610b6057604051632f9d1d7b60e11b815260040160405180910390fd5b6001600160a01b0383165f90815261012d6020526040812080546001600160e81b031916815590610b9460018301826132b2565b610ba1600283015f6132b2565b50506001600160a01b0383165f81815261012f60205260409020805460ff19166001179055610bd79063b8f2e0c560e01b611c15565b8015610bf85750610bf86001600160a01b03851663b8f2e0c560e01b611c15565b15610cb75760405163b8f2e0c560e01b81526001600160a01b0385811660048301525f602483015284169063b8f2e0c5906044015f604051808303815f87803b158015610c43575f5ffd5b505af1158015610c55573d5f5f3e3d5ffd5b505060405163b8f2e0c560e01b81526001600160a01b038681166004830152600160248301528716925063b8f2e0c591506044015f604051808303815f87803b158015610ca0575f5ffd5b505af1158015610cb2573d5f5f3e3d5ffd5b505050505b505b6001600160a01b0383165f90815261012d602052604090208490610cdd8282613d3c565b5083905061012e5f610cf26020880188613a3a565b6001600160401b031681526020019081526020015f205f866020016020810190610d1c91906133b9565b6001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550426101305f865f016020810190610d759190613a3a565b6001600160401b031681526020019081526020015f205f866020016020810190610d9f91906133b9565b6001600160a01b03166001600160a01b031681526020019081526020015f2081905550836020016020810190610dd591906133b9565b6001600160a01b0316610deb6020860186613a3a565b6001600160401b03167f031d68e1805917560c34a5f55a7dd91bef98f911190ed02cdbb53caedae6c39d8486610e2460608a018a61382a565b610e3160808c018c61382a565b610e4160608e0160408f01613dfa565b604051610e549796959493929190613e15565b60405180910390a35061075360016119fc565b5f6002610e7660c95460ff1690565b60ff1614905090565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000000002163003610ed05760405162461bcd60e51b8152600401610ec790613e6c565b60405180910390fd5b7f00000000000000000000000001670000000000000000000000000000000000026001600160a01b0316610f02611ca2565b6001600160a01b031614610f285760405162461bcd60e51b8152600401610ec790613eb8565b610f3181611cbd565b604080515f80825260208201909252610f4c91839190611cc5565b50565b5f610f5b848484611e2f565b90505b9392505050565b610f6d611e81565b610f77335f611f11565b565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000000002163003610fc15760405162461bcd60e51b8152600401610ec790613e6c565b7f00000000000000000000000001670000000000000000000000000000000000026001600160a01b0316610ff3611ca2565b6001600160a01b0316146110195760405162461bcd60e51b8152600401610ec790613eb8565b61102282611cbd565b61070582826001611cc5565b5f306001600160a01b037f000000000000000000000000016700000000000000000000000000000000000216146110cd5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610ec7565b505f5160206149985f395f51905f5290565b6110e7611bbb565b610f775f611f19565b60655433906001600160a01b0316811461115e5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610ec7565b610f4c81611f19565b61117b60c954610100900460ff1660021490565b156111995760405163bae6e2a960e01b815260040160405180910390fd5b60026111a760c95460ff1690565b60ff16036111c85760405163dfc60d8560e01b815260040160405180910390fd5b6111d260026119fc565b5f8080806111e285870187613f0f565b93509350935093505f6111f3611f32565b90506111fe83612051565b5f61120a868585611b08565b905061121f6001600160a01b03851634611bb0565b836001600160a01b0316856001600160a01b0316835f01517f75a051823424fc80e92556c41cb0ad977ae1dcb09c68a9c38acab86b11a69f8985604001518a60200151868960405161129f94939291906001600160401b039490941684526001600160a01b03928316602085015291166040830152606082015260800190565b60405180910390a450505050505061070560016119fc565b6112bf61208d565b610f77336001611f11565b5f6112d3611ca2565b905090565b61012d6020525f9081526040902080546001820180546001600160401b03831693600160401b84046001600160a01b031693600160e01b900460ff1692909161132090613a7c565b80601f016020809104026020016040519081016040528092919081815260200182805461134c90613a7c565b80156113975780601f1061136e57610100808354040283529160200191611397565b820191905f5260205f20905b81548152906001019060200180831161137a57829003601f168201915b5050505050908060020180546113ac90613a7c565b80601f01602080910402602001604051908101604052809291908181526020018280546113d890613a7c565b80156114235780601f106113fa57610100808354040283529160200191611423565b820191905f5260205f20905b81548152906001019060200180831161140657829003601f168201915b5050505050905085565b5f610f5e468484611e2f565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201929092526101408101919091526114a760c954610100900460ff1660021490565b156114c55760405163bae6e2a960e01b815260040160405180910390fd5b60026114d360c95460ff1690565b60ff16036114f45760405163dfc60d8560e01b815260040160405180910390fd5b6114fe60026119fc565b8160c001355f0361152257604051634299323b60e11b815260040160405180910390fd5b5f61153360a08401608085016133b9565b6001600160a01b03160361155a576040516303f8a7d360e01b815260040160405180910390fd5b61012f5f61156e60a08501608086016133b9565b6001600160a01b0316815260208101919091526040015f205460ff16156115a8576040516375c42fc160e01b815260040160405180910390fd5b6115b86080830160608401613a3a565b6001600160401b03163410156115e157604051630178ce0b60e31b815260040160405180910390fd5b5f5f5f6115ed856120fe565b6040805161016081019091525f8082529396509194509250602081016116196080890160608a01613a3a565b6001600160401b0316815260200161163760c0890160a08a01614014565b63ffffffff1681525f6020808301829052604083019190915233606083015260809091019061166890890189613a3a565b6001600160401b031681526020015f6001600160a01b031688602001602081019061169391906133b9565b6001600160a01b0316036116a757336116b7565b6116b76040890160208a016133b9565b6001600160a01b031681526020908101906116ee906116d8908a018a613a3a565b6a195c98cc8c17dd985d5b1d60aa1b5b5f610f4f565b6001600160a01b0316815260200161170c6080890160608a01613a3a565b61171f906001600160401b03163461402f565b815260200185905290505f61173d6562726964676560d01b8261142d565b6001600160a01b0316631bdb003734846040518363ffffffff1660e01b8152600401611769919061371e565b5f6040518083038185885af1158015611784573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d908101601f191682016040526117ac919081019061404d565b965090506117c060608801604089016133b9565b6001600160a01b03168660a001516001600160a01b0316827f256f5c87f6ab8d238ac244067613227eb6e2cd65299121135d4f778e8581e03d875f01518b5f01602081019061180f9190613a3a565b89602001518d608001602081019061182791906133b9565b604080516001600160401b0395861681529390941660208401526001600160a01b03918216838501521660608201526080810189905290519081900360a00190a4505050505061187760016119fc565b919050565b5f54610100900460ff161580801561189a57505f54600160ff909116105b806118b35750303b1580156118b357505f5460ff166001145b6119165760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ec7565b5f805460ff191660011790558015611937575f805461ff0019166101001790555b6119418383612598565b8015611986575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b611993611bbb565b606580546001600160a01b0383166001600160a01b031990911681179091556119c46033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611a4381600161142d565b6001600160a01b0316336001600160a01b031614611a7457604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611ab0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ad4919061416d565b60208101519092506001600160a01b03163314611b0457604051632583296b60e01b815260040160405180910390fd5b5090565b5f46845f01516001600160401b031603611b3b57506020830151611b366001600160a01b03821684846125d2565b611ba6565b611b4484612635565b6040516340c10f1960e01b81526001600160a01b03858116600483015260248201859052919250908216906340c10f19906044015f604051808303815f87803b158015611b8f575f5ffd5b505af1158015611ba1573d5f5f3e3d5ffd5b505050505b610f5e8183612677565b61070582825a612706565b6033546001600160a01b03163314610f775760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ec7565b5f6001600160a01b0383163b611c2c57505f610753565b6040516301ffc9a760e01b81526001600160e01b0319831660048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa925050508015611c96575060408051601f3d908101601f19168201909252611c93918101906141d5565b60015b15610753579392505050565b5f5160206149985f395f51905f52546001600160a01b031690565b610f4c611bbb565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611cf85761198683612749565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611d52575060408051601f3d908101601f19168201909252611d4f918101906141f0565b60015b611db55760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610ec7565b5f5160206149985f395f51905f528114611e235760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610ec7565b506119868383836127e4565b5f611e3a848461280e565b905081158015611e5157506001600160a01b038116155b15610f5e57604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610ec7565b611e9560c954610100900460ff1660021490565b611eb25760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610705611bbb565b606580546001600160a01b0319169055610f4c816128b8565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611f6381600161142d565b6001600160a01b0316336001600160a01b031614611f9457604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611fd0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff4919061416d565b91505f61201483604001516116e86a195c98cc8c17dd985d5b1d60aa1b90565b9050806001600160a01b031683602001516001600160a01b03161461204c57604051632583296b60e01b815260040160405180910390fd5b505090565b6001600160a01b038116158061206f57506001600160a01b03811630145b15610f4c57604051635b50f3f960e01b815260040160405180910390fd5b6120a160c954610100900460ff1660021490565b156120bf5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611f07565b6040805160a0810182525f8082526020820181905291810191909152606081810181905260808201819052905f8061012d8161214060a08801608089016133b9565b6001600160a01b03908116825260208201929092526040015f208054909250600160401b90041615612376576040805160a08101825282546001600160401b0381168252600160401b81046001600160a01b03166020830152600160e01b900460ff1691810191909152600182018054839160608401916121c090613a7c565b80601f01602080910402602001604051908101604052809291908181526020018280546121ec90613a7c565b80156122375780601f1061220e57610100808354040283529160200191612237565b820191905f5260205f20905b81548152906001019060200180831161221a57829003601f168201915b5050505050815260200160028201805461225090613a7c565b80601f016020809104026020016040519081016040528092919081815260200182805461227c90613a7c565b80156122c75780601f1061229e576101008083540402835291602001916122c7565b820191905f5260205f20905b8154815290600101906020018083116122aa57829003601f168201915b505050505081525050925061230033308760c001358860800160208101906122ef91906133b9565b6001600160a01b0316929190612909565b61231060a08601608087016133b9565b604051630852cd8d60e31b815260c087013560048201526001600160a01b0391909116906342966c68906024015f604051808303815f87803b158015612354575f5ffd5b505af1158015612366573d5f5f3e3d5ffd5b505050508460c001359150612518565b6040518060a00160405280466001600160401b031681526020018660800160208101906123a391906133b9565b6001600160a01b031681526020016123c96123c460a0890160808a016133b9565b612941565b60ff1681526020016123e96123e460a0890160808a016133b9565b6129f5565b815260200161240661240160a0890160808a016133b9565b612a9f565b905292505f61241b60a08701608088016133b9565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038316906370a0823190602401602060405180830381865afa158015612462573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061248691906141f0565b90506124a16001600160a01b038316333060c08b0135612909565b6040516370a0823160e01b815230600482015281906001600160a01b038416906370a0823190602401602060405180830381865afa1580156124e5573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061250991906141f0565b612513919061402f565b935050505b30637f07c947843361253060608a0160408b016133b9565b866040516020016125449493929190614207565b60408051601f19818403018152908290526125619160240161423c565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050509350509193909250565b806001600160a01b0381166125c05760405163538ba4f960e01b815260040160405180910390fd5b6125c983612ae5565b61198682612b43565b6040516001600160a01b03831660248201526044810182905261198690849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612bb3565b80516001600160401b03165f90815261012e60209081526040808320828501516001600160a01b03908116855292529091205416806118775761075382612c86565b5f6126936c38bab7ba30afb6b0b730b3b2b960991b600161142d565b90506001600160a01b03811615611986576040516315c638fb60e31b81526001600160a01b0384811660048301526024820184905282169063ae31c7d8906044015f604051808303815f87803b1580156126eb575f5ffd5b505af11580156126fd573d5f5f3e3d5ffd5b50505050505050565b815f0361271257505050565b61272c83838360405180602001604052805f815250612e88565b61198657604051634c67134d60e11b815260040160405180910390fd5b6001600160a01b0381163b6127b65760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610ec7565b5f5160206149985f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b6127ed83612ec5565b5f825111806127f95750805b15611986576128088383612f04565b50505050565b6097545f906001600160a01b03168061283a57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa15801561288c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128b0919061424e565b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6040516001600160a01b03808516602483015283166044820152606481018290526128089085906323b872dd60e01b906084016125fe565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f91829182916001600160a01b038616916129869190614269565b5f60405180830381855afa9150503d805f81146129be576040519150601f19603f3d011682016040523d82523d5f602084013e6129c3565b606091505b50915091508180156129d6575080516020145b6129e15760126128b0565b808060200190518101906128b09190614284565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516060915f9182916001600160a01b03861691612a3b9190614269565b5f60405180830381855afa9150503d805f8114612a73576040519150601f19603f3d011682016040523d82523d5f602084013e612a78565b606091505b509150915081612a965760405180602001604052805f8152506128b0565b6128b081612f29565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516060915f9182916001600160a01b03861691612a3b9190614269565b5f54610100900460ff16612b0b5760405162461bcd60e51b8152600401610ec79061429f565b612b13613096565b612b316001600160a01b03821615612b2b5781611f19565b33611f19565b5060c9805461ff001916610100179055565b5f54610100900460ff16612b695760405162461bcd60e51b8152600401610ec79061429f565b6001600160401b03461115612b915760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f612c07826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166130bc9092919063ffffffff16565b905080515f1480612c27575080806020019051810190612c2791906141d5565b6119865760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610ec7565b5f5f612c9a6033546001600160a01b031690565b60975460208501518551604080880151606089015160808a01519251612cd097966001600160a01b0316959493906024016142ea565b60408051601f198184030181529190526020810180516001600160e01b031663bb86ef9360e01b1790529050612d166c0627269646765645f657263323609c1b5f61142d565b81604051612d23906132e9565b612d2e929190614355565b604051809103905ff080158015612d47573d5f5f3e3d5ffd5b506001600160a01b038082165f90815261012d602090815260409182902087518154928901519389015160ff16600160e01b0260ff60e01b1994909516600160401b026001600160e01b03199093166001600160401b03909116179190911791909116919091178155606085015191935084916001820190612dc99082614378565b5060808201516002820190612dde9082614378565b505083516001600160401b039081165f90815261012e6020908152604080832082890180516001600160a01b039081168652919093529281902080546001600160a01b0319168885169081179091559151885160608a015160808b0151848c01519451959850929095169516937fb6b427556e8cb0ebf9175da4bc48c64c4f56e44cfaf8c3ab5ebf8e2ea130907993612e7a9391929190614432565b60405180910390a450919050565b5f6001600160a01b038516612eb057604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b612ece81612749565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610f5e83836040518060600160405280602781526020016149b8602791396130ca565b60606040825110612f485781806020019051810190610753919061446a565b8151602003613083575f5b60208160ff16108015612f885750828160ff1681518110612f7657612f7661449b565b01602001516001600160f81b03191615155b15612f9f5780612f97816144af565b915050612f53565b5f8160ff166001600160401b03811115612fbb57612fbb61347b565b6040519080825280601f01601f191660200182016040528015612fe5576020820181803683370190505b5090505f91505b60208260ff161080156130215750838260ff168151811061300f5761300f61449b565b01602001516001600160f81b03191615155b15610f5e57838260ff168151811061303b5761303b61449b565b602001015160f81c60f81b818360ff168151811061305b5761305b61449b565b60200101906001600160f81b03191690815f1a9053508161307b816144af565b925050612fec565b505060408051602081019091525f815290565b5f54610100900460ff16610f775760405162461bcd60e51b8152600401610ec79061429f565b6060610f5b84845f8561313e565b60605f5f856001600160a01b0316856040516130e69190614269565b5f60405180830381855af49150503d805f811461311e576040519150601f19603f3d011682016040523d82523d5f602084013e613123565b606091505b509150915061313486838387613215565b9695505050505050565b60608247101561319f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610ec7565b5f5f866001600160a01b031685876040516131ba9190614269565b5f6040518083038185875af1925050503d805f81146131f4576040519150601f19603f3d011682016040523d82523d5f602084013e6131f9565b606091505b509150915061320a87838387613215565b979650505050505050565b606083156132835782515f0361327c576001600160a01b0385163b61327c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ec7565b50816128b0565b6128b083838151156132985781518083602001fd5b8060405162461bcd60e51b8152600401610ec7919061423c565b5080546132be90613a7c565b5f825580601f106132cd575050565b601f0160209004905f5260205f2090810190610f4c91906132f6565b6104ca806144ce83390190565b5b80821115611b04575f81556001016132f7565b5f5f6040838503121561331b575f5ffd5b82356001600160401b03811115613330575f5ffd5b83016101608186031215613342575f5ffd5b946020939093013593505050565b5f60208284031215613360575f5ffd5b81356001600160e01b031981168114610f5e575f5ffd5b6001600160a01b0381168114610f4c575f5ffd5b5f5f6040838503121561339c575f5ffd5b8235915060208301356133ae81613377565b809150509250929050565b5f602082840312156133c9575f5ffd5b8135610f5e81613377565b5f5f604083850312156133e5575f5ffd5b82356001600160401b038111156133fa575f5ffd5b830160a0818603121561340b575f5ffd5b915060208301356133ae81613377565b6001600160401b0381168114610f4c575f5ffd5b8015158114610f4c575f5ffd5b5f5f5f6060848603121561344e575f5ffd5b83356134598161341b565b92506020840135915060408401356134708161342f565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405160a081016001600160401b03811182821017156134b1576134b161347b565b60405290565b60405161016081016001600160401b03811182821017156134b1576134b161347b565b604051601f8201601f191681016001600160401b03811182821017156135025761350261347b565b604052919050565b5f6001600160401b038211156135225761352261347b565b50601f01601f191660200190565b5f82601f83011261353f575f5ffd5b8135602083015f6135576135528461350a565b6134da565b905082815285838301111561356a575f5ffd5b828260208301375f92810160200192909252509392505050565b5f5f60408385031215613595575f5ffd5b82356135a081613377565b915060208301356001600160401b038111156135ba575f5ffd5b6135c685828601613530565b9150509250929050565b5f5f602083850312156135e1575f5ffd5b82356001600160401b038111156135f6575f5ffd5b8301601f81018513613606575f5ffd5b80356001600160401b0381111561361b575f5ffd5b85602082840101111561362c575f5ffd5b6020919091019590945092505050565b5f5b8381101561365657818101518382015260200161363e565b50505f910152565b5f815180845261367581602086016020860161363c565b601f01601f19169290920160200192915050565b6001600160401b03861681526001600160a01b038516602082015260ff8416604082015260a0606082018190525f906136c49083018561365e565b82810360808401526136d6818561365e565b98975050505050505050565b5f5f604083850312156136f3575f5ffd5b8235915060208301356133ae8161342f565b5f60e0828403128015613716575f5ffd5b509092915050565b602081526137386020820183516001600160401b03169052565b5f602083015161375360408401826001600160401b03169052565b50604083015163ffffffff811660608401525060608301516001600160a01b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160401b03811660e08401525060e08301516001600160a01b038116610100840152506101008301516001600160a01b03811661012084015250610120830151610140830152610140830151610160808401526128b061018084018261365e565b5f5f6040838503121561381f575f5ffd5b823561340b81613377565b5f5f8335601e1984360301811261383f575f5ffd5b8301803591506001600160401b03821115613858575f5ffd5b60200191503681900382131561386c575f5ffd5b9250929050565b5f5f85851115613881575f5ffd5b8386111561388d575f5ffd5b5050820193919092039150565b5f602082840312156138aa575f5ffd5b81356001600160401b038111156138bf575f5ffd5b6128b084828501613530565b80516118778161341b565b805161187781613377565b60ff81168114610f4c575f5ffd5b8051611877816138e1565b5f82601f830112613909575f5ffd5b8151602083015f61391c6135528461350a565b905082815285838301111561392f575f5ffd5b61393d83602083018461363c565b95945050505050565b5f5f5f5f60808587031215613959575f5ffd5b84516001600160401b0381111561396e575f5ffd5b850160a0818803121561397f575f5ffd5b61398761348f565b81516139928161341b565b815260208201516139a281613377565b60208201526139b3604083016138ef565b604082015260608201516001600160401b038111156139d0575f5ffd5b6139dc898285016138fa565b60608301525060808201516001600160401b038111156139fa575f5ffd5b613a06898285016138fa565b6080830152509450613a1c9050602086016138d6565b9250613a2a604086016138d6565b6060959095015193969295505050565b5f60208284031215613a4a575f5ffd5b8135610f5e8161341b565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561075357610753613a55565b600181811c90821680613a9057607f821691505b602082108103613aae57634e487b7160e01b5f52602260045260245ffd5b50919050565b6001600160401b03815116825260018060a01b03602082015116602083015260ff60408201511660408301525f606082015160a06060850152613afa60a085018261365e565b90506080830151848203608086015261393d828261365e565b602081525f610f5e6020830184613ab4565b8035611877816138e1565b5f5f8335601e19843603018112613b45575f5ffd5b83016020810192503590506001600160401b03811115613b63575f5ffd5b80360382131561386c575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f8235613ba98161341b565b6001600160401b0381166020840152506020830135613bc781613377565b6001600160a01b0316604083810191909152830135613be5816138e1565b60ff8116606084015250613bfc6060840184613b30565b60a06080850152613c1160c085018284613b71565b915050613c216080850185613b30565b848303601f190160a0860152613134838284613b71565b601f82111561198657805f5260205f20601f840160051c81016020851015613c5d5750805b601f840160051c820191505b81811015613c7c575f8155600101613c69565b5050505050565b6001600160401b03831115613c9a57613c9a61347b565b613cae83613ca88354613a7c565b83613c38565b5f601f841160018114613cdf575f8515613cc85750838201355b5f19600387901b1c1916600186901b178355613c7c565b5f83815260208120601f198716915b82811015613d0e5786850135825560209485019460019092019101613cee565b5086821015613d2a575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b8135613d478161341b565b6001600160401b03811690508154816001600160401b031982161783556020840135613d7281613377565b6001600160e01b031991909116909117604091821b68010000000000000000600160e01b03161782555f90830135613da9816138e1565b825460ff60e01b191660e09190911b60ff60e01b1617825550613dcf606083018361382a565b613ddd818360018601613c83565b5050613dec608083018361382a565b612808818360028601613c83565b5f60208284031215613e0a575f5ffd5b8135610f5e816138e1565b6001600160a01b0388811682528716602082015260a0604082018190525f90613e419083018789613b71565b8281036060840152613e54818688613b71565b91505060ff8316608083015298975050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b803561187781613377565b5f5f5f5f60808587031215613f22575f5ffd5b84356001600160401b03811115613f37575f5ffd5b850160a08188031215613f48575f5ffd5b613f5061348f565b8135613f5b8161341b565b81526020820135613f6b81613377565b6020820152613f7c60408301613b25565b604082015260608201356001600160401b03811115613f99575f5ffd5b613fa589828501613530565b60608301525060808201356001600160401b03811115613fc3575f5ffd5b613fcf89828501613530565b6080830152509450613fe5905060208601613f04565b9250613ff360408601613f04565b9396929550929360600135925050565b63ffffffff81168114610f4c575f5ffd5b5f60208284031215614024575f5ffd5b8135610f5e81614003565b8181038181111561075357610753613a55565b805161187781614003565b5f5f6040838503121561405e575f5ffd5b825160208401519092506001600160401b0381111561407b575f5ffd5b8301610160818603121561408d575f5ffd5b6140956134b7565b61409e826138cb565b81526140ac602083016138cb565b60208201526140bd60408301614042565b60408201526140ce606083016138d6565b60608201526140df608083016138cb565b60808201526140f060a083016138d6565b60a082015261410160c083016138cb565b60c082015261411260e083016138d6565b60e082015261412461010083016138d6565b61010082015261012082810151908201526101408201516001600160401b0381111561414e575f5ffd5b61415a878285016138fa565b6101408301525080925050509250929050565b5f606082840312801561417e575f5ffd5b50604051606081016001600160401b03811182821017156141a1576141a161347b565b6040528251815260208301516141b681613377565b602082015260408301516141c98161341b565b60408201529392505050565b5f602082840312156141e5575f5ffd5b8151610f5e8161342f565b5f60208284031215614200575f5ffd5b5051919050565b608081525f6142196080830187613ab4565b6001600160a01b0395861660208401529390941660408201526060015292915050565b602081525f610f5e602083018461365e565b5f6020828403121561425e575f5ffd5b8151610f5e81613377565b5f825161427a81846020870161363c565b9190910192915050565b5f60208284031215614294575f5ffd5b8151610f5e816138e1565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0388811682528781166020830152861660408201526001600160401b038516606082015260ff8416608082015260e060a082018190525f906143359083018561365e565b82810360c0840152614347818561365e565b9a9950505050505050505050565b6001600160a01b03831681526040602082018190525f90610f5b9083018461365e565b81516001600160401b038111156143915761439161347b565b6143a58161439f8454613a7c565b84613c38565b6020601f8211600181146143d7575f83156143c05750848201515b5f19600385901b1c1916600184901b178455613c7c565b5f84815260208120601f198516915b8281101561440657878501518255602094850194600190920191016143e6565b508482101561442357868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b606081525f614444606083018661365e565b8281036020840152614456818661365e565b91505060ff83166040830152949350505050565b5f6020828403121561447a575f5ffd5b81516001600160401b0381111561448f575f5ffd5b6128b0848285016138fa565b634e487b7160e01b5f52603260045260245ffd5b5f60ff821660ff81036144c4576144c4613a55565b6001019291505056fe60806040526040516104ca3803806104ca833981016040819052610022916102d2565b61002d82825f610034565b50506103ed565b61003d8361005f565b5f825111806100495750805b1561005a57610058838361009e565b505b505050565b610068816100ca565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606100c383836040518060600160405280602781526020016104a36027913961017d565b9392505050565b6001600160a01b0381163b61013c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f856001600160a01b03168560405161019991906103a0565b5f60405180830381855af49150503d805f81146101d1576040519150601f19603f3d011682016040523d82523d5f602084013e6101d6565b606091505b5090925090506101e8868383876101f2565b9695505050505050565b606083156102605782515f03610259576001600160a01b0385163b6102595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610133565b508161026a565b61026a8383610272565b949350505050565b8151156102825781518083602001fd5b8060405162461bcd60e51b815260040161013391906103bb565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156102ca5781810151838201526020016102b2565b50505f910152565b5f5f604083850312156102e3575f5ffd5b82516001600160a01b03811681146102f9575f5ffd5b60208401519092506001600160401b03811115610314575f5ffd5b8301601f81018513610324575f5ffd5b80516001600160401b0381111561033d5761033d61029c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561036b5761036b61029c565b604052818152828201602001871015610382575f5ffd5b6103938260208301602086016102b0565b8093505050509250929050565b5f82516103b18184602087016102b0565b9190910192915050565b602081525f82518060208401526103d98160408501602087016102b0565b601f01601f19169190910160400192915050565b60aa806103f95f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b8d385d4f2d6cc75f0553b0f75a9defc23ce602bcb05516f25f5e40cac657bef64736f6c634300081b0033", + "code": "0x6080604052600436106101ba575f3560e01c806367090ccf116100f25780639aa8605c11610092578063e07baba611610062578063e07baba6146104e3578063e30c397814610520578063f09a40161461053d578063f2fde38b1461055c575f5ffd5b80639aa8605c1461045e578063a86f9d9e1461048e578063b84d9ffe146104ad578063d56ad7ac146104cd575f5ffd5b80637f07c947116100cd5780637f07c947146104065780638456cb59146104195780638abf60771461042d5780638da5cb5b14610441575f5ffd5b806367090ccf1461039e578063715018a6146103de57806379ba5097146103f2575f5ffd5b80633659cfe61161015d5780633f4ba83a116101385780633f4ba83a146103435780634f1ef2861461035757806352d1902d1461036a5780635c975abb1461037e575f5ffd5b80633659cfe6146102e65780633ab76e9f146103055780633eb6b8cf14610324575f5ffd5b806306fdde031161019857806306fdde031461024c5780630e7eeb791461026c5780630ecd8be91461029b5780633075db56146102d2575f5ffd5b80630178733a146101be57806301ffc9a7146101d3578063066fe7b414610207575b5f5ffd5b6101d16101cc36600461330a565b61057b565b005b3480156101de575f5ffd5b506101f26101ed366004613350565b610709565b60405190151581526020015b60405180910390f35b348015610212575f5ffd5b5061023e61022136600461338b565b61013060209081525f928352604080842090915290825290205481565b6040519081526020016101fe565b348015610257575f5ffd5b506a195c98cc8c17dd985d5b1d60aa1b61023e565b348015610277575f5ffd5b506101f26102863660046133b9565b61012f6020525f908152604090205460ff1681565b3480156102a6575f5ffd5b506102ba6102b53660046133d4565b610759565b6040516001600160a01b0390911681526020016101fe565b3480156102dd575f5ffd5b506101f2610e67565b3480156102f1575f5ffd5b506101d16103003660046133b9565b610e7f565b348015610310575f5ffd5b506097546102ba906001600160a01b031681565b34801561032f575f5ffd5b506102ba61033e36600461343c565b610f4f565b34801561034e575f5ffd5b506101d1610f65565b6101d1610365366004613584565b610f79565b348015610375575f5ffd5b5061023e61102e565b348015610389575f5ffd5b506101f260c954610100900460ff1660021490565b3480156103a9575f5ffd5b506102ba6103b836600461338b565b61012e60209081525f92835260408084209091529082529020546001600160a01b031681565b3480156103e9575f5ffd5b506101d16110df565b3480156103fd575f5ffd5b506101d16110f0565b6101d16104143660046135d0565b611167565b348015610424575f5ffd5b506101d16112b7565b348015610438575f5ffd5b506102ba6112ca565b34801561044c575f5ffd5b506033546001600160a01b03166102ba565b348015610469575f5ffd5b5061047d6104783660046133b9565b6112d8565b6040516101fe959493929190613689565b348015610499575f5ffd5b506102ba6104a83660046136e2565b61142d565b6104c06104bb366004613705565b611439565b6040516101fe919061371e565b3480156104d8575f5ffd5b5061023e6276a70081565b3480156104ee575f5ffd5b5060c954610508906201000090046001600160401b031681565b6040516001600160401b0390911681526020016101fe565b34801561052b575f5ffd5b506065546001600160a01b03166102ba565b348015610548575f5ffd5b506101d161055736600461380e565b61187c565b348015610567575f5ffd5b506101d16105763660046133b9565b61198b565b61058f60c954610100900460ff1660021490565b156105ad5760405163bae6e2a960e01b815260040160405180910390fd5b60026105bb60c95460ff1690565b60ff16036105dc5760405163dfc60d8560e01b815260040160405180910390fd5b6105e660026119fc565b6105ee611a12565b505f6105fe61014084018461382a565b61060c916004908290613873565b810190610619919061389a565b90505f5f828060200190518101906106319190613946565b9350505091505f610655838760a001602081019061064f91906133b9565b84611b08565b905061067f61012087013561067060c0890160a08a016133b9565b6001600160a01b031690611bb0565b61068f60c0870160a088016133b9565b6001600160a01b0316857f3dea0f5955b148debf6212261e03bd80eaf8534bee43780452d16637dcc22dd5856020015184866040516106ef939291906001600160a01b039384168152919092166020820152604081019190915260600190565b60405180910390a35050505061070560016119fc565b5050565b5f6001600160e01b0319821662bc399d60e11b148061073857506001600160e01b03198216637f07c94760e01b145b8061075357506001600160e01b031982166301ffc9a760e01b145b92915050565b5f610762611bbb565b600261077060c95460ff1690565b60ff16036107915760405163dfc60d8560e01b815260040160405180910390fd5b61079b60026119fc565b6001600160a01b03821615806107d157506001600160a01b038281165f90815261012d6020526040902054600160401b90041615155b806107e457506001600160a01b0382163b155b156108025760405163dc63f98760e01b815260040160405180910390fd5b5f61081360408501602086016133b9565b6001600160a01b0316148061083c5750466108316020850185613a3a565b6001600160401b0316145b1561085a57604051638257f7f560e01b815260040160405180910390fd5b6001600160a01b0382165f90815261012f602052604090205460ff1615610894576040516375c42fc160e01b815260040160405180910390fd5b5f610130816108a66020870187613a3a565b6001600160401b031681526020019081526020015f205f8560200160208101906108d091906133b9565b6001600160a01b0316815260208101919091526040015f205490506108f86276a70082613a69565b4210156109185760405163231d35fb60e11b815260040160405180910390fd5b61012e5f6109296020870187613a3a565b6001600160401b031681526020019081526020015f205f85602001602081019061095391906133b9565b6001600160a01b03908116825260208201929092526040015f20541691508115610cb9576001600160a01b038281165f90815261012d60209081526040808320815160a08101835281546001600160401b0381168252600160401b810490961693810193909352600160e01b90940460ff1690820152600183018054929391926060840191906109e290613a7c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0e90613a7c565b8015610a595780601f10610a3057610100808354040283529160200191610a59565b820191905f5260205f20905b815481529060010190602001808311610a3c57829003601f168201915b50505050508152602001600282018054610a7290613a7c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9e90613a7c565b8015610ae95780601f10610ac057610100808354040283529160200191610ae9565b820191905f5260205f20905b815481529060010190602001808311610acc57829003601f168201915b505050505081525050905080604051602001610b059190613b13565b6040516020818303038152906040528051906020012085604051602001610b2c9190613b99565b6040516020818303038152906040528051906020012014610b6057604051632f9d1d7b60e11b815260040160405180910390fd5b6001600160a01b0383165f90815261012d6020526040812080546001600160e81b031916815590610b9460018301826132b2565b610ba1600283015f6132b2565b50506001600160a01b0383165f81815261012f60205260409020805460ff19166001179055610bd79063b8f2e0c560e01b611c15565b8015610bf85750610bf86001600160a01b03851663b8f2e0c560e01b611c15565b15610cb75760405163b8f2e0c560e01b81526001600160a01b0385811660048301525f602483015284169063b8f2e0c5906044015f604051808303815f87803b158015610c43575f5ffd5b505af1158015610c55573d5f5f3e3d5ffd5b505060405163b8f2e0c560e01b81526001600160a01b038681166004830152600160248301528716925063b8f2e0c591506044015f604051808303815f87803b158015610ca0575f5ffd5b505af1158015610cb2573d5f5f3e3d5ffd5b505050505b505b6001600160a01b0383165f90815261012d602052604090208490610cdd8282613d3c565b5083905061012e5f610cf26020880188613a3a565b6001600160401b031681526020019081526020015f205f866020016020810190610d1c91906133b9565b6001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550426101305f865f016020810190610d759190613a3a565b6001600160401b031681526020019081526020015f205f866020016020810190610d9f91906133b9565b6001600160a01b03166001600160a01b031681526020019081526020015f2081905550836020016020810190610dd591906133b9565b6001600160a01b0316610deb6020860186613a3a565b6001600160401b03167f031d68e1805917560c34a5f55a7dd91bef98f911190ed02cdbb53caedae6c39d8486610e2460608a018a61382a565b610e3160808c018c61382a565b610e4160608e0160408f01613dfa565b604051610e549796959493929190613e15565b60405180910390a35061075360016119fc565b5f6002610e7660c95460ff1690565b60ff1614905090565b6001600160a01b037f0000000000000000000000000167010000000000000000000000000000000002163003610ed05760405162461bcd60e51b8152600401610ec790613e6c565b60405180910390fd5b7f00000000000000000000000001670100000000000000000000000000000000026001600160a01b0316610f02611ca2565b6001600160a01b031614610f285760405162461bcd60e51b8152600401610ec790613eb8565b610f3181611cbd565b604080515f80825260208201909252610f4c91839190611cc5565b50565b5f610f5b848484611e2f565b90505b9392505050565b610f6d611e81565b610f77335f611f11565b565b6001600160a01b037f0000000000000000000000000167010000000000000000000000000000000002163003610fc15760405162461bcd60e51b8152600401610ec790613e6c565b7f00000000000000000000000001670100000000000000000000000000000000026001600160a01b0316610ff3611ca2565b6001600160a01b0316146110195760405162461bcd60e51b8152600401610ec790613eb8565b61102282611cbd565b61070582826001611cc5565b5f306001600160a01b037f000000000000000000000000016701000000000000000000000000000000000216146110cd5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610ec7565b505f5160206149985f395f51905f5290565b6110e7611bbb565b610f775f611f19565b60655433906001600160a01b0316811461115e5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610ec7565b610f4c81611f19565b61117b60c954610100900460ff1660021490565b156111995760405163bae6e2a960e01b815260040160405180910390fd5b60026111a760c95460ff1690565b60ff16036111c85760405163dfc60d8560e01b815260040160405180910390fd5b6111d260026119fc565b5f8080806111e285870187613f0f565b93509350935093505f6111f3611f32565b90506111fe83612051565b5f61120a868585611b08565b905061121f6001600160a01b03851634611bb0565b836001600160a01b0316856001600160a01b0316835f01517f75a051823424fc80e92556c41cb0ad977ae1dcb09c68a9c38acab86b11a69f8985604001518a60200151868960405161129f94939291906001600160401b039490941684526001600160a01b03928316602085015291166040830152606082015260800190565b60405180910390a450505050505061070560016119fc565b6112bf61208d565b610f77336001611f11565b5f6112d3611ca2565b905090565b61012d6020525f9081526040902080546001820180546001600160401b03831693600160401b84046001600160a01b031693600160e01b900460ff1692909161132090613a7c565b80601f016020809104026020016040519081016040528092919081815260200182805461134c90613a7c565b80156113975780601f1061136e57610100808354040283529160200191611397565b820191905f5260205f20905b81548152906001019060200180831161137a57829003601f168201915b5050505050908060020180546113ac90613a7c565b80601f01602080910402602001604051908101604052809291908181526020018280546113d890613a7c565b80156114235780601f106113fa57610100808354040283529160200191611423565b820191905f5260205f20905b81548152906001019060200180831161140657829003601f168201915b5050505050905085565b5f610f5e468484611e2f565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201929092526101408101919091526114a760c954610100900460ff1660021490565b156114c55760405163bae6e2a960e01b815260040160405180910390fd5b60026114d360c95460ff1690565b60ff16036114f45760405163dfc60d8560e01b815260040160405180910390fd5b6114fe60026119fc565b8160c001355f0361152257604051634299323b60e11b815260040160405180910390fd5b5f61153360a08401608085016133b9565b6001600160a01b03160361155a576040516303f8a7d360e01b815260040160405180910390fd5b61012f5f61156e60a08501608086016133b9565b6001600160a01b0316815260208101919091526040015f205460ff16156115a8576040516375c42fc160e01b815260040160405180910390fd5b6115b86080830160608401613a3a565b6001600160401b03163410156115e157604051630178ce0b60e31b815260040160405180910390fd5b5f5f5f6115ed856120fe565b6040805161016081019091525f8082529396509194509250602081016116196080890160608a01613a3a565b6001600160401b0316815260200161163760c0890160a08a01614014565b63ffffffff1681525f6020808301829052604083019190915233606083015260809091019061166890890189613a3a565b6001600160401b031681526020015f6001600160a01b031688602001602081019061169391906133b9565b6001600160a01b0316036116a757336116b7565b6116b76040890160208a016133b9565b6001600160a01b031681526020908101906116ee906116d8908a018a613a3a565b6a195c98cc8c17dd985d5b1d60aa1b5b5f610f4f565b6001600160a01b0316815260200161170c6080890160608a01613a3a565b61171f906001600160401b03163461402f565b815260200185905290505f61173d6562726964676560d01b8261142d565b6001600160a01b0316631bdb003734846040518363ffffffff1660e01b8152600401611769919061371e565b5f6040518083038185885af1158015611784573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d908101601f191682016040526117ac919081019061404d565b965090506117c060608801604089016133b9565b6001600160a01b03168660a001516001600160a01b0316827f256f5c87f6ab8d238ac244067613227eb6e2cd65299121135d4f778e8581e03d875f01518b5f01602081019061180f9190613a3a565b89602001518d608001602081019061182791906133b9565b604080516001600160401b0395861681529390941660208401526001600160a01b03918216838501521660608201526080810189905290519081900360a00190a4505050505061187760016119fc565b919050565b5f54610100900460ff161580801561189a57505f54600160ff909116105b806118b35750303b1580156118b357505f5460ff166001145b6119165760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ec7565b5f805460ff191660011790558015611937575f805461ff0019166101001790555b6119418383612598565b8015611986575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b611993611bbb565b606580546001600160a01b0383166001600160a01b031990911681179091556119c46033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611a4381600161142d565b6001600160a01b0316336001600160a01b031614611a7457604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611ab0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ad4919061416d565b60208101519092506001600160a01b03163314611b0457604051632583296b60e01b815260040160405180910390fd5b5090565b5f46845f01516001600160401b031603611b3b57506020830151611b366001600160a01b03821684846125d2565b611ba6565b611b4484612635565b6040516340c10f1960e01b81526001600160a01b03858116600483015260248201859052919250908216906340c10f19906044015f604051808303815f87803b158015611b8f575f5ffd5b505af1158015611ba1573d5f5f3e3d5ffd5b505050505b610f5e8183612677565b61070582825a612706565b6033546001600160a01b03163314610f775760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ec7565b5f6001600160a01b0383163b611c2c57505f610753565b6040516301ffc9a760e01b81526001600160e01b0319831660048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa925050508015611c96575060408051601f3d908101601f19168201909252611c93918101906141d5565b60015b15610753579392505050565b5f5160206149985f395f51905f52546001600160a01b031690565b610f4c611bbb565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611cf85761198683612749565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611d52575060408051601f3d908101601f19168201909252611d4f918101906141f0565b60015b611db55760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610ec7565b5f5160206149985f395f51905f528114611e235760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610ec7565b506119868383836127e4565b5f611e3a848461280e565b905081158015611e5157506001600160a01b038116155b15610f5e57604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610ec7565b611e9560c954610100900460ff1660021490565b611eb25760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610705611bbb565b606580546001600160a01b0319169055610f4c816128b8565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611f6381600161142d565b6001600160a01b0316336001600160a01b031614611f9457604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611fd0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ff4919061416d565b91505f61201483604001516116e86a195c98cc8c17dd985d5b1d60aa1b90565b9050806001600160a01b031683602001516001600160a01b03161461204c57604051632583296b60e01b815260040160405180910390fd5b505090565b6001600160a01b038116158061206f57506001600160a01b03811630145b15610f4c57604051635b50f3f960e01b815260040160405180910390fd5b6120a160c954610100900460ff1660021490565b156120bf5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611f07565b6040805160a0810182525f8082526020820181905291810191909152606081810181905260808201819052905f8061012d8161214060a08801608089016133b9565b6001600160a01b03908116825260208201929092526040015f208054909250600160401b90041615612376576040805160a08101825282546001600160401b0381168252600160401b81046001600160a01b03166020830152600160e01b900460ff1691810191909152600182018054839160608401916121c090613a7c565b80601f01602080910402602001604051908101604052809291908181526020018280546121ec90613a7c565b80156122375780601f1061220e57610100808354040283529160200191612237565b820191905f5260205f20905b81548152906001019060200180831161221a57829003601f168201915b5050505050815260200160028201805461225090613a7c565b80601f016020809104026020016040519081016040528092919081815260200182805461227c90613a7c565b80156122c75780601f1061229e576101008083540402835291602001916122c7565b820191905f5260205f20905b8154815290600101906020018083116122aa57829003601f168201915b505050505081525050925061230033308760c001358860800160208101906122ef91906133b9565b6001600160a01b0316929190612909565b61231060a08601608087016133b9565b604051630852cd8d60e31b815260c087013560048201526001600160a01b0391909116906342966c68906024015f604051808303815f87803b158015612354575f5ffd5b505af1158015612366573d5f5f3e3d5ffd5b505050508460c001359150612518565b6040518060a00160405280466001600160401b031681526020018660800160208101906123a391906133b9565b6001600160a01b031681526020016123c96123c460a0890160808a016133b9565b612941565b60ff1681526020016123e96123e460a0890160808a016133b9565b6129f5565b815260200161240661240160a0890160808a016133b9565b612a9f565b905292505f61241b60a08701608088016133b9565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038316906370a0823190602401602060405180830381865afa158015612462573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061248691906141f0565b90506124a16001600160a01b038316333060c08b0135612909565b6040516370a0823160e01b815230600482015281906001600160a01b038416906370a0823190602401602060405180830381865afa1580156124e5573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061250991906141f0565b612513919061402f565b935050505b30637f07c947843361253060608a0160408b016133b9565b866040516020016125449493929190614207565b60408051601f19818403018152908290526125619160240161423c565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050509350509193909250565b806001600160a01b0381166125c05760405163538ba4f960e01b815260040160405180910390fd5b6125c983612ae5565b61198682612b43565b6040516001600160a01b03831660248201526044810182905261198690849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612bb3565b80516001600160401b03165f90815261012e60209081526040808320828501516001600160a01b03908116855292529091205416806118775761075382612c86565b5f6126936c38bab7ba30afb6b0b730b3b2b960991b600161142d565b90506001600160a01b03811615611986576040516315c638fb60e31b81526001600160a01b0384811660048301526024820184905282169063ae31c7d8906044015f604051808303815f87803b1580156126eb575f5ffd5b505af11580156126fd573d5f5f3e3d5ffd5b50505050505050565b815f0361271257505050565b61272c83838360405180602001604052805f815250612e88565b61198657604051634c67134d60e11b815260040160405180910390fd5b6001600160a01b0381163b6127b65760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610ec7565b5f5160206149985f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b6127ed83612ec5565b5f825111806127f95750805b15611986576128088383612f04565b50505050565b6097545f906001600160a01b03168061283a57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa15801561288c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128b0919061424e565b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6040516001600160a01b03808516602483015283166044820152606481018290526128089085906323b872dd60e01b906084016125fe565b60408051600481526024810182526020810180516001600160e01b031663313ce56760e01b17905290515f91829182916001600160a01b038616916129869190614269565b5f60405180830381855afa9150503d805f81146129be576040519150601f19603f3d011682016040523d82523d5f602084013e6129c3565b606091505b50915091508180156129d6575080516020145b6129e15760126128b0565b808060200190518101906128b09190614284565b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516060915f9182916001600160a01b03861691612a3b9190614269565b5f60405180830381855afa9150503d805f8114612a73576040519150601f19603f3d011682016040523d82523d5f602084013e612a78565b606091505b509150915081612a965760405180602001604052805f8152506128b0565b6128b081612f29565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516060915f9182916001600160a01b03861691612a3b9190614269565b5f54610100900460ff16612b0b5760405162461bcd60e51b8152600401610ec79061429f565b612b13613096565b612b316001600160a01b03821615612b2b5781611f19565b33611f19565b5060c9805461ff001916610100179055565b5f54610100900460ff16612b695760405162461bcd60e51b8152600401610ec79061429f565b6001600160401b03461115612b915760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f612c07826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166130bc9092919063ffffffff16565b905080515f1480612c27575080806020019051810190612c2791906141d5565b6119865760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610ec7565b5f5f612c9a6033546001600160a01b031690565b60975460208501518551604080880151606089015160808a01519251612cd097966001600160a01b0316959493906024016142ea565b60408051601f198184030181529190526020810180516001600160e01b031663bb86ef9360e01b1790529050612d166c0627269646765645f657263323609c1b5f61142d565b81604051612d23906132e9565b612d2e929190614355565b604051809103905ff080158015612d47573d5f5f3e3d5ffd5b506001600160a01b038082165f90815261012d602090815260409182902087518154928901519389015160ff16600160e01b0260ff60e01b1994909516600160401b026001600160e01b03199093166001600160401b03909116179190911791909116919091178155606085015191935084916001820190612dc99082614378565b5060808201516002820190612dde9082614378565b505083516001600160401b039081165f90815261012e6020908152604080832082890180516001600160a01b039081168652919093529281902080546001600160a01b0319168885169081179091559151885160608a015160808b0151848c01519451959850929095169516937fb6b427556e8cb0ebf9175da4bc48c64c4f56e44cfaf8c3ab5ebf8e2ea130907993612e7a9391929190614432565b60405180910390a450919050565b5f6001600160a01b038516612eb057604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b612ece81612749565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610f5e83836040518060600160405280602781526020016149b8602791396130ca565b60606040825110612f485781806020019051810190610753919061446a565b8151602003613083575f5b60208160ff16108015612f885750828160ff1681518110612f7657612f7661449b565b01602001516001600160f81b03191615155b15612f9f5780612f97816144af565b915050612f53565b5f8160ff166001600160401b03811115612fbb57612fbb61347b565b6040519080825280601f01601f191660200182016040528015612fe5576020820181803683370190505b5090505f91505b60208260ff161080156130215750838260ff168151811061300f5761300f61449b565b01602001516001600160f81b03191615155b15610f5e57838260ff168151811061303b5761303b61449b565b602001015160f81c60f81b818360ff168151811061305b5761305b61449b565b60200101906001600160f81b03191690815f1a9053508161307b816144af565b925050612fec565b505060408051602081019091525f815290565b5f54610100900460ff16610f775760405162461bcd60e51b8152600401610ec79061429f565b6060610f5b84845f8561313e565b60605f5f856001600160a01b0316856040516130e69190614269565b5f60405180830381855af49150503d805f811461311e576040519150601f19603f3d011682016040523d82523d5f602084013e613123565b606091505b509150915061313486838387613215565b9695505050505050565b60608247101561319f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610ec7565b5f5f866001600160a01b031685876040516131ba9190614269565b5f6040518083038185875af1925050503d805f81146131f4576040519150601f19603f3d011682016040523d82523d5f602084013e6131f9565b606091505b509150915061320a87838387613215565b979650505050505050565b606083156132835782515f0361327c576001600160a01b0385163b61327c5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ec7565b50816128b0565b6128b083838151156132985781518083602001fd5b8060405162461bcd60e51b8152600401610ec7919061423c565b5080546132be90613a7c565b5f825580601f106132cd575050565b601f0160209004905f5260205f2090810190610f4c91906132f6565b6104ca806144ce83390190565b5b80821115611b04575f81556001016132f7565b5f5f6040838503121561331b575f5ffd5b82356001600160401b03811115613330575f5ffd5b83016101608186031215613342575f5ffd5b946020939093013593505050565b5f60208284031215613360575f5ffd5b81356001600160e01b031981168114610f5e575f5ffd5b6001600160a01b0381168114610f4c575f5ffd5b5f5f6040838503121561339c575f5ffd5b8235915060208301356133ae81613377565b809150509250929050565b5f602082840312156133c9575f5ffd5b8135610f5e81613377565b5f5f604083850312156133e5575f5ffd5b82356001600160401b038111156133fa575f5ffd5b830160a0818603121561340b575f5ffd5b915060208301356133ae81613377565b6001600160401b0381168114610f4c575f5ffd5b8015158114610f4c575f5ffd5b5f5f5f6060848603121561344e575f5ffd5b83356134598161341b565b92506020840135915060408401356134708161342f565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405160a081016001600160401b03811182821017156134b1576134b161347b565b60405290565b60405161016081016001600160401b03811182821017156134b1576134b161347b565b604051601f8201601f191681016001600160401b03811182821017156135025761350261347b565b604052919050565b5f6001600160401b038211156135225761352261347b565b50601f01601f191660200190565b5f82601f83011261353f575f5ffd5b8135602083015f6135576135528461350a565b6134da565b905082815285838301111561356a575f5ffd5b828260208301375f92810160200192909252509392505050565b5f5f60408385031215613595575f5ffd5b82356135a081613377565b915060208301356001600160401b038111156135ba575f5ffd5b6135c685828601613530565b9150509250929050565b5f5f602083850312156135e1575f5ffd5b82356001600160401b038111156135f6575f5ffd5b8301601f81018513613606575f5ffd5b80356001600160401b0381111561361b575f5ffd5b85602082840101111561362c575f5ffd5b6020919091019590945092505050565b5f5b8381101561365657818101518382015260200161363e565b50505f910152565b5f815180845261367581602086016020860161363c565b601f01601f19169290920160200192915050565b6001600160401b03861681526001600160a01b038516602082015260ff8416604082015260a0606082018190525f906136c49083018561365e565b82810360808401526136d6818561365e565b98975050505050505050565b5f5f604083850312156136f3575f5ffd5b8235915060208301356133ae8161342f565b5f60e0828403128015613716575f5ffd5b509092915050565b602081526137386020820183516001600160401b03169052565b5f602083015161375360408401826001600160401b03169052565b50604083015163ffffffff811660608401525060608301516001600160a01b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160401b03811660e08401525060e08301516001600160a01b038116610100840152506101008301516001600160a01b03811661012084015250610120830151610140830152610140830151610160808401526128b061018084018261365e565b5f5f6040838503121561381f575f5ffd5b823561340b81613377565b5f5f8335601e1984360301811261383f575f5ffd5b8301803591506001600160401b03821115613858575f5ffd5b60200191503681900382131561386c575f5ffd5b9250929050565b5f5f85851115613881575f5ffd5b8386111561388d575f5ffd5b5050820193919092039150565b5f602082840312156138aa575f5ffd5b81356001600160401b038111156138bf575f5ffd5b6128b084828501613530565b80516118778161341b565b805161187781613377565b60ff81168114610f4c575f5ffd5b8051611877816138e1565b5f82601f830112613909575f5ffd5b8151602083015f61391c6135528461350a565b905082815285838301111561392f575f5ffd5b61393d83602083018461363c565b95945050505050565b5f5f5f5f60808587031215613959575f5ffd5b84516001600160401b0381111561396e575f5ffd5b850160a0818803121561397f575f5ffd5b61398761348f565b81516139928161341b565b815260208201516139a281613377565b60208201526139b3604083016138ef565b604082015260608201516001600160401b038111156139d0575f5ffd5b6139dc898285016138fa565b60608301525060808201516001600160401b038111156139fa575f5ffd5b613a06898285016138fa565b6080830152509450613a1c9050602086016138d6565b9250613a2a604086016138d6565b6060959095015193969295505050565b5f60208284031215613a4a575f5ffd5b8135610f5e8161341b565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561075357610753613a55565b600181811c90821680613a9057607f821691505b602082108103613aae57634e487b7160e01b5f52602260045260245ffd5b50919050565b6001600160401b03815116825260018060a01b03602082015116602083015260ff60408201511660408301525f606082015160a06060850152613afa60a085018261365e565b90506080830151848203608086015261393d828261365e565b602081525f610f5e6020830184613ab4565b8035611877816138e1565b5f5f8335601e19843603018112613b45575f5ffd5b83016020810192503590506001600160401b03811115613b63575f5ffd5b80360382131561386c575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f8235613ba98161341b565b6001600160401b0381166020840152506020830135613bc781613377565b6001600160a01b0316604083810191909152830135613be5816138e1565b60ff8116606084015250613bfc6060840184613b30565b60a06080850152613c1160c085018284613b71565b915050613c216080850185613b30565b848303601f190160a0860152613134838284613b71565b601f82111561198657805f5260205f20601f840160051c81016020851015613c5d5750805b601f840160051c820191505b81811015613c7c575f8155600101613c69565b5050505050565b6001600160401b03831115613c9a57613c9a61347b565b613cae83613ca88354613a7c565b83613c38565b5f601f841160018114613cdf575f8515613cc85750838201355b5f19600387901b1c1916600186901b178355613c7c565b5f83815260208120601f198716915b82811015613d0e5786850135825560209485019460019092019101613cee565b5086821015613d2a575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b8135613d478161341b565b6001600160401b03811690508154816001600160401b031982161783556020840135613d7281613377565b6001600160e01b031991909116909117604091821b68010000000000000000600160e01b03161782555f90830135613da9816138e1565b825460ff60e01b191660e09190911b60ff60e01b1617825550613dcf606083018361382a565b613ddd818360018601613c83565b5050613dec608083018361382a565b612808818360028601613c83565b5f60208284031215613e0a575f5ffd5b8135610f5e816138e1565b6001600160a01b0388811682528716602082015260a0604082018190525f90613e419083018789613b71565b8281036060840152613e54818688613b71565b91505060ff8316608083015298975050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b803561187781613377565b5f5f5f5f60808587031215613f22575f5ffd5b84356001600160401b03811115613f37575f5ffd5b850160a08188031215613f48575f5ffd5b613f5061348f565b8135613f5b8161341b565b81526020820135613f6b81613377565b6020820152613f7c60408301613b25565b604082015260608201356001600160401b03811115613f99575f5ffd5b613fa589828501613530565b60608301525060808201356001600160401b03811115613fc3575f5ffd5b613fcf89828501613530565b6080830152509450613fe5905060208601613f04565b9250613ff360408601613f04565b9396929550929360600135925050565b63ffffffff81168114610f4c575f5ffd5b5f60208284031215614024575f5ffd5b8135610f5e81614003565b8181038181111561075357610753613a55565b805161187781614003565b5f5f6040838503121561405e575f5ffd5b825160208401519092506001600160401b0381111561407b575f5ffd5b8301610160818603121561408d575f5ffd5b6140956134b7565b61409e826138cb565b81526140ac602083016138cb565b60208201526140bd60408301614042565b60408201526140ce606083016138d6565b60608201526140df608083016138cb565b60808201526140f060a083016138d6565b60a082015261410160c083016138cb565b60c082015261411260e083016138d6565b60e082015261412461010083016138d6565b61010082015261012082810151908201526101408201516001600160401b0381111561414e575f5ffd5b61415a878285016138fa565b6101408301525080925050509250929050565b5f606082840312801561417e575f5ffd5b50604051606081016001600160401b03811182821017156141a1576141a161347b565b6040528251815260208301516141b681613377565b602082015260408301516141c98161341b565b60408201529392505050565b5f602082840312156141e5575f5ffd5b8151610f5e8161342f565b5f60208284031215614200575f5ffd5b5051919050565b608081525f6142196080830187613ab4565b6001600160a01b0395861660208401529390941660408201526060015292915050565b602081525f610f5e602083018461365e565b5f6020828403121561425e575f5ffd5b8151610f5e81613377565b5f825161427a81846020870161363c565b9190910192915050565b5f60208284031215614294575f5ffd5b8151610f5e816138e1565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0388811682528781166020830152861660408201526001600160401b038516606082015260ff8416608082015260e060a082018190525f906143359083018561365e565b82810360c0840152614347818561365e565b9a9950505050505050505050565b6001600160a01b03831681526040602082018190525f90610f5b9083018461365e565b81516001600160401b038111156143915761439161347b565b6143a58161439f8454613a7c565b84613c38565b6020601f8211600181146143d7575f83156143c05750848201515b5f19600385901b1c1916600184901b178455613c7c565b5f84815260208120601f198516915b8281101561440657878501518255602094850194600190920191016143e6565b508482101561442357868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b606081525f614444606083018661365e565b8281036020840152614456818661365e565b91505060ff83166040830152949350505050565b5f6020828403121561447a575f5ffd5b81516001600160401b0381111561448f575f5ffd5b6128b0848285016138fa565b634e487b7160e01b5f52603260045260245ffd5b5f60ff821660ff81036144c4576144c4613a55565b6001019291505056fe60806040526040516104ca3803806104ca833981016040819052610022916102d2565b61002d82825f610034565b50506103ed565b61003d8361005f565b5f825111806100495750805b1561005a57610058838361009e565b505b505050565b610068816100ca565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606100c383836040518060600160405280602781526020016104a36027913961017d565b9392505050565b6001600160a01b0381163b61013c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f856001600160a01b03168560405161019991906103a0565b5f60405180830381855af49150503d805f81146101d1576040519150601f19603f3d011682016040523d82523d5f602084013e6101d6565b606091505b5090925090506101e8868383876101f2565b9695505050505050565b606083156102605782515f03610259576001600160a01b0385163b6102595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610133565b508161026a565b61026a8383610272565b949350505050565b8151156102825781518083602001fd5b8060405162461bcd60e51b815260040161013391906103bb565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156102ca5781810151838201526020016102b2565b50505f910152565b5f5f604083850312156102e3575f5ffd5b82516001600160a01b03811681146102f9575f5ffd5b60208401519092506001600160401b03811115610314575f5ffd5b8301601f81018513610324575f5ffd5b80516001600160401b0381111561033d5761033d61029c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561036b5761036b61029c565b604052818152828201602001871015610382575f5ffd5b6103938260208301602086016102b0565b8093505050509250929050565b5f82516103b18184602087016102b0565b9190910192915050565b602081525f82518060208401526103d98160408501602087016102b0565b601f01601f19169190910160400192915050565b60aa806103f95f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b8d385d4f2d6cc75f0553b0f75a9defc23ce602bcb05516f25f5e40cac657bef64736f6c634300081b0033", "balance": "0x0" }, - "0x1670000000000000000000000000000000000002": { + "0x1670100000000000000000000000000000000002": { "contractName": "ERC20Vault", "storage": { "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000201", "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", - "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670000000000000000000000000000000000006", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000000002" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670100000000000000000000000000000000006", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167010000000000000000000000000000000002" }, "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", "balance": "0x0" }, - "0x0167000000000000000000000000000000000003": { + "0x0167010000000000000000000000000000000003": { "contractName": "ERC721VaultImpl", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f" }, - "code": "0x60806040526004361061017b575f3560e01c806367090ccf116100cd5780638da5cb5b11610087578063e07baba611610062578063e07baba614610449578063e30c397814610486578063f09a4016146104a3578063f2fde38b146104c2575f5ffd5b80638da5cb5b146103de5780639aa8605c146103fb578063a86f9d9e1461042a575f5ffd5b806367090ccf1461033b578063715018a61461037b57806379ba50971461038f5780637f07c947146103a35780638456cb59146103b65780638abf6077146103ca575f5ffd5b80633659cfe6116101385780633f4ba83a116101135780633f4ba83a146102e05780634f1ef286146102f457806352d1902d146103075780635c975abb1461031b575f5ffd5b80633659cfe61461026b5780633ab76e9f1461028a5780633eb6b8cf146102c1575f5ffd5b80630178733a1461017f57806301ffc9a71461019457806306fdde03146101c8578063150b7a02146101f35780631f59a830146102375780633075db5614610257575b5f5ffd5b61019261018d3660046128ea565b6104e1565b005b34801561019f575f5ffd5b506101b36101ae366004612930565b610694565b60405190151581526020015b60405180910390f35b3480156101d3575f5ffd5b506b195c98cdcc8c57dd985d5b1d60a21b5b6040519081526020016101bf565b3480156101fe575f5ffd5b5061021e61020d3660046129ba565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016101bf565b61024a610245366004612a27565b6106e4565b6040516101bf9190612aab565b348015610262575f5ffd5b506101b3610b6a565b348015610276575f5ffd5b50610192610285366004612b9b565b610b82565b348015610295575f5ffd5b506097546102a9906001600160a01b031681565b6040516001600160a01b0390911681526020016101bf565b3480156102cc575f5ffd5b506102a96102db366004612be2565b610c52565b3480156102eb575f5ffd5b50610192610c68565b610192610302366004612d4d565b610c7c565b348015610312575f5ffd5b506101e5610d31565b348015610326575f5ffd5b506101b360c954610100900460ff1660021490565b348015610346575f5ffd5b506102a9610355366004612d99565b61012e60209081525f92835260408084209091529082529020546001600160a01b031681565b348015610386575f5ffd5b50610192610de2565b34801561039a575f5ffd5b50610192610df3565b6101926103b1366004612dc7565b610e6a565b3480156103c1575f5ffd5b50610192610fd3565b3480156103d5575f5ffd5b506102a9610fe6565b3480156103e9575f5ffd5b506033546001600160a01b03166102a9565b348015610406575f5ffd5b5061041a610415366004612b9b565b610ff4565b6040516101bf9493929190612e05565b348015610435575f5ffd5b506102a9610444366004612e54565b61113f565b348015610454575f5ffd5b5060c95461046e906201000090046001600160401b031681565b6040516001600160401b0390911681526020016101bf565b348015610491575f5ffd5b506065546001600160a01b03166102a9565b3480156104ae575f5ffd5b506101926104bd366004612e77565b61114b565b3480156104cd575f5ffd5b506101926104dc366004612b9b565b61125a565b6104f560c954610100900460ff1660021490565b156105135760405163bae6e2a960e01b815260040160405180910390fd5b600261052160c95460ff1690565b60ff16036105425760405163dfc60d8560e01b815260040160405180910390fd5b61054c60026112cb565b6105546112e1565b505f610564610140840184612ea3565b610572916004908290612ee5565b81019061057f9190612f0c565b90505f5f828060200190518101906105979190613026565b9350505091505f6105bb838760a00160208101906105b59190612b9b565b846113d7565b90506105e56101208701356105d660c0890160a08a01612b9b565b6001600160a01b03169061154e565b6105f560c0870160a08801612b9b565b6001600160a01b0316857fe48bef18455e47bca14864ab6e82dffa29df148b051c09de95aec44ecf13598c8560200151848687516001600160401b0381111561064057610640612c21565b604051908082528060200260200182016040528015610669578160200160208202803683370190505b5060405161067a9493929190613165565b60405180910390a35050505061069060016112cb565b5050565b5f6001600160e01b0319821662bc399d60e11b14806106c357506001600160e01b03198216637f07c94760e01b145b806106de57506001600160e01b031982166301ffc9a760e01b145b92915050565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201839052610100820183905261012082019290925261014081019190915261075260c954610100900460ff1660021490565b156107705760405163bae6e2a960e01b815260040160405180910390fd5b61077982613219565b8060e00151518160c0015151146107a35760405163196e8a4160e31b815260040160405180910390fd5b60808101516001600160a01b03166107ce576040516303f8a7d360e01b815260040160405180910390fd5b60026107dc60c95460ff1690565b60ff16036107fd5760405163dfc60d8560e01b815260040160405180910390fd5b61080760026112cb565b61081760808401606085016132ec565b6001600160401b031634101561084057604051630178ce0b60e31b815260040160405180910390fd5b5f5b61084f60c0850185613307565b90508110156108a35761086560e0850185613307565b828181106108755761087561334c565b905060200201355f1461089b57604051634299323b60e11b815260040160405180910390fd5b600101610842565b506108ce6380ac58cd60e01b6108bf60a0860160808701612b9b565b6001600160a01b031690611559565b6108eb57604051633ee915f560e11b815260040160405180910390fd5b5f5f6108f6856115e6565b6040805161016081019091525f808252929450909250602081016109206080890160608a016132ec565b6001600160401b0316815260200161093e60c0890160a08a01613360565b63ffffffff1681525f6020808301829052604083019190915233606083015260809091019061096f908901896132ec565b6001600160401b031681526020015f6001600160a01b031688602001602081019061099a9190612b9b565b6001600160a01b0316036109ae57336109be565b6109be6040890160208a01612b9b565b6001600160a01b031681526020908101906109f6906109df908a018a6132ec565b6b195c98cdcc8c57dd985d5b1d60a21b5b5f610c52565b6001600160a01b03168152602001610a146080890160608a016132ec565b610a27906001600160401b03163461338f565b815260200184905290505f610a456562726964676560d01b8261113f565b6001600160a01b0316631bdb003734846040518363ffffffff1660e01b8152600401610a719190612aab565b5f6040518083038185885af1158015610a8c573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d908101601f19168201604052610ab491908101906133ad565b96509050610ac86060880160408901612b9b565b6001600160a01b03168660a001516001600160a01b0316827fabbf62a1459339f9ac59136d313a5ccd83d2706cc6d4c04d90642520169144dc8960c0015187602001518c6080016020810190610b1e9190612b9b565b610b2b60c08f018f613307565b8f8060e00190610b3b9190613307565b604051610b4e97969594939291906134fd565b60405180910390a450505050610b6460016112cb565b50919050565b5f6002610b7960c95460ff1690565b60ff1614905090565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000000003163003610bd35760405162461bcd60e51b8152600401610bca90613559565b60405180910390fd5b7f00000000000000000000000001670000000000000000000000000000000000036001600160a01b0316610c05611ac8565b6001600160a01b031614610c2b5760405162461bcd60e51b8152600401610bca906135a5565b610c3481611ae3565b604080515f80825260208201909252610c4f91839190611aeb565b50565b5f610c5e848484611c55565b90505b9392505050565b610c70611ca7565b610c7a335f611d37565b565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000000003163003610cc45760405162461bcd60e51b8152600401610bca90613559565b7f00000000000000000000000001670000000000000000000000000000000000036001600160a01b0316610cf6611ac8565b6001600160a01b031614610d1c5760405162461bcd60e51b8152600401610bca906135a5565b610d2582611ae3565b61069082826001611aeb565b5f306001600160a01b037f00000000000000000000000001670000000000000000000000000000000000031614610dd05760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610bca565b505f516020613ff95f395f51905f5290565b610dea611d3b565b610c7a5f611d95565b60655433906001600160a01b03168114610e615760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610bca565b610c4f81611d95565b610e7e60c954610100900460ff1660021490565b15610e9c5760405163bae6e2a960e01b815260040160405180910390fd5b6002610eaa60c95460ff1690565b60ff1603610ecb5760405163dfc60d8560e01b815260040160405180910390fd5b610ed560026112cb565b5f808080610ee5858701876135f1565b93509350935093505f610ef6611dae565b9050610f0183611ece565b5f610f0d8685856113d7565b9050610f226001600160a01b0385163461154e565b836001600160a01b0316856001600160a01b0316835f01517f895f73e418d1bbbad2a311d085fad00e5d98a960e9f2afa4b942071d39bec43a85604001518a6020015186898a516001600160401b03811115610f8057610f80612c21565b604051908082528060200260200182016040528015610fa9578160200160208202803683370190505b50604051610fbb9594939291906136ea565b60405180910390a450505050505061069060016112cb565b610fdb611f0a565b610c7a336001611d37565b5f610fef611ac8565b905090565b61012d6020525f9081526040902080546001820180546001600160401b03831693600160401b9093046001600160a01b031692919061103290613742565b80601f016020809104026020016040519081016040528092919081815260200182805461105e90613742565b80156110a95780601f10611080576101008083540402835291602001916110a9565b820191905f5260205f20905b81548152906001019060200180831161108c57829003601f168201915b5050505050908060020180546110be90613742565b80601f01602080910402602001604051908101604052809291908181526020018280546110ea90613742565b80156111355780601f1061110c57610100808354040283529160200191611135565b820191905f5260205f20905b81548152906001019060200180831161111857829003601f168201915b5050505050905084565b5f610c61468484611c55565b5f54610100900460ff161580801561116957505f54600160ff909116105b806111825750303b15801561118257505f5460ff166001145b6111e55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610bca565b5f805460ff191660011790558015611206575f805461ff0019166101001790555b6112108383611f7b565b8015611255575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b611262611d3b565b606580546001600160a01b0383166001600160a01b031990911681179091556112936033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b61131281600161113f565b6001600160a01b0316336001600160a01b03161461134357604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561137f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113a39190613774565b60208101519092506001600160a01b031633146113d357604051632583296b60e01b815260040160405180910390fd5b5090565b5f46845f01516001600160401b03160361149d575060208301515f5b825181101561149757816001600160a01b03166342842e0e308686858151811061141f5761141f61334c565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064015f604051808303815f87803b158015611476575f5ffd5b505af1158015611488573d5f5f3e3d5ffd5b505050508060010190506113f3565b50610c61565b6114a684611fb5565b90505f5b825181101561154657816001600160a01b03166340c10f19858584815181106114d5576114d561334c565b60200260200101516040518363ffffffff1660e01b815260040161150e9291906001600160a01b03929092168252602082015260400190565b5f604051808303815f87803b158015611525575f5ffd5b505af1158015611537573d5f5f3e3d5ffd5b505050508060010190506114aa565b509392505050565b61069082825a611ffc565b5f6001600160a01b0383163b61157057505f6106de565b6040516301ffc9a760e01b81526001600160e01b0319831660048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa9250505080156115da575060408051601f3d908101601f191682019092526115d7918101906137dc565b60015b156106de579392505050565b604080516080810182525f808252602082015260609181018290528082018290525f61012d8161161c60a0870160808801612b9b565b6001600160a01b03908116825260208201929092526040015f208054909250600160401b900416156118fd576040805160808101825282546001600160401b0381168252600160401b90046001600160a01b0316602082015260018301805491928492908401919061168d90613742565b80601f01602080910402602001604051908101604052809291908181526020018280546116b990613742565b80156117045780601f106116db57610100808354040283529160200191611704565b820191905f5260205f20905b8154815290600101906020018083116116e757829003601f168201915b5050505050815260200160028201805461171d90613742565b80601f016020809104026020016040519081016040528092919081815260200182805461174990613742565b80156117945780601f1061176b57610100808354040283529160200191611794565b820191905f5260205f20905b81548152906001019060200180831161177757829003601f168201915b50505050508152505091505f5b6117ae60c0860186613307565b90508110156118f7576117c760a0860160808701612b9b565b6001600160a01b03166342842e0e33306117e460c08a018a613307565b868181106117f4576117f461334c565b6040516001600160e01b031960e088901b1681526001600160a01b039586166004820152949093166024850152506020909102013560448201526064015f604051808303815f87803b158015611848575f5ffd5b505af115801561185a573d5f5f3e3d5ffd5b5061186f9250505060a0860160808701612b9b565b6001600160a01b03166342966c6861188a60c0880188613307565b8481811061189a5761189a61334c565b905060200201356040518263ffffffff1660e01b81526004016118bf91815260200190565b5f604051808303815f87803b1580156118d6575f5ffd5b505af11580156118e8573d5f5f3e3d5ffd5b505050508060010190506117a1565b50611a3d565b6040518060800160405280466001600160401b0316815260200185608001602081019061192a9190612b9b565b6001600160a01b0316815260200161195061194b60a0880160808901612b9b565b61203f565b815260200161196d61196860a0880160808901612b9b565b6120f1565b905291505f5b61198060c0860186613307565b9050811015611a3b5761199960a0860160808701612b9b565b6001600160a01b03166342842e0e33306119b660c08a018a613307565b868181106119c6576119c661334c565b6040516001600160e01b031960e088901b1681526001600160a01b039586166004820152949093166024850152506020909102013560448201526064015f604051808303815f87803b158015611a1a575f5ffd5b505af1158015611a2c573d5f5f3e3d5ffd5b50505050806001019050611973565b505b5030637f07c9478233611a566060880160408901612b9b565b611a6360c0890189613307565b604051602001611a779594939291906137f7565b60408051601f1981840301815290829052611a9491602401613888565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050509150915091565b5f516020613ff95f395f51905f52546001600160a01b031690565b610c4f611d3b565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611b1e5761125583612137565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611b78575060408051601f3d908101601f19168201909252611b759181019061389a565b60015b611bdb5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610bca565b5f516020613ff95f395f51905f528114611c495760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610bca565b506112558383836121d2565b5f611c6084846121fc565b905081158015611c7757506001600160a01b038116155b15610c6157604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610bca565b611cbb60c954610100900460ff1660021490565b611cd85760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6106905b6033546001600160a01b03163314610c7a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bca565b606580546001600160a01b0319169055610c4f8161229e565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611ddf81600161113f565b6001600160a01b0316336001600160a01b031614611e1057604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611e4c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e709190613774565b91505f611e9183604001516109f06b195c98cdcc8c57dd985d5b1d60a21b90565b9050806001600160a01b031683602001516001600160a01b031614611ec957604051632583296b60e01b815260040160405180910390fd5b505090565b6001600160a01b0381161580611eec57506001600160a01b03811630145b15610c4f57604051635b50f3f960e01b815260040160405180910390fd5b611f1e60c954610100900460ff1660021490565b15611f3c5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611d2d565b806001600160a01b038116611fa35760405163538ba4f960e01b815260040160405180910390fd5b611fac836122ef565b6112558261234d565b80516001600160401b03165f90815261012e60209081526040808320828501516001600160a01b0390811685529252909120541680611ff7576106de826123bd565b919050565b815f0361200857505050565b61202283838360405180602001604052805f815250612598565b61125557604051634c67134d60e11b815260040160405180910390fd5b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516060915f9182916001600160a01b0386169161208591906138b1565b5f60405180830381855afa9150503d805f81146120bd576040519150601f19603f3d011682016040523d82523d5f602084013e6120c2565b606091505b5091509150816120e05760405180602001604052805f8152506120e9565b6120e9816125d5565b949350505050565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516060915f9182916001600160a01b0386169161208591906138b1565b6001600160a01b0381163b6121a45760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610bca565b5f516020613ff95f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b6121db83612742565b5f825111806121e75750805b15611255576121f68383612781565b50505050565b6097545f906001600160a01b03168061222857604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa15801561227a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120e991906138cc565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166123155760405162461bcd60e51b8152600401610bca906138e7565b61231d6127a6565b61233b6001600160a01b038216156123355781611d95565b33611d95565b5060c9805461ff001916610100179055565b5f54610100900460ff166123735760405162461bcd60e51b8152600401610bca906138e7565b6001600160401b0346111561239b5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f6123d16033546001600160a01b031690565b609754602085015185516040808801516060890151915161240296956001600160a01b031694939290602401613932565b60408051601f198184030181529190526020810180516001600160e01b03166377c6257360e11b17905290506124496d627269646765645f65726337323160901b5f61113f565b81604051612456906128dd565b612461929190613993565b604051809103905ff08015801561247a573d5f5f3e3d5ffd5b506001600160a01b038082165f90815261012d60209081526040918290208751815492890151909416600160401b026001600160e01b03199092166001600160401b0390941693909317178255850151919350849160018201906124de9082613a01565b50606082015160028201906124f39082613a01565b505083516001600160401b039081165f90815261012e6020908152604080832082890180516001600160a01b039081168652919093529281902080546001600160a01b03191688851690811790915591518851828a015160608b01519351949750919094169493909316927f44977f2d30fe1e3aee2c1476f2f95aaacaf34e44b9359c403da01fcc93fd751b9261258a9290613abb565b60405180910390a450919050565b5f6001600160a01b0385166125c057604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b606060408251106125f457818060200190518101906106de9190613adf565b815160200361272f575f5b60208160ff161080156126345750828160ff16815181106126225761262261334c565b01602001516001600160f81b03191615155b1561264b578061264381613b10565b9150506125ff565b5f8160ff166001600160401b0381111561266757612667612c21565b6040519080825280601f01601f191660200182016040528015612691576020820181803683370190505b5090505f91505b60208260ff161080156126cd5750838260ff16815181106126bb576126bb61334c565b01602001516001600160f81b03191615155b15610c6157838260ff16815181106126e7576126e761334c565b602001015160f81c60f81b818360ff16815181106127075761270761334c565b60200101906001600160f81b03191690815f1a9053508161272781613b10565b925050612698565b505060408051602081019091525f815290565b61274b81612137565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610c618383604051806060016040528060278152602001614019602791396127cc565b5f54610100900460ff16610c7a5760405162461bcd60e51b8152600401610bca906138e7565b60605f5f856001600160a01b0316856040516127e891906138b1565b5f60405180830381855af49150503d805f8114612820576040519150601f19603f3d011682016040523d82523d5f602084013e612825565b606091505b509150915061283686838387612840565b9695505050505050565b606083156128ae5782515f036128a7576001600160a01b0385163b6128a75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bca565b50816120e9565b6120e983838151156128c35781518083602001fd5b8060405162461bcd60e51b8152600401610bca9190613888565b6104ca80613b2f83390190565b5f5f604083850312156128fb575f5ffd5b82356001600160401b03811115612910575f5ffd5b83016101608186031215612922575f5ffd5b946020939093013593505050565b5f60208284031215612940575f5ffd5b81356001600160e01b031981168114610c61575f5ffd5b6001600160a01b0381168114610c4f575f5ffd5b8035611ff781612957565b5f5f83601f840112612986575f5ffd5b5081356001600160401b0381111561299c575f5ffd5b6020830191508360208285010111156129b3575f5ffd5b9250929050565b5f5f5f5f5f608086880312156129ce575f5ffd5b85356129d981612957565b945060208601356129e981612957565b93506040860135925060608601356001600160401b03811115612a0a575f5ffd5b612a1688828901612976565b969995985093965092949392505050565b5f60208284031215612a37575f5ffd5b81356001600160401b03811115612a4c575f5ffd5b82016101008185031215610c61575f5ffd5b5f5b83811015612a78578181015183820152602001612a60565b50505f910152565b5f8151808452612a97816020860160208601612a5e565b601f01601f19169290920160200192915050565b60208152612ac56020820183516001600160401b03169052565b5f6020830151612ae060408401826001600160401b03169052565b50604083015163ffffffff811660608401525060608301516001600160a01b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160401b03811660e08401525060e08301516001600160a01b038116610100840152506101008301516001600160a01b03811661012084015250610120830151610140830152610140830151610160808401526120e9610180840182612a80565b5f60208284031215612bab575f5ffd5b8135610c6181612957565b6001600160401b0381168114610c4f575f5ffd5b8035611ff781612bb6565b8015158114610c4f575f5ffd5b5f5f5f60608486031215612bf4575f5ffd5b8335612bff81612bb6565b9250602084013591506040840135612c1681612bd5565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b0381118282101715612c5757612c57612c21565b60405290565b60405161010081016001600160401b0381118282101715612c5757612c57612c21565b60405161016081016001600160401b0381118282101715612c5757612c57612c21565b604051601f8201601f191681016001600160401b0381118282101715612ccb57612ccb612c21565b604052919050565b5f6001600160401b03821115612ceb57612ceb612c21565b50601f01601f191660200190565b5f82601f830112612d08575f5ffd5b8135602083015f612d20612d1b84612cd3565b612ca3565b9050828152858383011115612d33575f5ffd5b828260208301375f92810160200192909252509392505050565b5f5f60408385031215612d5e575f5ffd5b8235612d6981612957565b915060208301356001600160401b03811115612d83575f5ffd5b612d8f85828601612cf9565b9150509250929050565b5f5f60408385031215612daa575f5ffd5b823591506020830135612dbc81612957565b809150509250929050565b5f5f60208385031215612dd8575f5ffd5b82356001600160401b03811115612ded575f5ffd5b612df985828601612976565b90969095509350505050565b6001600160401b03851681526001600160a01b03841660208201526080604082018190525f90612e3790830185612a80565b8281036060840152612e498185612a80565b979650505050505050565b5f5f60408385031215612e65575f5ffd5b823591506020830135612dbc81612bd5565b5f5f60408385031215612e88575f5ffd5b8235612e9381612957565b91506020830135612dbc81612957565b5f5f8335601e19843603018112612eb8575f5ffd5b8301803591506001600160401b03821115612ed1575f5ffd5b6020019150368190038213156129b3575f5ffd5b5f5f85851115612ef3575f5ffd5b83861115612eff575f5ffd5b5050820193919092039150565b5f60208284031215612f1c575f5ffd5b81356001600160401b03811115612f31575f5ffd5b6120e984828501612cf9565b8051611ff781612bb6565b8051611ff781612957565b5f82601f830112612f62575f5ffd5b8151602083015f612f75612d1b84612cd3565b9050828152858383011115612f88575f5ffd5b612f96836020830184612a5e565b95945050505050565b5f6001600160401b03821115612fb757612fb7612c21565b5060051b60200190565b5f82601f830112612fd0575f5ffd5b8151612fde612d1b82612f9f565b8082825260208201915060208360051b860101925085831115612fff575f5ffd5b602085015b8381101561301c578051835260209283019201613004565b5095945050505050565b5f5f5f5f60808587031215613039575f5ffd5b84516001600160401b0381111561304e575f5ffd5b85016080818803121561305f575f5ffd5b613067612c35565b815161307281612bb6565b8152602082015161308281612957565b602082015260408201516001600160401b0381111561309f575f5ffd5b6130ab89828501612f53565b60408301525060608201516001600160401b038111156130c9575f5ffd5b6130d589828501612f53565b60608301525094506130eb905060208601612f48565b92506130f960408601612f48565b915060608501516001600160401b03811115613113575f5ffd5b61311f87828801612fc1565b91505092959194509250565b5f8151808452602084019350602083015f5b8281101561315b57815186526020958601959091019060010161313d565b5093949350505050565b6001600160a01b038581168252841660208201526080604082018190525f906131909083018561312b565b8281036060840152612e49818561312b565b63ffffffff81168114610c4f575f5ffd5b8035611ff7816131a2565b5f82601f8301126131cd575f5ffd5b81356131db612d1b82612f9f565b8082825260208201915060208360051b8601019250858311156131fc575f5ffd5b602085015b8381101561301c578035835260209283019201613201565b5f610100823603121561322a575f5ffd5b613232612c5d565b61323b83612bca565b81526132496020840161296b565b602082015261325a6040840161296b565b604082015261326b60608401612bca565b606082015261327c6080840161296b565b608082015261328d60a084016131b3565b60a082015260c08301356001600160401b038111156132aa575f5ffd5b6132b6368286016131be565b60c08301525060e08301356001600160401b038111156132d4575f5ffd5b6132e0368286016131be565b60e08301525092915050565b5f602082840312156132fc575f5ffd5b8135610c6181612bb6565b5f5f8335601e1984360301811261331c575f5ffd5b8301803591506001600160401b03821115613335575f5ffd5b6020019150600581901b36038213156129b3575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613370575f5ffd5b8135610c61816131a2565b634e487b7160e01b5f52601160045260245ffd5b818103818111156106de576106de61337b565b8051611ff7816131a2565b5f5f604083850312156133be575f5ffd5b825160208401519092506001600160401b038111156133db575f5ffd5b830161016081860312156133ed575f5ffd5b6133f5612c80565b6133fe82612f3d565b815261340c60208301612f3d565b602082015261341d604083016133a2565b604082015261342e60608301612f48565b606082015261343f60808301612f3d565b608082015261345060a08301612f48565b60a082015261346160c08301612f3d565b60c082015261347260e08301612f48565b60e08201526134846101008301612f48565b61010082015261012082810151908201526101408201516001600160401b038111156134ae575f5ffd5b6134ba87828501612f53565b6101408301525080925050509250929050565b8183525f6001600160fb1b038311156134e4575f5ffd5b8260051b80836020870137939093016020019392505050565b6001600160401b03881681526001600160a01b0387811660208301528616604082015260a0606082018190525f9061353890830186886134cd565b828103608084015261354b8185876134cd565b9a9950505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f5f5f5f60808587031215613604575f5ffd5b84356001600160401b03811115613619575f5ffd5b85016080818803121561362a575f5ffd5b613632612c35565b813561363d81612bb6565b8152602082013561364d81612957565b602082015260408201356001600160401b0381111561366a575f5ffd5b61367689828501612cf9565b60408301525060608201356001600160401b03811115613694575f5ffd5b6136a089828501612cf9565b60608301525094506136b690506020860161296b565b92506136c46040860161296b565b915060608501356001600160401b038111156136de575f5ffd5b61311f878288016131be565b6001600160401b03861681526001600160a01b0385811660208301528416604082015260a0606082018190525f906137249083018561312b565b8281036080840152613736818561312b565b98975050505050505050565b600181811c9082168061375657607f821691505b602082108103610b6457634e487b7160e01b5f52602260045260245ffd5b5f6060828403128015613785575f5ffd5b50604051606081016001600160401b03811182821017156137a8576137a8612c21565b6040528251815260208301516137bd81612957565b602082015260408301516137d081612bb6565b60408201529392505050565b5f602082840312156137ec575f5ffd5b8151610c6181612bd5565b608081526001600160401b03865116608082015260018060a01b0360208701511660a08201525f6040870151608060c0840152613838610100840182612a80565b90506060880151607f198483030160e08501526138558282612a80565b6001600160a01b0389811660208701528816604086015291506138759050565b82810360608401526137368185876134cd565b602081525f610c616020830184612a80565b5f602082840312156138aa575f5ffd5b5051919050565b5f82516138c2818460208701612a5e565b9190910192915050565b5f602082840312156138dc575f5ffd5b8151610c6181612957565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0387811682528681166020830152851660408201526001600160401b038416606082015260c0608082018190525f9061397490830185612a80565b82810360a08401526139868185612a80565b9998505050505050505050565b6001600160a01b03831681526040602082018190525f90610c5e90830184612a80565b601f82111561125557805f5260205f20601f840160051c810160208510156139db5750805b601f840160051c820191505b818110156139fa575f81556001016139e7565b5050505050565b81516001600160401b03811115613a1a57613a1a612c21565b613a2e81613a288454613742565b846139b6565b6020601f821160018114613a60575f8315613a495750848201515b5f19600385901b1c1916600184901b1784556139fa565b5f84815260208120601f198516915b82811015613a8f5787850151825560209485019460019092019101613a6f565b5084821015613aac57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b604081525f613acd6040830185612a80565b8281036020840152612f968185612a80565b5f60208284031215613aef575f5ffd5b81516001600160401b03811115613b04575f5ffd5b6120e984828501612f53565b5f60ff821660ff8103613b2557613b2561337b565b6001019291505056fe60806040526040516104ca3803806104ca833981016040819052610022916102d2565b61002d82825f610034565b50506103ed565b61003d8361005f565b5f825111806100495750805b1561005a57610058838361009e565b505b505050565b610068816100ca565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606100c383836040518060600160405280602781526020016104a36027913961017d565b9392505050565b6001600160a01b0381163b61013c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f856001600160a01b03168560405161019991906103a0565b5f60405180830381855af49150503d805f81146101d1576040519150601f19603f3d011682016040523d82523d5f602084013e6101d6565b606091505b5090925090506101e8868383876101f2565b9695505050505050565b606083156102605782515f03610259576001600160a01b0385163b6102595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610133565b508161026a565b61026a8383610272565b949350505050565b8151156102825781518083602001fd5b8060405162461bcd60e51b815260040161013391906103bb565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156102ca5781810151838201526020016102b2565b50505f910152565b5f5f604083850312156102e3575f5ffd5b82516001600160a01b03811681146102f9575f5ffd5b60208401519092506001600160401b03811115610314575f5ffd5b8301601f81018513610324575f5ffd5b80516001600160401b0381111561033d5761033d61029c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561036b5761036b61029c565b604052818152828201602001871015610382575f5ffd5b6103938260208301602086016102b0565b8093505050509250929050565b5f82516103b18184602087016102b0565b9190910192915050565b602081525f82518060208401526103d98160408501602087016102b0565b601f01601f19169190910160400192915050565b60aa806103f95f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122055e523a48576516437df6fcf2810806cc0aeefb1755d2891dc02a161b66f632464736f6c634300081b0033", + "code": "0x60806040526004361061017b575f3560e01c806367090ccf116100cd5780638da5cb5b11610087578063e07baba611610062578063e07baba614610449578063e30c397814610486578063f09a4016146104a3578063f2fde38b146104c2575f5ffd5b80638da5cb5b146103de5780639aa8605c146103fb578063a86f9d9e1461042a575f5ffd5b806367090ccf1461033b578063715018a61461037b57806379ba50971461038f5780637f07c947146103a35780638456cb59146103b65780638abf6077146103ca575f5ffd5b80633659cfe6116101385780633f4ba83a116101135780633f4ba83a146102e05780634f1ef286146102f457806352d1902d146103075780635c975abb1461031b575f5ffd5b80633659cfe61461026b5780633ab76e9f1461028a5780633eb6b8cf146102c1575f5ffd5b80630178733a1461017f57806301ffc9a71461019457806306fdde03146101c8578063150b7a02146101f35780631f59a830146102375780633075db5614610257575b5f5ffd5b61019261018d3660046128ea565b6104e1565b005b34801561019f575f5ffd5b506101b36101ae366004612930565b610694565b60405190151581526020015b60405180910390f35b3480156101d3575f5ffd5b506b195c98cdcc8c57dd985d5b1d60a21b5b6040519081526020016101bf565b3480156101fe575f5ffd5b5061021e61020d3660046129ba565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016101bf565b61024a610245366004612a27565b6106e4565b6040516101bf9190612aab565b348015610262575f5ffd5b506101b3610b6a565b348015610276575f5ffd5b50610192610285366004612b9b565b610b82565b348015610295575f5ffd5b506097546102a9906001600160a01b031681565b6040516001600160a01b0390911681526020016101bf565b3480156102cc575f5ffd5b506102a96102db366004612be2565b610c52565b3480156102eb575f5ffd5b50610192610c68565b610192610302366004612d4d565b610c7c565b348015610312575f5ffd5b506101e5610d31565b348015610326575f5ffd5b506101b360c954610100900460ff1660021490565b348015610346575f5ffd5b506102a9610355366004612d99565b61012e60209081525f92835260408084209091529082529020546001600160a01b031681565b348015610386575f5ffd5b50610192610de2565b34801561039a575f5ffd5b50610192610df3565b6101926103b1366004612dc7565b610e6a565b3480156103c1575f5ffd5b50610192610fd3565b3480156103d5575f5ffd5b506102a9610fe6565b3480156103e9575f5ffd5b506033546001600160a01b03166102a9565b348015610406575f5ffd5b5061041a610415366004612b9b565b610ff4565b6040516101bf9493929190612e05565b348015610435575f5ffd5b506102a9610444366004612e54565b61113f565b348015610454575f5ffd5b5060c95461046e906201000090046001600160401b031681565b6040516001600160401b0390911681526020016101bf565b348015610491575f5ffd5b506065546001600160a01b03166102a9565b3480156104ae575f5ffd5b506101926104bd366004612e77565b61114b565b3480156104cd575f5ffd5b506101926104dc366004612b9b565b61125a565b6104f560c954610100900460ff1660021490565b156105135760405163bae6e2a960e01b815260040160405180910390fd5b600261052160c95460ff1690565b60ff16036105425760405163dfc60d8560e01b815260040160405180910390fd5b61054c60026112cb565b6105546112e1565b505f610564610140840184612ea3565b610572916004908290612ee5565b81019061057f9190612f0c565b90505f5f828060200190518101906105979190613026565b9350505091505f6105bb838760a00160208101906105b59190612b9b565b846113d7565b90506105e56101208701356105d660c0890160a08a01612b9b565b6001600160a01b03169061154e565b6105f560c0870160a08801612b9b565b6001600160a01b0316857fe48bef18455e47bca14864ab6e82dffa29df148b051c09de95aec44ecf13598c8560200151848687516001600160401b0381111561064057610640612c21565b604051908082528060200260200182016040528015610669578160200160208202803683370190505b5060405161067a9493929190613165565b60405180910390a35050505061069060016112cb565b5050565b5f6001600160e01b0319821662bc399d60e11b14806106c357506001600160e01b03198216637f07c94760e01b145b806106de57506001600160e01b031982166301ffc9a760e01b145b92915050565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201839052610100820183905261012082019290925261014081019190915261075260c954610100900460ff1660021490565b156107705760405163bae6e2a960e01b815260040160405180910390fd5b61077982613219565b8060e00151518160c0015151146107a35760405163196e8a4160e31b815260040160405180910390fd5b60808101516001600160a01b03166107ce576040516303f8a7d360e01b815260040160405180910390fd5b60026107dc60c95460ff1690565b60ff16036107fd5760405163dfc60d8560e01b815260040160405180910390fd5b61080760026112cb565b61081760808401606085016132ec565b6001600160401b031634101561084057604051630178ce0b60e31b815260040160405180910390fd5b5f5b61084f60c0850185613307565b90508110156108a35761086560e0850185613307565b828181106108755761087561334c565b905060200201355f1461089b57604051634299323b60e11b815260040160405180910390fd5b600101610842565b506108ce6380ac58cd60e01b6108bf60a0860160808701612b9b565b6001600160a01b031690611559565b6108eb57604051633ee915f560e11b815260040160405180910390fd5b5f5f6108f6856115e6565b6040805161016081019091525f808252929450909250602081016109206080890160608a016132ec565b6001600160401b0316815260200161093e60c0890160a08a01613360565b63ffffffff1681525f6020808301829052604083019190915233606083015260809091019061096f908901896132ec565b6001600160401b031681526020015f6001600160a01b031688602001602081019061099a9190612b9b565b6001600160a01b0316036109ae57336109be565b6109be6040890160208a01612b9b565b6001600160a01b031681526020908101906109f6906109df908a018a6132ec565b6b195c98cdcc8c57dd985d5b1d60a21b5b5f610c52565b6001600160a01b03168152602001610a146080890160608a016132ec565b610a27906001600160401b03163461338f565b815260200184905290505f610a456562726964676560d01b8261113f565b6001600160a01b0316631bdb003734846040518363ffffffff1660e01b8152600401610a719190612aab565b5f6040518083038185885af1158015610a8c573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d908101601f19168201604052610ab491908101906133ad565b96509050610ac86060880160408901612b9b565b6001600160a01b03168660a001516001600160a01b0316827fabbf62a1459339f9ac59136d313a5ccd83d2706cc6d4c04d90642520169144dc8960c0015187602001518c6080016020810190610b1e9190612b9b565b610b2b60c08f018f613307565b8f8060e00190610b3b9190613307565b604051610b4e97969594939291906134fd565b60405180910390a450505050610b6460016112cb565b50919050565b5f6002610b7960c95460ff1690565b60ff1614905090565b6001600160a01b037f0000000000000000000000000167010000000000000000000000000000000003163003610bd35760405162461bcd60e51b8152600401610bca90613559565b60405180910390fd5b7f00000000000000000000000001670100000000000000000000000000000000036001600160a01b0316610c05611ac8565b6001600160a01b031614610c2b5760405162461bcd60e51b8152600401610bca906135a5565b610c3481611ae3565b604080515f80825260208201909252610c4f91839190611aeb565b50565b5f610c5e848484611c55565b90505b9392505050565b610c70611ca7565b610c7a335f611d37565b565b6001600160a01b037f0000000000000000000000000167010000000000000000000000000000000003163003610cc45760405162461bcd60e51b8152600401610bca90613559565b7f00000000000000000000000001670100000000000000000000000000000000036001600160a01b0316610cf6611ac8565b6001600160a01b031614610d1c5760405162461bcd60e51b8152600401610bca906135a5565b610d2582611ae3565b61069082826001611aeb565b5f306001600160a01b037f00000000000000000000000001670100000000000000000000000000000000031614610dd05760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610bca565b505f516020613ff95f395f51905f5290565b610dea611d3b565b610c7a5f611d95565b60655433906001600160a01b03168114610e615760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610bca565b610c4f81611d95565b610e7e60c954610100900460ff1660021490565b15610e9c5760405163bae6e2a960e01b815260040160405180910390fd5b6002610eaa60c95460ff1690565b60ff1603610ecb5760405163dfc60d8560e01b815260040160405180910390fd5b610ed560026112cb565b5f808080610ee5858701876135f1565b93509350935093505f610ef6611dae565b9050610f0183611ece565b5f610f0d8685856113d7565b9050610f226001600160a01b0385163461154e565b836001600160a01b0316856001600160a01b0316835f01517f895f73e418d1bbbad2a311d085fad00e5d98a960e9f2afa4b942071d39bec43a85604001518a6020015186898a516001600160401b03811115610f8057610f80612c21565b604051908082528060200260200182016040528015610fa9578160200160208202803683370190505b50604051610fbb9594939291906136ea565b60405180910390a450505050505061069060016112cb565b610fdb611f0a565b610c7a336001611d37565b5f610fef611ac8565b905090565b61012d6020525f9081526040902080546001820180546001600160401b03831693600160401b9093046001600160a01b031692919061103290613742565b80601f016020809104026020016040519081016040528092919081815260200182805461105e90613742565b80156110a95780601f10611080576101008083540402835291602001916110a9565b820191905f5260205f20905b81548152906001019060200180831161108c57829003601f168201915b5050505050908060020180546110be90613742565b80601f01602080910402602001604051908101604052809291908181526020018280546110ea90613742565b80156111355780601f1061110c57610100808354040283529160200191611135565b820191905f5260205f20905b81548152906001019060200180831161111857829003601f168201915b5050505050905084565b5f610c61468484611c55565b5f54610100900460ff161580801561116957505f54600160ff909116105b806111825750303b15801561118257505f5460ff166001145b6111e55760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610bca565b5f805460ff191660011790558015611206575f805461ff0019166101001790555b6112108383611f7b565b8015611255575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b611262611d3b565b606580546001600160a01b0383166001600160a01b031990911681179091556112936033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b61131281600161113f565b6001600160a01b0316336001600160a01b03161461134357604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561137f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113a39190613774565b60208101519092506001600160a01b031633146113d357604051632583296b60e01b815260040160405180910390fd5b5090565b5f46845f01516001600160401b03160361149d575060208301515f5b825181101561149757816001600160a01b03166342842e0e308686858151811061141f5761141f61334c565b60209081029190910101516040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064015f604051808303815f87803b158015611476575f5ffd5b505af1158015611488573d5f5f3e3d5ffd5b505050508060010190506113f3565b50610c61565b6114a684611fb5565b90505f5b825181101561154657816001600160a01b03166340c10f19858584815181106114d5576114d561334c565b60200260200101516040518363ffffffff1660e01b815260040161150e9291906001600160a01b03929092168252602082015260400190565b5f604051808303815f87803b158015611525575f5ffd5b505af1158015611537573d5f5f3e3d5ffd5b505050508060010190506114aa565b509392505050565b61069082825a611ffc565b5f6001600160a01b0383163b61157057505f6106de565b6040516301ffc9a760e01b81526001600160e01b0319831660048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa9250505080156115da575060408051601f3d908101601f191682019092526115d7918101906137dc565b60015b156106de579392505050565b604080516080810182525f808252602082015260609181018290528082018290525f61012d8161161c60a0870160808801612b9b565b6001600160a01b03908116825260208201929092526040015f208054909250600160401b900416156118fd576040805160808101825282546001600160401b0381168252600160401b90046001600160a01b0316602082015260018301805491928492908401919061168d90613742565b80601f01602080910402602001604051908101604052809291908181526020018280546116b990613742565b80156117045780601f106116db57610100808354040283529160200191611704565b820191905f5260205f20905b8154815290600101906020018083116116e757829003601f168201915b5050505050815260200160028201805461171d90613742565b80601f016020809104026020016040519081016040528092919081815260200182805461174990613742565b80156117945780601f1061176b57610100808354040283529160200191611794565b820191905f5260205f20905b81548152906001019060200180831161177757829003601f168201915b50505050508152505091505f5b6117ae60c0860186613307565b90508110156118f7576117c760a0860160808701612b9b565b6001600160a01b03166342842e0e33306117e460c08a018a613307565b868181106117f4576117f461334c565b6040516001600160e01b031960e088901b1681526001600160a01b039586166004820152949093166024850152506020909102013560448201526064015f604051808303815f87803b158015611848575f5ffd5b505af115801561185a573d5f5f3e3d5ffd5b5061186f9250505060a0860160808701612b9b565b6001600160a01b03166342966c6861188a60c0880188613307565b8481811061189a5761189a61334c565b905060200201356040518263ffffffff1660e01b81526004016118bf91815260200190565b5f604051808303815f87803b1580156118d6575f5ffd5b505af11580156118e8573d5f5f3e3d5ffd5b505050508060010190506117a1565b50611a3d565b6040518060800160405280466001600160401b0316815260200185608001602081019061192a9190612b9b565b6001600160a01b0316815260200161195061194b60a0880160808901612b9b565b61203f565b815260200161196d61196860a0880160808901612b9b565b6120f1565b905291505f5b61198060c0860186613307565b9050811015611a3b5761199960a0860160808701612b9b565b6001600160a01b03166342842e0e33306119b660c08a018a613307565b868181106119c6576119c661334c565b6040516001600160e01b031960e088901b1681526001600160a01b039586166004820152949093166024850152506020909102013560448201526064015f604051808303815f87803b158015611a1a575f5ffd5b505af1158015611a2c573d5f5f3e3d5ffd5b50505050806001019050611973565b505b5030637f07c9478233611a566060880160408901612b9b565b611a6360c0890189613307565b604051602001611a779594939291906137f7565b60408051601f1981840301815290829052611a9491602401613888565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050509150915091565b5f516020613ff95f395f51905f52546001600160a01b031690565b610c4f611d3b565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611b1e5761125583612137565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611b78575060408051601f3d908101601f19168201909252611b759181019061389a565b60015b611bdb5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610bca565b5f516020613ff95f395f51905f528114611c495760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610bca565b506112558383836121d2565b5f611c6084846121fc565b905081158015611c7757506001600160a01b038116155b15610c6157604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610bca565b611cbb60c954610100900460ff1660021490565b611cd85760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6106905b6033546001600160a01b03163314610c7a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bca565b606580546001600160a01b0319169055610c4f8161229e565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611ddf81600161113f565b6001600160a01b0316336001600160a01b031614611e1057604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611e4c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e709190613774565b91505f611e9183604001516109f06b195c98cdcc8c57dd985d5b1d60a21b90565b9050806001600160a01b031683602001516001600160a01b031614611ec957604051632583296b60e01b815260040160405180910390fd5b505090565b6001600160a01b0381161580611eec57506001600160a01b03811630145b15610c4f57604051635b50f3f960e01b815260040160405180910390fd5b611f1e60c954610100900460ff1660021490565b15611f3c5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611d2d565b806001600160a01b038116611fa35760405163538ba4f960e01b815260040160405180910390fd5b611fac836122ef565b6112558261234d565b80516001600160401b03165f90815261012e60209081526040808320828501516001600160a01b0390811685529252909120541680611ff7576106de826123bd565b919050565b815f0361200857505050565b61202283838360405180602001604052805f815250612598565b61125557604051634c67134d60e11b815260040160405180910390fd5b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516060915f9182916001600160a01b0386169161208591906138b1565b5f60405180830381855afa9150503d805f81146120bd576040519150601f19603f3d011682016040523d82523d5f602084013e6120c2565b606091505b5091509150816120e05760405180602001604052805f8152506120e9565b6120e9816125d5565b949350505050565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516060915f9182916001600160a01b0386169161208591906138b1565b6001600160a01b0381163b6121a45760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610bca565b5f516020613ff95f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b6121db83612742565b5f825111806121e75750805b15611255576121f68383612781565b50505050565b6097545f906001600160a01b03168061222857604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa15801561227a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120e991906138cc565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166123155760405162461bcd60e51b8152600401610bca906138e7565b61231d6127a6565b61233b6001600160a01b038216156123355781611d95565b33611d95565b5060c9805461ff001916610100179055565b5f54610100900460ff166123735760405162461bcd60e51b8152600401610bca906138e7565b6001600160401b0346111561239b5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f6123d16033546001600160a01b031690565b609754602085015185516040808801516060890151915161240296956001600160a01b031694939290602401613932565b60408051601f198184030181529190526020810180516001600160e01b03166377c6257360e11b17905290506124496d627269646765645f65726337323160901b5f61113f565b81604051612456906128dd565b612461929190613993565b604051809103905ff08015801561247a573d5f5f3e3d5ffd5b506001600160a01b038082165f90815261012d60209081526040918290208751815492890151909416600160401b026001600160e01b03199092166001600160401b0390941693909317178255850151919350849160018201906124de9082613a01565b50606082015160028201906124f39082613a01565b505083516001600160401b039081165f90815261012e6020908152604080832082890180516001600160a01b039081168652919093529281902080546001600160a01b03191688851690811790915591518851828a015160608b01519351949750919094169493909316927f44977f2d30fe1e3aee2c1476f2f95aaacaf34e44b9359c403da01fcc93fd751b9261258a9290613abb565b60405180910390a450919050565b5f6001600160a01b0385166125c057604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b606060408251106125f457818060200190518101906106de9190613adf565b815160200361272f575f5b60208160ff161080156126345750828160ff16815181106126225761262261334c565b01602001516001600160f81b03191615155b1561264b578061264381613b10565b9150506125ff565b5f8160ff166001600160401b0381111561266757612667612c21565b6040519080825280601f01601f191660200182016040528015612691576020820181803683370190505b5090505f91505b60208260ff161080156126cd5750838260ff16815181106126bb576126bb61334c565b01602001516001600160f81b03191615155b15610c6157838260ff16815181106126e7576126e761334c565b602001015160f81c60f81b818360ff16815181106127075761270761334c565b60200101906001600160f81b03191690815f1a9053508161272781613b10565b925050612698565b505060408051602081019091525f815290565b61274b81612137565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610c618383604051806060016040528060278152602001614019602791396127cc565b5f54610100900460ff16610c7a5760405162461bcd60e51b8152600401610bca906138e7565b60605f5f856001600160a01b0316856040516127e891906138b1565b5f60405180830381855af49150503d805f8114612820576040519150601f19603f3d011682016040523d82523d5f602084013e612825565b606091505b509150915061283686838387612840565b9695505050505050565b606083156128ae5782515f036128a7576001600160a01b0385163b6128a75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bca565b50816120e9565b6120e983838151156128c35781518083602001fd5b8060405162461bcd60e51b8152600401610bca9190613888565b6104ca80613b2f83390190565b5f5f604083850312156128fb575f5ffd5b82356001600160401b03811115612910575f5ffd5b83016101608186031215612922575f5ffd5b946020939093013593505050565b5f60208284031215612940575f5ffd5b81356001600160e01b031981168114610c61575f5ffd5b6001600160a01b0381168114610c4f575f5ffd5b8035611ff781612957565b5f5f83601f840112612986575f5ffd5b5081356001600160401b0381111561299c575f5ffd5b6020830191508360208285010111156129b3575f5ffd5b9250929050565b5f5f5f5f5f608086880312156129ce575f5ffd5b85356129d981612957565b945060208601356129e981612957565b93506040860135925060608601356001600160401b03811115612a0a575f5ffd5b612a1688828901612976565b969995985093965092949392505050565b5f60208284031215612a37575f5ffd5b81356001600160401b03811115612a4c575f5ffd5b82016101008185031215610c61575f5ffd5b5f5b83811015612a78578181015183820152602001612a60565b50505f910152565b5f8151808452612a97816020860160208601612a5e565b601f01601f19169290920160200192915050565b60208152612ac56020820183516001600160401b03169052565b5f6020830151612ae060408401826001600160401b03169052565b50604083015163ffffffff811660608401525060608301516001600160a01b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160401b03811660e08401525060e08301516001600160a01b038116610100840152506101008301516001600160a01b03811661012084015250610120830151610140830152610140830151610160808401526120e9610180840182612a80565b5f60208284031215612bab575f5ffd5b8135610c6181612957565b6001600160401b0381168114610c4f575f5ffd5b8035611ff781612bb6565b8015158114610c4f575f5ffd5b5f5f5f60608486031215612bf4575f5ffd5b8335612bff81612bb6565b9250602084013591506040840135612c1681612bd5565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b0381118282101715612c5757612c57612c21565b60405290565b60405161010081016001600160401b0381118282101715612c5757612c57612c21565b60405161016081016001600160401b0381118282101715612c5757612c57612c21565b604051601f8201601f191681016001600160401b0381118282101715612ccb57612ccb612c21565b604052919050565b5f6001600160401b03821115612ceb57612ceb612c21565b50601f01601f191660200190565b5f82601f830112612d08575f5ffd5b8135602083015f612d20612d1b84612cd3565b612ca3565b9050828152858383011115612d33575f5ffd5b828260208301375f92810160200192909252509392505050565b5f5f60408385031215612d5e575f5ffd5b8235612d6981612957565b915060208301356001600160401b03811115612d83575f5ffd5b612d8f85828601612cf9565b9150509250929050565b5f5f60408385031215612daa575f5ffd5b823591506020830135612dbc81612957565b809150509250929050565b5f5f60208385031215612dd8575f5ffd5b82356001600160401b03811115612ded575f5ffd5b612df985828601612976565b90969095509350505050565b6001600160401b03851681526001600160a01b03841660208201526080604082018190525f90612e3790830185612a80565b8281036060840152612e498185612a80565b979650505050505050565b5f5f60408385031215612e65575f5ffd5b823591506020830135612dbc81612bd5565b5f5f60408385031215612e88575f5ffd5b8235612e9381612957565b91506020830135612dbc81612957565b5f5f8335601e19843603018112612eb8575f5ffd5b8301803591506001600160401b03821115612ed1575f5ffd5b6020019150368190038213156129b3575f5ffd5b5f5f85851115612ef3575f5ffd5b83861115612eff575f5ffd5b5050820193919092039150565b5f60208284031215612f1c575f5ffd5b81356001600160401b03811115612f31575f5ffd5b6120e984828501612cf9565b8051611ff781612bb6565b8051611ff781612957565b5f82601f830112612f62575f5ffd5b8151602083015f612f75612d1b84612cd3565b9050828152858383011115612f88575f5ffd5b612f96836020830184612a5e565b95945050505050565b5f6001600160401b03821115612fb757612fb7612c21565b5060051b60200190565b5f82601f830112612fd0575f5ffd5b8151612fde612d1b82612f9f565b8082825260208201915060208360051b860101925085831115612fff575f5ffd5b602085015b8381101561301c578051835260209283019201613004565b5095945050505050565b5f5f5f5f60808587031215613039575f5ffd5b84516001600160401b0381111561304e575f5ffd5b85016080818803121561305f575f5ffd5b613067612c35565b815161307281612bb6565b8152602082015161308281612957565b602082015260408201516001600160401b0381111561309f575f5ffd5b6130ab89828501612f53565b60408301525060608201516001600160401b038111156130c9575f5ffd5b6130d589828501612f53565b60608301525094506130eb905060208601612f48565b92506130f960408601612f48565b915060608501516001600160401b03811115613113575f5ffd5b61311f87828801612fc1565b91505092959194509250565b5f8151808452602084019350602083015f5b8281101561315b57815186526020958601959091019060010161313d565b5093949350505050565b6001600160a01b038581168252841660208201526080604082018190525f906131909083018561312b565b8281036060840152612e49818561312b565b63ffffffff81168114610c4f575f5ffd5b8035611ff7816131a2565b5f82601f8301126131cd575f5ffd5b81356131db612d1b82612f9f565b8082825260208201915060208360051b8601019250858311156131fc575f5ffd5b602085015b8381101561301c578035835260209283019201613201565b5f610100823603121561322a575f5ffd5b613232612c5d565b61323b83612bca565b81526132496020840161296b565b602082015261325a6040840161296b565b604082015261326b60608401612bca565b606082015261327c6080840161296b565b608082015261328d60a084016131b3565b60a082015260c08301356001600160401b038111156132aa575f5ffd5b6132b6368286016131be565b60c08301525060e08301356001600160401b038111156132d4575f5ffd5b6132e0368286016131be565b60e08301525092915050565b5f602082840312156132fc575f5ffd5b8135610c6181612bb6565b5f5f8335601e1984360301811261331c575f5ffd5b8301803591506001600160401b03821115613335575f5ffd5b6020019150600581901b36038213156129b3575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613370575f5ffd5b8135610c61816131a2565b634e487b7160e01b5f52601160045260245ffd5b818103818111156106de576106de61337b565b8051611ff7816131a2565b5f5f604083850312156133be575f5ffd5b825160208401519092506001600160401b038111156133db575f5ffd5b830161016081860312156133ed575f5ffd5b6133f5612c80565b6133fe82612f3d565b815261340c60208301612f3d565b602082015261341d604083016133a2565b604082015261342e60608301612f48565b606082015261343f60808301612f3d565b608082015261345060a08301612f48565b60a082015261346160c08301612f3d565b60c082015261347260e08301612f48565b60e08201526134846101008301612f48565b61010082015261012082810151908201526101408201516001600160401b038111156134ae575f5ffd5b6134ba87828501612f53565b6101408301525080925050509250929050565b8183525f6001600160fb1b038311156134e4575f5ffd5b8260051b80836020870137939093016020019392505050565b6001600160401b03881681526001600160a01b0387811660208301528616604082015260a0606082018190525f9061353890830186886134cd565b828103608084015261354b8185876134cd565b9a9950505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f5f5f5f60808587031215613604575f5ffd5b84356001600160401b03811115613619575f5ffd5b85016080818803121561362a575f5ffd5b613632612c35565b813561363d81612bb6565b8152602082013561364d81612957565b602082015260408201356001600160401b0381111561366a575f5ffd5b61367689828501612cf9565b60408301525060608201356001600160401b03811115613694575f5ffd5b6136a089828501612cf9565b60608301525094506136b690506020860161296b565b92506136c46040860161296b565b915060608501356001600160401b038111156136de575f5ffd5b61311f878288016131be565b6001600160401b03861681526001600160a01b0385811660208301528416604082015260a0606082018190525f906137249083018561312b565b8281036080840152613736818561312b565b98975050505050505050565b600181811c9082168061375657607f821691505b602082108103610b6457634e487b7160e01b5f52602260045260245ffd5b5f6060828403128015613785575f5ffd5b50604051606081016001600160401b03811182821017156137a8576137a8612c21565b6040528251815260208301516137bd81612957565b602082015260408301516137d081612bb6565b60408201529392505050565b5f602082840312156137ec575f5ffd5b8151610c6181612bd5565b608081526001600160401b03865116608082015260018060a01b0360208701511660a08201525f6040870151608060c0840152613838610100840182612a80565b90506060880151607f198483030160e08501526138558282612a80565b6001600160a01b0389811660208701528816604086015291506138759050565b82810360608401526137368185876134cd565b602081525f610c616020830184612a80565b5f602082840312156138aa575f5ffd5b5051919050565b5f82516138c2818460208701612a5e565b9190910192915050565b5f602082840312156138dc575f5ffd5b8151610c6181612957565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0387811682528681166020830152851660408201526001600160401b038416606082015260c0608082018190525f9061397490830185612a80565b82810360a08401526139868185612a80565b9998505050505050505050565b6001600160a01b03831681526040602082018190525f90610c5e90830184612a80565b601f82111561125557805f5260205f20601f840160051c810160208510156139db5750805b601f840160051c820191505b818110156139fa575f81556001016139e7565b5050505050565b81516001600160401b03811115613a1a57613a1a612c21565b613a2e81613a288454613742565b846139b6565b6020601f821160018114613a60575f8315613a495750848201515b5f19600385901b1c1916600184901b1784556139fa565b5f84815260208120601f198516915b82811015613a8f5787850151825560209485019460019092019101613a6f565b5084821015613aac57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b604081525f613acd6040830185612a80565b8281036020840152612f968185612a80565b5f60208284031215613aef575f5ffd5b81516001600160401b03811115613b04575f5ffd5b6120e984828501612f53565b5f60ff821660ff8103613b2557613b2561337b565b6001019291505056fe60806040526040516104ca3803806104ca833981016040819052610022916102d2565b61002d82825f610034565b50506103ed565b61003d8361005f565b5f825111806100495750805b1561005a57610058838361009e565b505b505050565b610068816100ca565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606100c383836040518060600160405280602781526020016104a36027913961017d565b9392505050565b6001600160a01b0381163b61013c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f856001600160a01b03168560405161019991906103a0565b5f60405180830381855af49150503d805f81146101d1576040519150601f19603f3d011682016040523d82523d5f602084013e6101d6565b606091505b5090925090506101e8868383876101f2565b9695505050505050565b606083156102605782515f03610259576001600160a01b0385163b6102595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610133565b508161026a565b61026a8383610272565b949350505050565b8151156102825781518083602001fd5b8060405162461bcd60e51b815260040161013391906103bb565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156102ca5781810151838201526020016102b2565b50505f910152565b5f5f604083850312156102e3575f5ffd5b82516001600160a01b03811681146102f9575f5ffd5b60208401519092506001600160401b03811115610314575f5ffd5b8301601f81018513610324575f5ffd5b80516001600160401b0381111561033d5761033d61029c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561036b5761036b61029c565b604052818152828201602001871015610382575f5ffd5b6103938260208301602086016102b0565b8093505050509250929050565b5f82516103b18184602087016102b0565b9190910192915050565b602081525f82518060208401526103d98160408501602087016102b0565b601f01601f19169190910160400192915050565b60aa806103f95f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122055e523a48576516437df6fcf2810806cc0aeefb1755d2891dc02a161b66f632464736f6c634300081b0033", "balance": "0x0" }, - "0x1670000000000000000000000000000000000003": { + "0x1670100000000000000000000000000000000003": { "contractName": "ERC721Vault", "storage": { "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", - "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670000000000000000000000000000000000006", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000000003" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670100000000000000000000000000000000006", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167010000000000000000000000000000000003" }, "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", "balance": "0x0" }, - "0x0167000000000000000000000000000000000004": { + "0x0167010000000000000000000000000000000004": { "contractName": "ERC1155VaultImpl", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f" }, - "code": "0x608060405260043610610195575f3560e01c8063715018a6116100e7578063a86f9d9e11610087578063e30c397811610062578063e30c3978146104a4578063f09a4016146104c1578063f23a6e61146104e0578063f2fde38b1461050c575f5ffd5b8063a86f9d9e14610401578063bc197c8114610420578063e07baba614610467575f5ffd5b80638456cb59116100c25780638456cb591461038d5780638abf6077146103a15780638da5cb5b146103b55780639aa8605c146103d2575f5ffd5b8063715018a61461035257806379ba5097146103665780637f07c9471461037a575f5ffd5b80633ab76e9f116101525780634f1ef2861161012d5780634f1ef286146102cb57806352d1902d146102de5780635c975abb146102f257806367090ccf14610312575f5ffd5b80633ab76e9f146102615780633eb6b8cf146102985780633f4ba83a146102b7575f5ffd5b80630178733a1461019957806301ffc9a7146101ae57806306fdde03146101e25780631f59a8301461020e5780633075db561461022e5780633659cfe614610242575b5f5ffd5b6101ac6101a7366004612861565b61052b565b005b3480156101b9575f5ffd5b506101cd6101c83660046128a7565b6106a1565b60405190151581526020015b60405180910390f35b3480156101ed575f5ffd5b506c195c98cc4c4d4d57dd985d5b1d609a1b5b6040519081526020016101d9565b61022161021c3660046128ce565b6106c0565b6040516101d99190612952565b348015610239575f5ffd5b506101cd610b47565b34801561024d575f5ffd5b506101ac61025c366004612a61565b610b5f565b34801561026c575f5ffd5b50609754610280906001600160a01b031681565b6040516001600160a01b0390911681526020016101d9565b3480156102a3575f5ffd5b506102806102b2366004612aa8565b610c2f565b3480156102c2575f5ffd5b506101ac610c45565b6101ac6102d9366004612c13565b610c59565b3480156102e9575f5ffd5b50610200610d0e565b3480156102fd575f5ffd5b506101cd60c954610100900460ff1660021490565b34801561031d575f5ffd5b5061028061032c366004612c5f565b61012e60209081525f92835260408084209091529082529020546001600160a01b031681565b34801561035d575f5ffd5b506101ac610dbf565b348015610371575f5ffd5b506101ac610dd0565b6101ac610388366004612cd1565b610e47565b348015610398575f5ffd5b506101ac610f73565b3480156103ac575f5ffd5b50610280610f86565b3480156103c0575f5ffd5b506033546001600160a01b0316610280565b3480156103dd575f5ffd5b506103f16103ec366004612a61565b610f94565b6040516101d99493929190612d0f565b34801561040c575f5ffd5b5061028061041b366004612d5e565b6110df565b34801561042b575f5ffd5b5061044e61043a366004612dc1565b63bc197c8160e01b98975050505050505050565b6040516001600160e01b031990911681526020016101d9565b348015610472575f5ffd5b5060c95461048c906201000090046001600160401b031681565b6040516001600160401b0390911681526020016101d9565b3480156104af575f5ffd5b506065546001600160a01b0316610280565b3480156104cc575f5ffd5b506101ac6104db366004612e81565b6110eb565b3480156104eb575f5ffd5b5061044e6104fa366004612ead565b63f23a6e6160e01b9695505050505050565b348015610517575f5ffd5b506101ac610526366004612a61565b611202565b61053f60c954610100900460ff1660021490565b1561055d5760405163bae6e2a960e01b815260040160405180910390fd5b600261056b60c95460ff1690565b60ff160361058c5760405163dfc60d8560e01b815260040160405180910390fd5b6105966002611273565b61059e611289565b505f6105ae610140840184612f23565b6105bc916004908290612f65565b8101906105c99190612f8c565b90505f5f5f838060200190518101906105e291906130a6565b94509450505092505f610609848860a00160208101906106029190612a61565b858561137f565b905061063361012088013561062460c08a0160a08b01612a61565b6001600160a01b03169061146f565b61064360c0880160a08901612a61565b6001600160a01b0316867fe48bef18455e47bca14864ab6e82dffa29df148b051c09de95aec44ecf13598c8660200151848787604051610686949392919061320e565b60405180910390a3505050505061069d6001611273565b5050565b5f6106ab8261147a565b806106ba57506106ba826114c9565b92915050565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201839052610100820183905261012082019290925261014081019190915261072e60c954610100900460ff1660021490565b1561074c5760405163bae6e2a960e01b815260040160405180910390fd5b610755826132c2565b8060e00151518160c00151511461077f5760405163196e8a4160e31b815260040160405180910390fd5b60808101516001600160a01b03166107aa576040516303f8a7d360e01b815260040160405180910390fd5b60026107b860c95460ff1690565b60ff16036107d95760405163dfc60d8560e01b815260040160405180910390fd5b6107e36002611273565b6107f36080840160608501613395565b6001600160401b031634101561081c57604051630178ce0b60e31b815260040160405180910390fd5b5f5b61082b60e08501856133b0565b905081101561087f5761084160e08501856133b0565b82818110610851576108516133f5565b905060200201355f0361087757604051634299323b60e11b815260040160405180910390fd5b60010161081e565b506108aa636cdb3d1360e11b61089b60a0860160808701612a61565b6001600160a01b0316906114fd565b6108c757604051633ee915f560e11b815260040160405180910390fd5b5f5f6108d28561158a565b6040805161016081019091525f808252929450909250602081016108fc6080890160608a01613395565b6001600160401b0316815260200161091a60c0890160a08a01613409565b63ffffffff1681525f6020808301829052604083019190915233606083015260809091019061094b90890189613395565b6001600160401b031681526020015f6001600160a01b03168860200160208101906109769190612a61565b6001600160a01b03160361098a573361099a565b61099a6040890160208a01612a61565b6001600160a01b031681526020908101906109d3906109bb908a018a613395565b6c195c98cc4c4d4d57dd985d5b1d609a1b5b5f610c2f565b6001600160a01b031681526020016109f16080890160608a01613395565b610a04906001600160401b031634613438565b815260200184905290505f610a226562726964676560d01b826110df565b6001600160a01b0316631bdb003734846040518363ffffffff1660e01b8152600401610a4e9190612952565b5f6040518083038185885af1158015610a69573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d908101601f19168201604052610a919190810190613456565b96509050610aa56060880160408901612a61565b6001600160a01b03168660a001516001600160a01b0316827fabbf62a1459339f9ac59136d313a5ccd83d2706cc6d4c04d90642520169144dc8960c0015187602001518c6080016020810190610afb9190612a61565b610b0860c08f018f6133b0565b8f8060e00190610b1891906133b0565b604051610b2b97969594939291906135a6565b60405180910390a450505050610b416001611273565b50919050565b5f6002610b5660c95460ff1690565b60ff1614905090565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000000004163003610bb05760405162461bcd60e51b8152600401610ba790613602565b60405180910390fd5b7f00000000000000000000000001670000000000000000000000000000000000046001600160a01b0316610be2611a4a565b6001600160a01b031614610c085760405162461bcd60e51b8152600401610ba79061364e565b610c1181611a65565b604080515f80825260208201909252610c2c91839190611a6d565b50565b5f610c3b848484611bd7565b90505b9392505050565b610c4d611c29565b610c57335f611cb9565b565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000000004163003610ca15760405162461bcd60e51b8152600401610ba790613602565b7f00000000000000000000000001670000000000000000000000000000000000046001600160a01b0316610cd3611a4a565b6001600160a01b031614610cf95760405162461bcd60e51b8152600401610ba79061364e565b610d0282611a65565b61069d82826001611a6d565b5f306001600160a01b037f00000000000000000000000001670000000000000000000000000000000000041614610dad5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610ba7565b505f5160206141d45f395f51905f5290565b610dc7611cbd565b610c575f611d17565b60655433906001600160a01b03168114610e3e5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610ba7565b610c2c81611d17565b610e5b60c954610100900460ff1660021490565b15610e795760405163bae6e2a960e01b815260040160405180910390fd5b6002610e8760c95460ff1690565b60ff1603610ea85760405163dfc60d8560e01b815260040160405180910390fd5b610eb26002611273565b5f80808080610ec38688018861369a565b945094509450945094505f610ed6611d30565b9050610ee184611e51565b5f610eee8786868661137f565b9050610f036001600160a01b0386163461146f565b846001600160a01b0316866001600160a01b0316835f01517f895f73e418d1bbbad2a311d085fad00e5d98a960e9f2afa4b942071d39bec43a85604001518b60200151868a8a604051610f5a9594939291906137bb565b60405180910390a45050505050505061069d6001611273565b610f7b611e8d565b610c57336001611cb9565b5f610f8f611a4a565b905090565b61012d6020525f9081526040902080546001820180546001600160401b03831693600160401b9093046001600160a01b0316929190610fd290613813565b80601f0160208091040260200160405190810160405280929190818152602001828054610ffe90613813565b80156110495780601f1061102057610100808354040283529160200191611049565b820191905f5260205f20905b81548152906001019060200180831161102c57829003601f168201915b50505050509080600201805461105e90613813565b80601f016020809104026020016040519081016040528092919081815260200182805461108a90613813565b80156110d55780601f106110ac576101008083540402835291602001916110d5565b820191905f5260205f20905b8154815290600101906020018083116110b857829003601f168201915b5050505050905084565b5f610c3e468484611bd7565b5f54610100900460ff161580801561110957505f54600160ff909116105b806111225750303b15801561112257505f5460ff166001145b6111855760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ba7565b5f805460ff1916600117905580156111a6575f805461ff0019166101001790555b6111b08383611efe565b6111b8611f38565b80156111fd575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b61120a611cbd565b606580546001600160a01b0383166001600160a01b0319909116811790915561123b6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b6112ba8160016110df565b6001600160a01b0316336001600160a01b0316146112eb57604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611327573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061134b9190613845565b60208101519092506001600160a01b0316331461137b57604051632583296b60e01b815260040160405180910390fd5b5090565b5f46855f01516001600160401b0316036113fd57506020840151604051631759616b60e11b81526001600160a01b03821690632eb2c2d6906113cb9030908890889088906004016138ad565b5f604051808303815f87803b1580156113e2575f5ffd5b505af11580156113f4573d5f5f3e3d5ffd5b50505050611467565b61140685611f5e565b60405163d81d0a1560e01b81529091506001600160a01b0382169063d81d0a159061143990879087908790600401613906565b5f604051808303815f87803b158015611450575f5ffd5b505af1158015611462573d5f5f3e3d5ffd5b505050505b949350505050565b61069d82825a611fa5565b5f6001600160e01b0319821662bc399d60e11b14806114a957506001600160e01b03198216637f07c94760e01b145b806106ba57506001600160e01b031982166301ffc9a760e01b1492915050565b5f6001600160e01b03198216630271189760e51b14806106ba57506301ffc9a760e01b6001600160e01b03198316146106ba565b5f6001600160a01b0383163b61151457505f6106ba565b6040516301ffc9a760e01b81526001600160e01b0319831660048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa92505050801561157e575060408051601f3d908101601f1916820190925261157b9181019061393b565b60015b156106ba579392505050565b604080516080810182525f808252602082015260609181018290528082018290525f61012d816115c060a0870160808801612a61565b6001600160a01b03908116825260208201929092526040015f208054909250600160401b900416156118b3576040805160808101825282546001600160401b0381168252600160401b90046001600160a01b0316602082015260018301805491928492908401919061163190613813565b80601f016020809104026020016040519081016040528092919081815260200182805461165d90613813565b80156116a85780601f1061167f576101008083540402835291602001916116a8565b820191905f5260205f20905b81548152906001019060200180831161168b57829003601f168201915b505050505081526020016002820180546116c190613813565b80601f01602080910402602001604051908101604052809291908181526020018280546116ed90613813565b80156117385780601f1061170f57610100808354040283529160200191611738565b820191905f5260205f20905b81548152906001019060200180831161171b57829003601f168201915b50505050508152505091508360800160208101906117569190612a61565b6001600160a01b0316632eb2c2d6333061177360c08901896133b0565b61178060e08b018b6133b0565b6040518763ffffffff1660e01b81526004016117a196959493929190613956565b5f604051808303815f87803b1580156117b8575f5ffd5b505af11580156117ca573d5f5f3e3d5ffd5b505050505f5b6117dd60c08601866133b0565b90508110156118ad576117f660a0860160808701612a61565b6001600160a01b031663b390c0ab61181160c08801886133b0565b84818110611821576118216133f5565b90506020020135878060e0019061183891906133b0565b85818110611848576118486133f5565b905060200201356040518363ffffffff1660e01b8152600401611875929190918252602082015260400190565b5f604051808303815f87803b15801561188c575f5ffd5b505af115801561189e573d5f5f3e3d5ffd5b505050508060010190506117d0565b506119b0565b6040518060800160405280466001600160401b031681526020018560800160208101906118e09190612a61565b6001600160a01b0316815260200161190661190160a0880160808901612a61565b611fe8565b815260200161192361191e60a0880160808901612a61565b612092565b9052915061193760a0850160808601612a61565b6001600160a01b0316632eb2c2d6333061195460c08901896133b0565b61196160e08b018b6133b0565b6040518763ffffffff1660e01b815260040161198296959493929190613956565b5f604051808303815f87803b158015611999575f5ffd5b505af11580156119ab573d5f5f3e3d5ffd5b505050505b5030637f07c94782336119c96060880160408901612a61565b6119d660c08901896133b0565b6119e360e08b018b6133b0565b6040516020016119f997969594939291906139b3565b60408051601f1981840301815290829052611a1691602401613a63565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050509150915091565b5f5160206141d45f395f51905f52546001600160a01b031690565b610c2c611cbd565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611aa0576111fd836120d8565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611afa575060408051601f3d908101601f19168201909252611af791810190613a75565b60015b611b5d5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610ba7565b5f5160206141d45f395f51905f528114611bcb5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610ba7565b506111fd838383612173565b5f611be2848461219d565b905081158015611bf957506001600160a01b038116155b15610c3e57604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610ba7565b611c3d60c954610100900460ff1660021490565b611c5a5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b61069d5b6033546001600160a01b03163314610c575760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ba7565b606580546001600160a01b0319169055610c2c8161223f565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611d618160016110df565b6001600160a01b0316336001600160a01b031614611d9257604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611dce573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611df29190613845565b91505f611e1483604001516109cd6c195c98cc4c4d4d57dd985d5b1d609a1b90565b9050806001600160a01b031683602001516001600160a01b031614611e4c57604051632583296b60e01b815260040160405180910390fd5b505090565b6001600160a01b0381161580611e6f57506001600160a01b03811630145b15610c2c57604051635b50f3f960e01b815260040160405180910390fd5b611ea160c954610100900460ff1660021490565b15611ebf5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611caf565b806001600160a01b038116611f265760405163538ba4f960e01b815260040160405180910390fd5b611f2f83612290565b6111fd826122ee565b5f54610100900460ff16610c575760405162461bcd60e51b8152600401610ba790613a8c565b80516001600160401b03165f90815261012e60209081526040808320828501516001600160a01b0390811685529252909120541680611fa0576106ba8261235e565b919050565b815f03611fb157505050565b611fcb83838360405180602001604052805f81525061253a565b6111fd57604051634c67134d60e11b815260040160405180910390fd5b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516060915f9182916001600160a01b0386169161202e9190613ad7565b5f60405180830381855afa9150503d805f8114612066576040519150601f19603f3d011682016040523d82523d5f602084013e61206b565b606091505b5091509150816120895760405180602001604052805f815250611467565b61146781612577565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516060915f9182916001600160a01b0386169161202e9190613ad7565b6001600160a01b0381163b6121455760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610ba7565b5f5160206141d45f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b61217c836126e4565b5f825111806121885750805b156111fd576121978383612723565b50505050565b6097545f906001600160a01b0316806121c957604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa15801561221b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114679190613af2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166122b65760405162461bcd60e51b8152600401610ba790613a8c565b6122be611f38565b6122dc6001600160a01b038216156122d65781611d17565b33611d17565b5060c9805461ff001916610100179055565b5f54610100900460ff166123145760405162461bcd60e51b8152600401610ba790613a8c565b6001600160401b0346111561233c5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f6123726033546001600160a01b031690565b60975460208501518551604080880151606089015191516123a396956001600160a01b031694939290602401613b0d565b60408051601f198184030181529190526020810180516001600160e01b03166377c6257360e11b17905290506123eb6e627269646765645f6572633131353560881b5f6110df565b816040516123f890612854565b612403929190613b6e565b604051809103905ff08015801561241c573d5f5f3e3d5ffd5b506001600160a01b038082165f90815261012d60209081526040918290208751815492890151909416600160401b026001600160e01b03199092166001600160401b0390941693909317178255850151919350849160018201906124809082613bdc565b50606082015160028201906124959082613bdc565b505083516001600160401b039081165f90815261012e6020908152604080832082890180516001600160a01b039081168652919093529281902080546001600160a01b03191688851690811790915591518851828a015160608b01519351949750919094169493909316927f44977f2d30fe1e3aee2c1476f2f95aaacaf34e44b9359c403da01fcc93fd751b9261252c9290613c96565b60405180910390a450919050565b5f6001600160a01b03851661256257604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b6060604082511061259657818060200190518101906106ba9190613cba565b81516020036126d1575f5b60208160ff161080156125d65750828160ff16815181106125c4576125c46133f5565b01602001516001600160f81b03191615155b156125ed57806125e581613ceb565b9150506125a1565b5f8160ff166001600160401b0381111561260957612609612ae7565b6040519080825280601f01601f191660200182016040528015612633576020820181803683370190505b5090505f91505b60208260ff1610801561266f5750838260ff168151811061265d5761265d6133f5565b01602001516001600160f81b03191615155b15610c3e57838260ff1681518110612689576126896133f5565b602001015160f81c60f81b818360ff16815181106126a9576126a96133f5565b60200101906001600160f81b03191690815f1a905350816126c981613ceb565b92505061263a565b505060408051602081019091525f815290565b6126ed816120d8565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610c3e83836040518060600160405280602781526020016141f46027913960605f5f856001600160a01b03168560405161275f9190613ad7565b5f60405180830381855af49150503d805f8114612797576040519150601f19603f3d011682016040523d82523d5f602084013e61279c565b606091505b50915091506127ad868383876127b7565b9695505050505050565b606083156128255782515f0361281e576001600160a01b0385163b61281e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ba7565b5081611467565b611467838381511561283a5781518083602001fd5b8060405162461bcd60e51b8152600401610ba79190613a63565b6104ca80613d0a83390190565b5f5f60408385031215612872575f5ffd5b82356001600160401b03811115612887575f5ffd5b83016101608186031215612899575f5ffd5b946020939093013593505050565b5f602082840312156128b7575f5ffd5b81356001600160e01b031981168114610c3e575f5ffd5b5f602082840312156128de575f5ffd5b81356001600160401b038111156128f3575f5ffd5b82016101008185031215610c3e575f5ffd5b5f5b8381101561291f578181015183820152602001612907565b50505f910152565b5f815180845261293e816020860160208601612905565b601f01601f19169290920160200192915050565b6020815261296c6020820183516001600160401b03169052565b5f602083015161298760408401826001600160401b03169052565b50604083015163ffffffff811660608401525060608301516001600160a01b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160401b03811660e08401525060e08301516001600160a01b038116610100840152506101008301516001600160a01b0381166101208401525061012083015161014083015261014083015161016080840152611467610180840182612927565b6001600160a01b0381168114610c2c575f5ffd5b8035611fa081612a42565b5f60208284031215612a71575f5ffd5b8135610c3e81612a42565b6001600160401b0381168114610c2c575f5ffd5b8035611fa081612a7c565b8015158114610c2c575f5ffd5b5f5f5f60608486031215612aba575f5ffd5b8335612ac581612a7c565b9250602084013591506040840135612adc81612a9b565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b0381118282101715612b1d57612b1d612ae7565b60405290565b60405161010081016001600160401b0381118282101715612b1d57612b1d612ae7565b60405161016081016001600160401b0381118282101715612b1d57612b1d612ae7565b604051601f8201601f191681016001600160401b0381118282101715612b9157612b91612ae7565b604052919050565b5f6001600160401b03821115612bb157612bb1612ae7565b50601f01601f191660200190565b5f82601f830112612bce575f5ffd5b8135602083015f612be6612be184612b99565b612b69565b9050828152858383011115612bf9575f5ffd5b828260208301375f92810160200192909252509392505050565b5f5f60408385031215612c24575f5ffd5b8235612c2f81612a42565b915060208301356001600160401b03811115612c49575f5ffd5b612c5585828601612bbf565b9150509250929050565b5f5f60408385031215612c70575f5ffd5b823591506020830135612c8281612a42565b809150509250929050565b5f5f83601f840112612c9d575f5ffd5b5081356001600160401b03811115612cb3575f5ffd5b602083019150836020828501011115612cca575f5ffd5b9250929050565b5f5f60208385031215612ce2575f5ffd5b82356001600160401b03811115612cf7575f5ffd5b612d0385828601612c8d565b90969095509350505050565b6001600160401b03851681526001600160a01b03841660208201526080604082018190525f90612d4190830185612927565b8281036060840152612d538185612927565b979650505050505050565b5f5f60408385031215612d6f575f5ffd5b823591506020830135612c8281612a9b565b5f5f83601f840112612d91575f5ffd5b5081356001600160401b03811115612da7575f5ffd5b6020830191508360208260051b8501011115612cca575f5ffd5b5f5f5f5f5f5f5f5f60a0898b031215612dd8575f5ffd5b8835612de381612a42565b97506020890135612df381612a42565b965060408901356001600160401b03811115612e0d575f5ffd5b612e198b828c01612d81565b90975095505060608901356001600160401b03811115612e37575f5ffd5b612e438b828c01612d81565b90955093505060808901356001600160401b03811115612e61575f5ffd5b612e6d8b828c01612c8d565b999c989b5096995094979396929594505050565b5f5f60408385031215612e92575f5ffd5b8235612e9d81612a42565b91506020830135612c8281612a42565b5f5f5f5f5f5f60a08789031215612ec2575f5ffd5b8635612ecd81612a42565b95506020870135612edd81612a42565b9450604087013593506060870135925060808701356001600160401b03811115612f05575f5ffd5b612f1189828a01612c8d565b979a9699509497509295939492505050565b5f5f8335601e19843603018112612f38575f5ffd5b8301803591506001600160401b03821115612f51575f5ffd5b602001915036819003821315612cca575f5ffd5b5f5f85851115612f73575f5ffd5b83861115612f7f575f5ffd5b5050820193919092039150565b5f60208284031215612f9c575f5ffd5b81356001600160401b03811115612fb1575f5ffd5b61146784828501612bbf565b8051611fa081612a7c565b8051611fa081612a42565b5f82601f830112612fe2575f5ffd5b8151602083015f612ff5612be184612b99565b9050828152858383011115613008575f5ffd5b613016836020830184612905565b95945050505050565b5f6001600160401b0382111561303757613037612ae7565b5060051b60200190565b5f82601f830112613050575f5ffd5b815161305e612be18261301f565b8082825260208201915060208360051b86010192508583111561307f575f5ffd5b602085015b8381101561309c578051835260209283019201613084565b5095945050505050565b5f5f5f5f5f60a086880312156130ba575f5ffd5b85516001600160401b038111156130cf575f5ffd5b8601608081890312156130e0575f5ffd5b6130e8612afb565b81516130f381612a7c565b8152602082015161310381612a42565b602082015260408201516001600160401b03811115613120575f5ffd5b61312c8a828501612fd3565b60408301525060608201516001600160401b0381111561314a575f5ffd5b6131568a828501612fd3565b606083015250955061316c905060208701612fc8565b935061317a60408701612fc8565b925060608601516001600160401b03811115613194575f5ffd5b6131a088828901613041565b92505060808601516001600160401b038111156131bb575f5ffd5b6131c788828901613041565b9150509295509295909350565b5f8151808452602084019350602083015f5b828110156132045781518652602095860195909101906001016131e6565b5093949350505050565b6001600160a01b038581168252841660208201526080604082018190525f90613239908301856131d4565b8281036060840152612d5381856131d4565b63ffffffff81168114610c2c575f5ffd5b8035611fa08161324b565b5f82601f830112613276575f5ffd5b8135613284612be18261301f565b8082825260208201915060208360051b8601019250858311156132a5575f5ffd5b602085015b8381101561309c5780358352602092830192016132aa565b5f61010082360312156132d3575f5ffd5b6132db612b23565b6132e483612a90565b81526132f260208401612a56565b602082015261330360408401612a56565b604082015261331460608401612a90565b606082015261332560808401612a56565b608082015261333660a0840161325c565b60a082015260c08301356001600160401b03811115613353575f5ffd5b61335f36828601613267565b60c08301525060e08301356001600160401b0381111561337d575f5ffd5b61338936828601613267565b60e08301525092915050565b5f602082840312156133a5575f5ffd5b8135610c3e81612a7c565b5f5f8335601e198436030181126133c5575f5ffd5b8301803591506001600160401b038211156133de575f5ffd5b6020019150600581901b3603821315612cca575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613419575f5ffd5b8135610c3e8161324b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156106ba576106ba613424565b8051611fa08161324b565b5f5f60408385031215613467575f5ffd5b825160208401519092506001600160401b03811115613484575f5ffd5b83016101608186031215613496575f5ffd5b61349e612b46565b6134a782612fbd565b81526134b560208301612fbd565b60208201526134c66040830161344b565b60408201526134d760608301612fc8565b60608201526134e860808301612fbd565b60808201526134f960a08301612fc8565b60a082015261350a60c08301612fbd565b60c082015261351b60e08301612fc8565b60e082015261352d6101008301612fc8565b61010082015261012082810151908201526101408201516001600160401b03811115613557575f5ffd5b61356387828501612fd3565b6101408301525080925050509250929050565b8183525f6001600160fb1b0383111561358d575f5ffd5b8260051b80836020870137939093016020019392505050565b6001600160401b03881681526001600160a01b0387811660208301528616604082015260a0606082018190525f906135e19083018688613576565b82810360808401526135f4818587613576565b9a9950505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f5f5f5f5f60a086880312156136ae575f5ffd5b85356001600160401b038111156136c3575f5ffd5b8601608081890312156136d4575f5ffd5b6136dc612afb565b81356136e781612a7c565b815260208201356136f781612a42565b602082015260408201356001600160401b03811115613714575f5ffd5b6137208a828501612bbf565b60408301525060608201356001600160401b0381111561373e575f5ffd5b61374a8a828501612bbf565b6060830152509550613760905060208701612a56565b935061376e60408701612a56565b925060608601356001600160401b03811115613788575f5ffd5b61379488828901613267565b92505060808601356001600160401b038111156137af575f5ffd5b6131c788828901613267565b6001600160401b03861681526001600160a01b0385811660208301528416604082015260a0606082018190525f906137f5908301856131d4565b828103608084015261380781856131d4565b98975050505050505050565b600181811c9082168061382757607f821691505b602082108103610b4157634e487b7160e01b5f52602260045260245ffd5b5f6060828403128015613856575f5ffd5b50604051606081016001600160401b038111828210171561387957613879612ae7565b60405282518152602083015161388e81612a42565b602082015260408301516138a181612a7c565b60408201529392505050565b6001600160a01b0385811682528416602082015260a0604082018190525f906138d8908301856131d4565b82810360608401526138ea81856131d4565b83810360809094019390935250505f8152602001949350505050565b6001600160a01b03841681526060602082018190525f90613929908301856131d4565b82810360408401526127ad81856131d4565b5f6020828403121561394b575f5ffd5b8151610c3e81612a9b565b6001600160a01b0387811682528616602082015260a0604082018190525f906139829083018688613576565b8281036060840152613995818587613576565b83810360809094019390935250505f81526020019695505050505050565b60a080825288516001600160401b03169082015260208801516001600160a01b031660c08201526040880151608060e08301525f906139f6610120840182612927565b905060608a0151609f1984830301610100850152613a148282612927565b915050613a2c602084018a6001600160a01b03169052565b6001600160a01b03881660408401528281036060840152613a4e818789613576565b905082810360808401526135f4818587613576565b602081525f610c3e6020830184612927565b5f60208284031215613a85575f5ffd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f8251613ae8818460208701612905565b9190910192915050565b5f60208284031215613b02575f5ffd5b8151610c3e81612a42565b6001600160a01b0387811682528681166020830152851660408201526001600160401b038416606082015260c0608082018190525f90613b4f90830185612927565b82810360a0840152613b618185612927565b9998505050505050505050565b6001600160a01b03831681526040602082018190525f90610c3b90830184612927565b601f8211156111fd57805f5260205f20601f840160051c81016020851015613bb65750805b601f840160051c820191505b81811015613bd5575f8155600101613bc2565b5050505050565b81516001600160401b03811115613bf557613bf5612ae7565b613c0981613c038454613813565b84613b91565b6020601f821160018114613c3b575f8315613c245750848201515b5f19600385901b1c1916600184901b178455613bd5565b5f84815260208120601f198516915b82811015613c6a5787850151825560209485019460019092019101613c4a565b5084821015613c8757868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b604081525f613ca86040830185612927565b82810360208401526130168185612927565b5f60208284031215613cca575f5ffd5b81516001600160401b03811115613cdf575f5ffd5b61146784828501612fd3565b5f60ff821660ff8103613d0057613d00613424565b6001019291505056fe60806040526040516104ca3803806104ca833981016040819052610022916102d2565b61002d82825f610034565b50506103ed565b61003d8361005f565b5f825111806100495750805b1561005a57610058838361009e565b505b505050565b610068816100ca565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606100c383836040518060600160405280602781526020016104a36027913961017d565b9392505050565b6001600160a01b0381163b61013c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f856001600160a01b03168560405161019991906103a0565b5f60405180830381855af49150503d805f81146101d1576040519150601f19603f3d011682016040523d82523d5f602084013e6101d6565b606091505b5090925090506101e8868383876101f2565b9695505050505050565b606083156102605782515f03610259576001600160a01b0385163b6102595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610133565b508161026a565b61026a8383610272565b949350505050565b8151156102825781518083602001fd5b8060405162461bcd60e51b815260040161013391906103bb565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156102ca5781810151838201526020016102b2565b50505f910152565b5f5f604083850312156102e3575f5ffd5b82516001600160a01b03811681146102f9575f5ffd5b60208401519092506001600160401b03811115610314575f5ffd5b8301601f81018513610324575f5ffd5b80516001600160401b0381111561033d5761033d61029c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561036b5761036b61029c565b604052818152828201602001871015610382575f5ffd5b6103938260208301602086016102b0565b8093505050509250929050565b5f82516103b18184602087016102b0565b9190910192915050565b602081525f82518060208401526103d98160408501602087016102b0565b601f01601f19169190910160400192915050565b60aa806103f95f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e67f8ea00e362cad72cd2e8e61f89b237848f76dd2a93bc34c0064a232f8158c64736f6c634300081b0033", + "code": "0x608060405260043610610195575f3560e01c8063715018a6116100e7578063a86f9d9e11610087578063e30c397811610062578063e30c3978146104a4578063f09a4016146104c1578063f23a6e61146104e0578063f2fde38b1461050c575f5ffd5b8063a86f9d9e14610401578063bc197c8114610420578063e07baba614610467575f5ffd5b80638456cb59116100c25780638456cb591461038d5780638abf6077146103a15780638da5cb5b146103b55780639aa8605c146103d2575f5ffd5b8063715018a61461035257806379ba5097146103665780637f07c9471461037a575f5ffd5b80633ab76e9f116101525780634f1ef2861161012d5780634f1ef286146102cb57806352d1902d146102de5780635c975abb146102f257806367090ccf14610312575f5ffd5b80633ab76e9f146102615780633eb6b8cf146102985780633f4ba83a146102b7575f5ffd5b80630178733a1461019957806301ffc9a7146101ae57806306fdde03146101e25780631f59a8301461020e5780633075db561461022e5780633659cfe614610242575b5f5ffd5b6101ac6101a7366004612861565b61052b565b005b3480156101b9575f5ffd5b506101cd6101c83660046128a7565b6106a1565b60405190151581526020015b60405180910390f35b3480156101ed575f5ffd5b506c195c98cc4c4d4d57dd985d5b1d609a1b5b6040519081526020016101d9565b61022161021c3660046128ce565b6106c0565b6040516101d99190612952565b348015610239575f5ffd5b506101cd610b47565b34801561024d575f5ffd5b506101ac61025c366004612a61565b610b5f565b34801561026c575f5ffd5b50609754610280906001600160a01b031681565b6040516001600160a01b0390911681526020016101d9565b3480156102a3575f5ffd5b506102806102b2366004612aa8565b610c2f565b3480156102c2575f5ffd5b506101ac610c45565b6101ac6102d9366004612c13565b610c59565b3480156102e9575f5ffd5b50610200610d0e565b3480156102fd575f5ffd5b506101cd60c954610100900460ff1660021490565b34801561031d575f5ffd5b5061028061032c366004612c5f565b61012e60209081525f92835260408084209091529082529020546001600160a01b031681565b34801561035d575f5ffd5b506101ac610dbf565b348015610371575f5ffd5b506101ac610dd0565b6101ac610388366004612cd1565b610e47565b348015610398575f5ffd5b506101ac610f73565b3480156103ac575f5ffd5b50610280610f86565b3480156103c0575f5ffd5b506033546001600160a01b0316610280565b3480156103dd575f5ffd5b506103f16103ec366004612a61565b610f94565b6040516101d99493929190612d0f565b34801561040c575f5ffd5b5061028061041b366004612d5e565b6110df565b34801561042b575f5ffd5b5061044e61043a366004612dc1565b63bc197c8160e01b98975050505050505050565b6040516001600160e01b031990911681526020016101d9565b348015610472575f5ffd5b5060c95461048c906201000090046001600160401b031681565b6040516001600160401b0390911681526020016101d9565b3480156104af575f5ffd5b506065546001600160a01b0316610280565b3480156104cc575f5ffd5b506101ac6104db366004612e81565b6110eb565b3480156104eb575f5ffd5b5061044e6104fa366004612ead565b63f23a6e6160e01b9695505050505050565b348015610517575f5ffd5b506101ac610526366004612a61565b611202565b61053f60c954610100900460ff1660021490565b1561055d5760405163bae6e2a960e01b815260040160405180910390fd5b600261056b60c95460ff1690565b60ff160361058c5760405163dfc60d8560e01b815260040160405180910390fd5b6105966002611273565b61059e611289565b505f6105ae610140840184612f23565b6105bc916004908290612f65565b8101906105c99190612f8c565b90505f5f5f838060200190518101906105e291906130a6565b94509450505092505f610609848860a00160208101906106029190612a61565b858561137f565b905061063361012088013561062460c08a0160a08b01612a61565b6001600160a01b03169061146f565b61064360c0880160a08901612a61565b6001600160a01b0316867fe48bef18455e47bca14864ab6e82dffa29df148b051c09de95aec44ecf13598c8660200151848787604051610686949392919061320e565b60405180910390a3505050505061069d6001611273565b5050565b5f6106ab8261147a565b806106ba57506106ba826114c9565b92915050565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e08201839052610100820183905261012082019290925261014081019190915261072e60c954610100900460ff1660021490565b1561074c5760405163bae6e2a960e01b815260040160405180910390fd5b610755826132c2565b8060e00151518160c00151511461077f5760405163196e8a4160e31b815260040160405180910390fd5b60808101516001600160a01b03166107aa576040516303f8a7d360e01b815260040160405180910390fd5b60026107b860c95460ff1690565b60ff16036107d95760405163dfc60d8560e01b815260040160405180910390fd5b6107e36002611273565b6107f36080840160608501613395565b6001600160401b031634101561081c57604051630178ce0b60e31b815260040160405180910390fd5b5f5b61082b60e08501856133b0565b905081101561087f5761084160e08501856133b0565b82818110610851576108516133f5565b905060200201355f0361087757604051634299323b60e11b815260040160405180910390fd5b60010161081e565b506108aa636cdb3d1360e11b61089b60a0860160808701612a61565b6001600160a01b0316906114fd565b6108c757604051633ee915f560e11b815260040160405180910390fd5b5f5f6108d28561158a565b6040805161016081019091525f808252929450909250602081016108fc6080890160608a01613395565b6001600160401b0316815260200161091a60c0890160a08a01613409565b63ffffffff1681525f6020808301829052604083019190915233606083015260809091019061094b90890189613395565b6001600160401b031681526020015f6001600160a01b03168860200160208101906109769190612a61565b6001600160a01b03160361098a573361099a565b61099a6040890160208a01612a61565b6001600160a01b031681526020908101906109d3906109bb908a018a613395565b6c195c98cc4c4d4d57dd985d5b1d609a1b5b5f610c2f565b6001600160a01b031681526020016109f16080890160608a01613395565b610a04906001600160401b031634613438565b815260200184905290505f610a226562726964676560d01b826110df565b6001600160a01b0316631bdb003734846040518363ffffffff1660e01b8152600401610a4e9190612952565b5f6040518083038185885af1158015610a69573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d908101601f19168201604052610a919190810190613456565b96509050610aa56060880160408901612a61565b6001600160a01b03168660a001516001600160a01b0316827fabbf62a1459339f9ac59136d313a5ccd83d2706cc6d4c04d90642520169144dc8960c0015187602001518c6080016020810190610afb9190612a61565b610b0860c08f018f6133b0565b8f8060e00190610b1891906133b0565b604051610b2b97969594939291906135a6565b60405180910390a450505050610b416001611273565b50919050565b5f6002610b5660c95460ff1690565b60ff1614905090565b6001600160a01b037f0000000000000000000000000167010000000000000000000000000000000004163003610bb05760405162461bcd60e51b8152600401610ba790613602565b60405180910390fd5b7f00000000000000000000000001670100000000000000000000000000000000046001600160a01b0316610be2611a4a565b6001600160a01b031614610c085760405162461bcd60e51b8152600401610ba79061364e565b610c1181611a65565b604080515f80825260208201909252610c2c91839190611a6d565b50565b5f610c3b848484611bd7565b90505b9392505050565b610c4d611c29565b610c57335f611cb9565b565b6001600160a01b037f0000000000000000000000000167010000000000000000000000000000000004163003610ca15760405162461bcd60e51b8152600401610ba790613602565b7f00000000000000000000000001670100000000000000000000000000000000046001600160a01b0316610cd3611a4a565b6001600160a01b031614610cf95760405162461bcd60e51b8152600401610ba79061364e565b610d0282611a65565b61069d82826001611a6d565b5f306001600160a01b037f00000000000000000000000001670100000000000000000000000000000000041614610dad5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610ba7565b505f5160206141d45f395f51905f5290565b610dc7611cbd565b610c575f611d17565b60655433906001600160a01b03168114610e3e5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610ba7565b610c2c81611d17565b610e5b60c954610100900460ff1660021490565b15610e795760405163bae6e2a960e01b815260040160405180910390fd5b6002610e8760c95460ff1690565b60ff1603610ea85760405163dfc60d8560e01b815260040160405180910390fd5b610eb26002611273565b5f80808080610ec38688018861369a565b945094509450945094505f610ed6611d30565b9050610ee184611e51565b5f610eee8786868661137f565b9050610f036001600160a01b0386163461146f565b846001600160a01b0316866001600160a01b0316835f01517f895f73e418d1bbbad2a311d085fad00e5d98a960e9f2afa4b942071d39bec43a85604001518b60200151868a8a604051610f5a9594939291906137bb565b60405180910390a45050505050505061069d6001611273565b610f7b611e8d565b610c57336001611cb9565b5f610f8f611a4a565b905090565b61012d6020525f9081526040902080546001820180546001600160401b03831693600160401b9093046001600160a01b0316929190610fd290613813565b80601f0160208091040260200160405190810160405280929190818152602001828054610ffe90613813565b80156110495780601f1061102057610100808354040283529160200191611049565b820191905f5260205f20905b81548152906001019060200180831161102c57829003601f168201915b50505050509080600201805461105e90613813565b80601f016020809104026020016040519081016040528092919081815260200182805461108a90613813565b80156110d55780601f106110ac576101008083540402835291602001916110d5565b820191905f5260205f20905b8154815290600101906020018083116110b857829003601f168201915b5050505050905084565b5f610c3e468484611bd7565b5f54610100900460ff161580801561110957505f54600160ff909116105b806111225750303b15801561112257505f5460ff166001145b6111855760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ba7565b5f805460ff1916600117905580156111a6575f805461ff0019166101001790555b6111b08383611efe565b6111b8611f38565b80156111fd575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b61120a611cbd565b606580546001600160a01b0383166001600160a01b0319909116811790915561123b6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60c9805460ff191660ff92909216919091179055565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b6112ba8160016110df565b6001600160a01b0316336001600160a01b0316146112eb57604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611327573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061134b9190613845565b60208101519092506001600160a01b0316331461137b57604051632583296b60e01b815260040160405180910390fd5b5090565b5f46855f01516001600160401b0316036113fd57506020840151604051631759616b60e11b81526001600160a01b03821690632eb2c2d6906113cb9030908890889088906004016138ad565b5f604051808303815f87803b1580156113e2575f5ffd5b505af11580156113f4573d5f5f3e3d5ffd5b50505050611467565b61140685611f5e565b60405163d81d0a1560e01b81529091506001600160a01b0382169063d81d0a159061143990879087908790600401613906565b5f604051808303815f87803b158015611450575f5ffd5b505af1158015611462573d5f5f3e3d5ffd5b505050505b949350505050565b61069d82825a611fa5565b5f6001600160e01b0319821662bc399d60e11b14806114a957506001600160e01b03198216637f07c94760e01b145b806106ba57506001600160e01b031982166301ffc9a760e01b1492915050565b5f6001600160e01b03198216630271189760e51b14806106ba57506301ffc9a760e01b6001600160e01b03198316146106ba565b5f6001600160a01b0383163b61151457505f6106ba565b6040516301ffc9a760e01b81526001600160e01b0319831660048201526001600160a01b038416906301ffc9a790602401602060405180830381865afa92505050801561157e575060408051601f3d908101601f1916820190925261157b9181019061393b565b60015b156106ba579392505050565b604080516080810182525f808252602082015260609181018290528082018290525f61012d816115c060a0870160808801612a61565b6001600160a01b03908116825260208201929092526040015f208054909250600160401b900416156118b3576040805160808101825282546001600160401b0381168252600160401b90046001600160a01b0316602082015260018301805491928492908401919061163190613813565b80601f016020809104026020016040519081016040528092919081815260200182805461165d90613813565b80156116a85780601f1061167f576101008083540402835291602001916116a8565b820191905f5260205f20905b81548152906001019060200180831161168b57829003601f168201915b505050505081526020016002820180546116c190613813565b80601f01602080910402602001604051908101604052809291908181526020018280546116ed90613813565b80156117385780601f1061170f57610100808354040283529160200191611738565b820191905f5260205f20905b81548152906001019060200180831161171b57829003601f168201915b50505050508152505091508360800160208101906117569190612a61565b6001600160a01b0316632eb2c2d6333061177360c08901896133b0565b61178060e08b018b6133b0565b6040518763ffffffff1660e01b81526004016117a196959493929190613956565b5f604051808303815f87803b1580156117b8575f5ffd5b505af11580156117ca573d5f5f3e3d5ffd5b505050505f5b6117dd60c08601866133b0565b90508110156118ad576117f660a0860160808701612a61565b6001600160a01b031663b390c0ab61181160c08801886133b0565b84818110611821576118216133f5565b90506020020135878060e0019061183891906133b0565b85818110611848576118486133f5565b905060200201356040518363ffffffff1660e01b8152600401611875929190918252602082015260400190565b5f604051808303815f87803b15801561188c575f5ffd5b505af115801561189e573d5f5f3e3d5ffd5b505050508060010190506117d0565b506119b0565b6040518060800160405280466001600160401b031681526020018560800160208101906118e09190612a61565b6001600160a01b0316815260200161190661190160a0880160808901612a61565b611fe8565b815260200161192361191e60a0880160808901612a61565b612092565b9052915061193760a0850160808601612a61565b6001600160a01b0316632eb2c2d6333061195460c08901896133b0565b61196160e08b018b6133b0565b6040518763ffffffff1660e01b815260040161198296959493929190613956565b5f604051808303815f87803b158015611999575f5ffd5b505af11580156119ab573d5f5f3e3d5ffd5b505050505b5030637f07c94782336119c96060880160408901612a61565b6119d660c08901896133b0565b6119e360e08b018b6133b0565b6040516020016119f997969594939291906139b3565b60408051601f1981840301815290829052611a1691602401613a63565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050509150915091565b5f5160206141d45f395f51905f52546001600160a01b031690565b610c2c611cbd565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611aa0576111fd836120d8565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611afa575060408051601f3d908101601f19168201909252611af791810190613a75565b60015b611b5d5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610ba7565b5f5160206141d45f395f51905f528114611bcb5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610ba7565b506111fd838383612173565b5f611be2848461219d565b905081158015611bf957506001600160a01b038116155b15610c3e57604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610ba7565b611c3d60c954610100900460ff1660021490565b611c5a5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b61069d5b6033546001600160a01b03163314610c575760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ba7565b606580546001600160a01b0319169055610c2c8161223f565b604080516060810182525f80825260208201819052918101919091526562726964676560d01b611d618160016110df565b6001600160a01b0316336001600160a01b031614611d9257604051630d85cccf60e11b815260040160405180910390fd5b336001600160a01b031663d0496d6a6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611dce573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611df29190613845565b91505f611e1483604001516109cd6c195c98cc4c4d4d57dd985d5b1d609a1b90565b9050806001600160a01b031683602001516001600160a01b031614611e4c57604051632583296b60e01b815260040160405180910390fd5b505090565b6001600160a01b0381161580611e6f57506001600160a01b03811630145b15610c2c57604051635b50f3f960e01b815260040160405180910390fd5b611ea160c954610100900460ff1660021490565b15611ebf5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611caf565b806001600160a01b038116611f265760405163538ba4f960e01b815260040160405180910390fd5b611f2f83612290565b6111fd826122ee565b5f54610100900460ff16610c575760405162461bcd60e51b8152600401610ba790613a8c565b80516001600160401b03165f90815261012e60209081526040808320828501516001600160a01b0390811685529252909120541680611fa0576106ba8261235e565b919050565b815f03611fb157505050565b611fcb83838360405180602001604052805f81525061253a565b6111fd57604051634c67134d60e11b815260040160405180910390fd5b60408051600481526024810182526020810180516001600160e01b03166395d89b4160e01b17905290516060915f9182916001600160a01b0386169161202e9190613ad7565b5f60405180830381855afa9150503d805f8114612066576040519150601f19603f3d011682016040523d82523d5f602084013e61206b565b606091505b5091509150816120895760405180602001604052805f815250611467565b61146781612577565b60408051600481526024810182526020810180516001600160e01b03166306fdde0360e01b17905290516060915f9182916001600160a01b0386169161202e9190613ad7565b6001600160a01b0381163b6121455760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610ba7565b5f5160206141d45f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b61217c836126e4565b5f825111806121885750805b156111fd576121978383612723565b50505050565b6097545f906001600160a01b0316806121c957604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa15801561221b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114679190613af2565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff166122b65760405162461bcd60e51b8152600401610ba790613a8c565b6122be611f38565b6122dc6001600160a01b038216156122d65781611d17565b33611d17565b5060c9805461ff001916610100179055565b5f54610100900460ff166123145760405162461bcd60e51b8152600401610ba790613a8c565b6001600160401b0346111561233c5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f6123726033546001600160a01b031690565b60975460208501518551604080880151606089015191516123a396956001600160a01b031694939290602401613b0d565b60408051601f198184030181529190526020810180516001600160e01b03166377c6257360e11b17905290506123eb6e627269646765645f6572633131353560881b5f6110df565b816040516123f890612854565b612403929190613b6e565b604051809103905ff08015801561241c573d5f5f3e3d5ffd5b506001600160a01b038082165f90815261012d60209081526040918290208751815492890151909416600160401b026001600160e01b03199092166001600160401b0390941693909317178255850151919350849160018201906124809082613bdc565b50606082015160028201906124959082613bdc565b505083516001600160401b039081165f90815261012e6020908152604080832082890180516001600160a01b039081168652919093529281902080546001600160a01b03191688851690811790915591518851828a015160608b01519351949750919094169493909316927f44977f2d30fe1e3aee2c1476f2f95aaacaf34e44b9359c403da01fcc93fd751b9261252c9290613c96565b60405180910390a450919050565b5f6001600160a01b03851661256257604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b6060604082511061259657818060200190518101906106ba9190613cba565b81516020036126d1575f5b60208160ff161080156125d65750828160ff16815181106125c4576125c46133f5565b01602001516001600160f81b03191615155b156125ed57806125e581613ceb565b9150506125a1565b5f8160ff166001600160401b0381111561260957612609612ae7565b6040519080825280601f01601f191660200182016040528015612633576020820181803683370190505b5090505f91505b60208260ff1610801561266f5750838260ff168151811061265d5761265d6133f5565b01602001516001600160f81b03191615155b15610c3e57838260ff1681518110612689576126896133f5565b602001015160f81c60f81b818360ff16815181106126a9576126a96133f5565b60200101906001600160f81b03191690815f1a905350816126c981613ceb565b92505061263a565b505060408051602081019091525f815290565b6126ed816120d8565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610c3e83836040518060600160405280602781526020016141f46027913960605f5f856001600160a01b03168560405161275f9190613ad7565b5f60405180830381855af49150503d805f8114612797576040519150601f19603f3d011682016040523d82523d5f602084013e61279c565b606091505b50915091506127ad868383876127b7565b9695505050505050565b606083156128255782515f0361281e576001600160a01b0385163b61281e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ba7565b5081611467565b611467838381511561283a5781518083602001fd5b8060405162461bcd60e51b8152600401610ba79190613a63565b6104ca80613d0a83390190565b5f5f60408385031215612872575f5ffd5b82356001600160401b03811115612887575f5ffd5b83016101608186031215612899575f5ffd5b946020939093013593505050565b5f602082840312156128b7575f5ffd5b81356001600160e01b031981168114610c3e575f5ffd5b5f602082840312156128de575f5ffd5b81356001600160401b038111156128f3575f5ffd5b82016101008185031215610c3e575f5ffd5b5f5b8381101561291f578181015183820152602001612907565b50505f910152565b5f815180845261293e816020860160208601612905565b601f01601f19169290920160200192915050565b6020815261296c6020820183516001600160401b03169052565b5f602083015161298760408401826001600160401b03169052565b50604083015163ffffffff811660608401525060608301516001600160a01b03811660808401525060808301516001600160401b03811660a08401525060a08301516001600160a01b03811660c08401525060c08301516001600160401b03811660e08401525060e08301516001600160a01b038116610100840152506101008301516001600160a01b0381166101208401525061012083015161014083015261014083015161016080840152611467610180840182612927565b6001600160a01b0381168114610c2c575f5ffd5b8035611fa081612a42565b5f60208284031215612a71575f5ffd5b8135610c3e81612a42565b6001600160401b0381168114610c2c575f5ffd5b8035611fa081612a7c565b8015158114610c2c575f5ffd5b5f5f5f60608486031215612aba575f5ffd5b8335612ac581612a7c565b9250602084013591506040840135612adc81612a9b565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b0381118282101715612b1d57612b1d612ae7565b60405290565b60405161010081016001600160401b0381118282101715612b1d57612b1d612ae7565b60405161016081016001600160401b0381118282101715612b1d57612b1d612ae7565b604051601f8201601f191681016001600160401b0381118282101715612b9157612b91612ae7565b604052919050565b5f6001600160401b03821115612bb157612bb1612ae7565b50601f01601f191660200190565b5f82601f830112612bce575f5ffd5b8135602083015f612be6612be184612b99565b612b69565b9050828152858383011115612bf9575f5ffd5b828260208301375f92810160200192909252509392505050565b5f5f60408385031215612c24575f5ffd5b8235612c2f81612a42565b915060208301356001600160401b03811115612c49575f5ffd5b612c5585828601612bbf565b9150509250929050565b5f5f60408385031215612c70575f5ffd5b823591506020830135612c8281612a42565b809150509250929050565b5f5f83601f840112612c9d575f5ffd5b5081356001600160401b03811115612cb3575f5ffd5b602083019150836020828501011115612cca575f5ffd5b9250929050565b5f5f60208385031215612ce2575f5ffd5b82356001600160401b03811115612cf7575f5ffd5b612d0385828601612c8d565b90969095509350505050565b6001600160401b03851681526001600160a01b03841660208201526080604082018190525f90612d4190830185612927565b8281036060840152612d538185612927565b979650505050505050565b5f5f60408385031215612d6f575f5ffd5b823591506020830135612c8281612a9b565b5f5f83601f840112612d91575f5ffd5b5081356001600160401b03811115612da7575f5ffd5b6020830191508360208260051b8501011115612cca575f5ffd5b5f5f5f5f5f5f5f5f60a0898b031215612dd8575f5ffd5b8835612de381612a42565b97506020890135612df381612a42565b965060408901356001600160401b03811115612e0d575f5ffd5b612e198b828c01612d81565b90975095505060608901356001600160401b03811115612e37575f5ffd5b612e438b828c01612d81565b90955093505060808901356001600160401b03811115612e61575f5ffd5b612e6d8b828c01612c8d565b999c989b5096995094979396929594505050565b5f5f60408385031215612e92575f5ffd5b8235612e9d81612a42565b91506020830135612c8281612a42565b5f5f5f5f5f5f60a08789031215612ec2575f5ffd5b8635612ecd81612a42565b95506020870135612edd81612a42565b9450604087013593506060870135925060808701356001600160401b03811115612f05575f5ffd5b612f1189828a01612c8d565b979a9699509497509295939492505050565b5f5f8335601e19843603018112612f38575f5ffd5b8301803591506001600160401b03821115612f51575f5ffd5b602001915036819003821315612cca575f5ffd5b5f5f85851115612f73575f5ffd5b83861115612f7f575f5ffd5b5050820193919092039150565b5f60208284031215612f9c575f5ffd5b81356001600160401b03811115612fb1575f5ffd5b61146784828501612bbf565b8051611fa081612a7c565b8051611fa081612a42565b5f82601f830112612fe2575f5ffd5b8151602083015f612ff5612be184612b99565b9050828152858383011115613008575f5ffd5b613016836020830184612905565b95945050505050565b5f6001600160401b0382111561303757613037612ae7565b5060051b60200190565b5f82601f830112613050575f5ffd5b815161305e612be18261301f565b8082825260208201915060208360051b86010192508583111561307f575f5ffd5b602085015b8381101561309c578051835260209283019201613084565b5095945050505050565b5f5f5f5f5f60a086880312156130ba575f5ffd5b85516001600160401b038111156130cf575f5ffd5b8601608081890312156130e0575f5ffd5b6130e8612afb565b81516130f381612a7c565b8152602082015161310381612a42565b602082015260408201516001600160401b03811115613120575f5ffd5b61312c8a828501612fd3565b60408301525060608201516001600160401b0381111561314a575f5ffd5b6131568a828501612fd3565b606083015250955061316c905060208701612fc8565b935061317a60408701612fc8565b925060608601516001600160401b03811115613194575f5ffd5b6131a088828901613041565b92505060808601516001600160401b038111156131bb575f5ffd5b6131c788828901613041565b9150509295509295909350565b5f8151808452602084019350602083015f5b828110156132045781518652602095860195909101906001016131e6565b5093949350505050565b6001600160a01b038581168252841660208201526080604082018190525f90613239908301856131d4565b8281036060840152612d5381856131d4565b63ffffffff81168114610c2c575f5ffd5b8035611fa08161324b565b5f82601f830112613276575f5ffd5b8135613284612be18261301f565b8082825260208201915060208360051b8601019250858311156132a5575f5ffd5b602085015b8381101561309c5780358352602092830192016132aa565b5f61010082360312156132d3575f5ffd5b6132db612b23565b6132e483612a90565b81526132f260208401612a56565b602082015261330360408401612a56565b604082015261331460608401612a90565b606082015261332560808401612a56565b608082015261333660a0840161325c565b60a082015260c08301356001600160401b03811115613353575f5ffd5b61335f36828601613267565b60c08301525060e08301356001600160401b0381111561337d575f5ffd5b61338936828601613267565b60e08301525092915050565b5f602082840312156133a5575f5ffd5b8135610c3e81612a7c565b5f5f8335601e198436030181126133c5575f5ffd5b8301803591506001600160401b038211156133de575f5ffd5b6020019150600581901b3603821315612cca575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613419575f5ffd5b8135610c3e8161324b565b634e487b7160e01b5f52601160045260245ffd5b818103818111156106ba576106ba613424565b8051611fa08161324b565b5f5f60408385031215613467575f5ffd5b825160208401519092506001600160401b03811115613484575f5ffd5b83016101608186031215613496575f5ffd5b61349e612b46565b6134a782612fbd565b81526134b560208301612fbd565b60208201526134c66040830161344b565b60408201526134d760608301612fc8565b60608201526134e860808301612fbd565b60808201526134f960a08301612fc8565b60a082015261350a60c08301612fbd565b60c082015261351b60e08301612fc8565b60e082015261352d6101008301612fc8565b61010082015261012082810151908201526101408201516001600160401b03811115613557575f5ffd5b61356387828501612fd3565b6101408301525080925050509250929050565b8183525f6001600160fb1b0383111561358d575f5ffd5b8260051b80836020870137939093016020019392505050565b6001600160401b03881681526001600160a01b0387811660208301528616604082015260a0606082018190525f906135e19083018688613576565b82810360808401526135f4818587613576565b9a9950505050505050505050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b5f5f5f5f5f60a086880312156136ae575f5ffd5b85356001600160401b038111156136c3575f5ffd5b8601608081890312156136d4575f5ffd5b6136dc612afb565b81356136e781612a7c565b815260208201356136f781612a42565b602082015260408201356001600160401b03811115613714575f5ffd5b6137208a828501612bbf565b60408301525060608201356001600160401b0381111561373e575f5ffd5b61374a8a828501612bbf565b6060830152509550613760905060208701612a56565b935061376e60408701612a56565b925060608601356001600160401b03811115613788575f5ffd5b61379488828901613267565b92505060808601356001600160401b038111156137af575f5ffd5b6131c788828901613267565b6001600160401b03861681526001600160a01b0385811660208301528416604082015260a0606082018190525f906137f5908301856131d4565b828103608084015261380781856131d4565b98975050505050505050565b600181811c9082168061382757607f821691505b602082108103610b4157634e487b7160e01b5f52602260045260245ffd5b5f6060828403128015613856575f5ffd5b50604051606081016001600160401b038111828210171561387957613879612ae7565b60405282518152602083015161388e81612a42565b602082015260408301516138a181612a7c565b60408201529392505050565b6001600160a01b0385811682528416602082015260a0604082018190525f906138d8908301856131d4565b82810360608401526138ea81856131d4565b83810360809094019390935250505f8152602001949350505050565b6001600160a01b03841681526060602082018190525f90613929908301856131d4565b82810360408401526127ad81856131d4565b5f6020828403121561394b575f5ffd5b8151610c3e81612a9b565b6001600160a01b0387811682528616602082015260a0604082018190525f906139829083018688613576565b8281036060840152613995818587613576565b83810360809094019390935250505f81526020019695505050505050565b60a080825288516001600160401b03169082015260208801516001600160a01b031660c08201526040880151608060e08301525f906139f6610120840182612927565b905060608a0151609f1984830301610100850152613a148282612927565b915050613a2c602084018a6001600160a01b03169052565b6001600160a01b03881660408401528281036060840152613a4e818789613576565b905082810360808401526135f4818587613576565b602081525f610c3e6020830184612927565b5f60208284031215613a85575f5ffd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f8251613ae8818460208701612905565b9190910192915050565b5f60208284031215613b02575f5ffd5b8151610c3e81612a42565b6001600160a01b0387811682528681166020830152851660408201526001600160401b038416606082015260c0608082018190525f90613b4f90830185612927565b82810360a0840152613b618185612927565b9998505050505050505050565b6001600160a01b03831681526040602082018190525f90610c3b90830184612927565b601f8211156111fd57805f5260205f20601f840160051c81016020851015613bb65750805b601f840160051c820191505b81811015613bd5575f8155600101613bc2565b5050505050565b81516001600160401b03811115613bf557613bf5612ae7565b613c0981613c038454613813565b84613b91565b6020601f821160018114613c3b575f8315613c245750848201515b5f19600385901b1c1916600184901b178455613bd5565b5f84815260208120601f198516915b82811015613c6a5787850151825560209485019460019092019101613c4a565b5084821015613c8757868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b604081525f613ca86040830185612927565b82810360208401526130168185612927565b5f60208284031215613cca575f5ffd5b81516001600160401b03811115613cdf575f5ffd5b61146784828501612fd3565b5f60ff821660ff8103613d0057613d00613424565b6001019291505056fe60806040526040516104ca3803806104ca833981016040819052610022916102d2565b61002d82825f610034565b50506103ed565b61003d8361005f565b5f825111806100495750805b1561005a57610058838361009e565b505b505050565b610068816100ca565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606100c383836040518060600160405280602781526020016104a36027913961017d565b9392505050565b6001600160a01b0381163b61013c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f856001600160a01b03168560405161019991906103a0565b5f60405180830381855af49150503d805f81146101d1576040519150601f19603f3d011682016040523d82523d5f602084013e6101d6565b606091505b5090925090506101e8868383876101f2565b9695505050505050565b606083156102605782515f03610259576001600160a01b0385163b6102595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610133565b508161026a565b61026a8383610272565b949350505050565b8151156102825781518083602001fd5b8060405162461bcd60e51b815260040161013391906103bb565b634e487b7160e01b5f52604160045260245ffd5b5f5b838110156102ca5781810151838201526020016102b2565b50505f910152565b5f5f604083850312156102e3575f5ffd5b82516001600160a01b03811681146102f9575f5ffd5b60208401519092506001600160401b03811115610314575f5ffd5b8301601f81018513610324575f5ffd5b80516001600160401b0381111561033d5761033d61029c565b604051601f8201601f19908116603f011681016001600160401b038111828210171561036b5761036b61029c565b604052818152828201602001871015610382575f5ffd5b6103938260208301602086016102b0565b8093505050509250929050565b5f82516103b18184602087016102b0565b9190910192915050565b602081525f82518060208401526103d98160408501602087016102b0565b601f01601f19169190910160400192915050565b60aa806103f95f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220e67f8ea00e362cad72cd2e8e61f89b237848f76dd2a93bc34c0064a232f8158c64736f6c634300081b0033", "balance": "0x0" }, - "0x1670000000000000000000000000000000000004": { + "0x1670100000000000000000000000000000000004": { "contractName": "ERC1155Vault", "storage": { "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", - "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670000000000000000000000000000000000006", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000000004" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670100000000000000000000000000000000006", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167010000000000000000000000000000000004" }, "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", "balance": "0x0" }, - "0x0167000000000000000000000000000000010096": { + "0x0167010000000000000000000000000000010096": { "contractName": "BridgedERC20", "storage": {}, - "code": "0x608060405260043610610233575f3560e01c806370a0823111610129578063a77f1516116100a8578063dd62ed3e1161006d578063dd62ed3e14610684578063e07baba6146106a3578063e30c3978146106e0578063f12506c1146106fd578063f2fde38b14610711575f5ffd5b8063a77f1516146105e7578063a86f9d9e14610608578063a9059cbb14610627578063b8f2e0c514610646578063bb86ef9314610665575f5ffd5b80638456cb59116100ee5780638456cb591461056f5780638abf6077146105835780638da5cb5b1461059757806395d89b41146105b4578063a457c2d7146105c8575f5ffd5b806370a08231146104d3578063715018a61461050757806379ba50971461051b5780637cf8ed0d1461052f5780637e4746341461054f575f5ffd5b806339509351116101b557806342966c681161017a57806342966c681461045757806349d12605146104765780634f1ef2861461048c57806352d1902d1461049f5780635c975abb146104b3575f5ffd5b806339509351146103af5780633ab76e9f146103ce5780633eb6b8cf146104055780633f4ba83a1461042457806340c10f1914610438575f5ffd5b806323b872dd116101fb57806323b872dd146102ea57806326afaadd146103095780633075db561461034d578063313ce567146103615780633659cfe61461038e575f5ffd5b806301ffc9a71461023757806306fdde031461026b578063095ea7b31461028c5780630ae74548146102ab57806318160ddd146102cc575b5f5ffd5b348015610242575f5ffd5b5061025661025136600461218c565b610730565b60405190151581526020015b60405180910390f35b348015610276575f5ffd5b5061027f6107d2565b60405161026291906121d5565b348015610297575f5ffd5b506102566102a636600461221b565b610862565b3480156102b6575f5ffd5b5061012f5461025690600160a01b900460ff1681565b3480156102d7575f5ffd5b5060fd545b604051908152602001610262565b3480156102f5575f5ffd5b50610256610304366004612245565b610879565b348015610314575f5ffd5b5061032e61012d5461012e546001600160a01b0390911691565b604080516001600160a01b039093168352602083019190915201610262565b348015610358575f5ffd5b5061025661089e565b34801561036c575f5ffd5b5061012d54600160a01b900460ff165b60405160ff9091168152602001610262565b348015610399575f5ffd5b506103ad6103a8366004612283565b6108b6565b005b3480156103ba575f5ffd5b506102566103c936600461221b565b610986565b3480156103d9575f5ffd5b506097546103ed906001600160a01b031681565b6040516001600160a01b039091168152602001610262565b348015610410575f5ffd5b506103ed61041f3660046122b2565b6109a7565b34801561042f575f5ffd5b506103ad6109bb565b348015610443575f5ffd5b506103ad61045236600461221b565b6109cf565b348015610462575f5ffd5b506103ad6104713660046122f8565b610ae9565b348015610481575f5ffd5b506102dc61012e5481565b6103ad61049a366004612323565b610c26565b3480156104aa575f5ffd5b506102dc610cdb565b3480156104be575f5ffd5b5061025660c954610100900460ff1660021490565b3480156104de575f5ffd5b506102dc6104ed366004612283565b6001600160a01b03165f90815260fb602052604090205490565b348015610512575f5ffd5b506103ad610d8c565b348015610526575f5ffd5b506103ad610d9d565b34801561053a575f5ffd5b5061012d546103ed906001600160a01b031681565b34801561055a575f5ffd5b5061012f546103ed906001600160a01b031681565b34801561057a575f5ffd5b506103ad610e14565b34801561058e575f5ffd5b506103ed610e27565b3480156105a2575f5ffd5b506033546001600160a01b03166103ed565b3480156105bf575f5ffd5b5061027f610e35565b3480156105d3575f5ffd5b506102566105e236600461221b565b610e44565b3480156105f2575f5ffd5b5061012d5461037c90600160a01b900460ff1681565b348015610613575f5ffd5b506103ed6106223660046123e6565b610ec9565b348015610632575f5ffd5b5061025661064136600461221b565b610ed5565b348015610651575f5ffd5b506103ad610660366004612410565b610ee2565b348015610670575f5ffd5b506103ad61067f36600461247e565b61105f565b34801561068f575f5ffd5b506102dc61069e366004612544565b61121f565b3480156106ae575f5ffd5b5060c9546106c8906201000090046001600160401b031681565b6040516001600160401b039091168152602001610262565b3480156106eb575f5ffd5b506065546001600160a01b03166103ed565b348015610708575f5ffd5b50610256611249565b34801561071c575f5ffd5b506103ad61072b366004612283565b611274565b5f6001600160e01b0319821663093e326b60e21b148061076057506001600160e01b0319821663bb86ef9360e01b145b8061077b57506001600160e01b0319821663b8f2e0c560e01b145b8061079657506001600160e01b031982166336372b0760e01b145b806107b157506001600160e01b0319821663a219a02560e01b145b806107cc57506001600160e01b031982166301ffc9a760e01b145b92915050565b606060fe80546107e19061257b565b80601f016020809104026020016040519081016040528092919081815260200182805461080d9061257b565b80156108585780601f1061082f57610100808354040283529160200191610858565b820191905f5260205f20905b81548152906001019060200180831161083b57829003601f168201915b5050505050905090565b5f3361086f8185856112e5565b5060019392505050565b5f33610886858285611408565b610891858585611480565b60019150505b9392505050565b5f60026108ad60c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000100961630036109075760405162461bcd60e51b81526004016108fe906125b3565b60405180910390fd5b7f00000000000000000000000001670000000000000000000000000000000100966001600160a01b0316610939611634565b6001600160a01b03161461095f5760405162461bcd60e51b81526004016108fe906125ff565b6109688161164f565b604080515f8082526020820190925261098391839190611657565b50565b5f3361086f818585610998838361121f565b6109a2919061264b565b6112e5565b5f6109b38484846117c1565b949350505050565b6109c3611813565b6109cd335f6118a3565b565b6109e360c954610100900460ff1660021490565b15610a015760405163bae6e2a960e01b815260040160405180910390fd5b6002610a0f60c95460ff1690565b60ff1603610a305760405163dfc60d8560e01b815260040160405180910390fd5b610a3a60026118ab565b610a42611249565b15610a605760405163270bf77560e01b815260040160405180910390fd5b61012f546001600160a01b031633819003610ac757826001600160a01b0316816001600160a01b03167fe502aa3e015149f4b76a0b2b5394e3100903c4af27c3ddc98385395d3f55252684604051610aba91815260200190565b60405180910390a3610ad0565b610ad0336118c1565b610ada838361193d565b50610ae560016118ab565b5050565b610afd60c954610100900460ff1660021490565b15610b1b5760405163bae6e2a960e01b815260040160405180910390fd5b6002610b2960c95460ff1690565b60ff1603610b4a5760405163dfc60d8560e01b815260040160405180910390fd5b610b5460026118ab565b610b5c611249565b15610c095761012f546040518281526001600160a01b0390911690339082907f638edf84937fb2534b47cac985ea84d6ea4f4076315b56ea1c784d26b87e2bcb9060200160405180910390a36040516340c10f1960e01b8152336004820152602481018390526001600160a01b038216906340c10f19906044015f604051808303815f87803b158015610bed575f5ffd5b505af1158015610bff573d5f5f3e3d5ffd5b5050505050610c12565b610c12336118c1565b610c1c3382611a07565b61098360016118ab565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000010096163003610c6e5760405162461bcd60e51b81526004016108fe906125b3565b7f00000000000000000000000001670000000000000000000000000000000100966001600160a01b0316610ca0611634565b6001600160a01b031614610cc65760405162461bcd60e51b81526004016108fe906125ff565b610ccf8261164f565b610ae582826001611657565b5f306001600160a01b037f00000000000000000000000001670000000000000000000000000000000100961614610d7a5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016108fe565b505f5160206128085f395f51905f5290565b610d94611b44565b6109cd5f611b9e565b60655433906001600160a01b03168114610e0b5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016108fe565b61098381611b9e565b610e1c611bb7565b6109cd3360016118a3565b5f610e30611634565b905090565b606060ff80546107e19061257b565b5f3381610e51828661121f565b905083811015610eb15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108fe565b610ebe82868684036112e5565b506001949350505050565b5f6108974684846117c1565b5f3361086f818585611480565b610ef660c954610100900460ff1660021490565b15610f145760405163bae6e2a960e01b815260040160405180910390fd5b6a195c98cc8c17dd985d5b1d60aa1b610f2e816001610ec9565b6001600160a01b0316336001600160a01b031614610f5f57604051630d85cccf60e11b815260040160405180910390fd5b6002610f6d60c95460ff1690565b60ff1603610f8e5760405163dfc60d8560e01b815260040160405180910390fd5b610f9860026118ab565b61012f546001600160a01b038481169116148015610fc9575061012f60149054906101000a900460ff161515821515145b15610fe75760405163c118d2f360e01b815260040160405180910390fd5b61012f80546001600160a01b0385166001600160a81b03199091168117600160a01b851515908102919091179092556040805191825260208201929092527fa6b6f959792843a48d9d03d13595f2de7c86ae0ce12ef0fa759dd911b205e565910160405180910390a161105a60016118ab565b505050565b5f54610100900460ff161580801561107d57505f54600160ff909116105b806110965750303b15801561109657505f5460ff166001145b6110f95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016108fe565b5f805460ff19166001179055801561111a575f805461ff0019166101001790555b6111248888611c28565b61112e8a8a611c64565b61119f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8b0181900481028201810190925289815292508991508890819084018382808284375f92019190915250611c9e92505050565b61012d805461012e89905560ff8816600160a01b026001600160a81b03199091166001600160a01b038b16171790558015611213575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6001600160a01b039182165f90815260fc6020908152604080832093909416825291909152205490565b61012f545f906001600160a01b031615801590610e3057505061012f54600160a01b900460ff161590565b61127c611b44565b606580546001600160a01b0383166001600160a01b031990911681179091556112ad6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001600160a01b0383166113475760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108fe565b6001600160a01b0382166113a85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108fe565b6001600160a01b038381165f81815260fc602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f611413848461121f565b90505f19811461147a578181101561146d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016108fe565b61147a84848484036112e5565b50505050565b6001600160a01b0383166114e45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108fe565b6001600160a01b0382166115465760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108fe565b611551838383611cce565b6001600160a01b0383165f90815260fb6020526040902054818110156115c85760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108fe565b6001600160a01b038085165f81815260fb602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116279086815260200190565b60405180910390a361147a565b5f5160206128085f395f51905f52546001600160a01b031690565b610983611b44565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561168a5761105a83611d09565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156116e4575060408051601f3d908101601f191682019092526116e19181019061266a565b60015b6117475760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016108fe565b5f5160206128085f395f51905f5281146117b55760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016108fe565b5061105a838383611da4565b5f6117cc8484611dc8565b9050811580156117e357506001600160a01b038116155b1561089757604051632b0d65db60e01b81526001600160401b0385166004820152602481018490526044016108fe565b61182760c954610100900460ff1660021490565b6118445760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610ae5611b44565b60c9805460ff191660ff92909216919091179055565b6a195c98cc8c17dd985d5b1d60aa1b6118e26033546001600160a01b031690565b6001600160a01b0316336001600160a01b03161415801561191f5750611909816001610ec9565b6001600160a01b0316336001600160a01b031614155b15610ae557604051630d85cccf60e11b815260040160405180910390fd5b6001600160a01b0382166119935760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016108fe565b61199e5f8383611cce565b8060fd5f8282546119af919061264b565b90915550506001600160a01b0382165f81815260fb60209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216611a675760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016108fe565b611a72825f83611cce565b6001600160a01b0382165f90815260fb602052604090205481811015611ae55760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016108fe565b6001600160a01b0383165f81815260fb60209081526040808320868603905560fd80548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6033546001600160a01b031633146109cd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fe565b606580546001600160a01b031916905561098381611e6a565b611bcb60c954610100900460ff1660021490565b15611be95760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611899565b6001600160a01b0382161580611c3c575080155b80611c4657504681145b15610ae55760405163c118d2f360e01b815260040160405180910390fd5b806001600160a01b038116611c8c5760405163538ba4f960e01b815260040160405180910390fd5b611c9583611ebb565b61105a82611f19565b5f54610100900460ff16611cc45760405162461bcd60e51b81526004016108fe90612681565b610ae58282611f89565b611ce260c954610100900460ff1660021490565b15611d005760405163bae6e2a960e01b815260040160405180910390fd5b61105a82611fc8565b6001600160a01b0381163b611d765760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016108fe565b5f5160206128085f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611dad83611ff1565b5f82511180611db95750805b1561105a5761147a8383612030565b6097545f906001600160a01b031680611df457604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611e46573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109b391906126cc565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16611ee15760405162461bcd60e51b81526004016108fe90612681565b611ee9612055565b611f076001600160a01b03821615611f015781611b9e565b33611b9e565b5060c9805461ff001916610100179055565b5f54610100900460ff16611f3f5760405162461bcd60e51b81526004016108fe90612681565b6001600160401b03461115611f675760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f54610100900460ff16611faf5760405162461bcd60e51b81526004016108fe90612681565b60fe611fbb8382612732565b5060ff61105a8282612732565b306001600160a01b0382160361098357604051630c292c9d60e21b815260040160405180910390fd5b611ffa81611d09565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061089783836040518060600160405280602781526020016128286027913961207b565b5f54610100900460ff166109cd5760405162461bcd60e51b81526004016108fe90612681565b60605f5f856001600160a01b03168560405161209791906127ec565b5f60405180830381855af49150503d805f81146120cf576040519150601f19603f3d011682016040523d82523d5f602084013e6120d4565b606091505b50915091506120e5868383876120ef565b9695505050505050565b6060831561215d5782515f03612156576001600160a01b0385163b6121565760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108fe565b50816109b3565b6109b383838151156121725781518083602001fd5b8060405162461bcd60e51b81526004016108fe91906121d5565b5f6020828403121561219c575f5ffd5b81356001600160e01b031981168114610897575f5ffd5b5f5b838110156121cd5781810151838201526020016121b5565b50505f910152565b602081525f82518060208401526121f38160408501602087016121b3565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610983575f5ffd5b5f5f6040838503121561222c575f5ffd5b823561223781612207565b946020939093013593505050565b5f5f5f60608486031215612257575f5ffd5b833561226281612207565b9250602084013561227281612207565b929592945050506040919091013590565b5f60208284031215612293575f5ffd5b813561089781612207565b803580151581146122ad575f5ffd5b919050565b5f5f5f606084860312156122c4575f5ffd5b83356001600160401b03811681146122da575f5ffd5b9250602084013591506122ef6040850161229e565b90509250925092565b5f60208284031215612308575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f60408385031215612334575f5ffd5b823561233f81612207565b915060208301356001600160401b03811115612359575f5ffd5b8301601f81018513612369575f5ffd5b80356001600160401b038111156123825761238261230f565b604051601f8201601f19908116603f011681016001600160401b03811182821017156123b0576123b061230f565b6040528181528282016020018710156123c7575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f604083850312156123f7575f5ffd5b823591506124076020840161229e565b90509250929050565b5f5f60408385031215612421575f5ffd5b823561242c81612207565b91506124076020840161229e565b5f5f83601f84011261244a575f5ffd5b5081356001600160401b03811115612460575f5ffd5b602083019150836020828501011115612477575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f5f60e08a8c031215612496575f5ffd5b89356124a181612207565b985060208a01356124b181612207565b975060408a01356124c181612207565b965060608a0135955060808a013560ff811681146124dd575f5ffd5b945060a08a01356001600160401b038111156124f7575f5ffd5b6125038c828d0161243a565b90955093505060c08a01356001600160401b03811115612521575f5ffd5b61252d8c828d0161243a565b915080935050809150509295985092959850929598565b5f5f60408385031215612555575f5ffd5b823561256081612207565b9150602083013561257081612207565b809150509250929050565b600181811c9082168061258f57607f821691505b6020821081036125ad57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b808201808211156107cc57634e487b7160e01b5f52601160045260245ffd5b5f6020828403121561267a575f5ffd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f602082840312156126dc575f5ffd5b815161089781612207565b601f82111561105a57805f5260205f20601f840160051c8101602085101561270c5750805b601f840160051c820191505b8181101561272b575f8155600101612718565b5050505050565b81516001600160401b0381111561274b5761274b61230f565b61275f81612759845461257b565b846126e7565b6020601f821160018114612791575f831561277a5750848201515b5f19600385901b1c1916600184901b17845561272b565b5f84815260208120601f198516915b828110156127c057878501518255602094850194600190920191016127a0565b50848210156127dd57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f82516127fd8184602087016121b3565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206de11e098828560ed8b32ec4c49b5259fec7bac640db1effdfd9fcc5e0efa77b64736f6c634300081b0033", + "code": "0x608060405260043610610233575f3560e01c806370a0823111610129578063a77f1516116100a8578063dd62ed3e1161006d578063dd62ed3e14610684578063e07baba6146106a3578063e30c3978146106e0578063f12506c1146106fd578063f2fde38b14610711575f5ffd5b8063a77f1516146105e7578063a86f9d9e14610608578063a9059cbb14610627578063b8f2e0c514610646578063bb86ef9314610665575f5ffd5b80638456cb59116100ee5780638456cb591461056f5780638abf6077146105835780638da5cb5b1461059757806395d89b41146105b4578063a457c2d7146105c8575f5ffd5b806370a08231146104d3578063715018a61461050757806379ba50971461051b5780637cf8ed0d1461052f5780637e4746341461054f575f5ffd5b806339509351116101b557806342966c681161017a57806342966c681461045757806349d12605146104765780634f1ef2861461048c57806352d1902d1461049f5780635c975abb146104b3575f5ffd5b806339509351146103af5780633ab76e9f146103ce5780633eb6b8cf146104055780633f4ba83a1461042457806340c10f1914610438575f5ffd5b806323b872dd116101fb57806323b872dd146102ea57806326afaadd146103095780633075db561461034d578063313ce567146103615780633659cfe61461038e575f5ffd5b806301ffc9a71461023757806306fdde031461026b578063095ea7b31461028c5780630ae74548146102ab57806318160ddd146102cc575b5f5ffd5b348015610242575f5ffd5b5061025661025136600461218c565b610730565b60405190151581526020015b60405180910390f35b348015610276575f5ffd5b5061027f6107d2565b60405161026291906121d5565b348015610297575f5ffd5b506102566102a636600461221b565b610862565b3480156102b6575f5ffd5b5061012f5461025690600160a01b900460ff1681565b3480156102d7575f5ffd5b5060fd545b604051908152602001610262565b3480156102f5575f5ffd5b50610256610304366004612245565b610879565b348015610314575f5ffd5b5061032e61012d5461012e546001600160a01b0390911691565b604080516001600160a01b039093168352602083019190915201610262565b348015610358575f5ffd5b5061025661089e565b34801561036c575f5ffd5b5061012d54600160a01b900460ff165b60405160ff9091168152602001610262565b348015610399575f5ffd5b506103ad6103a8366004612283565b6108b6565b005b3480156103ba575f5ffd5b506102566103c936600461221b565b610986565b3480156103d9575f5ffd5b506097546103ed906001600160a01b031681565b6040516001600160a01b039091168152602001610262565b348015610410575f5ffd5b506103ed61041f3660046122b2565b6109a7565b34801561042f575f5ffd5b506103ad6109bb565b348015610443575f5ffd5b506103ad61045236600461221b565b6109cf565b348015610462575f5ffd5b506103ad6104713660046122f8565b610ae9565b348015610481575f5ffd5b506102dc61012e5481565b6103ad61049a366004612323565b610c26565b3480156104aa575f5ffd5b506102dc610cdb565b3480156104be575f5ffd5b5061025660c954610100900460ff1660021490565b3480156104de575f5ffd5b506102dc6104ed366004612283565b6001600160a01b03165f90815260fb602052604090205490565b348015610512575f5ffd5b506103ad610d8c565b348015610526575f5ffd5b506103ad610d9d565b34801561053a575f5ffd5b5061012d546103ed906001600160a01b031681565b34801561055a575f5ffd5b5061012f546103ed906001600160a01b031681565b34801561057a575f5ffd5b506103ad610e14565b34801561058e575f5ffd5b506103ed610e27565b3480156105a2575f5ffd5b506033546001600160a01b03166103ed565b3480156105bf575f5ffd5b5061027f610e35565b3480156105d3575f5ffd5b506102566105e236600461221b565b610e44565b3480156105f2575f5ffd5b5061012d5461037c90600160a01b900460ff1681565b348015610613575f5ffd5b506103ed6106223660046123e6565b610ec9565b348015610632575f5ffd5b5061025661064136600461221b565b610ed5565b348015610651575f5ffd5b506103ad610660366004612410565b610ee2565b348015610670575f5ffd5b506103ad61067f36600461247e565b61105f565b34801561068f575f5ffd5b506102dc61069e366004612544565b61121f565b3480156106ae575f5ffd5b5060c9546106c8906201000090046001600160401b031681565b6040516001600160401b039091168152602001610262565b3480156106eb575f5ffd5b506065546001600160a01b03166103ed565b348015610708575f5ffd5b50610256611249565b34801561071c575f5ffd5b506103ad61072b366004612283565b611274565b5f6001600160e01b0319821663093e326b60e21b148061076057506001600160e01b0319821663bb86ef9360e01b145b8061077b57506001600160e01b0319821663b8f2e0c560e01b145b8061079657506001600160e01b031982166336372b0760e01b145b806107b157506001600160e01b0319821663a219a02560e01b145b806107cc57506001600160e01b031982166301ffc9a760e01b145b92915050565b606060fe80546107e19061257b565b80601f016020809104026020016040519081016040528092919081815260200182805461080d9061257b565b80156108585780601f1061082f57610100808354040283529160200191610858565b820191905f5260205f20905b81548152906001019060200180831161083b57829003601f168201915b5050505050905090565b5f3361086f8185856112e5565b5060019392505050565b5f33610886858285611408565b610891858585611480565b60019150505b9392505050565b5f60026108ad60c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670100000000000000000000000000000100961630036109075760405162461bcd60e51b81526004016108fe906125b3565b60405180910390fd5b7f00000000000000000000000001670100000000000000000000000000000100966001600160a01b0316610939611634565b6001600160a01b03161461095f5760405162461bcd60e51b81526004016108fe906125ff565b6109688161164f565b604080515f8082526020820190925261098391839190611657565b50565b5f3361086f818585610998838361121f565b6109a2919061264b565b6112e5565b5f6109b38484846117c1565b949350505050565b6109c3611813565b6109cd335f6118a3565b565b6109e360c954610100900460ff1660021490565b15610a015760405163bae6e2a960e01b815260040160405180910390fd5b6002610a0f60c95460ff1690565b60ff1603610a305760405163dfc60d8560e01b815260040160405180910390fd5b610a3a60026118ab565b610a42611249565b15610a605760405163270bf77560e01b815260040160405180910390fd5b61012f546001600160a01b031633819003610ac757826001600160a01b0316816001600160a01b03167fe502aa3e015149f4b76a0b2b5394e3100903c4af27c3ddc98385395d3f55252684604051610aba91815260200190565b60405180910390a3610ad0565b610ad0336118c1565b610ada838361193d565b50610ae560016118ab565b5050565b610afd60c954610100900460ff1660021490565b15610b1b5760405163bae6e2a960e01b815260040160405180910390fd5b6002610b2960c95460ff1690565b60ff1603610b4a5760405163dfc60d8560e01b815260040160405180910390fd5b610b5460026118ab565b610b5c611249565b15610c095761012f546040518281526001600160a01b0390911690339082907f638edf84937fb2534b47cac985ea84d6ea4f4076315b56ea1c784d26b87e2bcb9060200160405180910390a36040516340c10f1960e01b8152336004820152602481018390526001600160a01b038216906340c10f19906044015f604051808303815f87803b158015610bed575f5ffd5b505af1158015610bff573d5f5f3e3d5ffd5b5050505050610c12565b610c12336118c1565b610c1c3382611a07565b61098360016118ab565b6001600160a01b037f0000000000000000000000000167010000000000000000000000000000010096163003610c6e5760405162461bcd60e51b81526004016108fe906125b3565b7f00000000000000000000000001670100000000000000000000000000000100966001600160a01b0316610ca0611634565b6001600160a01b031614610cc65760405162461bcd60e51b81526004016108fe906125ff565b610ccf8261164f565b610ae582826001611657565b5f306001600160a01b037f00000000000000000000000001670100000000000000000000000000000100961614610d7a5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016108fe565b505f5160206128085f395f51905f5290565b610d94611b44565b6109cd5f611b9e565b60655433906001600160a01b03168114610e0b5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016108fe565b61098381611b9e565b610e1c611bb7565b6109cd3360016118a3565b5f610e30611634565b905090565b606060ff80546107e19061257b565b5f3381610e51828661121f565b905083811015610eb15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108fe565b610ebe82868684036112e5565b506001949350505050565b5f6108974684846117c1565b5f3361086f818585611480565b610ef660c954610100900460ff1660021490565b15610f145760405163bae6e2a960e01b815260040160405180910390fd5b6a195c98cc8c17dd985d5b1d60aa1b610f2e816001610ec9565b6001600160a01b0316336001600160a01b031614610f5f57604051630d85cccf60e11b815260040160405180910390fd5b6002610f6d60c95460ff1690565b60ff1603610f8e5760405163dfc60d8560e01b815260040160405180910390fd5b610f9860026118ab565b61012f546001600160a01b038481169116148015610fc9575061012f60149054906101000a900460ff161515821515145b15610fe75760405163c118d2f360e01b815260040160405180910390fd5b61012f80546001600160a01b0385166001600160a81b03199091168117600160a01b851515908102919091179092556040805191825260208201929092527fa6b6f959792843a48d9d03d13595f2de7c86ae0ce12ef0fa759dd911b205e565910160405180910390a161105a60016118ab565b505050565b5f54610100900460ff161580801561107d57505f54600160ff909116105b806110965750303b15801561109657505f5460ff166001145b6110f95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016108fe565b5f805460ff19166001179055801561111a575f805461ff0019166101001790555b6111248888611c28565b61112e8a8a611c64565b61119f83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8b0181900481028201810190925289815292508991508890819084018382808284375f92019190915250611c9e92505050565b61012d805461012e89905560ff8816600160a01b026001600160a81b03199091166001600160a01b038b16171790558015611213575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6001600160a01b039182165f90815260fc6020908152604080832093909416825291909152205490565b61012f545f906001600160a01b031615801590610e3057505061012f54600160a01b900460ff161590565b61127c611b44565b606580546001600160a01b0383166001600160a01b031990911681179091556112ad6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001600160a01b0383166113475760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108fe565b6001600160a01b0382166113a85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108fe565b6001600160a01b038381165f81815260fc602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f611413848461121f565b90505f19811461147a578181101561146d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016108fe565b61147a84848484036112e5565b50505050565b6001600160a01b0383166114e45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108fe565b6001600160a01b0382166115465760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108fe565b611551838383611cce565b6001600160a01b0383165f90815260fb6020526040902054818110156115c85760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108fe565b6001600160a01b038085165f81815260fb602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116279086815260200190565b60405180910390a361147a565b5f5160206128085f395f51905f52546001600160a01b031690565b610983611b44565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561168a5761105a83611d09565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156116e4575060408051601f3d908101601f191682019092526116e19181019061266a565b60015b6117475760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016108fe565b5f5160206128085f395f51905f5281146117b55760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016108fe565b5061105a838383611da4565b5f6117cc8484611dc8565b9050811580156117e357506001600160a01b038116155b1561089757604051632b0d65db60e01b81526001600160401b0385166004820152602481018490526044016108fe565b61182760c954610100900460ff1660021490565b6118445760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610ae5611b44565b60c9805460ff191660ff92909216919091179055565b6a195c98cc8c17dd985d5b1d60aa1b6118e26033546001600160a01b031690565b6001600160a01b0316336001600160a01b03161415801561191f5750611909816001610ec9565b6001600160a01b0316336001600160a01b031614155b15610ae557604051630d85cccf60e11b815260040160405180910390fd5b6001600160a01b0382166119935760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016108fe565b61199e5f8383611cce565b8060fd5f8282546119af919061264b565b90915550506001600160a01b0382165f81815260fb60209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6001600160a01b038216611a675760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016108fe565b611a72825f83611cce565b6001600160a01b0382165f90815260fb602052604090205481811015611ae55760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016108fe565b6001600160a01b0383165f81815260fb60209081526040808320868603905560fd80548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6033546001600160a01b031633146109cd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108fe565b606580546001600160a01b031916905561098381611e6a565b611bcb60c954610100900460ff1660021490565b15611be95760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611899565b6001600160a01b0382161580611c3c575080155b80611c4657504681145b15610ae55760405163c118d2f360e01b815260040160405180910390fd5b806001600160a01b038116611c8c5760405163538ba4f960e01b815260040160405180910390fd5b611c9583611ebb565b61105a82611f19565b5f54610100900460ff16611cc45760405162461bcd60e51b81526004016108fe90612681565b610ae58282611f89565b611ce260c954610100900460ff1660021490565b15611d005760405163bae6e2a960e01b815260040160405180910390fd5b61105a82611fc8565b6001600160a01b0381163b611d765760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016108fe565b5f5160206128085f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611dad83611ff1565b5f82511180611db95750805b1561105a5761147a8383612030565b6097545f906001600160a01b031680611df457604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611e46573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109b391906126cc565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54610100900460ff16611ee15760405162461bcd60e51b81526004016108fe90612681565b611ee9612055565b611f076001600160a01b03821615611f015781611b9e565b33611b9e565b5060c9805461ff001916610100179055565b5f54610100900460ff16611f3f5760405162461bcd60e51b81526004016108fe90612681565b6001600160401b03461115611f675760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f54610100900460ff16611faf5760405162461bcd60e51b81526004016108fe90612681565b60fe611fbb8382612732565b5060ff61105a8282612732565b306001600160a01b0382160361098357604051630c292c9d60e21b815260040160405180910390fd5b611ffa81611d09565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061089783836040518060600160405280602781526020016128286027913961207b565b5f54610100900460ff166109cd5760405162461bcd60e51b81526004016108fe90612681565b60605f5f856001600160a01b03168560405161209791906127ec565b5f60405180830381855af49150503d805f81146120cf576040519150601f19603f3d011682016040523d82523d5f602084013e6120d4565b606091505b50915091506120e5868383876120ef565b9695505050505050565b6060831561215d5782515f03612156576001600160a01b0385163b6121565760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016108fe565b50816109b3565b6109b383838151156121725781518083602001fd5b8060405162461bcd60e51b81526004016108fe91906121d5565b5f6020828403121561219c575f5ffd5b81356001600160e01b031981168114610897575f5ffd5b5f5b838110156121cd5781810151838201526020016121b5565b50505f910152565b602081525f82518060208401526121f38160408501602087016121b3565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610983575f5ffd5b5f5f6040838503121561222c575f5ffd5b823561223781612207565b946020939093013593505050565b5f5f5f60608486031215612257575f5ffd5b833561226281612207565b9250602084013561227281612207565b929592945050506040919091013590565b5f60208284031215612293575f5ffd5b813561089781612207565b803580151581146122ad575f5ffd5b919050565b5f5f5f606084860312156122c4575f5ffd5b83356001600160401b03811681146122da575f5ffd5b9250602084013591506122ef6040850161229e565b90509250925092565b5f60208284031215612308575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f60408385031215612334575f5ffd5b823561233f81612207565b915060208301356001600160401b03811115612359575f5ffd5b8301601f81018513612369575f5ffd5b80356001600160401b038111156123825761238261230f565b604051601f8201601f19908116603f011681016001600160401b03811182821017156123b0576123b061230f565b6040528181528282016020018710156123c7575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f604083850312156123f7575f5ffd5b823591506124076020840161229e565b90509250929050565b5f5f60408385031215612421575f5ffd5b823561242c81612207565b91506124076020840161229e565b5f5f83601f84011261244a575f5ffd5b5081356001600160401b03811115612460575f5ffd5b602083019150836020828501011115612477575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f5f60e08a8c031215612496575f5ffd5b89356124a181612207565b985060208a01356124b181612207565b975060408a01356124c181612207565b965060608a0135955060808a013560ff811681146124dd575f5ffd5b945060a08a01356001600160401b038111156124f7575f5ffd5b6125038c828d0161243a565b90955093505060c08a01356001600160401b03811115612521575f5ffd5b61252d8c828d0161243a565b915080935050809150509295985092959850929598565b5f5f60408385031215612555575f5ffd5b823561256081612207565b9150602083013561257081612207565b809150509250929050565b600181811c9082168061258f57607f821691505b6020821081036125ad57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b808201808211156107cc57634e487b7160e01b5f52601160045260245ffd5b5f6020828403121561267a575f5ffd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f602082840312156126dc575f5ffd5b815161089781612207565b601f82111561105a57805f5260205f20601f840160051c8101602085101561270c5750805b601f840160051c820191505b8181101561272b575f8155600101612718565b5050505050565b81516001600160401b0381111561274b5761274b61230f565b61275f81612759845461257b565b846126e7565b6020601f821160018114612791575f831561277a5750848201515b5f19600385901b1c1916600184901b17845561272b565b5f84815260208120601f198516915b828110156127c057878501518255602094850194600190920191016127a0565b50848210156127dd57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f82516127fd8184602087016121b3565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212206de11e098828560ed8b32ec4c49b5259fec7bac640db1effdfd9fcc5e0efa77b64736f6c634300081b0033", "balance": "0x0" }, - "0x0167000000000000000000000000000000010097": { + "0x0167010000000000000000000000000000010097": { "contractName": "BridgedERC721", "storage": {}, - "code": "0x608060405260043610610207575f3560e01c80636352211e11610113578063a22cb4651161009d578063e07baba61161006d578063e07baba6146105c3578063e30c397814610600578063e985e9c51461061d578063ef8c4ae614610665578063f2fde38b14610684575f5ffd5b8063a22cb46514610547578063a86f9d9e14610566578063b88d4fde14610585578063c87b56dd146105a4575f5ffd5b80637cf8ed0d116100e35780637cf8ed0d146104ce5780638456cb59146104ee5780638abf6077146105025780638da5cb5b1461051657806395d89b4114610533575f5ffd5b80636352211e1461046857806370a0823114610487578063715018a6146104a657806379ba5097146104ba575f5ffd5b80633eb6b8cf1161019457806342966c681161016457806342966c68146103de57806349d12605146103fd5780634f1ef2861461042157806352d1902d146104345780635c975abb14610448575f5ffd5b80633eb6b8cf1461036d5780633f4ba83a1461038c57806340c10f19146103a057806342842e0e146103bf575f5ffd5b806323b872dd116101da57806323b872dd146102b857806326afaadd146102d75780633075db561461031b5780633659cfe61461032f5780633ab76e9f1461034e575f5ffd5b806301ffc9a71461020b57806306fdde031461023f578063081812fc14610260578063095ea7b314610297575b5f5ffd5b348015610216575f5ffd5b5061022a61022536600461253b565b6106a3565b60405190151581526020015b60405180910390f35b34801561024a575f5ffd5b506102536106e8565b60405161023691906125a3565b34801561026b575f5ffd5b5061027f61027a3660046125b5565b610779565b6040516001600160a01b039091168152602001610236565b3480156102a2575f5ffd5b506102b66102b13660046125e0565b61079f565b005b3480156102c3575f5ffd5b506102b66102d236600461260a565b6108b8565b3480156102e2575f5ffd5b506102fc61015f54610160546001600160a01b0390911691565b604080516001600160a01b039093168352602083019190915201610236565b348015610326575f5ffd5b5061022a6108e9565b34801561033a575f5ffd5b506102b6610349366004612648565b610901565b348015610359575f5ffd5b5060975461027f906001600160a01b031681565b348015610378575f5ffd5b5061027f610387366004612677565b6109c8565b348015610397575f5ffd5b506102b66109de565b3480156103ab575f5ffd5b506102b66103ba3660046125e0565b6109f2565b3480156103ca575f5ffd5b506102b66103d936600461260a565b610abd565b3480156103e9575f5ffd5b506102b66103f83660046125b5565b610ad7565b348015610408575f5ffd5b506104136101605481565b604051908152602001610236565b6102b661042f36600461275a565b610bd6565b34801561043f575f5ffd5b50610413610c8b565b348015610453575f5ffd5b5061022a60c954610100900460ff1660021490565b348015610473575f5ffd5b5061027f6104823660046125b5565b610d3c565b348015610492575f5ffd5b506104136104a1366004612648565b610d9c565b3480156104b1575f5ffd5b506102b6610e21565b3480156104c5575f5ffd5b506102b6610e32565b3480156104d9575f5ffd5b5061015f5461027f906001600160a01b031681565b3480156104f9575f5ffd5b506102b6610ea9565b34801561050d575f5ffd5b5061027f610ebc565b348015610521575f5ffd5b506033546001600160a01b031661027f565b34801561053e575f5ffd5b50610253610eca565b348015610552575f5ffd5b506102b66105613660046127a6565b610eda565b348015610571575f5ffd5b5061027f6105803660046127d9565b610ee5565b348015610590575f5ffd5b506102b661059f3660046127fa565b610ef1565b3480156105af575f5ffd5b506102536105be3660046125b5565b610f29565b3480156105ce575f5ffd5b5060c9546105e8906201000090046001600160401b031681565b6040516001600160401b039091168152602001610236565b34801561060b575f5ffd5b506065546001600160a01b031661027f565b348015610628575f5ffd5b5061022a610637366004612861565b6001600160a01b039182165f9081526101326020908152604080832093909416825291909152205460ff1690565b348015610670575f5ffd5b506102b661067f3660046128dc565b610f52565b34801561068f575f5ffd5b506102b661069e366004612648565b611104565b5f6001600160e01b0319821663093e326b60e21b14806106d357506001600160e01b031982166377c6257360e11b145b806106e257506106e282611175565b92915050565b606061012d80546106f890612989565b80601f016020809104026020016040519081016040528092919081815260200182805461072490612989565b801561076f5780601f106107465761010080835404028352916020019161076f565b820191905f5260205f20905b81548152906001019060200180831161075257829003601f168201915b5050505050905090565b5f610783826111c4565b505f90815261013160205260409020546001600160a01b031690565b5f6107a982610d3c565b9050806001600160a01b0316836001600160a01b03160361081b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061083757506108378133610637565b6108a95760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610812565b6108b38383611223565b505050565b6108c23382611291565b6108de5760405162461bcd60e51b8152600401610812906129c1565b6108b383838361130f565b5f60026108f860c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000100971630036109495760405162461bcd60e51b815260040161081290612a0e565b7f00000000000000000000000001670000000000000000000000000000000100976001600160a01b031661097b611481565b6001600160a01b0316146109a15760405162461bcd60e51b815260040161081290612a5a565b6109aa8161149c565b604080515f808252602082019092526109c5918391906114a4565b50565b5f6109d484848461160e565b90505b9392505050565b6109e6611660565b6109f0335f6116f0565b565b610a0660c954610100900460ff1660021490565b15610a245760405163bae6e2a960e01b815260040160405180910390fd5b6b195c98cdcc8c57dd985d5b1d60a21b610a3f816001610ee5565b6001600160a01b0316336001600160a01b031614610a7057604051630d85cccf60e11b815260040160405180910390fd5b6002610a7e60c95460ff1690565b60ff1603610a9f5760405163dfc60d8560e01b815260040160405180910390fd5b610aa960026116f8565b610ab3838361170e565b6108b360016116f8565b6108b383838360405180602001604052805f815250610ef1565b610aeb60c954610100900460ff1660021490565b15610b095760405163bae6e2a960e01b815260040160405180910390fd5b6b195c98cdcc8c57dd985d5b1d60a21b610b24816001610ee5565b6001600160a01b0316336001600160a01b031614610b5557604051630d85cccf60e11b815260040160405180910390fd5b6002610b6360c95460ff1690565b60ff1603610b845760405163dfc60d8560e01b815260040160405180910390fd5b610b8e60026116f8565b33610b9883610d3c565b6001600160a01b031614610bbf5760405163358bf3d960e01b815260040160405180910390fd5b610bc882611727565b610bd260016116f8565b5050565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000010097163003610c1e5760405162461bcd60e51b815260040161081290612a0e565b7f00000000000000000000000001670000000000000000000000000000000100976001600160a01b0316610c50611481565b6001600160a01b031614610c765760405162461bcd60e51b815260040161081290612a5a565b610c7f8261149c565b610bd2828260016114a4565b5f306001600160a01b037f00000000000000000000000001670000000000000000000000000000000100971614610d2a5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610812565b505f516020612e175f395f51905f5290565b5f81815261012f60205260408120546001600160a01b0316806106e25760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610812565b5f6001600160a01b038216610e055760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610812565b506001600160a01b03165f908152610130602052604090205490565b610e296117c9565b6109f05f611823565b60655433906001600160a01b03168114610ea05760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610812565b6109c581611823565b610eb161183c565b6109f03360016116f0565b5f610ec5611481565b905090565b606061012e80546106f890612989565b610bd23383836118ad565b5f6109d746848461160e565b610efb3383611291565b610f175760405162461bcd60e51b8152600401610812906129c1565b610f238484848461197b565b50505050565b61015f54610160546060916106e2916001600160a01b0390911690610f4d856119ae565b611a3d565b5f54610100900460ff1615808015610f7057505f54600160ff909116105b80610f895750303b158015610f8957505f5460ff166001145b610fec5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610812565b5f805460ff19166001179055801561100d575f805461ff0019166101001790555b6110178787611a87565b6110218989611ac3565b61109283838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8b0181900481028201810190925289815292508991508890819084018382808284375f92019190915250611afd92505050565b61015f80546001600160a01b0319166001600160a01b03891617905561016086905580156110f9575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b61110c6117c9565b606580546001600160a01b0383166001600160a01b0319909116811790915561113d6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f6001600160e01b031982166380ac58cd60e01b14806111a557506001600160e01b03198216635b5e139f60e01b145b806106e257506301ffc9a760e01b6001600160e01b03198316146106e2565b5f81815261012f60205260409020546001600160a01b03166109c55760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610812565b5f8181526101316020526040902080546001600160a01b0319166001600160a01b038416908117909155819061125882610d3c565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f5f61129c83610d3c565b9050806001600160a01b0316846001600160a01b031614806112e357506001600160a01b038082165f908152610132602090815260408083209388168352929052205460ff165b806113075750836001600160a01b03166112fc84610779565b6001600160a01b0316145b949350505050565b826001600160a01b031661132282610d3c565b6001600160a01b0316146113485760405162461bcd60e51b815260040161081290612aa6565b6001600160a01b0382166113aa5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610812565b6113b78383836001611b2d565b826001600160a01b03166113ca82610d3c565b6001600160a01b0316146113f05760405162461bcd60e51b815260040161081290612aa6565b5f8181526101316020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652610130855283862080545f190190559087168086528386208054600101905586865261012f90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b5f516020612e175f395f51905f52546001600160a01b031690565b6109c56117c9565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156114d7576108b383611b6d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611531575060408051601f3d908101601f1916820190925261152e91810190612aeb565b60015b6115945760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610812565b5f516020612e175f395f51905f5281146116025760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610812565b506108b3838383611c08565b5f6116198484611c2c565b90508115801561163057506001600160a01b038116155b156109d757604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610812565b61167460c954610100900460ff1660021490565b6116915760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610bd26117c9565b60c9805460ff191660ff92909216919091179055565b610bd2828260405180602001604052805f815250611cce565b5f61173182610d3c565b9050611740815f846001611b2d565b61174982610d3c565b5f8381526101316020908152604080832080546001600160a01b03199081169091556001600160a01b038516808552610130845282852080545f1901905587855261012f909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6033546001600160a01b031633146109f05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610812565b606580546001600160a01b03191690556109c581611d00565b61185060c954610100900460ff1660021490565b1561186e5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016116e6565b816001600160a01b0316836001600160a01b03160361190e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610812565b6001600160a01b038381165f8181526101326020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61198684848461130f565b61199284848484611d51565b610f235760405162461bcd60e51b815260040161081290612b02565b60605f6119ba83611e4e565b60010190505f816001600160401b038111156119d8576119d86126bd565b6040519080825280601f01601f191660200182016040528015611a02576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611a0c57509392505050565b6060611a53846001600160a01b03166014611f25565b611a5c846119ae565b83604051602001611a6f93929190612b54565b60405160208183030381529060405290509392505050565b6001600160a01b0382161580611a9b575080155b80611aa557504681145b15610bd25760405163c118d2f360e01b815260040160405180910390fd5b806001600160a01b038116611aeb5760405163538ba4f960e01b815260040160405180910390fd5b611af4836120ba565b6108b382612118565b5f54610100900460ff16611b235760405162461bcd60e51b815260040161081290612bdc565b610bd28282612188565b611b4160c954610100900460ff1660021490565b15611b5f5760405163bae6e2a960e01b815260040160405180910390fd5b611b68836121c9565b610f23565b6001600160a01b0381163b611bda5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610812565b5f516020612e175f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611c11836121f2565b5f82511180611c1d5750805b156108b357610f238383612231565b6097545f906001600160a01b031680611c5857604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611caa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113079190612c27565b611cd88383612256565b611ce45f848484611d51565b6108b35760405162461bcd60e51b815260040161081290612b02565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6001600160a01b0384163b15611e4357604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d94903390899088908890600401612c42565b6020604051808303815f875af1925050508015611dce575060408051601f3d908101601f19168201909252611dcb91810190612c74565b60015b611e29573d808015611dfb576040519150601f19603f3d011682016040523d82523d5f602084013e611e00565b606091505b5080515f03611e215760405162461bcd60e51b815260040161081290612b02565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611307565b506001949350505050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611e8c5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611eb8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611ed657662386f26fc10000830492506010015b6305f5e1008310611eee576305f5e100830492506008015b6127108310611f0257612710830492506004015b60648310611f14576064830492506002015b600a83106106e25760010192915050565b60605f611f33836002612ca3565b611f3e906002612cba565b6001600160401b03811115611f5557611f556126bd565b6040519080825280601f01601f191660200182016040528015611f7f576020820181803683370190505b509050600360fc1b815f81518110611f9957611f99612ccd565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611fc757611fc7612ccd565b60200101906001600160f81b03191690815f1a9053505f611fe9846002612ca3565b611ff4906001612cba565b90505b600181111561206b576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061202857612028612ccd565b1a60f81b82828151811061203e5761203e612ccd565b60200101906001600160f81b03191690815f1a90535060049490941c9361206481612ce1565b9050611ff7565b5083156109d75760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610812565b5f54610100900460ff166120e05760405162461bcd60e51b815260040161081290612bdc565b6120e86123ef565b6121066001600160a01b038216156121005781611823565b33611823565b5060c9805461ff001916610100179055565b5f54610100900460ff1661213e5760405162461bcd60e51b815260040161081290612bdc565b6001600160401b034611156121665760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f54610100900460ff166121ae5760405162461bcd60e51b815260040161081290612bdc565b61012d6121bb8382612d41565b5061012e6108b38282612d41565b306001600160a01b038216036109c557604051630c292c9d60e21b815260040160405180910390fd5b6121fb81611b6d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606109d78383604051806060016040528060278152602001612e3760279139612415565b6001600160a01b0382166122ac5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610812565b5f81815261012f60205260409020546001600160a01b0316156123115760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610812565b61231e5f83836001611b2d565b5f81815261012f60205260409020546001600160a01b0316156123835760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610812565b6001600160a01b0382165f818152610130602090815260408083208054600101905584835261012f90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f54610100900460ff166109f05760405162461bcd60e51b815260040161081290612bdc565b60605f5f856001600160a01b0316856040516124319190612dfb565b5f60405180830381855af49150503d805f8114612469576040519150601f19603f3d011682016040523d82523d5f602084013e61246e565b606091505b509150915061247f86838387612489565b9695505050505050565b606083156124f75782515f036124f0576001600160a01b0385163b6124f05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610812565b5081611307565b611307838381511561250c5781518083602001fd5b8060405162461bcd60e51b815260040161081291906125a3565b6001600160e01b0319811681146109c5575f5ffd5b5f6020828403121561254b575f5ffd5b81356109d781612526565b5f5b83811015612570578181015183820152602001612558565b50505f910152565b5f815180845261258f816020860160208601612556565b601f01601f19169290920160200192915050565b602081525f6109d76020830184612578565b5f602082840312156125c5575f5ffd5b5035919050565b6001600160a01b03811681146109c5575f5ffd5b5f5f604083850312156125f1575f5ffd5b82356125fc816125cc565b946020939093013593505050565b5f5f5f6060848603121561261c575f5ffd5b8335612627816125cc565b92506020840135612637816125cc565b929592945050506040919091013590565b5f60208284031215612658575f5ffd5b81356109d7816125cc565b80358015158114612672575f5ffd5b919050565b5f5f5f60608486031215612689575f5ffd5b83356001600160401b038116811461269f575f5ffd5b9250602084013591506126b460408501612663565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126126e0575f5ffd5b81356001600160401b038111156126f9576126f96126bd565b604051601f8201601f19908116603f011681016001600160401b0381118282101715612727576127276126bd565b60405281815283820160200185101561273e575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f6040838503121561276b575f5ffd5b8235612776816125cc565b915060208301356001600160401b03811115612790575f5ffd5b61279c858286016126d1565b9150509250929050565b5f5f604083850312156127b7575f5ffd5b82356127c2816125cc565b91506127d060208401612663565b90509250929050565b5f5f604083850312156127ea575f5ffd5b823591506127d060208401612663565b5f5f5f5f6080858703121561280d575f5ffd5b8435612818816125cc565b93506020850135612828816125cc565b92506040850135915060608501356001600160401b03811115612849575f5ffd5b612855878288016126d1565b91505092959194509250565b5f5f60408385031215612872575f5ffd5b823561287d816125cc565b9150602083013561288d816125cc565b809150509250929050565b5f5f83601f8401126128a8575f5ffd5b5081356001600160401b038111156128be575f5ffd5b6020830191508360208285010111156128d5575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f60c0898b0312156128f3575f5ffd5b88356128fe816125cc565b9750602089013561290e816125cc565b9650604089013561291e816125cc565b95506060890135945060808901356001600160401b0381111561293f575f5ffd5b61294b8b828c01612898565b90955093505060a08901356001600160401b03811115612969575f5ffd5b6129758b828c01612898565b999c989b5096995094979396929594505050565b600181811c9082168061299d57607f821691505b6020821081036129bb57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b5f60208284031215612afb575f5ffd5b5051919050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6832ba3432b932bab69d60b91b81525f8451612b77816009850160208901612556565b600160fe1b6009918401918201528451612b9881600a840160208901612556565b600981830101915050712f746f6b656e5552493f75696e743235363d60701b60018201528351612bcf816013840160208801612556565b0160130195945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215612c37575f5ffd5b81516109d7816125cc565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061247f90830184612578565b5f60208284031215612c84575f5ffd5b81516109d781612526565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176106e2576106e2612c8f565b808201808211156106e2576106e2612c8f565b634e487b7160e01b5f52603260045260245ffd5b5f81612cef57612cef612c8f565b505f190190565b601f8211156108b357805f5260205f20601f840160051c81016020851015612d1b5750805b601f840160051c820191505b81811015612d3a575f8155600101612d27565b5050505050565b81516001600160401b03811115612d5a57612d5a6126bd565b612d6e81612d688454612989565b84612cf6565b6020601f821160018114612da0575f8315612d895750848201515b5f19600385901b1c1916600184901b178455612d3a565b5f84815260208120601f198516915b82811015612dcf5787850151825560209485019460019092019101612daf565b5084821015612dec57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f8251612e0c818460208701612556565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212205ca793a2312f9b2fc8fc6bda4c8492cc141ddbe707fcc60e6d2cb7bff225a87a64736f6c634300081b0033", + "code": "0x608060405260043610610207575f3560e01c80636352211e11610113578063a22cb4651161009d578063e07baba61161006d578063e07baba6146105c3578063e30c397814610600578063e985e9c51461061d578063ef8c4ae614610665578063f2fde38b14610684575f5ffd5b8063a22cb46514610547578063a86f9d9e14610566578063b88d4fde14610585578063c87b56dd146105a4575f5ffd5b80637cf8ed0d116100e35780637cf8ed0d146104ce5780638456cb59146104ee5780638abf6077146105025780638da5cb5b1461051657806395d89b4114610533575f5ffd5b80636352211e1461046857806370a0823114610487578063715018a6146104a657806379ba5097146104ba575f5ffd5b80633eb6b8cf1161019457806342966c681161016457806342966c68146103de57806349d12605146103fd5780634f1ef2861461042157806352d1902d146104345780635c975abb14610448575f5ffd5b80633eb6b8cf1461036d5780633f4ba83a1461038c57806340c10f19146103a057806342842e0e146103bf575f5ffd5b806323b872dd116101da57806323b872dd146102b857806326afaadd146102d75780633075db561461031b5780633659cfe61461032f5780633ab76e9f1461034e575f5ffd5b806301ffc9a71461020b57806306fdde031461023f578063081812fc14610260578063095ea7b314610297575b5f5ffd5b348015610216575f5ffd5b5061022a61022536600461253b565b6106a3565b60405190151581526020015b60405180910390f35b34801561024a575f5ffd5b506102536106e8565b60405161023691906125a3565b34801561026b575f5ffd5b5061027f61027a3660046125b5565b610779565b6040516001600160a01b039091168152602001610236565b3480156102a2575f5ffd5b506102b66102b13660046125e0565b61079f565b005b3480156102c3575f5ffd5b506102b66102d236600461260a565b6108b8565b3480156102e2575f5ffd5b506102fc61015f54610160546001600160a01b0390911691565b604080516001600160a01b039093168352602083019190915201610236565b348015610326575f5ffd5b5061022a6108e9565b34801561033a575f5ffd5b506102b6610349366004612648565b610901565b348015610359575f5ffd5b5060975461027f906001600160a01b031681565b348015610378575f5ffd5b5061027f610387366004612677565b6109c8565b348015610397575f5ffd5b506102b66109de565b3480156103ab575f5ffd5b506102b66103ba3660046125e0565b6109f2565b3480156103ca575f5ffd5b506102b66103d936600461260a565b610abd565b3480156103e9575f5ffd5b506102b66103f83660046125b5565b610ad7565b348015610408575f5ffd5b506104136101605481565b604051908152602001610236565b6102b661042f36600461275a565b610bd6565b34801561043f575f5ffd5b50610413610c8b565b348015610453575f5ffd5b5061022a60c954610100900460ff1660021490565b348015610473575f5ffd5b5061027f6104823660046125b5565b610d3c565b348015610492575f5ffd5b506104136104a1366004612648565b610d9c565b3480156104b1575f5ffd5b506102b6610e21565b3480156104c5575f5ffd5b506102b6610e32565b3480156104d9575f5ffd5b5061015f5461027f906001600160a01b031681565b3480156104f9575f5ffd5b506102b6610ea9565b34801561050d575f5ffd5b5061027f610ebc565b348015610521575f5ffd5b506033546001600160a01b031661027f565b34801561053e575f5ffd5b50610253610eca565b348015610552575f5ffd5b506102b66105613660046127a6565b610eda565b348015610571575f5ffd5b5061027f6105803660046127d9565b610ee5565b348015610590575f5ffd5b506102b661059f3660046127fa565b610ef1565b3480156105af575f5ffd5b506102536105be3660046125b5565b610f29565b3480156105ce575f5ffd5b5060c9546105e8906201000090046001600160401b031681565b6040516001600160401b039091168152602001610236565b34801561060b575f5ffd5b506065546001600160a01b031661027f565b348015610628575f5ffd5b5061022a610637366004612861565b6001600160a01b039182165f9081526101326020908152604080832093909416825291909152205460ff1690565b348015610670575f5ffd5b506102b661067f3660046128dc565b610f52565b34801561068f575f5ffd5b506102b661069e366004612648565b611104565b5f6001600160e01b0319821663093e326b60e21b14806106d357506001600160e01b031982166377c6257360e11b145b806106e257506106e282611175565b92915050565b606061012d80546106f890612989565b80601f016020809104026020016040519081016040528092919081815260200182805461072490612989565b801561076f5780601f106107465761010080835404028352916020019161076f565b820191905f5260205f20905b81548152906001019060200180831161075257829003601f168201915b5050505050905090565b5f610783826111c4565b505f90815261013160205260409020546001600160a01b031690565b5f6107a982610d3c565b9050806001600160a01b0316836001600160a01b03160361081b5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061083757506108378133610637565b6108a95760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610812565b6108b38383611223565b505050565b6108c23382611291565b6108de5760405162461bcd60e51b8152600401610812906129c1565b6108b383838361130f565b5f60026108f860c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670100000000000000000000000000000100971630036109495760405162461bcd60e51b815260040161081290612a0e565b7f00000000000000000000000001670100000000000000000000000000000100976001600160a01b031661097b611481565b6001600160a01b0316146109a15760405162461bcd60e51b815260040161081290612a5a565b6109aa8161149c565b604080515f808252602082019092526109c5918391906114a4565b50565b5f6109d484848461160e565b90505b9392505050565b6109e6611660565b6109f0335f6116f0565b565b610a0660c954610100900460ff1660021490565b15610a245760405163bae6e2a960e01b815260040160405180910390fd5b6b195c98cdcc8c57dd985d5b1d60a21b610a3f816001610ee5565b6001600160a01b0316336001600160a01b031614610a7057604051630d85cccf60e11b815260040160405180910390fd5b6002610a7e60c95460ff1690565b60ff1603610a9f5760405163dfc60d8560e01b815260040160405180910390fd5b610aa960026116f8565b610ab3838361170e565b6108b360016116f8565b6108b383838360405180602001604052805f815250610ef1565b610aeb60c954610100900460ff1660021490565b15610b095760405163bae6e2a960e01b815260040160405180910390fd5b6b195c98cdcc8c57dd985d5b1d60a21b610b24816001610ee5565b6001600160a01b0316336001600160a01b031614610b5557604051630d85cccf60e11b815260040160405180910390fd5b6002610b6360c95460ff1690565b60ff1603610b845760405163dfc60d8560e01b815260040160405180910390fd5b610b8e60026116f8565b33610b9883610d3c565b6001600160a01b031614610bbf5760405163358bf3d960e01b815260040160405180910390fd5b610bc882611727565b610bd260016116f8565b5050565b6001600160a01b037f0000000000000000000000000167010000000000000000000000000000010097163003610c1e5760405162461bcd60e51b815260040161081290612a0e565b7f00000000000000000000000001670100000000000000000000000000000100976001600160a01b0316610c50611481565b6001600160a01b031614610c765760405162461bcd60e51b815260040161081290612a5a565b610c7f8261149c565b610bd2828260016114a4565b5f306001600160a01b037f00000000000000000000000001670100000000000000000000000000000100971614610d2a5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610812565b505f516020612e175f395f51905f5290565b5f81815261012f60205260408120546001600160a01b0316806106e25760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610812565b5f6001600160a01b038216610e055760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610812565b506001600160a01b03165f908152610130602052604090205490565b610e296117c9565b6109f05f611823565b60655433906001600160a01b03168114610ea05760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610812565b6109c581611823565b610eb161183c565b6109f03360016116f0565b5f610ec5611481565b905090565b606061012e80546106f890612989565b610bd23383836118ad565b5f6109d746848461160e565b610efb3383611291565b610f175760405162461bcd60e51b8152600401610812906129c1565b610f238484848461197b565b50505050565b61015f54610160546060916106e2916001600160a01b0390911690610f4d856119ae565b611a3d565b5f54610100900460ff1615808015610f7057505f54600160ff909116105b80610f895750303b158015610f8957505f5460ff166001145b610fec5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610812565b5f805460ff19166001179055801561100d575f805461ff0019166101001790555b6110178787611a87565b6110218989611ac3565b61109283838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f8b0181900481028201810190925289815292508991508890819084018382808284375f92019190915250611afd92505050565b61015f80546001600160a01b0319166001600160a01b03891617905561016086905580156110f9575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b61110c6117c9565b606580546001600160a01b0383166001600160a01b0319909116811790915561113d6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f6001600160e01b031982166380ac58cd60e01b14806111a557506001600160e01b03198216635b5e139f60e01b145b806106e257506301ffc9a760e01b6001600160e01b03198316146106e2565b5f81815261012f60205260409020546001600160a01b03166109c55760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b6044820152606401610812565b5f8181526101316020526040902080546001600160a01b0319166001600160a01b038416908117909155819061125882610d3c565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f5f61129c83610d3c565b9050806001600160a01b0316846001600160a01b031614806112e357506001600160a01b038082165f908152610132602090815260408083209388168352929052205460ff165b806113075750836001600160a01b03166112fc84610779565b6001600160a01b0316145b949350505050565b826001600160a01b031661132282610d3c565b6001600160a01b0316146113485760405162461bcd60e51b815260040161081290612aa6565b6001600160a01b0382166113aa5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610812565b6113b78383836001611b2d565b826001600160a01b03166113ca82610d3c565b6001600160a01b0316146113f05760405162461bcd60e51b815260040161081290612aa6565b5f8181526101316020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652610130855283862080545f190190559087168086528386208054600101905586865261012f90945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b5f516020612e175f395f51905f52546001600160a01b031690565b6109c56117c9565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156114d7576108b383611b6d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611531575060408051601f3d908101601f1916820190925261152e91810190612aeb565b60015b6115945760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610812565b5f516020612e175f395f51905f5281146116025760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610812565b506108b3838383611c08565b5f6116198484611c2c565b90508115801561163057506001600160a01b038116155b156109d757604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610812565b61167460c954610100900460ff1660021490565b6116915760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610bd26117c9565b60c9805460ff191660ff92909216919091179055565b610bd2828260405180602001604052805f815250611cce565b5f61173182610d3c565b9050611740815f846001611b2d565b61174982610d3c565b5f8381526101316020908152604080832080546001600160a01b03199081169091556001600160a01b038516808552610130845282852080545f1901905587855261012f909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6033546001600160a01b031633146109f05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610812565b606580546001600160a01b03191690556109c581611d00565b61185060c954610100900460ff1660021490565b1561186e5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016116e6565b816001600160a01b0316836001600160a01b03160361190e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610812565b6001600160a01b038381165f8181526101326020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61198684848461130f565b61199284848484611d51565b610f235760405162461bcd60e51b815260040161081290612b02565b60605f6119ba83611e4e565b60010190505f816001600160401b038111156119d8576119d86126bd565b6040519080825280601f01601f191660200182016040528015611a02576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611a0c57509392505050565b6060611a53846001600160a01b03166014611f25565b611a5c846119ae565b83604051602001611a6f93929190612b54565b60405160208183030381529060405290509392505050565b6001600160a01b0382161580611a9b575080155b80611aa557504681145b15610bd25760405163c118d2f360e01b815260040160405180910390fd5b806001600160a01b038116611aeb5760405163538ba4f960e01b815260040160405180910390fd5b611af4836120ba565b6108b382612118565b5f54610100900460ff16611b235760405162461bcd60e51b815260040161081290612bdc565b610bd28282612188565b611b4160c954610100900460ff1660021490565b15611b5f5760405163bae6e2a960e01b815260040160405180910390fd5b611b68836121c9565b610f23565b6001600160a01b0381163b611bda5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610812565b5f516020612e175f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611c11836121f2565b5f82511180611c1d5750805b156108b357610f238383612231565b6097545f906001600160a01b031680611c5857604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611caa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113079190612c27565b611cd88383612256565b611ce45f848484611d51565b6108b35760405162461bcd60e51b815260040161081290612b02565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6001600160a01b0384163b15611e4357604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611d94903390899088908890600401612c42565b6020604051808303815f875af1925050508015611dce575060408051601f3d908101601f19168201909252611dcb91810190612c74565b60015b611e29573d808015611dfb576040519150601f19603f3d011682016040523d82523d5f602084013e611e00565b606091505b5080515f03611e215760405162461bcd60e51b815260040161081290612b02565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611307565b506001949350505050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310611e8c5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310611eb8576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310611ed657662386f26fc10000830492506010015b6305f5e1008310611eee576305f5e100830492506008015b6127108310611f0257612710830492506004015b60648310611f14576064830492506002015b600a83106106e25760010192915050565b60605f611f33836002612ca3565b611f3e906002612cba565b6001600160401b03811115611f5557611f556126bd565b6040519080825280601f01601f191660200182016040528015611f7f576020820181803683370190505b509050600360fc1b815f81518110611f9957611f99612ccd565b60200101906001600160f81b03191690815f1a905350600f60fb1b81600181518110611fc757611fc7612ccd565b60200101906001600160f81b03191690815f1a9053505f611fe9846002612ca3565b611ff4906001612cba565b90505b600181111561206b576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061202857612028612ccd565b1a60f81b82828151811061203e5761203e612ccd565b60200101906001600160f81b03191690815f1a90535060049490941c9361206481612ce1565b9050611ff7565b5083156109d75760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610812565b5f54610100900460ff166120e05760405162461bcd60e51b815260040161081290612bdc565b6120e86123ef565b6121066001600160a01b038216156121005781611823565b33611823565b5060c9805461ff001916610100179055565b5f54610100900460ff1661213e5760405162461bcd60e51b815260040161081290612bdc565b6001600160401b034611156121665760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b5f54610100900460ff166121ae5760405162461bcd60e51b815260040161081290612bdc565b61012d6121bb8382612d41565b5061012e6108b38282612d41565b306001600160a01b038216036109c557604051630c292c9d60e21b815260040160405180910390fd5b6121fb81611b6d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606109d78383604051806060016040528060278152602001612e3760279139612415565b6001600160a01b0382166122ac5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610812565b5f81815261012f60205260409020546001600160a01b0316156123115760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610812565b61231e5f83836001611b2d565b5f81815261012f60205260409020546001600160a01b0316156123835760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610812565b6001600160a01b0382165f818152610130602090815260408083208054600101905584835261012f90915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f54610100900460ff166109f05760405162461bcd60e51b815260040161081290612bdc565b60605f5f856001600160a01b0316856040516124319190612dfb565b5f60405180830381855af49150503d805f8114612469576040519150601f19603f3d011682016040523d82523d5f602084013e61246e565b606091505b509150915061247f86838387612489565b9695505050505050565b606083156124f75782515f036124f0576001600160a01b0385163b6124f05760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610812565b5081611307565b611307838381511561250c5781518083602001fd5b8060405162461bcd60e51b815260040161081291906125a3565b6001600160e01b0319811681146109c5575f5ffd5b5f6020828403121561254b575f5ffd5b81356109d781612526565b5f5b83811015612570578181015183820152602001612558565b50505f910152565b5f815180845261258f816020860160208601612556565b601f01601f19169290920160200192915050565b602081525f6109d76020830184612578565b5f602082840312156125c5575f5ffd5b5035919050565b6001600160a01b03811681146109c5575f5ffd5b5f5f604083850312156125f1575f5ffd5b82356125fc816125cc565b946020939093013593505050565b5f5f5f6060848603121561261c575f5ffd5b8335612627816125cc565b92506020840135612637816125cc565b929592945050506040919091013590565b5f60208284031215612658575f5ffd5b81356109d7816125cc565b80358015158114612672575f5ffd5b919050565b5f5f5f60608486031215612689575f5ffd5b83356001600160401b038116811461269f575f5ffd5b9250602084013591506126b460408501612663565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f82601f8301126126e0575f5ffd5b81356001600160401b038111156126f9576126f96126bd565b604051601f8201601f19908116603f011681016001600160401b0381118282101715612727576127276126bd565b60405281815283820160200185101561273e575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f6040838503121561276b575f5ffd5b8235612776816125cc565b915060208301356001600160401b03811115612790575f5ffd5b61279c858286016126d1565b9150509250929050565b5f5f604083850312156127b7575f5ffd5b82356127c2816125cc565b91506127d060208401612663565b90509250929050565b5f5f604083850312156127ea575f5ffd5b823591506127d060208401612663565b5f5f5f5f6080858703121561280d575f5ffd5b8435612818816125cc565b93506020850135612828816125cc565b92506040850135915060608501356001600160401b03811115612849575f5ffd5b612855878288016126d1565b91505092959194509250565b5f5f60408385031215612872575f5ffd5b823561287d816125cc565b9150602083013561288d816125cc565b809150509250929050565b5f5f83601f8401126128a8575f5ffd5b5081356001600160401b038111156128be575f5ffd5b6020830191508360208285010111156128d5575f5ffd5b9250929050565b5f5f5f5f5f5f5f5f60c0898b0312156128f3575f5ffd5b88356128fe816125cc565b9750602089013561290e816125cc565b9650604089013561291e816125cc565b95506060890135945060808901356001600160401b0381111561293f575f5ffd5b61294b8b828c01612898565b90955093505060a08901356001600160401b03811115612969575f5ffd5b6129758b828c01612898565b999c989b5096995094979396929594505050565b600181811c9082168061299d57607f821691505b6020821081036129bb57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b5f60208284031215612afb575f5ffd5b5051919050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6832ba3432b932bab69d60b91b81525f8451612b77816009850160208901612556565b600160fe1b6009918401918201528451612b9881600a840160208901612556565b600981830101915050712f746f6b656e5552493f75696e743235363d60701b60018201528351612bcf816013840160208801612556565b0160130195945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215612c37575f5ffd5b81516109d7816125cc565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061247f90830184612578565b5f60208284031215612c84575f5ffd5b81516109d781612526565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176106e2576106e2612c8f565b808201808211156106e2576106e2612c8f565b634e487b7160e01b5f52603260045260245ffd5b5f81612cef57612cef612c8f565b505f190190565b601f8211156108b357805f5260205f20601f840160051c81016020851015612d1b5750805b601f840160051c820191505b81811015612d3a575f8155600101612d27565b5050505050565b81516001600160401b03811115612d5a57612d5a6126bd565b612d6e81612d688454612989565b84612cf6565b6020601f821160018114612da0575f8315612d895750848201515b5f19600385901b1c1916600184901b178455612d3a565b5f84815260208120601f198516915b82811015612dcf5787850151825560209485019460019092019101612daf565b5084821015612dec57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f8251612e0c818460208701612556565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212205ca793a2312f9b2fc8fc6bda4c8492cc141ddbe707fcc60e6d2cb7bff225a87a64736f6c634300081b0033", "balance": "0x0" }, - "0x0167000000000000000000000000000000010098": { + "0x0167010000000000000000000000000000010098": { "contractName": "BridgedERC1155", "storage": {}, - "code": "0x6080604052600436106101e5575f3560e01c8063715018a611610108578063a86f9d9e1161009d578063e30c39781161006d578063e30c39781461056f578063e985e9c51461058c578063ef8c4ae6146105d4578063f242432a146105f3578063f2fde38b14610612575f5ffd5b8063a86f9d9e146104d5578063b390c0ab146104f4578063d81d0a1514610513578063e07baba614610532575f5ffd5b80638abf6077116100d85780638abf6077146104715780638da5cb5b1461048557806395d89b41146104a2578063a22cb465146104b6575f5ffd5b8063715018a61461041557806379ba5097146104295780637cf8ed0d1461043d5780638456cb591461045d575f5ffd5b80633ab76e9f1161017e5780634e1273f41161014e5780634e1273f4146103a25780634f1ef286146103ce57806352d1902d146103e15780635c975abb146103f5575f5ffd5b80633ab76e9f146103225780633eb6b8cf146103595780633f4ba83a1461037857806349d126051461038c575f5ffd5b806326afaadd116101b957806326afaadd1461028a5780632eb2c2d6146102ce5780633075db56146102ef5780633659cfe614610303575f5ffd5b8062fdd58e146101e957806301ffc9a71461021b57806306fdde031461024a5780630e89341c1461026b575b5f5ffd5b3480156101f4575f5ffd5b506102086102033660046126ae565b610631565b6040519081526020015b60405180910390f35b348015610226575f5ffd5b5061023a6102353660046126ed565b6106cb565b6040519015158152602001610212565b348015610255575f5ffd5b5061025e61070a565b6040516102129190612755565b348015610276575f5ffd5b5061025e610285366004612767565b610797565b348015610295575f5ffd5b506102af61015f54610160546001600160a01b0390911691565b604080516001600160a01b039093168352602083019190915201610212565b3480156102d9575f5ffd5b506102ed6102e83660046128c0565b61082a565b005b3480156102fa575f5ffd5b5061023a610876565b34801561030e575f5ffd5b506102ed61031d366004612970565b61088e565b34801561032d575f5ffd5b50609754610341906001600160a01b031681565b6040516001600160a01b039091168152602001610212565b348015610364575f5ffd5b5061034161037336600461299f565b610955565b348015610383575f5ffd5b506102ed61096b565b348015610397575f5ffd5b506102086101605481565b3480156103ad575f5ffd5b506103c16103bc3660046129e5565b61097f565b6040516102129190612aee565b6102ed6103dc366004612b00565b610a9e565b3480156103ec575f5ffd5b50610208610b57565b348015610400575f5ffd5b5061023a60c954610100900460ff1660021490565b348015610420575f5ffd5b506102ed610c09565b348015610434575f5ffd5b506102ed610c1a565b348015610448575f5ffd5b5061015f54610341906001600160a01b031681565b348015610468575f5ffd5b506102ed610c91565b34801561047c575f5ffd5b50610341610ca4565b348015610490575f5ffd5b506033546001600160a01b0316610341565b3480156104ad575f5ffd5b5061025e610cb2565b3480156104c1575f5ffd5b506102ed6104d0366004612b42565b610cc0565b3480156104e0575f5ffd5b506103416104ef366004612b75565b610ccb565b3480156104ff575f5ffd5b506102ed61050e366004612b96565b610cd7565b34801561051e575f5ffd5b506102ed61052d366004612bfd565b610da9565b34801561053d575f5ffd5b5060c954610557906201000090046001600160401b031681565b6040516001600160401b039091168152602001610212565b34801561057a575f5ffd5b506065546001600160a01b0316610341565b348015610597575f5ffd5b5061023a6105a6366004612c7d565b6001600160a01b039182165f90815261012e6020908152604080832093909416825291909152205460ff1690565b3480156105df575f5ffd5b506102ed6105ee366004612cf1565b610eed565b3480156105fe575f5ffd5b506102ed61060d366004612d9e565b61106d565b34801561061d575f5ffd5b506102ed61062c366004612970565b6110b2565b5f6001600160a01b0383166106a05760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b505f81815261012d602090815260408083206001600160a01b03861684529091529020545b92915050565b5f6001600160e01b03198216634d22606360e01b14806106fb57506001600160e01b031982166377c6257360e11b145b806106c557506106c582611123565b610162805461071890612df5565b80601f016020809104026020016040519081016040528092919081815260200182805461074490612df5565b801561078f5780601f106107665761010080835404028352916020019161078f565b820191905f5260205f20905b81548152906001019060200180831161077257829003601f168201915b505050505081565b606061012f80546107a790612df5565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390612df5565b801561081e5780601f106107f55761010080835404028352916020019161081e565b820191905f5260205f20905b81548152906001019060200180831161080157829003601f168201915b50505050509050919050565b6001600160a01b038516331480610846575061084685336105a6565b6108625760405162461bcd60e51b815260040161069790612e2d565b61086f8585858585611172565b5050505050565b5f600261088560c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000100981630036108d65760405162461bcd60e51b815260040161069790612e7b565b7f00000000000000000000000001670000000000000000000000000000000100986001600160a01b031661090861130d565b6001600160a01b03161461092e5760405162461bcd60e51b815260040161069790612ec7565b61093781611328565b604080515f8082526020820190925261095291839190611330565b50565b5f61096184848461149a565b90505b9392505050565b6109736114ec565b61097d335f61157c565b565b606081518351146109e45760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610697565b5f83516001600160401b038111156109fe576109fe61277e565b604051908082528060200260200182016040528015610a27578160200160208202803683370190505b5090505f5b8451811015610a9657610a71858281518110610a4a57610a4a612f13565b6020026020010151858381518110610a6457610a64612f13565b6020026020010151610631565b828281518110610a8357610a83612f13565b6020908102919091010152600101610a2c565b509392505050565b6001600160a01b037f0000000000000000000000000167000000000000000000000000000000010098163003610ae65760405162461bcd60e51b815260040161069790612e7b565b7f00000000000000000000000001670000000000000000000000000000000100986001600160a01b0316610b1861130d565b6001600160a01b031614610b3e5760405162461bcd60e51b815260040161069790612ec7565b610b4782611328565b610b5382826001611330565b5050565b5f306001600160a01b037f00000000000000000000000001670000000000000000000000000000000100981614610bf65760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610697565b505f5160206134ec5f395f51905f525b90565b610c11611580565b61097d5f6115da565b60655433906001600160a01b03168114610c885760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610697565b610952816115da565b610c996115f3565b61097d33600161157c565b5f610cad61130d565b905090565b610161805461071890612df5565b610b53338383611664565b5f61096446848461149a565b610ceb60c954610100900460ff1660021490565b15610d095760405163bae6e2a960e01b815260040160405180910390fd5b6c195c98cc4c4d4d57dd985d5b1d609a1b610d25816001610ccb565b6001600160a01b0316336001600160a01b031614610d5657604051630d85cccf60e11b815260040160405180910390fd5b6002610d6460c95460ff1690565b60ff1603610d855760405163dfc60d8560e01b815260040160405180910390fd5b610d8f6002611744565b610d9a33848461175a565b610da46001611744565b505050565b610dbd60c954610100900460ff1660021490565b15610ddb5760405163bae6e2a960e01b815260040160405180910390fd5b6c195c98cc4c4d4d57dd985d5b1d609a1b610df7816001610ccb565b6001600160a01b0316336001600160a01b031614610e2857604051630d85cccf60e11b815260040160405180910390fd5b6002610e3660c95460ff1690565b60ff1603610e575760405163dfc60d8560e01b815260040160405180910390fd5b610e616002611744565b610edb868686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050604080516020808a028281018201909352898252909350899250889182918501908490808284375f920182905250604080516020810190915290815292506118ee915050565b610ee56001611744565b505050505050565b5f54610100900460ff1615808015610f0b57505f54600160ff909116105b80610f245750303b158015610f2457505f5460ff166001145b610f875760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610697565b5f805460ff191660011790558015610fa8575f805461ff0019166101001790555b610fb28787611a70565b610fbc8989611aac565b610fdd610fd8888860405180602001604052805f815250611ae6565b611b30565b61015f80546001600160a01b0319166001600160a01b03891617905561016086905561016161100d858783612f6b565b5061016261101c838583612f6b565b508015611062575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6001600160a01b038516331480611089575061108985336105a6565b6110a55760405162461bcd60e51b815260040161069790612e2d565b61086f8585858585611b5f565b6110ba611580565b606580546001600160a01b0383166001600160a01b031990911681179091556110eb6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f6001600160e01b03198216636cdb3d1360e11b148061115357506001600160e01b031982166303a24d0760e21b145b806106c557506301ffc9a760e01b6001600160e01b03198316146106c5565b81518351146111935760405162461bcd60e51b815260040161069790613024565b6001600160a01b0384166111b95760405162461bcd60e51b81526004016106979061306c565b336111c8818787878787611c8e565b5f5b84518110156112a7575f8582815181106111e6576111e6612f13565b602002602001015190505f85838151811061120357611203612f13565b6020908102919091018101515f84815261012d835260408082206001600160a01b038e1683529093529190912054909150818110156112545760405162461bcd60e51b8152600401610697906130b1565b5f83815261012d602090815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061129390849061310f565b9091555050600190930192506111ca915050565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516112f7929190613122565b60405180910390a4610ee5818787878787611cce565b5f5160206134ec5f395f51905f52546001600160a01b031690565b610952611580565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561136357610da483611e28565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113bd575060408051601f3d908101601f191682019092526113ba9181019061314f565b60015b6114205760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610697565b5f5160206134ec5f395f51905f52811461148e5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610697565b50610da4838383611ec3565b5f6114a58484611eed565b9050811580156114bc57506001600160a01b038116155b1561096457604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610697565b61150060c954610100900460ff1660021490565b61151d5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610b535b6033546001600160a01b0316331461097d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610697565b606580546001600160a01b031916905561095281611f97565b61160760c954610100900460ff1660021490565b156116255760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611572565b816001600160a01b0316836001600160a01b0316036116d75760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610697565b6001600160a01b038381165f81815261012e6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60c9805460ff191660ff92909216919091179055565b6001600160a01b0383166117bc5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610697565b335f6117c784611fe8565b90505f6117d384611fe8565b90506117f183875f858560405180602001604052805f815250611c8e565b5f85815261012d602090815260408083206001600160a01b038a168452909152902054848110156118705760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610697565b5f86815261012d602090815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a460408051602081019091525f90525b50505050505050565b6001600160a01b03841661194e5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610697565b815183511461196f5760405162461bcd60e51b815260040161069790613024565b3361197e815f87878787611c8e565b5f5b8451811015611a0a5783818151811061199b5761199b612f13565b602002602001015161012d5f8784815181106119b9576119b9612f13565b602002602001015181526020019081526020015f205f886001600160a01b03166001600160a01b031681526020019081526020015f205f8282546119fd919061310f565b9091555050600101611980565b50846001600160a01b03165f6001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611a5a929190613122565b60405180910390a461086f815f87878787611cce565b6001600160a01b0382161580611a84575080155b80611a8e57504681145b15610b535760405163c118d2f360e01b815260040160405180910390fd5b806001600160a01b038116611ad45760405163538ba4f960e01b815260040160405180910390fd5b611add83612031565b610da48261208f565b6060611afc846001600160a01b031660146120ff565b611b0584612294565b83604051602001611b1893929190613166565b60405160208183030381529060405290509392505050565b5f54610100900460ff16611b565760405162461bcd60e51b8152600401610697906131ee565b61095281612323565b6001600160a01b038416611b855760405162461bcd60e51b81526004016106979061306c565b335f611b9085611fe8565b90505f611b9c85611fe8565b9050611bac838989858589611c8e565b5f86815261012d602090815260408083206001600160a01b038c16845290915290205485811015611bef5760405162461bcd60e51b8152600401610697906130b1565b5f87815261012d602090815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611c2e90849061310f565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611062848a8a8a8a8a612352565b611ca260c954610100900460ff1660021490565b15611cc05760405163bae6e2a960e01b815260040160405180910390fd5b611cc98461240c565b610ee5565b6001600160a01b0384163b15610ee55760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611d129089908990889088908890600401613239565b6020604051808303815f875af1925050508015611d4c575060408051601f3d908101601f19168201909252611d4991810190613296565b60015b611df857611d586132b1565b806308c379a003611d915750611d6c6132c9565b80611d775750611d93565b8060405162461bcd60e51b81526004016106979190612755565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610697565b6001600160e01b0319811663bc197c8160e01b146118e55760405162461bcd60e51b815260040161069790613343565b6001600160a01b0381163b611e955760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610697565b5f5160206134ec5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611ecc83612435565b5f82511180611ed85750805b15610da457611ee78383612474565b50505050565b6097545f906001600160a01b031680611f1957604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611f6b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f8f919061338b565b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6040805160018082528183019092526060915f91906020808301908036833701905050905082815f8151811061202057612020612f13565b602090810291909101015292915050565b5f54610100900460ff166120575760405162461bcd60e51b8152600401610697906131ee565b61205f612499565b61207d6001600160a01b0382161561207757816115da565b336115da565b5060c9805461ff001916610100179055565b5f54610100900460ff166120b55760405162461bcd60e51b8152600401610697906131ee565b6001600160401b034611156120dd5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b60605f61210d8360026133a6565b61211890600261310f565b6001600160401b0381111561212f5761212f61277e565b6040519080825280601f01601f191660200182016040528015612159576020820181803683370190505b509050600360fc1b815f8151811061217357612173612f13565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106121a1576121a1612f13565b60200101906001600160f81b03191690815f1a9053505f6121c38460026133a6565b6121ce90600161310f565b90505b6001811115612245576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061220257612202612f13565b1a60f81b82828151811061221857612218612f13565b60200101906001600160f81b03191690815f1a90535060049490941c9361223e816133bd565b90506121d1565b5083156109645760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610697565b60605f6122a0836124bf565b60010190505f816001600160401b038111156122be576122be61277e565b6040519080825280601f01601f1916602001820160405280156122e8576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846122f257509392505050565b5f54610100900460ff166123495760405162461bcd60e51b8152600401610697906131ee565b61095281612596565b6001600160a01b0384163b15610ee55760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061239690899089908890889088906004016133d2565b6020604051808303815f875af19250505080156123d0575060408051601f3d908101601f191682019092526123cd91810190613296565b60015b6123dc57611d586132b1565b6001600160e01b0319811663f23a6e6160e01b146118e55760405162461bcd60e51b815260040161069790613343565b306001600160a01b0382160361095257604051630c292c9d60e21b815260040160405180910390fd5b61243e81611e28565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610964838360405180606001604052806027815260200161350c602791396125a3565b5f54610100900460ff1661097d5760405162461bcd60e51b8152600401610697906131ee565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106124fd5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612529576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061254757662386f26fc10000830492506010015b6305f5e100831061255f576305f5e100830492506008015b612710831061257357612710830492506004015b60648310612585576064830492506002015b600a83106106c55760010192915050565b61012f610b538282613416565b60605f5f856001600160a01b0316856040516125bf91906134d0565b5f60405180830381855af49150503d805f81146125f7576040519150601f19603f3d011682016040523d82523d5f602084013e6125fc565b606091505b509150915061260d86838387612617565b9695505050505050565b606083156126855782515f0361267e576001600160a01b0385163b61267e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610697565b5081611f8f565b611f8f8383815115611d775781518083602001fd5b6001600160a01b0381168114610952575f5ffd5b5f5f604083850312156126bf575f5ffd5b82356126ca8161269a565b946020939093013593505050565b6001600160e01b031981168114610952575f5ffd5b5f602082840312156126fd575f5ffd5b8135610964816126d8565b5f5b8381101561272257818101518382015260200161270a565b50505f910152565b5f8151808452612741816020860160208601612708565b601f01601f19169290920160200192915050565b602081525f610964602083018461272a565b5f60208284031215612777575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b601f8201601f191681016001600160401b03811182821017156127b7576127b761277e565b6040525050565b5f6001600160401b038211156127d6576127d661277e565b5060051b60200190565b5f82601f8301126127ef575f5ffd5b81356127fa816127be565b6040516128078282612792565b80915082815260208101915060208360051b86010192508583111561282a575f5ffd5b602085015b8381101561284757803583526020928301920161282f565b5095945050505050565b5f82601f830112612860575f5ffd5b81356001600160401b038111156128795761287961277e565b604051612890601f8301601f191660200182612792565b8181528460208386010111156128a4575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f5f60a086880312156128d4575f5ffd5b85356128df8161269a565b945060208601356128ef8161269a565b935060408601356001600160401b03811115612909575f5ffd5b612915888289016127e0565b93505060608601356001600160401b03811115612930575f5ffd5b61293c888289016127e0565b92505060808601356001600160401b03811115612957575f5ffd5b61296388828901612851565b9150509295509295909350565b5f60208284031215612980575f5ffd5b81356109648161269a565b8035801515811461299a575f5ffd5b919050565b5f5f5f606084860312156129b1575f5ffd5b83356001600160401b03811681146129c7575f5ffd5b9250602084013591506129dc6040850161298b565b90509250925092565b5f5f604083850312156129f6575f5ffd5b82356001600160401b03811115612a0b575f5ffd5b8301601f81018513612a1b575f5ffd5b8035612a26816127be565b604051612a338282612792565b80915082815260208101915060208360051b850101925087831115612a56575f5ffd5b6020840193505b82841015612a81578335612a708161269a565b825260209384019390910190612a5d565b945050505060208301356001600160401b03811115612a9e575f5ffd5b612aaa858286016127e0565b9150509250929050565b5f8151808452602084019350602083015f5b82811015612ae4578151865260209586019590910190600101612ac6565b5093949350505050565b602081525f6109646020830184612ab4565b5f5f60408385031215612b11575f5ffd5b8235612b1c8161269a565b915060208301356001600160401b03811115612b36575f5ffd5b612aaa85828601612851565b5f5f60408385031215612b53575f5ffd5b8235612b5e8161269a565b9150612b6c6020840161298b565b90509250929050565b5f5f60408385031215612b86575f5ffd5b82359150612b6c6020840161298b565b5f5f60408385031215612ba7575f5ffd5b50508035926020909101359150565b5f5f83601f840112612bc6575f5ffd5b5081356001600160401b03811115612bdc575f5ffd5b6020830191508360208260051b8501011115612bf6575f5ffd5b9250929050565b5f5f5f5f5f60608688031215612c11575f5ffd5b8535612c1c8161269a565b945060208601356001600160401b03811115612c36575f5ffd5b612c4288828901612bb6565b90955093505060408601356001600160401b03811115612c60575f5ffd5b612c6c88828901612bb6565b969995985093965092949392505050565b5f5f60408385031215612c8e575f5ffd5b8235612c998161269a565b91506020830135612ca98161269a565b809150509250929050565b5f5f83601f840112612cc4575f5ffd5b5081356001600160401b03811115612cda575f5ffd5b602083019150836020828501011115612bf6575f5ffd5b5f5f5f5f5f5f5f5f60c0898b031215612d08575f5ffd5b8835612d138161269a565b97506020890135612d238161269a565b96506040890135612d338161269a565b95506060890135945060808901356001600160401b03811115612d54575f5ffd5b612d608b828c01612cb4565b90955093505060a08901356001600160401b03811115612d7e575f5ffd5b612d8a8b828c01612cb4565b999c989b5096995094979396929594505050565b5f5f5f5f5f60a08688031215612db2575f5ffd5b8535612dbd8161269a565b94506020860135612dcd8161269a565b9350604086013592506060860135915060808601356001600160401b03811115612957575f5ffd5b600181811c90821680612e0957607f821691505b602082108103612e2757634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b601f821115610da457805f5260205f20601f840160051c81016020851015612f4c5750805b601f840160051c820191505b8181101561086f575f8155600101612f58565b6001600160401b03831115612f8257612f8261277e565b612f9683612f908354612df5565b83612f27565b5f601f841160018114612fc7575f8515612fb05750838201355b5f19600387901b1c1916600186901b17835561086f565b5f83815260208120601f198716915b82811015612ff65786850135825560209485019460019092019101612fd6565b5086821015613012575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156106c5576106c56130fb565b604081525f6131346040830185612ab4565b82810360208401526131468185612ab4565b95945050505050565b5f6020828403121561315f575f5ffd5b5051919050565b6832ba3432b932bab69d60b91b81525f8451613189816009850160208901612708565b600160fe1b60099184019182015284516131aa81600a840160208901612708565b600981830101915050712f746f6b656e5552493f75696e743235363d60701b600182015283516131e1816013840160208801612708565b0160130195945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0386811682528516602082015260a0604082018190525f9061326490830186612ab4565b82810360608401526132768186612ab4565b9050828103608084015261328a818561272a565b98975050505050505050565b5f602082840312156132a6575f5ffd5b8151610964816126d8565b5f60033d1115610c065760045f5f3e505f5160e01c90565b5f60443d10156132d65790565b6040513d600319016004823e80513d60248201116001600160401b03821117156132ff57505090565b80820180516001600160401b0381111561331a575050505090565b3d8401600319018282016020011115613334575050505090565b610a9660208285010185612792565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b5f6020828403121561339b575f5ffd5b81516109648161269a565b80820281158282048414176106c5576106c56130fb565b5f816133cb576133cb6130fb565b505f190190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f9061340b9083018461272a565b979650505050505050565b81516001600160401b0381111561342f5761342f61277e565b6134438161343d8454612df5565b84612f27565b6020601f821160018114613475575f831561345e5750848201515b5f19600385901b1c1916600184901b17845561086f565b5f84815260208120601f198516915b828110156134a45787850151825560209485019460019092019101613484565b50848210156134c157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f82516134e1818460208701612708565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220056c58b99db557dce285f996f441ca995a4a77b2754e41fc6af5e46a7185c22664736f6c634300081b0033", + "code": "0x6080604052600436106101e5575f3560e01c8063715018a611610108578063a86f9d9e1161009d578063e30c39781161006d578063e30c39781461056f578063e985e9c51461058c578063ef8c4ae6146105d4578063f242432a146105f3578063f2fde38b14610612575f5ffd5b8063a86f9d9e146104d5578063b390c0ab146104f4578063d81d0a1514610513578063e07baba614610532575f5ffd5b80638abf6077116100d85780638abf6077146104715780638da5cb5b1461048557806395d89b41146104a2578063a22cb465146104b6575f5ffd5b8063715018a61461041557806379ba5097146104295780637cf8ed0d1461043d5780638456cb591461045d575f5ffd5b80633ab76e9f1161017e5780634e1273f41161014e5780634e1273f4146103a25780634f1ef286146103ce57806352d1902d146103e15780635c975abb146103f5575f5ffd5b80633ab76e9f146103225780633eb6b8cf146103595780633f4ba83a1461037857806349d126051461038c575f5ffd5b806326afaadd116101b957806326afaadd1461028a5780632eb2c2d6146102ce5780633075db56146102ef5780633659cfe614610303575f5ffd5b8062fdd58e146101e957806301ffc9a71461021b57806306fdde031461024a5780630e89341c1461026b575b5f5ffd5b3480156101f4575f5ffd5b506102086102033660046126ae565b610631565b6040519081526020015b60405180910390f35b348015610226575f5ffd5b5061023a6102353660046126ed565b6106cb565b6040519015158152602001610212565b348015610255575f5ffd5b5061025e61070a565b6040516102129190612755565b348015610276575f5ffd5b5061025e610285366004612767565b610797565b348015610295575f5ffd5b506102af61015f54610160546001600160a01b0390911691565b604080516001600160a01b039093168352602083019190915201610212565b3480156102d9575f5ffd5b506102ed6102e83660046128c0565b61082a565b005b3480156102fa575f5ffd5b5061023a610876565b34801561030e575f5ffd5b506102ed61031d366004612970565b61088e565b34801561032d575f5ffd5b50609754610341906001600160a01b031681565b6040516001600160a01b039091168152602001610212565b348015610364575f5ffd5b5061034161037336600461299f565b610955565b348015610383575f5ffd5b506102ed61096b565b348015610397575f5ffd5b506102086101605481565b3480156103ad575f5ffd5b506103c16103bc3660046129e5565b61097f565b6040516102129190612aee565b6102ed6103dc366004612b00565b610a9e565b3480156103ec575f5ffd5b50610208610b57565b348015610400575f5ffd5b5061023a60c954610100900460ff1660021490565b348015610420575f5ffd5b506102ed610c09565b348015610434575f5ffd5b506102ed610c1a565b348015610448575f5ffd5b5061015f54610341906001600160a01b031681565b348015610468575f5ffd5b506102ed610c91565b34801561047c575f5ffd5b50610341610ca4565b348015610490575f5ffd5b506033546001600160a01b0316610341565b3480156104ad575f5ffd5b5061025e610cb2565b3480156104c1575f5ffd5b506102ed6104d0366004612b42565b610cc0565b3480156104e0575f5ffd5b506103416104ef366004612b75565b610ccb565b3480156104ff575f5ffd5b506102ed61050e366004612b96565b610cd7565b34801561051e575f5ffd5b506102ed61052d366004612bfd565b610da9565b34801561053d575f5ffd5b5060c954610557906201000090046001600160401b031681565b6040516001600160401b039091168152602001610212565b34801561057a575f5ffd5b506065546001600160a01b0316610341565b348015610597575f5ffd5b5061023a6105a6366004612c7d565b6001600160a01b039182165f90815261012e6020908152604080832093909416825291909152205460ff1690565b3480156105df575f5ffd5b506102ed6105ee366004612cf1565b610eed565b3480156105fe575f5ffd5b506102ed61060d366004612d9e565b61106d565b34801561061d575f5ffd5b506102ed61062c366004612970565b6110b2565b5f6001600160a01b0383166106a05760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b505f81815261012d602090815260408083206001600160a01b03861684529091529020545b92915050565b5f6001600160e01b03198216634d22606360e01b14806106fb57506001600160e01b031982166377c6257360e11b145b806106c557506106c582611123565b610162805461071890612df5565b80601f016020809104026020016040519081016040528092919081815260200182805461074490612df5565b801561078f5780601f106107665761010080835404028352916020019161078f565b820191905f5260205f20905b81548152906001019060200180831161077257829003601f168201915b505050505081565b606061012f80546107a790612df5565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390612df5565b801561081e5780601f106107f55761010080835404028352916020019161081e565b820191905f5260205f20905b81548152906001019060200180831161080157829003601f168201915b50505050509050919050565b6001600160a01b038516331480610846575061084685336105a6565b6108625760405162461bcd60e51b815260040161069790612e2d565b61086f8585858585611172565b5050505050565b5f600261088560c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670100000000000000000000000000000100981630036108d65760405162461bcd60e51b815260040161069790612e7b565b7f00000000000000000000000001670100000000000000000000000000000100986001600160a01b031661090861130d565b6001600160a01b03161461092e5760405162461bcd60e51b815260040161069790612ec7565b61093781611328565b604080515f8082526020820190925261095291839190611330565b50565b5f61096184848461149a565b90505b9392505050565b6109736114ec565b61097d335f61157c565b565b606081518351146109e45760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610697565b5f83516001600160401b038111156109fe576109fe61277e565b604051908082528060200260200182016040528015610a27578160200160208202803683370190505b5090505f5b8451811015610a9657610a71858281518110610a4a57610a4a612f13565b6020026020010151858381518110610a6457610a64612f13565b6020026020010151610631565b828281518110610a8357610a83612f13565b6020908102919091010152600101610a2c565b509392505050565b6001600160a01b037f0000000000000000000000000167010000000000000000000000000000010098163003610ae65760405162461bcd60e51b815260040161069790612e7b565b7f00000000000000000000000001670100000000000000000000000000000100986001600160a01b0316610b1861130d565b6001600160a01b031614610b3e5760405162461bcd60e51b815260040161069790612ec7565b610b4782611328565b610b5382826001611330565b5050565b5f306001600160a01b037f00000000000000000000000001670100000000000000000000000000000100981614610bf65760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610697565b505f5160206134ec5f395f51905f525b90565b610c11611580565b61097d5f6115da565b60655433906001600160a01b03168114610c885760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610697565b610952816115da565b610c996115f3565b61097d33600161157c565b5f610cad61130d565b905090565b610161805461071890612df5565b610b53338383611664565b5f61096446848461149a565b610ceb60c954610100900460ff1660021490565b15610d095760405163bae6e2a960e01b815260040160405180910390fd5b6c195c98cc4c4d4d57dd985d5b1d609a1b610d25816001610ccb565b6001600160a01b0316336001600160a01b031614610d5657604051630d85cccf60e11b815260040160405180910390fd5b6002610d6460c95460ff1690565b60ff1603610d855760405163dfc60d8560e01b815260040160405180910390fd5b610d8f6002611744565b610d9a33848461175a565b610da46001611744565b505050565b610dbd60c954610100900460ff1660021490565b15610ddb5760405163bae6e2a960e01b815260040160405180910390fd5b6c195c98cc4c4d4d57dd985d5b1d609a1b610df7816001610ccb565b6001600160a01b0316336001600160a01b031614610e2857604051630d85cccf60e11b815260040160405180910390fd5b6002610e3660c95460ff1690565b60ff1603610e575760405163dfc60d8560e01b815260040160405180910390fd5b610e616002611744565b610edb868686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050604080516020808a028281018201909352898252909350899250889182918501908490808284375f920182905250604080516020810190915290815292506118ee915050565b610ee56001611744565b505050505050565b5f54610100900460ff1615808015610f0b57505f54600160ff909116105b80610f245750303b158015610f2457505f5460ff166001145b610f875760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610697565b5f805460ff191660011790558015610fa8575f805461ff0019166101001790555b610fb28787611a70565b610fbc8989611aac565b610fdd610fd8888860405180602001604052805f815250611ae6565b611b30565b61015f80546001600160a01b0319166001600160a01b03891617905561016086905561016161100d858783612f6b565b5061016261101c838583612f6b565b508015611062575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050505050565b6001600160a01b038516331480611089575061108985336105a6565b6110a55760405162461bcd60e51b815260040161069790612e2d565b61086f8585858585611b5f565b6110ba611580565b606580546001600160a01b0383166001600160a01b031990911681179091556110eb6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f6001600160e01b03198216636cdb3d1360e11b148061115357506001600160e01b031982166303a24d0760e21b145b806106c557506301ffc9a760e01b6001600160e01b03198316146106c5565b81518351146111935760405162461bcd60e51b815260040161069790613024565b6001600160a01b0384166111b95760405162461bcd60e51b81526004016106979061306c565b336111c8818787878787611c8e565b5f5b84518110156112a7575f8582815181106111e6576111e6612f13565b602002602001015190505f85838151811061120357611203612f13565b6020908102919091018101515f84815261012d835260408082206001600160a01b038e1683529093529190912054909150818110156112545760405162461bcd60e51b8152600401610697906130b1565b5f83815261012d602090815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061129390849061310f565b9091555050600190930192506111ca915050565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516112f7929190613122565b60405180910390a4610ee5818787878787611cce565b5f5160206134ec5f395f51905f52546001600160a01b031690565b610952611580565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561136357610da483611e28565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156113bd575060408051601f3d908101601f191682019092526113ba9181019061314f565b60015b6114205760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610697565b5f5160206134ec5f395f51905f52811461148e5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610697565b50610da4838383611ec3565b5f6114a58484611eed565b9050811580156114bc57506001600160a01b038116155b1561096457604051632b0d65db60e01b81526001600160401b038516600482015260248101849052604401610697565b61150060c954610100900460ff1660021490565b61151d5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b610b535b6033546001600160a01b0316331461097d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610697565b606580546001600160a01b031916905561095281611f97565b61160760c954610100900460ff1660021490565b156116255760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001611572565b816001600160a01b0316836001600160a01b0316036116d75760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610697565b6001600160a01b038381165f81815261012e6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b60c9805460ff191660ff92909216919091179055565b6001600160a01b0383166117bc5760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610697565b335f6117c784611fe8565b90505f6117d384611fe8565b90506117f183875f858560405180602001604052805f815250611c8e565b5f85815261012d602090815260408083206001600160a01b038a168452909152902054848110156118705760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610697565b5f86815261012d602090815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a460408051602081019091525f90525b50505050505050565b6001600160a01b03841661194e5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610697565b815183511461196f5760405162461bcd60e51b815260040161069790613024565b3361197e815f87878787611c8e565b5f5b8451811015611a0a5783818151811061199b5761199b612f13565b602002602001015161012d5f8784815181106119b9576119b9612f13565b602002602001015181526020019081526020015f205f886001600160a01b03166001600160a01b031681526020019081526020015f205f8282546119fd919061310f565b9091555050600101611980565b50846001600160a01b03165f6001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611a5a929190613122565b60405180910390a461086f815f87878787611cce565b6001600160a01b0382161580611a84575080155b80611a8e57504681145b15610b535760405163c118d2f360e01b815260040160405180910390fd5b806001600160a01b038116611ad45760405163538ba4f960e01b815260040160405180910390fd5b611add83612031565b610da48261208f565b6060611afc846001600160a01b031660146120ff565b611b0584612294565b83604051602001611b1893929190613166565b60405160208183030381529060405290509392505050565b5f54610100900460ff16611b565760405162461bcd60e51b8152600401610697906131ee565b61095281612323565b6001600160a01b038416611b855760405162461bcd60e51b81526004016106979061306c565b335f611b9085611fe8565b90505f611b9c85611fe8565b9050611bac838989858589611c8e565b5f86815261012d602090815260408083206001600160a01b038c16845290915290205485811015611bef5760405162461bcd60e51b8152600401610697906130b1565b5f87815261012d602090815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290611c2e90849061310f565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611062848a8a8a8a8a612352565b611ca260c954610100900460ff1660021490565b15611cc05760405163bae6e2a960e01b815260040160405180910390fd5b611cc98461240c565b610ee5565b6001600160a01b0384163b15610ee55760405163bc197c8160e01b81526001600160a01b0385169063bc197c8190611d129089908990889088908890600401613239565b6020604051808303815f875af1925050508015611d4c575060408051601f3d908101601f19168201909252611d4991810190613296565b60015b611df857611d586132b1565b806308c379a003611d915750611d6c6132c9565b80611d775750611d93565b8060405162461bcd60e51b81526004016106979190612755565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610697565b6001600160e01b0319811663bc197c8160e01b146118e55760405162461bcd60e51b815260040161069790613343565b6001600160a01b0381163b611e955760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610697565b5f5160206134ec5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611ecc83612435565b5f82511180611ed85750805b15610da457611ee78383612474565b50505050565b6097545f906001600160a01b031680611f1957604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611f6b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f8f919061338b565b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6040805160018082528183019092526060915f91906020808301908036833701905050905082815f8151811061202057612020612f13565b602090810291909101015292915050565b5f54610100900460ff166120575760405162461bcd60e51b8152600401610697906131ee565b61205f612499565b61207d6001600160a01b0382161561207757816115da565b336115da565b5060c9805461ff001916610100179055565b5f54610100900460ff166120b55760405162461bcd60e51b8152600401610697906131ee565b6001600160401b034611156120dd5760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b60605f61210d8360026133a6565b61211890600261310f565b6001600160401b0381111561212f5761212f61277e565b6040519080825280601f01601f191660200182016040528015612159576020820181803683370190505b509050600360fc1b815f8151811061217357612173612f13565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106121a1576121a1612f13565b60200101906001600160f81b03191690815f1a9053505f6121c38460026133a6565b6121ce90600161310f565b90505b6001811115612245576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061220257612202612f13565b1a60f81b82828151811061221857612218612f13565b60200101906001600160f81b03191690815f1a90535060049490941c9361223e816133bd565b90506121d1565b5083156109645760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610697565b60605f6122a0836124bf565b60010190505f816001600160401b038111156122be576122be61277e565b6040519080825280601f01601f1916602001820160405280156122e8576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846122f257509392505050565b5f54610100900460ff166123495760405162461bcd60e51b8152600401610697906131ee565b61095281612596565b6001600160a01b0384163b15610ee55760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061239690899089908890889088906004016133d2565b6020604051808303815f875af19250505080156123d0575060408051601f3d908101601f191682019092526123cd91810190613296565b60015b6123dc57611d586132b1565b6001600160e01b0319811663f23a6e6160e01b146118e55760405162461bcd60e51b815260040161069790613343565b306001600160a01b0382160361095257604051630c292c9d60e21b815260040160405180910390fd5b61243e81611e28565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610964838360405180606001604052806027815260200161350c602791396125a3565b5f54610100900460ff1661097d5760405162461bcd60e51b8152600401610697906131ee565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106124fd5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612529576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061254757662386f26fc10000830492506010015b6305f5e100831061255f576305f5e100830492506008015b612710831061257357612710830492506004015b60648310612585576064830492506002015b600a83106106c55760010192915050565b61012f610b538282613416565b60605f5f856001600160a01b0316856040516125bf91906134d0565b5f60405180830381855af49150503d805f81146125f7576040519150601f19603f3d011682016040523d82523d5f602084013e6125fc565b606091505b509150915061260d86838387612617565b9695505050505050565b606083156126855782515f0361267e576001600160a01b0385163b61267e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610697565b5081611f8f565b611f8f8383815115611d775781518083602001fd5b6001600160a01b0381168114610952575f5ffd5b5f5f604083850312156126bf575f5ffd5b82356126ca8161269a565b946020939093013593505050565b6001600160e01b031981168114610952575f5ffd5b5f602082840312156126fd575f5ffd5b8135610964816126d8565b5f5b8381101561272257818101518382015260200161270a565b50505f910152565b5f8151808452612741816020860160208601612708565b601f01601f19169290920160200192915050565b602081525f610964602083018461272a565b5f60208284031215612777575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b601f8201601f191681016001600160401b03811182821017156127b7576127b761277e565b6040525050565b5f6001600160401b038211156127d6576127d661277e565b5060051b60200190565b5f82601f8301126127ef575f5ffd5b81356127fa816127be565b6040516128078282612792565b80915082815260208101915060208360051b86010192508583111561282a575f5ffd5b602085015b8381101561284757803583526020928301920161282f565b5095945050505050565b5f82601f830112612860575f5ffd5b81356001600160401b038111156128795761287961277e565b604051612890601f8301601f191660200182612792565b8181528460208386010111156128a4575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f5f60a086880312156128d4575f5ffd5b85356128df8161269a565b945060208601356128ef8161269a565b935060408601356001600160401b03811115612909575f5ffd5b612915888289016127e0565b93505060608601356001600160401b03811115612930575f5ffd5b61293c888289016127e0565b92505060808601356001600160401b03811115612957575f5ffd5b61296388828901612851565b9150509295509295909350565b5f60208284031215612980575f5ffd5b81356109648161269a565b8035801515811461299a575f5ffd5b919050565b5f5f5f606084860312156129b1575f5ffd5b83356001600160401b03811681146129c7575f5ffd5b9250602084013591506129dc6040850161298b565b90509250925092565b5f5f604083850312156129f6575f5ffd5b82356001600160401b03811115612a0b575f5ffd5b8301601f81018513612a1b575f5ffd5b8035612a26816127be565b604051612a338282612792565b80915082815260208101915060208360051b850101925087831115612a56575f5ffd5b6020840193505b82841015612a81578335612a708161269a565b825260209384019390910190612a5d565b945050505060208301356001600160401b03811115612a9e575f5ffd5b612aaa858286016127e0565b9150509250929050565b5f8151808452602084019350602083015f5b82811015612ae4578151865260209586019590910190600101612ac6565b5093949350505050565b602081525f6109646020830184612ab4565b5f5f60408385031215612b11575f5ffd5b8235612b1c8161269a565b915060208301356001600160401b03811115612b36575f5ffd5b612aaa85828601612851565b5f5f60408385031215612b53575f5ffd5b8235612b5e8161269a565b9150612b6c6020840161298b565b90509250929050565b5f5f60408385031215612b86575f5ffd5b82359150612b6c6020840161298b565b5f5f60408385031215612ba7575f5ffd5b50508035926020909101359150565b5f5f83601f840112612bc6575f5ffd5b5081356001600160401b03811115612bdc575f5ffd5b6020830191508360208260051b8501011115612bf6575f5ffd5b9250929050565b5f5f5f5f5f60608688031215612c11575f5ffd5b8535612c1c8161269a565b945060208601356001600160401b03811115612c36575f5ffd5b612c4288828901612bb6565b90955093505060408601356001600160401b03811115612c60575f5ffd5b612c6c88828901612bb6565b969995985093965092949392505050565b5f5f60408385031215612c8e575f5ffd5b8235612c998161269a565b91506020830135612ca98161269a565b809150509250929050565b5f5f83601f840112612cc4575f5ffd5b5081356001600160401b03811115612cda575f5ffd5b602083019150836020828501011115612bf6575f5ffd5b5f5f5f5f5f5f5f5f60c0898b031215612d08575f5ffd5b8835612d138161269a565b97506020890135612d238161269a565b96506040890135612d338161269a565b95506060890135945060808901356001600160401b03811115612d54575f5ffd5b612d608b828c01612cb4565b90955093505060a08901356001600160401b03811115612d7e575f5ffd5b612d8a8b828c01612cb4565b999c989b5096995094979396929594505050565b5f5f5f5f5f60a08688031215612db2575f5ffd5b8535612dbd8161269a565b94506020860135612dcd8161269a565b9350604086013592506060860135915060808601356001600160401b03811115612957575f5ffd5b600181811c90821680612e0957607f821691505b602082108103612e2757634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b601f821115610da457805f5260205f20601f840160051c81016020851015612f4c5750805b601f840160051c820191505b8181101561086f575f8155600101612f58565b6001600160401b03831115612f8257612f8261277e565b612f9683612f908354612df5565b83612f27565b5f601f841160018114612fc7575f8515612fb05750838201355b5f19600387901b1c1916600186901b17835561086f565b5f83815260208120601f198716915b82811015612ff65786850135825560209485019460019092019101612fd6565b5086821015613012575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b808201808211156106c5576106c56130fb565b604081525f6131346040830185612ab4565b82810360208401526131468185612ab4565b95945050505050565b5f6020828403121561315f575f5ffd5b5051919050565b6832ba3432b932bab69d60b91b81525f8451613189816009850160208901612708565b600160fe1b60099184019182015284516131aa81600a840160208901612708565b600981830101915050712f746f6b656e5552493f75696e743235363d60701b600182015283516131e1816013840160208801612708565b0160130195945050505050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0386811682528516602082015260a0604082018190525f9061326490830186612ab4565b82810360608401526132768186612ab4565b9050828103608084015261328a818561272a565b98975050505050505050565b5f602082840312156132a6575f5ffd5b8151610964816126d8565b5f60033d1115610c065760045f5f3e505f5160e01c90565b5f60443d10156132d65790565b6040513d600319016004823e80513d60248201116001600160401b03821117156132ff57505090565b80820180516001600160401b0381111561331a575050505090565b3d8401600319018282016020011115613334575050505090565b610a9660208285010185612792565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b5f6020828403121561339b575f5ffd5b81516109648161269a565b80820281158282048414176106c5576106c56130fb565b5f816133cb576133cb6130fb565b505f190190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f9061340b9083018461272a565b979650505050505050565b81516001600160401b0381111561342f5761342f61277e565b6134438161343d8454612df5565b84612f27565b6020601f821160018114613475575f831561345e5750848201515b5f19600385901b1c1916600184901b17845561086f565b5f84815260208120601f198516915b828110156134a45787850151825560209485019460019092019101613484565b50848210156134c157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f82516134e1818460208701612708565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220056c58b99db557dce285f996f441ca995a4a77b2754e41fc6af5e46a7185c22664736f6c634300081b0033", "balance": "0x0" }, - "0x0167000000000000000000000000000000000005": { + "0x0167010000000000000000000000000000000005": { "contractName": "SignalServiceImpl", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f" }, - "code": "0x6080604052600436106101c5575f3560e01c806379ba5097116100f2578063a86f9d9e11610092578063e30c397811610062578063e30c39781461052f578063f09a40161461054c578063f2fde38b1461056b578063fe9fbb801461058a575f5ffd5b8063a86f9d9e1461048e578063ce9d0820146104ad578063dfc8ff1d146104cc578063e07baba61461050a575f5ffd5b80638da5cb5b116100cd5780638da5cb5b14610414578063910af6ed1461043157806391f3f74b146104505780639b527cfa1461046f575f5ffd5b806379ba5097146103d85780638456cb59146103ec5780638abf607714610400575f5ffd5b80633eb6b8cf1161016857806352d1902d1161013857806352d1902d146103715780635c975abb1461038557806366ca2bc0146103a5578063715018a6146103c4575f5ffd5b80633eb6b8cf146102fe5780633f4ba83a1461031d5780634f1ef286146103315780634f90a67414610344575f5ffd5b8063355bcc3d116101a3578063355bcc3d146102325780633659cfe6146102895780633ab76e9f146102a85780633ced0e08146102df575f5ffd5b80632d1fb389146101c95780633075db56146101ea57806332676bc614610213575b5f5ffd5b3480156101d4575f5ffd5b506101e86101e336600461351b565b6105b8565b005b3480156101f5575f5ffd5b506101fe61065e565b60405190151581526020015b60405180910390f35b34801561021e575f5ffd5b506101fe61022d36600461354e565b610676565b34801561023d575f5ffd5b5061027161024c36600461358e565b60fb60209081525f92835260408084209091529082529020546001600160401b031681565b6040516001600160401b03909116815260200161020a565b348015610294575f5ffd5b506101e86102a33660046135a8565b61068c565b3480156102b3575f5ffd5b506097546102c7906001600160a01b031681565b6040516001600160a01b03909116815260200161020a565b3480156102ea575f5ffd5b506101fe6102f93660046135c3565b61075c565b348015610309575f5ffd5b506102c7610318366004613604565b6107a3565b348015610328575f5ffd5b506101e86107b9565b6101e861033f366004613714565b6107cd565b34801561034f575f5ffd5b5061036361035e3660046135c3565b610886565b60405190815260200161020a565b34801561037c575f5ffd5b506103636108cc565b348015610390575f5ffd5b506101fe60c954610100900460ff1660021490565b3480156103b0575f5ffd5b506103636103bf366004613760565b61097d565b3480156103cf575f5ffd5b506101e8610989565b3480156103e3575f5ffd5b506101e861099a565b3480156103f7575f5ffd5b506101e8610a11565b34801561040b575f5ffd5b506102c7610a24565b34801561041f575f5ffd5b506033546001600160a01b03166102c7565b34801561043c575f5ffd5b5061036361044b366004613777565b610a32565b34801561045b575f5ffd5b5061036361046a36600461380c565b610b0d565b34801561047a575f5ffd5b50610363610489366004613848565b610b78565b348015610499575f5ffd5b506102c76104a8366004613878565b610ba4565b3480156104b8575f5ffd5b506101e86104c7366004613777565b610bb0565b3480156104d7575f5ffd5b506104eb6104e6366004613848565b610bc6565b604080516001600160401b03909316835260208301919091520161020a565b348015610515575f5ffd5b5060c954610271906201000090046001600160401b031681565b34801561053a575f5ffd5b506065546001600160a01b03166102c7565b348015610557575f5ffd5b506101e8610566366004613899565b610c5a565b348015610576575f5ffd5b506101e86105853660046135a8565b610d69565b348015610595575f5ffd5b506101fe6105a43660046135a8565b60fc6020525f908152604090205460ff1681565b6105c0610dda565b6001600160a01b0382165f90815260fc602052604090205481151560ff909116151503610600576040516398f26f4560e01b815260040160405180910390fd5b6001600160a01b0382165f81815260fc6020908152604091829020805460ff191685151590811790915591519182527f4c0079b9bcd37cd5d29a13938effd97c881798cbc6bd52a3026a29d94b27d1bf910160405180910390a25050565b5f600261066d60c95460ff1690565b60ff1614905090565b5f6106818383610e34565b151590505b92915050565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000051630036106dd5760405162461bcd60e51b81526004016106d4906138d0565b60405180910390fd5b7f00000000000000000000000001670000000000000000000000000000000000056001600160a01b031661070f610e96565b6001600160a01b0316146107355760405162461bcd60e51b81526004016106d49061391c565b61073e81610eb1565b604080515f8082526020820190925261075991839190610eb9565b50565b5f8180820361077e5760405163ec73295960e01b815260040160405180910390fd5b5f61078a878787610b78565b9050836107973083610e34565b14979650505050505050565b5f6107af848484611023565b90505b9392505050565b6107c1611075565b6107cb335f611105565b565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000000051630036108155760405162461bcd60e51b81526004016106d4906138d0565b7f00000000000000000000000001670000000000000000000000000000000000056001600160a01b0316610847610e96565b6001600160a01b03161461086d5760405162461bcd60e51b81526004016106d49061391c565b61087682610eb1565b61088282826001610eb9565b5050565b335f90815260fc602052604081205460ff166108b557604051631f67751f60e01b815260040160405180910390fd5b6108c18585858561111e565b90505b949350505050565b5f306001600160a01b037f0000000000000000000000000167000000000000000000000000000000000005161461096b5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016106d4565b505f516020613eb05f395f51905f5290565b5f610686338384611200565b610991610dda565b6107cb5f6112d9565b60655433906001600160a01b03168114610a085760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016106d4565b610759816112d9565b610a196112f2565b6107cb336001611105565b5f610a2d610e96565b905090565b5f610a4760c954610100900460ff1660021490565b15610a655760405163bae6e2a960e01b815260040160405180910390fd5b6002610a7360c95460ff1690565b60ff1603610a945760405163dfc60d8560e01b815260040160405180910390fd5b60c9805460ff191660021790555f610ab187878787876001611363565b90505f5b8151811015610af457610ae0828281518110610ad357610ad3613968565b602002602001015161181f565b610aea9084613990565b9250600101610ab5565b505060c9805460ff191660011790555b95945050505050565b6040516514d251d3905360d21b60208201526001600160c01b031960c085901b1660268201526bffffffffffffffffffffffff19606084901b16602e820152604281018290525f906062015b6040516020818303038152906040528051906020012090509392505050565b604080516001600160401b03808616602083015291810184905290821660608201525f90608001610b59565b5f6107b2468484611023565b610bbe85858585855f611363565b505050505050565b5f5f826001600160401b03165f03610c02576001600160401b038086165f90815260fb6020908152604080832088845290915290205416610c04565b825b91506001600160401b03821615610c52575f610c21868685610b78565b9050610c2d3082610e34565b91505f829003610c505760405163738afa0560e01b815260040160405180910390fd5b505b935093915050565b5f54610100900460ff1615808015610c7857505f54600160ff909116105b80610c915750303b158015610c9157505f5460ff166001145b610cf45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106d4565b5f805460ff191660011790558015610d15575f805461ff0019166101001790555b610d1f8383611963565b8015610d64575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610d71610dda565b606580546001600160a01b0383166001600160a01b03199091168117909155610da26033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6033546001600160a01b031633146107cb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106d4565b5f826001600160a01b038116610e5d5760405163538ba4f960e01b815260040160405180910390fd5b825f819003610e7f5760405163ec73295960e01b815260040160405180910390fd5b5f610e8b468787610b0d565b549695505050505050565b5f516020613eb05f395f51905f52546001600160a01b031690565b610759610dda565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610eec57610d648361199d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610f46575060408051601f3d908101601f19168201909252610f43918101906139a3565b60015b610fa95760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016106d4565b5f516020613eb05f395f51905f5281146110175760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016106d4565b50610d64838383611a38565b5f61102e8484611a62565b90508115801561104557506001600160a01b038116155b156107b257604051632b0d65db60e01b81526001600160401b0385166004820152602481018490526044016106d4565b61108960c954610100900460ff1660021490565b6110a65760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b604051630c2b8f8f60e11b815260040160405180910390fd5b5f61112a858585610b78565b9050611137308284611200565b506001600160401b038581165f90815260fb60209081526040808320888452909152902054818516911610156111a1576001600160401b038581165f90815260fb602090815260408083208884529091529020805467ffffffffffffffff19169185169190911790555b83836001600160401b0316866001600160401b03167fde247c825b1fb2d7ff9e0e771cba6f9e757ad04479fcdc135d88ae91fd50b37d85856040516111f0929190918252602082015260400190565b60405180910390a4949350505050565b5f836001600160a01b0381166112295760405163538ba4f960e01b815260040160405180910390fd5b835f81900361124b5760405163ec73295960e01b815260040160405180910390fd5b835f81900361126d5760405163ec73295960e01b815260040160405180910390fd5b611278468888610b0d565b858155604080516001600160a01b038a16815260208101899052908101829052606081018790529094507f0ad2d108660a211f47bf7fb43a0443cae181624995d3d42b88ee6879d200e9739060800160405180910390a15050509392505050565b606580546001600160a01b031916905561075981611b04565b61130660c954610100900460ff1660021490565b156113245760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016110fb565b6060856001600160a01b03811661138d5760405163538ba4f960e01b815260040160405180910390fd5b855f8190036113af5760405163ec73295960e01b815260040160405180910390fd5b5f6113bc86880188613a77565b905080515f036113df57604051630b92daef60e21b815260040160405180910390fd5b5f600182516113ee9190613bbd565b6001600160401b038111156114055761140561363d565b60405190808252806020026020018201604052801561142e578160200160208202803683370190505b50905085156114c15781516001600160401b038111156114505761145061363d565b6040519080825280602002602001820160405280156114bd57816020015b6114aa6040805160e0810182525f80825260208201819052918101829052606081018290526080810182905260a081018290529060c082015290565b81526020019060019003908161146e5790505b5094505b8a8a8a805f6114e2856d7369676e616c5f7365727669636560901b836107a3565b9050306001600160a01b0382160361150d57604051637556223560e11b815260040160405180910390fd5b6115456040805160c0810182525f80825260208201819052918101829052906060820190815260200160608152602001606081525090565b5f5f5f5f5b8b518110156117d3578b818151811061156557611565613968565b602002602001015194505f5b818110156115cf57855f01516001600160401b03168c828151811061159857611598613968565b60200260200101516001600160401b0316036115c7576040516348362c2760e11b815260040160405180910390fd5b600101611571565b506115de8a8a8a8a898b611b55565b93508a5181149150811561161e5784516001600160401b03164614611616576040516338bf822760e21b815260040160405180910390fd5b3095506116c9565b845f01518b828151811061163457611634613968565b6001600160401b0392831660209182029290920101528551161580611662575084516001600160401b031646145b1561168057604051637556223560e11b815260040160405180910390fd5b845161169e906d7369676e616c5f7365727669636560901b5f6107a3565b9550306001600160a01b038716036116c957604051637556223560e11b815260040160405180910390fd5b608085015151151592508f1561175d576040518060e00160405280866040015181526020018581526020018b6001600160401b0316815260200186602001516001600160401b03168152602001841515815260200183151581526020018660600151600381111561173c5761173c613bd0565b8152508f828151811061175157611751613968565b60200260200101819052505b6117b88a8461178c577fc6cdc4f2acf13acb10f410085b821f7b7113b303e9a4799023f928317396aaf56117ae565b7f73e6d340850343cc6f001515dc593377337c95a6ffe034fe1e844d4dab5da1695b8760200151610b78565b604086015186519b509699509750949550879460010161154a565b508515806117ea57506117e63088610e34565b8614155b156118085760405163738afa0560e01b815260040160405180910390fd5b505050505050505050505050509695505050505050565b5f8060038360c00151600381111561183957611839613bd0565b148061185a575060028360c00151600381111561185857611858613bd0565b145b905080801561186a575082608001515b801561187857508260a00151155b156118ba57600191506118b883604001517f73e6d340850343cc6f001515dc593377337c95a6ffe034fe1e844d4dab5da1698560600151865f015161111e565b505b5f60038460c0015160038111156118d3576118d3613bd0565b14806118f4575060018460c0015160038111156118f2576118f2613bd0565b145b9050808015611910575083608001518061191057508360a00151155b1561195c57611920600184613990565b925061195a84604001517fc6cdc4f2acf13acb10f410085b821f7b7113b303e9a4799023f928317396aaf58660600151876020015161111e565b505b5050919050565b806001600160a01b03811661198b5760405163538ba4f960e01b815260040160405180910390fd5b61199483611bf4565b610d6482611c52565b6001600160a01b0381163b611a0a5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016106d4565b5f516020613eb05f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611a4183611cc2565b5f82511180611a4d5750805b15610d6457611a5c8383611d01565b50505050565b6097545f906001600160a01b031680611a8e57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611ae0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c49190613be4565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f856001600160a01b038116611b7e5760405163538ba4f960e01b815260040160405180910390fd5b855f819003611ba05760405163ec73295960e01b815260040160405180910390fd5b855f819003611bc25760405163ec73295960e01b815260040160405180910390fd5b611be6866040015186611bd68d8d8d610b0d565b8a8a608001518b60a00151611d26565b9a9950505050505050505050565b5f54610100900460ff16611c1a5760405162461bcd60e51b81526004016106d490613bff565b611c22611e33565b611c406001600160a01b03821615611c3a57816112d9565b336112d9565b5060c9805461ff001916610100179055565b5f54610100900460ff16611c785760405162461bcd60e51b81526004016106d490613bff565b6001600160401b03461115611ca05760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b611ccb8161199d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606107b28383604051806060016040528060278152602001613ed060279139611e59565b5f82515f14611dce576040516bffffffffffffffffffffffff19606088901b1660208201525f90611d6a90603401604051602081830303815290604052858a611ecd565b905080515f03611d8d57604051630414cd5b60e31b815260040160405180910390fd5b5f611d9782611ee6565b9050611dbc81600281518110611daf57611daf613968565b6020026020010151611ef9565b611dc590613c4a565b92505050611dd1565b50855b5f611e0886604051602001611de891815260200190565b60408051601f19818403018152919052611e0187611f78565b8585611f8b565b905080611e2857604051638d9a4db360e01b815260040160405180910390fd5b509695505050505050565b5f54610100900460ff166107cb5760405162461bcd60e51b81526004016106d490613bff565b60605f5f856001600160a01b031685604051611e759190613c92565b5f60405180830381855af49150503d805f8114611ead576040519150601f19603f3d011682016040523d82523d5f602084013e611eb2565b606091505b5091509150611ec386838387611fa4565b9695505050505050565b60605f611ed98561201c565b9050610b0481858561204e565b6060610686611ef4836128bc565b61290e565b60605f5f5f611f0785612a8c565b919450925090505f816001811115611f2157611f21613bd0565b14611f3f576040516307fe6cb960e21b815260040160405180910390fd5b611f498284613990565b855114611f6957604051630b8aa6f760e31b815260040160405180910390fd5b610b0485602001518484612d6f565b6060610686611f8683612dff565b612f13565b5f5f611f968661201c565b9050611ec381868686612f6b565b606083156120125782515f0361200b576001600160a01b0385163b61200b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106d4565b50816108c4565b6108c48383612f91565b6060818051906020012060405160200161203891815260200190565b6040516020818303038152906040529050919050565b60605f8451116120985760405162461bcd60e51b81526020600482015260156024820152744d65726b6c65547269653a20656d707479206b657960581b60448201526064016106d4565b5f6120a284612fbb565b90505f6120ae8661309e565b90505f846040516020016120c491815260200190565b60408051601f1981840301815291905290505f805b8451811015612865575f8582815181106120f5576120f5613968565b6020026020010151905084518311156121675760405162461bcd60e51b815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201526d0e8c2d840d6caf240d8cadccee8d60931b60648201526084016106d4565b825f0361220557805180516020918201206040516121b49261218e92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b6122005760405162461bcd60e51b815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016106d4565b6122fb565b80515160201161228b578051805160209182012060405161222f9261218e92910190815260200190565b6122005760405162461bcd60e51b815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e6044820152660c2d840d0c2e6d60cb1b60648201526084016106d4565b8051845160208087019190912082519190920120146122fb5760405162461bcd60e51b815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f646044820152650ca40d0c2e6d60d31b60648201526084016106d4565b61230760106001613990565b8160200151510361249f5784518303612439576123348160200151601081518110611daf57611daf613968565b96505f8751116123ac5760405162461bcd60e51b815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016106d4565b600186516123ba9190613bbd565b821461242e5760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016106d4565b5050505050506107b2565b5f85848151811061244c5761244c613968565b602001015160f81c60f81b60f81c90505f82602001518260ff168151811061247657612476613968565b60200260200101519050612489816130ff565b9550612496600186613990565b9450505061285c565b600281602001515103612803575f6124b682613123565b90505f815f815181106124cb576124cb613968565b016020015160f81c90505f6124e1600283613cc1565b6124ec906002613ce2565b90505f6124fc848360ff16613146565b90505f6125098a89613146565b90505f612516838361317b565b90508083511461258e5760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016106d4565b60ff8516600214806125a3575060ff85166003145b15612743578082511461261e5760405162461bcd60e51b815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016106d4565b6126388760200151600181518110611daf57611daf613968565b9c505f8d51116126b05760405162461bcd60e51b815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016106d4565b60018c516126be9190613bbd565b88146127325760405162461bcd60e51b815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016106d4565b5050505050505050505050506107b2565b60ff85161580612756575060ff85166001145b1561279557612782876020015160018151811061277557612775613968565b60200260200101516130ff565b995061278e818a613990565b98506127f8565b60405162461bcd60e51b815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f64652077697468604482015271040c2dc40eadcd6dcdeeedc40e0e4caccd2f60731b60648201526084016106d4565b50505050505061285c565b60405162461bcd60e51b815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e706172736561604482015267626c65206e6f646560c01b60648201526084016106d4565b506001016120d9565b5060405162461bcd60e51b815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c656044820152646d656e747360d81b60648201526084016106d4565b604080518082019091525f808252602082015281515f036128f057604051635ab458fb60e01b815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b60605f5f5f61291c85612a8c565b91945092509050600181600181111561293757612937613bd0565b14612955576040516325ce355f60e11b815260040160405180910390fd5b84516129618385613990565b1461297f57604051630b8aa6f760e31b815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091525f80825260208201528152602001906001900390816129965790505093505f835b8651811015612a80575f5f612a056040518060400160405280858c5f01516129e99190613bbd565b8152602001858c602001516129fe9190613990565b9052612a8c565b509150915060405180604001604052808383612a219190613990565b8152602001848b60200151612a369190613990565b815250888581518110612a4b57612a4b613968565b6020908102919091010152612a61600185613990565b9350612a6d8183613990565b612a779084613990565b925050506129c1565b50845250919392505050565b5f5f5f835f01515f03612ab257604051635ab458fb60e01b815260040160405180910390fd5b602084015180515f1a607f8111612ad4575f60015f9450945094505050612d68565b60b78111612b69575f612ae8608083613bbd565b905080875f015111612b0d576040516366c9448560e01b815260040160405180910390fd5b6001838101516001600160f81b0319169082148015612b395750600160ff1b6001600160f81b03198216105b15612b575760405163babb01dd60e01b815260040160405180910390fd5b506001955093505f9250612d68915050565b60bf8111612c47575f612b7d60b783613bbd565b905080875f015111612ba2576040516366c9448560e01b815260040160405180910390fd5b60018301516001600160f81b0319165f819003612bd25760405163babb01dd60e01b815260040160405180910390fd5b600184015160088302610100031c60378111612c015760405163babb01dd60e01b815260040160405180910390fd5b612c0b8184613990565b895111612c2b576040516366c9448560e01b815260040160405180910390fd5b612c36836001613990565b975095505f9450612d689350505050565b60f78111612c91575f612c5b60c083613bbd565b905080875f015111612c80576040516366c9448560e01b815260040160405180910390fd5b600195509350849250612d68915050565b5f612c9d60f783613bbd565b905080875f015111612cc2576040516366c9448560e01b815260040160405180910390fd5b60018301516001600160f81b0319165f819003612cf25760405163babb01dd60e01b815260040160405180910390fd5b600184015160088302610100031c60378111612d215760405163babb01dd60e01b815260040160405180910390fd5b612d2b8184613990565b895111612d4b576040516366c9448560e01b815260040160405180910390fd5b612d56836001613990565b9750955060019450612d689350505050565b9193909250565b6060816001600160401b03811115612d8957612d8961363d565b6040519080825280601f01601f191660200182016040528015612db3576020820181803683370190505b50905081156107b2575f612dc78486613990565b9050602082015f5b84811015612de7578281015182820152602001612dcf565b84811115612df5575f858301525b5050509392505050565b60605f82604051602001612e1591815260200190565b60408051601f1981840301815291905290505f5b6020811015612e6157818181518110612e4457612e44613968565b01602001516001600160f81b0319165f03612e6157600101612e29565b612e6c816020613bbd565b6001600160401b03811115612e8357612e8361363d565b6040519080825280601f01601f191660200182016040528015612ead576020820181803683370190505b5092505f5b835181101561195a578282612ec681613cfb565b935081518110612ed857612ed8613968565b602001015160f81c60f81b848281518110612ef557612ef5613968565b60200101906001600160f81b03191690815f1a905350600101612eb2565b606081516001148015612f3f57506080825f81518110612f3557612f35613968565b016020015160f81c105b15612f48575090565b612f54825160806131fe565b82604051602001612038929190613d13565b919050565b5f6108c184612f7b87868661204e565b8051602091820120825192909101919091201490565b815115612fa15781518083602001fd5b8060405162461bcd60e51b81526004016106d49190613d41565b8051606090806001600160401b03811115612fd857612fd861363d565b60405190808252806020026020018201604052801561301d57816020015b6040805180820190915260608082526020820152815260200190600190039081612ff65790505b5091505f5b8181101561195c57604051806040016040528085838151811061304757613047613968565b6020026020010151815260200161307686848151811061306957613069613968565b6020026020010151611ee6565b81525083828151811061308b5761308b613968565b6020908102919091010152600101613022565b606080604051905082518060011b603f8101601f191683016040528083525060208401602083015f5b838110156130f4578060011b8201818401515f1a8060041c8253600f8116600183015350506001016130c7565b509295945050505050565b60606020825f01511061311a5761311582611ef9565b610686565b610686826133a3565b606061068661314183602001515f81518110611daf57611daf613968565b61309e565b606082518210613164575060408051602081019091525f8152610686565b6107b283838486516131769190613bbd565b6133b7565b5f5f825184511061318d578251613190565b83515b90505b80821080156131e757508282815181106131af576131af613968565b602001015160f81c60f81b6001600160f81b0319168483815181106131d6576131d6613968565b01602001516001600160f81b031916145b156131f757816001019150613193565b5092915050565b6060603883101561326257604080516001808252818301909252906020820181803683370190505090506132328284613d73565b60f81b815f8151811061324757613247613968565b60200101906001600160f81b03191690815f1a905350610686565b5f60015b6132708186613d8c565b15613296578161327f81613cfb565b925061328f905061010082613d9f565b9050613266565b6132a1826001613990565b6001600160401b038111156132b8576132b861363d565b6040519080825280601f01601f1916602001820160405280156132e2576020820181803683370190505b5092506132ef8483613d73565b6132fa906037613d73565b60f81b835f8151811061330f5761330f613968565b60200101906001600160f81b03191690815f1a905350600190505b81811161339b5761010061333e8284613bbd565b61334a90610100613e91565b6133549087613d8c565b61335e9190613e9c565b60f81b83828151811061337357613373613968565b60200101906001600160f81b03191690815f1a9053508061339381613cfb565b91505061332a565b505092915050565b606061068682602001515f845f0151612d6f565b60608182601f0110156133fd5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016106d4565b8282840110156134405760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016106d4565b818301845110156134875760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016106d4565b6060821580156134a55760405191505f8252602082016040526134ef565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156134de5780518352602092830192016134c6565b5050858452601f01601f1916604052505b50949350505050565b6001600160a01b0381168114610759575f5ffd5b80358015158114612f66575f5ffd5b5f5f6040838503121561352c575f5ffd5b8235613537816134f8565b91506135456020840161350c565b90509250929050565b5f5f6040838503121561355f575f5ffd5b823561356a816134f8565b946020939093013593505050565b80356001600160401b0381168114612f66575f5ffd5b5f5f6040838503121561359f575f5ffd5b61356a83613578565b5f602082840312156135b8575f5ffd5b81356107b2816134f8565b5f5f5f5f608085870312156135d6575f5ffd5b6135df85613578565b9350602085013592506135f460408601613578565b9396929550929360600135925050565b5f5f5f60608486031215613616575f5ffd5b61361f84613578565b9250602084013591506136346040850161350c565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b03811182821017156136735761367361363d565b60405290565b604051601f8201601f191681016001600160401b03811182821017156136a1576136a161363d565b604052919050565b5f82601f8301126136b8575f5ffd5b81356001600160401b038111156136d1576136d161363d565b6136e4601f8201601f1916602001613679565b8181528460208386010111156136f8575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215613725575f5ffd5b8235613730816134f8565b915060208301356001600160401b0381111561374a575f5ffd5b613756858286016136a9565b9150509250929050565b5f60208284031215613770575f5ffd5b5035919050565b5f5f5f5f5f6080868803121561378b575f5ffd5b61379486613578565b945060208601356137a4816134f8565b93506040860135925060608601356001600160401b038111156137c5575f5ffd5b8601601f810188136137d5575f5ffd5b80356001600160401b038111156137ea575f5ffd5b8860208284010111156137fb575f5ffd5b959894975092955050506020019190565b5f5f5f6060848603121561381e575f5ffd5b61382784613578565b92506020840135613837816134f8565b929592945050506040919091013590565b5f5f5f6060848603121561385a575f5ffd5b61386384613578565b92506020840135915061363460408501613578565b5f5f60408385031215613889575f5ffd5b823591506135456020840161350c565b5f5f604083850312156138aa575f5ffd5b82356138b5816134f8565b915060208301356138c5816134f8565b809150509250929050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808201808211156106865761068661397c565b5f602082840312156139b3575f5ffd5b5051919050565b5f6001600160401b038211156139d2576139d261363d565b5060051b60200190565b803560048110612f66575f5ffd5b5f82601f8301126139f9575f5ffd5b8135613a0c613a07826139ba565b613679565b8082825260208201915060208360051b860101925085831115613a2d575f5ffd5b602085015b83811015613a6d5780356001600160401b03811115613a4f575f5ffd5b613a5e886020838a01016136a9565b84525060209283019201613a32565b5095945050505050565b5f60208284031215613a87575f5ffd5b81356001600160401b03811115613a9c575f5ffd5b8201601f81018413613aac575f5ffd5b8035613aba613a07826139ba565b8082825260208201915060208360051b850101925086831115613adb575f5ffd5b602084015b83811015611e285780356001600160401b03811115613afd575f5ffd5b850160c0818a03601f19011215613b12575f5ffd5b613b1a613651565b613b2660208301613578565b8152613b3460408301613578565b602082015260608201356040820152613b4f608083016139dc565b606082015260a08201356001600160401b03811115613b6c575f5ffd5b613b7b8b6020838601016139ea565b60808301525060c08201356001600160401b03811115613b99575f5ffd5b613ba88b6020838601016139ea565b60a08301525084525060209283019201613ae0565b818103818111156106865761068661397c565b634e487b7160e01b5f52602160045260245ffd5b5f60208284031215613bf4575f5ffd5b81516107b2816134f8565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b80516020808301519190811015613c6a575f198160200360031b1b821691505b50919050565b5f5b83811015613c8a578181015183820152602001613c72565b50505f910152565b5f8251613ca3818460208701613c70565b9190910192915050565b634e487b7160e01b5f52601260045260245ffd5b5f60ff831680613cd357613cd3613cad565b8060ff84160691505092915050565b60ff82811682821603908111156106865761068661397c565b5f60018201613d0c57613d0c61397c565b5060010190565b5f8351613d24818460208801613c70565b835190830190613d38818360208801613c70565b01949350505050565b602081525f8251806020840152613d5f816040850160208701613c70565b601f01601f19169190910160400192915050565b60ff81811683821601908111156106865761068661397c565b5f82613d9a57613d9a613cad565b500490565b80820281158282048414176106865761068661397c565b6001815b6001841115610c5257808504811115613dd557613dd561397c565b6001841615613de357908102905b60019390931c928002613dba565b5f82613dff57506001610686565b81613e0b57505f610686565b8160018114613e215760028114613e2b57613e47565b6001915050610686565b60ff841115613e3c57613e3c61397c565b50506001821b610686565b5060208310610133831016604e8410600b8410161715613e6a575081810a610686565b613e765f198484613db6565b805f1904821115613e8957613e8961397c565b029392505050565b5f6107b28383613df1565b5f82613eaa57613eaa613cad565b50069056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122088e374295b28e7ad8361a3b961be9595b9248bb8792c867a5bea9cc2824409f764736f6c634300081b0033", + "code": "0x6080604052600436106101c5575f3560e01c806379ba5097116100f2578063a86f9d9e11610092578063e30c397811610062578063e30c39781461052f578063f09a40161461054c578063f2fde38b1461056b578063fe9fbb801461058a575f5ffd5b8063a86f9d9e1461048e578063ce9d0820146104ad578063dfc8ff1d146104cc578063e07baba61461050a575f5ffd5b80638da5cb5b116100cd5780638da5cb5b14610414578063910af6ed1461043157806391f3f74b146104505780639b527cfa1461046f575f5ffd5b806379ba5097146103d85780638456cb59146103ec5780638abf607714610400575f5ffd5b80633eb6b8cf1161016857806352d1902d1161013857806352d1902d146103715780635c975abb1461038557806366ca2bc0146103a5578063715018a6146103c4575f5ffd5b80633eb6b8cf146102fe5780633f4ba83a1461031d5780634f1ef286146103315780634f90a67414610344575f5ffd5b8063355bcc3d116101a3578063355bcc3d146102325780633659cfe6146102895780633ab76e9f146102a85780633ced0e08146102df575f5ffd5b80632d1fb389146101c95780633075db56146101ea57806332676bc614610213575b5f5ffd5b3480156101d4575f5ffd5b506101e86101e336600461351b565b6105b8565b005b3480156101f5575f5ffd5b506101fe61065e565b60405190151581526020015b60405180910390f35b34801561021e575f5ffd5b506101fe61022d36600461354e565b610676565b34801561023d575f5ffd5b5061027161024c36600461358e565b60fb60209081525f92835260408084209091529082529020546001600160401b031681565b6040516001600160401b03909116815260200161020a565b348015610294575f5ffd5b506101e86102a33660046135a8565b61068c565b3480156102b3575f5ffd5b506097546102c7906001600160a01b031681565b6040516001600160a01b03909116815260200161020a565b3480156102ea575f5ffd5b506101fe6102f93660046135c3565b61075c565b348015610309575f5ffd5b506102c7610318366004613604565b6107a3565b348015610328575f5ffd5b506101e86107b9565b6101e861033f366004613714565b6107cd565b34801561034f575f5ffd5b5061036361035e3660046135c3565b610886565b60405190815260200161020a565b34801561037c575f5ffd5b506103636108cc565b348015610390575f5ffd5b506101fe60c954610100900460ff1660021490565b3480156103b0575f5ffd5b506103636103bf366004613760565b61097d565b3480156103cf575f5ffd5b506101e8610989565b3480156103e3575f5ffd5b506101e861099a565b3480156103f7575f5ffd5b506101e8610a11565b34801561040b575f5ffd5b506102c7610a24565b34801561041f575f5ffd5b506033546001600160a01b03166102c7565b34801561043c575f5ffd5b5061036361044b366004613777565b610a32565b34801561045b575f5ffd5b5061036361046a36600461380c565b610b0d565b34801561047a575f5ffd5b50610363610489366004613848565b610b78565b348015610499575f5ffd5b506102c76104a8366004613878565b610ba4565b3480156104b8575f5ffd5b506101e86104c7366004613777565b610bb0565b3480156104d7575f5ffd5b506104eb6104e6366004613848565b610bc6565b604080516001600160401b03909316835260208301919091520161020a565b348015610515575f5ffd5b5060c954610271906201000090046001600160401b031681565b34801561053a575f5ffd5b506065546001600160a01b03166102c7565b348015610557575f5ffd5b506101e8610566366004613899565b610c5a565b348015610576575f5ffd5b506101e86105853660046135a8565b610d69565b348015610595575f5ffd5b506101fe6105a43660046135a8565b60fc6020525f908152604090205460ff1681565b6105c0610dda565b6001600160a01b0382165f90815260fc602052604090205481151560ff909116151503610600576040516398f26f4560e01b815260040160405180910390fd5b6001600160a01b0382165f81815260fc6020908152604091829020805460ff191685151590811790915591519182527f4c0079b9bcd37cd5d29a13938effd97c881798cbc6bd52a3026a29d94b27d1bf910160405180910390a25050565b5f600261066d60c95460ff1690565b60ff1614905090565b5f6106818383610e34565b151590505b92915050565b6001600160a01b037f00000000000000000000000001670100000000000000000000000000000000051630036106dd5760405162461bcd60e51b81526004016106d4906138d0565b60405180910390fd5b7f00000000000000000000000001670100000000000000000000000000000000056001600160a01b031661070f610e96565b6001600160a01b0316146107355760405162461bcd60e51b81526004016106d49061391c565b61073e81610eb1565b604080515f8082526020820190925261075991839190610eb9565b50565b5f8180820361077e5760405163ec73295960e01b815260040160405180910390fd5b5f61078a878787610b78565b9050836107973083610e34565b14979650505050505050565b5f6107af848484611023565b90505b9392505050565b6107c1611075565b6107cb335f611105565b565b6001600160a01b037f00000000000000000000000001670100000000000000000000000000000000051630036108155760405162461bcd60e51b81526004016106d4906138d0565b7f00000000000000000000000001670100000000000000000000000000000000056001600160a01b0316610847610e96565b6001600160a01b03161461086d5760405162461bcd60e51b81526004016106d49061391c565b61087682610eb1565b61088282826001610eb9565b5050565b335f90815260fc602052604081205460ff166108b557604051631f67751f60e01b815260040160405180910390fd5b6108c18585858561111e565b90505b949350505050565b5f306001600160a01b037f0000000000000000000000000167010000000000000000000000000000000005161461096b5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016106d4565b505f516020613eb05f395f51905f5290565b5f610686338384611200565b610991610dda565b6107cb5f6112d9565b60655433906001600160a01b03168114610a085760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016106d4565b610759816112d9565b610a196112f2565b6107cb336001611105565b5f610a2d610e96565b905090565b5f610a4760c954610100900460ff1660021490565b15610a655760405163bae6e2a960e01b815260040160405180910390fd5b6002610a7360c95460ff1690565b60ff1603610a945760405163dfc60d8560e01b815260040160405180910390fd5b60c9805460ff191660021790555f610ab187878787876001611363565b90505f5b8151811015610af457610ae0828281518110610ad357610ad3613968565b602002602001015161181f565b610aea9084613990565b9250600101610ab5565b505060c9805460ff191660011790555b95945050505050565b6040516514d251d3905360d21b60208201526001600160c01b031960c085901b1660268201526bffffffffffffffffffffffff19606084901b16602e820152604281018290525f906062015b6040516020818303038152906040528051906020012090509392505050565b604080516001600160401b03808616602083015291810184905290821660608201525f90608001610b59565b5f6107b2468484611023565b610bbe85858585855f611363565b505050505050565b5f5f826001600160401b03165f03610c02576001600160401b038086165f90815260fb6020908152604080832088845290915290205416610c04565b825b91506001600160401b03821615610c52575f610c21868685610b78565b9050610c2d3082610e34565b91505f829003610c505760405163738afa0560e01b815260040160405180910390fd5b505b935093915050565b5f54610100900460ff1615808015610c7857505f54600160ff909116105b80610c915750303b158015610c9157505f5460ff166001145b610cf45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106d4565b5f805460ff191660011790558015610d15575f805461ff0019166101001790555b610d1f8383611963565b8015610d64575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610d71610dda565b606580546001600160a01b0383166001600160a01b03199091168117909155610da26033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6033546001600160a01b031633146107cb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106d4565b5f826001600160a01b038116610e5d5760405163538ba4f960e01b815260040160405180910390fd5b825f819003610e7f5760405163ec73295960e01b815260040160405180910390fd5b5f610e8b468787610b0d565b549695505050505050565b5f516020613eb05f395f51905f52546001600160a01b031690565b610759610dda565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610eec57610d648361199d565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610f46575060408051601f3d908101601f19168201909252610f43918101906139a3565b60015b610fa95760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016106d4565b5f516020613eb05f395f51905f5281146110175760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016106d4565b50610d64838383611a38565b5f61102e8484611a62565b90508115801561104557506001600160a01b038116155b156107b257604051632b0d65db60e01b81526001600160401b0385166004820152602481018490526044016106d4565b61108960c954610100900460ff1660021490565b6110a65760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b604051630c2b8f8f60e11b815260040160405180910390fd5b5f61112a858585610b78565b9050611137308284611200565b506001600160401b038581165f90815260fb60209081526040808320888452909152902054818516911610156111a1576001600160401b038581165f90815260fb602090815260408083208884529091529020805467ffffffffffffffff19169185169190911790555b83836001600160401b0316866001600160401b03167fde247c825b1fb2d7ff9e0e771cba6f9e757ad04479fcdc135d88ae91fd50b37d85856040516111f0929190918252602082015260400190565b60405180910390a4949350505050565b5f836001600160a01b0381166112295760405163538ba4f960e01b815260040160405180910390fd5b835f81900361124b5760405163ec73295960e01b815260040160405180910390fd5b835f81900361126d5760405163ec73295960e01b815260040160405180910390fd5b611278468888610b0d565b858155604080516001600160a01b038a16815260208101899052908101829052606081018790529094507f0ad2d108660a211f47bf7fb43a0443cae181624995d3d42b88ee6879d200e9739060800160405180910390a15050509392505050565b606580546001600160a01b031916905561075981611b04565b61130660c954610100900460ff1660021490565b156113245760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016110fb565b6060856001600160a01b03811661138d5760405163538ba4f960e01b815260040160405180910390fd5b855f8190036113af5760405163ec73295960e01b815260040160405180910390fd5b5f6113bc86880188613a77565b905080515f036113df57604051630b92daef60e21b815260040160405180910390fd5b5f600182516113ee9190613bbd565b6001600160401b038111156114055761140561363d565b60405190808252806020026020018201604052801561142e578160200160208202803683370190505b50905085156114c15781516001600160401b038111156114505761145061363d565b6040519080825280602002602001820160405280156114bd57816020015b6114aa6040805160e0810182525f80825260208201819052918101829052606081018290526080810182905260a081018290529060c082015290565b81526020019060019003908161146e5790505b5094505b8a8a8a805f6114e2856d7369676e616c5f7365727669636560901b836107a3565b9050306001600160a01b0382160361150d57604051637556223560e11b815260040160405180910390fd5b6115456040805160c0810182525f80825260208201819052918101829052906060820190815260200160608152602001606081525090565b5f5f5f5f5b8b518110156117d3578b818151811061156557611565613968565b602002602001015194505f5b818110156115cf57855f01516001600160401b03168c828151811061159857611598613968565b60200260200101516001600160401b0316036115c7576040516348362c2760e11b815260040160405180910390fd5b600101611571565b506115de8a8a8a8a898b611b55565b93508a5181149150811561161e5784516001600160401b03164614611616576040516338bf822760e21b815260040160405180910390fd5b3095506116c9565b845f01518b828151811061163457611634613968565b6001600160401b0392831660209182029290920101528551161580611662575084516001600160401b031646145b1561168057604051637556223560e11b815260040160405180910390fd5b845161169e906d7369676e616c5f7365727669636560901b5f6107a3565b9550306001600160a01b038716036116c957604051637556223560e11b815260040160405180910390fd5b608085015151151592508f1561175d576040518060e00160405280866040015181526020018581526020018b6001600160401b0316815260200186602001516001600160401b03168152602001841515815260200183151581526020018660600151600381111561173c5761173c613bd0565b8152508f828151811061175157611751613968565b60200260200101819052505b6117b88a8461178c577fc6cdc4f2acf13acb10f410085b821f7b7113b303e9a4799023f928317396aaf56117ae565b7f73e6d340850343cc6f001515dc593377337c95a6ffe034fe1e844d4dab5da1695b8760200151610b78565b604086015186519b509699509750949550879460010161154a565b508515806117ea57506117e63088610e34565b8614155b156118085760405163738afa0560e01b815260040160405180910390fd5b505050505050505050505050509695505050505050565b5f8060038360c00151600381111561183957611839613bd0565b148061185a575060028360c00151600381111561185857611858613bd0565b145b905080801561186a575082608001515b801561187857508260a00151155b156118ba57600191506118b883604001517f73e6d340850343cc6f001515dc593377337c95a6ffe034fe1e844d4dab5da1698560600151865f015161111e565b505b5f60038460c0015160038111156118d3576118d3613bd0565b14806118f4575060018460c0015160038111156118f2576118f2613bd0565b145b9050808015611910575083608001518061191057508360a00151155b1561195c57611920600184613990565b925061195a84604001517fc6cdc4f2acf13acb10f410085b821f7b7113b303e9a4799023f928317396aaf58660600151876020015161111e565b505b5050919050565b806001600160a01b03811661198b5760405163538ba4f960e01b815260040160405180910390fd5b61199483611bf4565b610d6482611c52565b6001600160a01b0381163b611a0a5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016106d4565b5f516020613eb05f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611a4183611cc2565b5f82511180611a4d5750805b15610d6457611a5c8383611d01565b50505050565b6097545f906001600160a01b031680611a8e57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611ae0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c49190613be4565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f856001600160a01b038116611b7e5760405163538ba4f960e01b815260040160405180910390fd5b855f819003611ba05760405163ec73295960e01b815260040160405180910390fd5b855f819003611bc25760405163ec73295960e01b815260040160405180910390fd5b611be6866040015186611bd68d8d8d610b0d565b8a8a608001518b60a00151611d26565b9a9950505050505050505050565b5f54610100900460ff16611c1a5760405162461bcd60e51b81526004016106d490613bff565b611c22611e33565b611c406001600160a01b03821615611c3a57816112d9565b336112d9565b5060c9805461ff001916610100179055565b5f54610100900460ff16611c785760405162461bcd60e51b81526004016106d490613bff565b6001600160401b03461115611ca05760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b611ccb8161199d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606107b28383604051806060016040528060278152602001613ed060279139611e59565b5f82515f14611dce576040516bffffffffffffffffffffffff19606088901b1660208201525f90611d6a90603401604051602081830303815290604052858a611ecd565b905080515f03611d8d57604051630414cd5b60e31b815260040160405180910390fd5b5f611d9782611ee6565b9050611dbc81600281518110611daf57611daf613968565b6020026020010151611ef9565b611dc590613c4a565b92505050611dd1565b50855b5f611e0886604051602001611de891815260200190565b60408051601f19818403018152919052611e0187611f78565b8585611f8b565b905080611e2857604051638d9a4db360e01b815260040160405180910390fd5b509695505050505050565b5f54610100900460ff166107cb5760405162461bcd60e51b81526004016106d490613bff565b60605f5f856001600160a01b031685604051611e759190613c92565b5f60405180830381855af49150503d805f8114611ead576040519150601f19603f3d011682016040523d82523d5f602084013e611eb2565b606091505b5091509150611ec386838387611fa4565b9695505050505050565b60605f611ed98561201c565b9050610b0481858561204e565b6060610686611ef4836128bc565b61290e565b60605f5f5f611f0785612a8c565b919450925090505f816001811115611f2157611f21613bd0565b14611f3f576040516307fe6cb960e21b815260040160405180910390fd5b611f498284613990565b855114611f6957604051630b8aa6f760e31b815260040160405180910390fd5b610b0485602001518484612d6f565b6060610686611f8683612dff565b612f13565b5f5f611f968661201c565b9050611ec381868686612f6b565b606083156120125782515f0361200b576001600160a01b0385163b61200b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106d4565b50816108c4565b6108c48383612f91565b6060818051906020012060405160200161203891815260200190565b6040516020818303038152906040529050919050565b60605f8451116120985760405162461bcd60e51b81526020600482015260156024820152744d65726b6c65547269653a20656d707479206b657960581b60448201526064016106d4565b5f6120a284612fbb565b90505f6120ae8661309e565b90505f846040516020016120c491815260200190565b60408051601f1981840301815291905290505f805b8451811015612865575f8582815181106120f5576120f5613968565b6020026020010151905084518311156121675760405162461bcd60e51b815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201526d0e8c2d840d6caf240d8cadccee8d60931b60648201526084016106d4565b825f0361220557805180516020918201206040516121b49261218e92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b6122005760405162461bcd60e51b815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016106d4565b6122fb565b80515160201161228b578051805160209182012060405161222f9261218e92910190815260200190565b6122005760405162461bcd60e51b815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e6044820152660c2d840d0c2e6d60cb1b60648201526084016106d4565b8051845160208087019190912082519190920120146122fb5760405162461bcd60e51b815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f646044820152650ca40d0c2e6d60d31b60648201526084016106d4565b61230760106001613990565b8160200151510361249f5784518303612439576123348160200151601081518110611daf57611daf613968565b96505f8751116123ac5760405162461bcd60e51b815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016106d4565b600186516123ba9190613bbd565b821461242e5760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016106d4565b5050505050506107b2565b5f85848151811061244c5761244c613968565b602001015160f81c60f81b60f81c90505f82602001518260ff168151811061247657612476613968565b60200260200101519050612489816130ff565b9550612496600186613990565b9450505061285c565b600281602001515103612803575f6124b682613123565b90505f815f815181106124cb576124cb613968565b016020015160f81c90505f6124e1600283613cc1565b6124ec906002613ce2565b90505f6124fc848360ff16613146565b90505f6125098a89613146565b90505f612516838361317b565b90508083511461258e5760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016106d4565b60ff8516600214806125a3575060ff85166003145b15612743578082511461261e5760405162461bcd60e51b815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016106d4565b6126388760200151600181518110611daf57611daf613968565b9c505f8d51116126b05760405162461bcd60e51b815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016106d4565b60018c516126be9190613bbd565b88146127325760405162461bcd60e51b815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016106d4565b5050505050505050505050506107b2565b60ff85161580612756575060ff85166001145b1561279557612782876020015160018151811061277557612775613968565b60200260200101516130ff565b995061278e818a613990565b98506127f8565b60405162461bcd60e51b815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f64652077697468604482015271040c2dc40eadcd6dcdeeedc40e0e4caccd2f60731b60648201526084016106d4565b50505050505061285c565b60405162461bcd60e51b815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e706172736561604482015267626c65206e6f646560c01b60648201526084016106d4565b506001016120d9565b5060405162461bcd60e51b815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c656044820152646d656e747360d81b60648201526084016106d4565b604080518082019091525f808252602082015281515f036128f057604051635ab458fb60e01b815260040160405180910390fd5b50604080518082019091528151815260209182019181019190915290565b60605f5f5f61291c85612a8c565b91945092509050600181600181111561293757612937613bd0565b14612955576040516325ce355f60e11b815260040160405180910390fd5b84516129618385613990565b1461297f57604051630b8aa6f760e31b815260040160405180910390fd5b604080516020808252610420820190925290816020015b604080518082019091525f80825260208201528152602001906001900390816129965790505093505f835b8651811015612a80575f5f612a056040518060400160405280858c5f01516129e99190613bbd565b8152602001858c602001516129fe9190613990565b9052612a8c565b509150915060405180604001604052808383612a219190613990565b8152602001848b60200151612a369190613990565b815250888581518110612a4b57612a4b613968565b6020908102919091010152612a61600185613990565b9350612a6d8183613990565b612a779084613990565b925050506129c1565b50845250919392505050565b5f5f5f835f01515f03612ab257604051635ab458fb60e01b815260040160405180910390fd5b602084015180515f1a607f8111612ad4575f60015f9450945094505050612d68565b60b78111612b69575f612ae8608083613bbd565b905080875f015111612b0d576040516366c9448560e01b815260040160405180910390fd5b6001838101516001600160f81b0319169082148015612b395750600160ff1b6001600160f81b03198216105b15612b575760405163babb01dd60e01b815260040160405180910390fd5b506001955093505f9250612d68915050565b60bf8111612c47575f612b7d60b783613bbd565b905080875f015111612ba2576040516366c9448560e01b815260040160405180910390fd5b60018301516001600160f81b0319165f819003612bd25760405163babb01dd60e01b815260040160405180910390fd5b600184015160088302610100031c60378111612c015760405163babb01dd60e01b815260040160405180910390fd5b612c0b8184613990565b895111612c2b576040516366c9448560e01b815260040160405180910390fd5b612c36836001613990565b975095505f9450612d689350505050565b60f78111612c91575f612c5b60c083613bbd565b905080875f015111612c80576040516366c9448560e01b815260040160405180910390fd5b600195509350849250612d68915050565b5f612c9d60f783613bbd565b905080875f015111612cc2576040516366c9448560e01b815260040160405180910390fd5b60018301516001600160f81b0319165f819003612cf25760405163babb01dd60e01b815260040160405180910390fd5b600184015160088302610100031c60378111612d215760405163babb01dd60e01b815260040160405180910390fd5b612d2b8184613990565b895111612d4b576040516366c9448560e01b815260040160405180910390fd5b612d56836001613990565b9750955060019450612d689350505050565b9193909250565b6060816001600160401b03811115612d8957612d8961363d565b6040519080825280601f01601f191660200182016040528015612db3576020820181803683370190505b50905081156107b2575f612dc78486613990565b9050602082015f5b84811015612de7578281015182820152602001612dcf565b84811115612df5575f858301525b5050509392505050565b60605f82604051602001612e1591815260200190565b60408051601f1981840301815291905290505f5b6020811015612e6157818181518110612e4457612e44613968565b01602001516001600160f81b0319165f03612e6157600101612e29565b612e6c816020613bbd565b6001600160401b03811115612e8357612e8361363d565b6040519080825280601f01601f191660200182016040528015612ead576020820181803683370190505b5092505f5b835181101561195a578282612ec681613cfb565b935081518110612ed857612ed8613968565b602001015160f81c60f81b848281518110612ef557612ef5613968565b60200101906001600160f81b03191690815f1a905350600101612eb2565b606081516001148015612f3f57506080825f81518110612f3557612f35613968565b016020015160f81c105b15612f48575090565b612f54825160806131fe565b82604051602001612038929190613d13565b919050565b5f6108c184612f7b87868661204e565b8051602091820120825192909101919091201490565b815115612fa15781518083602001fd5b8060405162461bcd60e51b81526004016106d49190613d41565b8051606090806001600160401b03811115612fd857612fd861363d565b60405190808252806020026020018201604052801561301d57816020015b6040805180820190915260608082526020820152815260200190600190039081612ff65790505b5091505f5b8181101561195c57604051806040016040528085838151811061304757613047613968565b6020026020010151815260200161307686848151811061306957613069613968565b6020026020010151611ee6565b81525083828151811061308b5761308b613968565b6020908102919091010152600101613022565b606080604051905082518060011b603f8101601f191683016040528083525060208401602083015f5b838110156130f4578060011b8201818401515f1a8060041c8253600f8116600183015350506001016130c7565b509295945050505050565b60606020825f01511061311a5761311582611ef9565b610686565b610686826133a3565b606061068661314183602001515f81518110611daf57611daf613968565b61309e565b606082518210613164575060408051602081019091525f8152610686565b6107b283838486516131769190613bbd565b6133b7565b5f5f825184511061318d578251613190565b83515b90505b80821080156131e757508282815181106131af576131af613968565b602001015160f81c60f81b6001600160f81b0319168483815181106131d6576131d6613968565b01602001516001600160f81b031916145b156131f757816001019150613193565b5092915050565b6060603883101561326257604080516001808252818301909252906020820181803683370190505090506132328284613d73565b60f81b815f8151811061324757613247613968565b60200101906001600160f81b03191690815f1a905350610686565b5f60015b6132708186613d8c565b15613296578161327f81613cfb565b925061328f905061010082613d9f565b9050613266565b6132a1826001613990565b6001600160401b038111156132b8576132b861363d565b6040519080825280601f01601f1916602001820160405280156132e2576020820181803683370190505b5092506132ef8483613d73565b6132fa906037613d73565b60f81b835f8151811061330f5761330f613968565b60200101906001600160f81b03191690815f1a905350600190505b81811161339b5761010061333e8284613bbd565b61334a90610100613e91565b6133549087613d8c565b61335e9190613e9c565b60f81b83828151811061337357613373613968565b60200101906001600160f81b03191690815f1a9053508061339381613cfb565b91505061332a565b505092915050565b606061068682602001515f845f0151612d6f565b60608182601f0110156133fd5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016106d4565b8282840110156134405760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b60448201526064016106d4565b818301845110156134875760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b60448201526064016106d4565b6060821580156134a55760405191505f8252602082016040526134ef565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156134de5780518352602092830192016134c6565b5050858452601f01601f1916604052505b50949350505050565b6001600160a01b0381168114610759575f5ffd5b80358015158114612f66575f5ffd5b5f5f6040838503121561352c575f5ffd5b8235613537816134f8565b91506135456020840161350c565b90509250929050565b5f5f6040838503121561355f575f5ffd5b823561356a816134f8565b946020939093013593505050565b80356001600160401b0381168114612f66575f5ffd5b5f5f6040838503121561359f575f5ffd5b61356a83613578565b5f602082840312156135b8575f5ffd5b81356107b2816134f8565b5f5f5f5f608085870312156135d6575f5ffd5b6135df85613578565b9350602085013592506135f460408601613578565b9396929550929360600135925050565b5f5f5f60608486031215613616575f5ffd5b61361f84613578565b9250602084013591506136346040850161350c565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b60405160c081016001600160401b03811182821017156136735761367361363d565b60405290565b604051601f8201601f191681016001600160401b03811182821017156136a1576136a161363d565b604052919050565b5f82601f8301126136b8575f5ffd5b81356001600160401b038111156136d1576136d161363d565b6136e4601f8201601f1916602001613679565b8181528460208386010111156136f8575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f60408385031215613725575f5ffd5b8235613730816134f8565b915060208301356001600160401b0381111561374a575f5ffd5b613756858286016136a9565b9150509250929050565b5f60208284031215613770575f5ffd5b5035919050565b5f5f5f5f5f6080868803121561378b575f5ffd5b61379486613578565b945060208601356137a4816134f8565b93506040860135925060608601356001600160401b038111156137c5575f5ffd5b8601601f810188136137d5575f5ffd5b80356001600160401b038111156137ea575f5ffd5b8860208284010111156137fb575f5ffd5b959894975092955050506020019190565b5f5f5f6060848603121561381e575f5ffd5b61382784613578565b92506020840135613837816134f8565b929592945050506040919091013590565b5f5f5f6060848603121561385a575f5ffd5b61386384613578565b92506020840135915061363460408501613578565b5f5f60408385031215613889575f5ffd5b823591506135456020840161350c565b5f5f604083850312156138aa575f5ffd5b82356138b5816134f8565b915060208301356138c5816134f8565b809150509250929050565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808201808211156106865761068661397c565b5f602082840312156139b3575f5ffd5b5051919050565b5f6001600160401b038211156139d2576139d261363d565b5060051b60200190565b803560048110612f66575f5ffd5b5f82601f8301126139f9575f5ffd5b8135613a0c613a07826139ba565b613679565b8082825260208201915060208360051b860101925085831115613a2d575f5ffd5b602085015b83811015613a6d5780356001600160401b03811115613a4f575f5ffd5b613a5e886020838a01016136a9565b84525060209283019201613a32565b5095945050505050565b5f60208284031215613a87575f5ffd5b81356001600160401b03811115613a9c575f5ffd5b8201601f81018413613aac575f5ffd5b8035613aba613a07826139ba565b8082825260208201915060208360051b850101925086831115613adb575f5ffd5b602084015b83811015611e285780356001600160401b03811115613afd575f5ffd5b850160c0818a03601f19011215613b12575f5ffd5b613b1a613651565b613b2660208301613578565b8152613b3460408301613578565b602082015260608201356040820152613b4f608083016139dc565b606082015260a08201356001600160401b03811115613b6c575f5ffd5b613b7b8b6020838601016139ea565b60808301525060c08201356001600160401b03811115613b99575f5ffd5b613ba88b6020838601016139ea565b60a08301525084525060209283019201613ae0565b818103818111156106865761068661397c565b634e487b7160e01b5f52602160045260245ffd5b5f60208284031215613bf4575f5ffd5b81516107b2816134f8565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b80516020808301519190811015613c6a575f198160200360031b1b821691505b50919050565b5f5b83811015613c8a578181015183820152602001613c72565b50505f910152565b5f8251613ca3818460208701613c70565b9190910192915050565b634e487b7160e01b5f52601260045260245ffd5b5f60ff831680613cd357613cd3613cad565b8060ff84160691505092915050565b60ff82811682821603908111156106865761068661397c565b5f60018201613d0c57613d0c61397c565b5060010190565b5f8351613d24818460208801613c70565b835190830190613d38818360208801613c70565b01949350505050565b602081525f8251806020840152613d5f816040850160208701613c70565b601f01601f19169190910160400192915050565b60ff81811683821601908111156106865761068661397c565b5f82613d9a57613d9a613cad565b500490565b80820281158282048414176106865761068661397c565b6001815b6001841115610c5257808504811115613dd557613dd561397c565b6001841615613de357908102905b60019390931c928002613dba565b5f82613dff57506001610686565b81613e0b57505f610686565b8160018114613e215760028114613e2b57613e47565b6001915050610686565b60ff841115613e3c57613e3c61397c565b50506001821b610686565b5060208310610133831016604e8410600b8410161715613e6a575081810a610686565b613e765f198484613db6565b805f1904821115613e8957613e8961397c565b029392505050565b5f6107b28383613df1565b5f82613eaa57613eaa613cad565b50069056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122088e374295b28e7ad8361a3b961be9595b9248bb8792c867a5bea9cc2824409f764736f6c634300081b0033", "balance": "0x0" }, - "0x1670000000000000000000000000000000000005": { + "0x1670100000000000000000000000000000000005": { "contractName": "SignalService", "storage": { "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", - "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670000000000000000000000000000000000006", - "0xdf3a3dd9c4001d1115304f0841a31ee7b79b184f45ef381343fdf0ae529fbcb4": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000000005" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670100000000000000000000000000000000006", + "0x301006667fd8aa626b63e5445e5183081bd1b69d132f18fac530bd2d66888167": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167010000000000000000000000000000000005" }, "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", "balance": "0x0" }, - "0x0167000000000000000000000000000000010001": { + "0x0167010000000000000000000000000000010001": { "contractName": "TaikoL2Impl", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f" }, - "code": "0x6080604052600436106101fc575f3560e01c80638456cb5911610113578063da69d3db1161009d578063e902461a1161006d578063e902461a146105ca578063ee82ac5e146105e9578063f2fde38b14610608578063f940e38514610627578063fd85eb2d14610646575f5ffd5b8063da69d3db14610554578063dac5df7814610573578063e07baba614610588578063e30c3978146105ad575f5ffd5b8063a7137c0f116100e3578063a7137c0f1461047c578063a7e022d1146104a2578063a86f9d9e146104de578063b8c7b30c146104fd578063c3f909d41461051c575f5ffd5b80638456cb59146104125780638abf6077146104265780638da5cb5b1461043a5780639ee512f214610457575f5ffd5b80633eb6b8cf11610194578063539b8ade11610164578063539b8ade146103855780635950f9f1146103ab5780635c975abb146103ca578063715018a6146103ea57806379ba5097146103fe575f5ffd5b80633eb6b8cf1461031d5780633f4ba83a1461033c5780634f1ef2861461035057806352d1902d14610363575f5ffd5b806333d5ac9b116101cf57806333d5ac9b1461028d578063356aec04146102b35780633659cfe6146102c55780633ab76e9f146102e6575f5ffd5b806312622e5b14610200578063136dc4a81461023c5780632f9804731461025b5780633075db5614610279575b5f5ffd5b34801561020b575f5ffd5b5060fe5461021f906001600160401b031681565b6040516001600160401b0390911681526020015b60405180910390f35b348015610247575f5ffd5b5061021f6102563660046125c0565b610665565b348015610266575f5ffd5b505f5b6040519015158152602001610233565b348015610284575f5ffd5b5061026961067b565b348015610298575f5ffd5b5060fd5461021f90600160401b90046001600160401b031681565b3480156102be575f5ffd5b505f61021f565b3480156102d0575f5ffd5b506102e46102df366004612614565b610693565b005b3480156102f1575f5ffd5b50609754610305906001600160a01b031681565b6040516001600160a01b039091168152602001610233565b348015610328575f5ffd5b5061030561033736600461263c565b610763565b348015610347575f5ffd5b506102e461076f565b6102e461035e36600461268d565b610783565b34801561036e575f5ffd5b5061037761083c565b604051908152602001610233565b348015610390575f5ffd5b5060fd5461021f90600160801b90046001600160401b031681565b3480156103b6575f5ffd5b506102e46103c5366004612750565b6108ed565b3480156103d5575f5ffd5b5061026960c954610100900460ff1660021490565b3480156103f5575f5ffd5b506102e4610af6565b348015610409575f5ffd5b506102e4610b07565b34801561041d575f5ffd5b506102e4610b7e565b348015610431575f5ffd5b50610305610b91565b348015610445575f5ffd5b506033546001600160a01b0316610305565b348015610462575f5ffd5b5061030571777735367b36bc9b61c50022d9d0700db4ec81565b348015610487575f5ffd5b5060fd5461021f90600160c01b90046001600160401b031681565b3480156104ad575f5ffd5b506104c16104bc3660046127b8565b610b9f565b604080519283526001600160401b03909116602083015201610233565b3480156104e9575f5ffd5b506103056104f83660046127e9565b610c15565b348015610508575f5ffd5b5060fd5461021f906001600160401b031681565b348015610527575f5ffd5b50610530610c2a565b60408051825163ffffffff16815260209283015160ff169281019290925201610233565b34801561055f575f5ffd5b506102e461056e366004612817565b610c5b565b34801561057e575f5ffd5b5061037760fc5481565b348015610593575f5ffd5b5060c95461021f906201000090046001600160401b031681565b3480156105b8575f5ffd5b506065546001600160a01b0316610305565b3480156105d5575f5ffd5b506104c16105e436600461285f565b610d2b565b3480156105f4575f5ffd5b506103776106033660046128a7565b610e0d565b348015610613575f5ffd5b506102e4610622366004612614565b610e45565b348015610632575f5ffd5b506102e46106413660046128be565b610eb6565b348015610651575f5ffd5b506102e46106603660046128ea565b611075565b5f6106718484846114df565b90505b9392505050565b5f600261068a60c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000100011630036106e45760405162461bcd60e51b81526004016106db9061292b565b60405180910390fd5b7f00000000000000000000000001670000000000000000000000000000000100016001600160a01b031661071661159a565b6001600160a01b03161461073c5760405162461bcd60e51b81526004016106db90612977565b610745816115b5565b604080515f80825260208201909252610760918391906115bd565b50565b5f610671848484611727565b610777611779565b610781335f611809565b565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000100011630036107cb5760405162461bcd60e51b81526004016106db9061292b565b7f00000000000000000000000001670000000000000000000000000000000100016001600160a01b03166107fd61159a565b6001600160a01b0316146108235760405162461bcd60e51b81526004016106db90612977565b61082c826115b5565b610838828260016115bd565b5050565b5f306001600160a01b037f000000000000000000000000016700000000000000000000000000000001000116146108db5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016106db565b505f516020612c045f395f51905f5290565b5f54610100900460ff161580801561090b57505f54600160ff909116105b806109245750303b15801561092457505f5460ff166001145b6109875760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106db565b5f805460ff1916600117905580156109a8575f805461ff0019166101001790555b6109b28585611811565b6001600160401b03831615806109d0575046836001600160401b0316145b156109ee576040516308279a2560e31b815260040160405180910390fd5b600146111580610a0457506001600160401b0346115b15610a2257604051638f972ecb60e01b815260040160405180910390fd5b4315610a6c5743600103610a53575f610a3c6001436129d7565b5f81815260fb602052604090209040905550610a6c565b604051635a0f9e4160e11b815260040160405180910390fd5b60fe80546001600160401b0380861667ffffffffffffffff199283161790925560fd805492851692909116919091179055610aa64361184b565b5060fc558015610aef575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610afe6118db565b6107815f611935565b60655433906001600160a01b03168114610b755760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016106db565b61076081611935565b610b8661194e565b610781336001611809565b5f610b9a61159a565b905090565b5f5f5f610baa610c2a565b9050610c09816020015160ff16825f015163ffffffff16610bcb91906129ea565b60fd5483516001600160401b038083169263ffffffff90921691610bf891600160401b909104168a612a01565b610c029190612a20565b875f6119bf565b90969095509350505050565b5f610c21468484611727565b90505b92915050565b604080518082019091525f8082526020820152610b9a60408051808201909152630393870081526008602082015290565b825f819003610c7d5760405163ec73295960e01b815260040160405180910390fd5b826001600160401b0316805f03610ca75760405163ec73295960e01b815260040160405180910390fd5b3371777735367b36bc9b61c50022d9d0700db4ec14610cd957604051636494e9f760e01b815260040160405180910390fd5b6002610ce760c95460ff1690565b60ff1603610d085760405163dfc60d8560e01b815260040160405180910390fd5b610d126002611a48565b604051631799c89b60e01b815260040160405180910390fd5b5f8080610d3e6060880160408901612a60565b610d4e9063ffffffff1687612a20565b9050610d6060a0880160808901612a60565b63ffffffff1615801590610d915750610d7f60a0880160808901612a60565b63ffffffff16816001600160401b0316115b15610daf57610da660a0880160808901612a60565b63ffffffff1690505b5f610dbd6020890189612a79565b60ff16610dd060608a0160408b01612a60565b63ffffffff16610de091906129ea565b9050610dfe81878488610df960808e0160608f01612a99565b6119bf565b93509350505094509492505050565b5f438210610e1c57505f919050565b43610e2983610100612ab2565b10610e3357504090565b505f90815260fb602052604090205490565b610e4d6118db565b606580546001600160a01b0383166001600160a01b03199091168117909155610e7e6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b610eca60c954610100900460ff1660021490565b15610ee85760405163bae6e2a960e01b815260040160405180910390fd5b693bb4ba34323930bbb2b960b11b610f086033546001600160a01b031690565b6001600160a01b0316336001600160a01b031614158015610f455750610f2f816001610c15565b6001600160a01b0316336001600160a01b031614155b15610f6357604051630d85cccf60e11b815260040160405180910390fd5b6002610f7160c95460ff1690565b60ff1603610f925760405163dfc60d8560e01b815260040160405180910390fd5b610f9c6002611a48565b6001600160a01b038216610fc35760405163053fd54760e01b815260040160405180910390fd5b6001600160a01b038316610fe957610fe46001600160a01b03831647611a5e565b611066565b6040516370a0823160e01b81523060048201526110669083906001600160a01b038616906370a0823190602401602060405180830381865afa158015611031573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110559190612a49565b6001600160a01b0386169190611a69565b6110706001611a48565b505050565b825f8190036110975760405163ec73295960e01b815260040160405180910390fd5b846001600160401b0316805f036110c15760405163ec73295960e01b815260040160405180910390fd5b6110d16060840160408501612a60565b63ffffffff16805f036110f75760405163ec73295960e01b815260040160405180910390fd5b6111046020850185612a79565b60ff16805f036111275760405163ec73295960e01b815260040160405180910390fd5b3371777735367b36bc9b61c50022d9d0700db4ec1461115957604051636494e9f760e01b815260040160405180910390fd5b600261116760c95460ff1690565b60ff16036111885760405163dfc60d8560e01b815260040160405180910390fd5b6111926002611a48565b5f61119e6001436129d7565b90505f5f6111ab8361184b565b915091508160fc54146111d15760405163d719258d60e01b815260040160405180910390fd5b60fc55505f6111e36020880188612a79565b60ff166111f66060890160408a01612a60565b63ffffffff166112069190612a20565b60fd549091506001600160401b03808316600160c01b90920416146112a15760fd54600160c01b90046001600160401b0316156112805760fd5461125e906001600160401b0380821691600160c01b90041683610665565b60fd805467ffffffffffffffff19166001600160401b03929092169190911790555b60fd80546001600160c01b0316600160c01b6001600160401b038416021790555b5060fd545f9081906112db9089906112c990600160801b90046001600160401b0316426129d7565b60fd546001600160401b03168c610d2b565b915091506112e65f90565b1580156112f35750814814155b15611311576040516336d54d4f60e11b815260040160405180910390fd5b60fd805467ffffffffffffffff19166001600160401b039283161790819055600160401b90048116908b16111590506114365761135f6d7369676e616c5f7365727669636560901b5f610c15565b60fe546040516313e4299d60e21b81526001600160401b0391821660048201527f73e6d340850343cc6f001515dc593377337c95a6ffe034fe1e844d4dab5da1696024820152908b166044820152606481018a90526001600160a01b039190911690634f90a674906084016020604051808303815f875af11580156113e6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061140a9190612a49565b5060fd80546fffffffffffffffff00000000000000001916600160401b6001600160401b038c16021790555b5f81815260fb60205260409081902082409081905560fd80546001600160401b03428116600160801b0267ffffffffffffffff60801b1983168117909355935192937f41c3f410f5c8ac36bb46b1dccef0de0f964087c9e688795fa02ecfa2c20b3fe4936114c1938693908316921691909117909182526001600160401b0316602082015260400190565b60405180910390a150506114d56001611a48565b5050505050505050565b5f826001600160401b03165f036114f7575080610674565b670de0b6b3a76400005f6001600160401b0380861690611519908616846129ea565b6115239190612ad9565b90506001600160ff1b0381111561154d57604051636296f1b960e11b815260040160405180910390fd5b5f61155782611abb565b90505f828802828702015f81126001811461157657858204925061157a565b5f92505b5061158e9050816001600160401b03611cd8565b98975050505050505050565b5f516020612c045f395f51905f52546001600160a01b031690565b6107606118db565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156115f05761107083611cec565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561164a575060408051601f3d908101601f1916820190925261164791810190612a49565b60015b6116ad5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016106db565b5f516020612c045f395f51905f52811461171b5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016106db565b50611070838383611d87565b5f6117328484611db1565b90508115801561174957506001600160a01b038116155b1561067457604051632b0d65db60e01b81526001600160401b0385166004820152602481018490526044016106db565b61178d60c954610100900460ff1660021490565b6117aa5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6108386118db565b806001600160a01b0381166118395760405163538ba4f960e01b815260040160405180910390fd5b61184283611e5b565b61107082611eb9565b5f5f611855612585565b5f5b60ff8110801561186a5750806001018510155b1561189b575f198186030180408360ff8306610100811061188d5761188d612aec565b602002015250600101611857565b5046611fe0820152612000812092508340816118b860ff87612b00565b61010081106118c9576118c9612aec565b60200201526120009020919391925050565b6033546001600160a01b031633146107815760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106db565b606580546001600160a01b031916905561076081611f29565b61196260c954610100900460ff1660021490565b156119805760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016117ff565b5f80806119db63ffffffff86166001600160401b038916612ab2565b9050856001600160401b031681116119f4576001611a07565b611a076001600160401b038716826129d7565b9050611a266001600160401b03611a2083878316611f7a565b90611cd8565b9150611a3b826001600160401b031689611f8f565b9250509550959350505050565b60c9805460ff191660ff92909216919091179055565b61083882825a611fbe565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611070908490612001565b6fffffffffffffffffffffffffffffffff811160071b81811c6001600160401b031060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b175f8213611b1757631615e6385f526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d6c8c3f38e95a6b1ff2ab1c3b343619018302821d6d02384773bdf1ac5676facced60901901830290911d6cb9a025d814b29c212b8b1a07cd1901909102780a09507084cc699bb0e71ea869ffffffffffffffffffffffff190105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b5f818311611ce65782610c21565b50919050565b6001600160a01b0381163b611d595760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016106db565b5f516020612c045f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611d90836120d4565b5f82511180611d9c5750805b1561107057611dab8383612113565b50505050565b6097545f906001600160a01b031680611ddd57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611e2f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e539190612b13565b949350505050565b5f54610100900460ff16611e815760405162461bcd60e51b81526004016106db90612b2e565b611e89612138565b611ea76001600160a01b03821615611ea15781611935565b33611935565b5060c9805461ff001916610100179055565b5f54610100900460ff16611edf5760405162461bcd60e51b81526004016106db90612b2e565b6001600160401b03461115611f075760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f818311611f885781610c21565b5090919050565b5f5f82611f9c858561215e565b611fa69190612ad9565b90508015611fb45780611e53565b5060019392505050565b815f03611fca57505050565b611fe483838360405180602001604052805f8152506121d8565b61107057604051634c67134d60e11b815260040160405180910390fd5b5f612055826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166122159092919063ffffffff16565b905080515f14806120755750808060200190518101906120759190612b79565b6110705760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106db565b6120dd81611cec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610c218383604051806060016040528060278152602001612c2460279139612223565b5f54610100900460ff166107815760405162461bcd60e51b81526004016106db90612b2e565b5f815f0361217f57604051636296f1b960e11b815260040160405180910390fd5b5f8261219385670de0b6b3a76400006129ea565b61219d9190612ad9565b9050680755bf798b4a1bf1e48111156121bc5750680755bf798b4a1bf1e45b670de0b6b3a76400006121ce82612297565b611e539190612ad9565b5f6001600160a01b03851661220057604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b606061067184845f85612411565b60605f5f856001600160a01b03168560405161223f9190612bb6565b5f60405180830381855af49150503d805f8114612277576040519150601f19603f3d011682016040523d82523d5f602084013e61227c565b606091505b509150915061228d868383876124e8565b9695505050505050565b5f68023f2fa8f6da5b9d281982136122ae57919050565b680755bf798b4a1bf1e582126122cb5763a37bfec95f526004601cfd5b6503782dace9d9604e83901b0591505f60606bb17217f7d1cf79abc9e3b39884821b056001605f1b01901d6bb17217f7d1cf79abc9e3b39881029093036c240c330e9fb2d9cbaf0fd5aafb1981018102606090811d6d0277594991cfc85f6e2461837cd9018202811d6d1a521255e34f6a5061b25ef1c9c319018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d6e02c72388d9f74f51a9331fed693f1419018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084016d01d3967ed30fc4f89c02bab5708119010290911d6e0587f503bb6ea29d25fcb740196450019091026d360d7aeea093263ecc6e0ecb291760621b010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6060824710156124725760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106db565b5f5f866001600160a01b0316858760405161248d9190612bb6565b5f6040518083038185875af1925050503d805f81146124c7576040519150601f19603f3d011682016040523d82523d5f602084013e6124cc565b606091505b50915091506124dd878383876124e8565b979650505050505050565b606083156125565782515f0361254f576001600160a01b0385163b61254f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106db565b5081611e53565b611e53838381511561256b5781518083602001fd5b8060405162461bcd60e51b81526004016106db9190612bd1565b604051806120000160405280610100906020820280368337509192915050565b80356001600160401b03811681146125bb575f5ffd5b919050565b5f5f5f606084860312156125d2575f5ffd5b6125db846125a5565b92506125e9602085016125a5565b91506125f7604085016125a5565b90509250925092565b6001600160a01b0381168114610760575f5ffd5b5f60208284031215612624575f5ffd5b813561067481612600565b8015158114610760575f5ffd5b5f5f5f6060848603121561264e575f5ffd5b612657846125a5565b925060208401359150604084013561266e8161262f565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561269e575f5ffd5b82356126a981612600565b915060208301356001600160401b038111156126c3575f5ffd5b8301601f810185136126d3575f5ffd5b80356001600160401b038111156126ec576126ec612679565b604051601f8201601f19908116603f011681016001600160401b038111828210171561271a5761271a612679565b604052818152828201602001871015612731575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f5f5f60808587031215612763575f5ffd5b843561276e81612600565b9350602085013561277e81612600565b925061278c604086016125a5565b915061279a606086016125a5565b905092959194509250565b803563ffffffff811681146125bb575f5ffd5b5f5f604083850312156127c9575f5ffd5b6127d2836125a5565b91506127e0602084016127a5565b90509250929050565b5f5f604083850312156127fa575f5ffd5b82359150602083013561280c8161262f565b809150509250929050565b5f5f5f5f6080858703121561282a575f5ffd5b8435935060208501359250612841604086016125a5565b915061279a606086016127a5565b5f60a08284031215611ce6575f5ffd5b5f5f5f5f6101008587031215612873575f5ffd5b61287d868661284f565b935061288b60a086016125a5565b925061289960c086016125a5565b915061279a60e086016127a5565b5f602082840312156128b7575f5ffd5b5035919050565b5f5f604083850312156128cf575f5ffd5b82356128da81612600565b9150602083013561280c81612600565b5f5f5f5f61010085870312156128fe575f5ffd5b612907856125a5565b93506020850135925061291c604086016127a5565b915061279a866060870161284f565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610c2457610c246129c3565b8082028115828204841417610c2457610c246129c3565b6001600160401b038281168282160390811115610c2457610c246129c3565b6001600160401b038181168382160290811690818114612a4257612a426129c3565b5092915050565b5f60208284031215612a59575f5ffd5b5051919050565b5f60208284031215612a70575f5ffd5b610c21826127a5565b5f60208284031215612a89575f5ffd5b813560ff81168114610674575f5ffd5b5f60208284031215612aa9575f5ffd5b610c21826125a5565b80820180821115610c2457610c246129c3565b634e487b7160e01b5f52601260045260245ffd5b5f82612ae757612ae7612ac5565b500490565b634e487b7160e01b5f52603260045260245ffd5b5f82612b0e57612b0e612ac5565b500690565b5f60208284031215612b23575f5ffd5b815161067481612600565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215612b89575f5ffd5b81516106748161262f565b5f5b83811015612bae578181015183820152602001612b96565b50505f910152565b5f8251612bc7818460208701612b94565b9190910192915050565b602081525f8251806020840152612bef816040850160208701612b94565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220effaa84efcacfc056fb02202f151620faec2208bfd9251bf5034a0d35854a32e64736f6c634300081b0033", + "code": "0x6080604052600436106101fc575f3560e01c80638456cb5911610113578063da69d3db1161009d578063e902461a1161006d578063e902461a146105ca578063ee82ac5e146105e9578063f2fde38b14610608578063f940e38514610627578063fd85eb2d14610646575f5ffd5b8063da69d3db14610554578063dac5df7814610573578063e07baba614610588578063e30c3978146105ad575f5ffd5b8063a7137c0f116100e3578063a7137c0f1461047c578063a7e022d1146104a2578063a86f9d9e146104de578063b8c7b30c146104fd578063c3f909d41461051c575f5ffd5b80638456cb59146104125780638abf6077146104265780638da5cb5b1461043a5780639ee512f214610457575f5ffd5b80633eb6b8cf11610194578063539b8ade11610164578063539b8ade146103855780635950f9f1146103ab5780635c975abb146103ca578063715018a6146103ea57806379ba5097146103fe575f5ffd5b80633eb6b8cf1461031d5780633f4ba83a1461033c5780634f1ef2861461035057806352d1902d14610363575f5ffd5b806333d5ac9b116101cf57806333d5ac9b1461028d578063356aec04146102b35780633659cfe6146102c55780633ab76e9f146102e6575f5ffd5b806312622e5b14610200578063136dc4a81461023c5780632f9804731461025b5780633075db5614610279575b5f5ffd5b34801561020b575f5ffd5b5060fe5461021f906001600160401b031681565b6040516001600160401b0390911681526020015b60405180910390f35b348015610247575f5ffd5b5061021f6102563660046125c0565b610665565b348015610266575f5ffd5b505f5b6040519015158152602001610233565b348015610284575f5ffd5b5061026961067b565b348015610298575f5ffd5b5060fd5461021f90600160401b90046001600160401b031681565b3480156102be575f5ffd5b505f61021f565b3480156102d0575f5ffd5b506102e46102df366004612614565b610693565b005b3480156102f1575f5ffd5b50609754610305906001600160a01b031681565b6040516001600160a01b039091168152602001610233565b348015610328575f5ffd5b5061030561033736600461263c565b610763565b348015610347575f5ffd5b506102e461076f565b6102e461035e36600461268d565b610783565b34801561036e575f5ffd5b5061037761083c565b604051908152602001610233565b348015610390575f5ffd5b5060fd5461021f90600160801b90046001600160401b031681565b3480156103b6575f5ffd5b506102e46103c5366004612750565b6108ed565b3480156103d5575f5ffd5b5061026960c954610100900460ff1660021490565b3480156103f5575f5ffd5b506102e4610af6565b348015610409575f5ffd5b506102e4610b07565b34801561041d575f5ffd5b506102e4610b7e565b348015610431575f5ffd5b50610305610b91565b348015610445575f5ffd5b506033546001600160a01b0316610305565b348015610462575f5ffd5b5061030571777735367b36bc9b61c50022d9d0700db4ec81565b348015610487575f5ffd5b5060fd5461021f90600160c01b90046001600160401b031681565b3480156104ad575f5ffd5b506104c16104bc3660046127b8565b610b9f565b604080519283526001600160401b03909116602083015201610233565b3480156104e9575f5ffd5b506103056104f83660046127e9565b610c15565b348015610508575f5ffd5b5060fd5461021f906001600160401b031681565b348015610527575f5ffd5b50610530610c2a565b60408051825163ffffffff16815260209283015160ff169281019290925201610233565b34801561055f575f5ffd5b506102e461056e366004612817565b610c5b565b34801561057e575f5ffd5b5061037760fc5481565b348015610593575f5ffd5b5060c95461021f906201000090046001600160401b031681565b3480156105b8575f5ffd5b506065546001600160a01b0316610305565b3480156105d5575f5ffd5b506104c16105e436600461285f565b610d2b565b3480156105f4575f5ffd5b506103776106033660046128a7565b610e0d565b348015610613575f5ffd5b506102e4610622366004612614565b610e45565b348015610632575f5ffd5b506102e46106413660046128be565b610eb6565b348015610651575f5ffd5b506102e46106603660046128ea565b611075565b5f6106718484846114df565b90505b9392505050565b5f600261068a60c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670100000000000000000000000000000100011630036106e45760405162461bcd60e51b81526004016106db9061292b565b60405180910390fd5b7f00000000000000000000000001670100000000000000000000000000000100016001600160a01b031661071661159a565b6001600160a01b03161461073c5760405162461bcd60e51b81526004016106db90612977565b610745816115b5565b604080515f80825260208201909252610760918391906115bd565b50565b5f610671848484611727565b610777611779565b610781335f611809565b565b6001600160a01b037f00000000000000000000000001670100000000000000000000000000000100011630036107cb5760405162461bcd60e51b81526004016106db9061292b565b7f00000000000000000000000001670100000000000000000000000000000100016001600160a01b03166107fd61159a565b6001600160a01b0316146108235760405162461bcd60e51b81526004016106db90612977565b61082c826115b5565b610838828260016115bd565b5050565b5f306001600160a01b037f000000000000000000000000016701000000000000000000000000000001000116146108db5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c000000000000000060648201526084016106db565b505f516020612c045f395f51905f5290565b5f54610100900460ff161580801561090b57505f54600160ff909116105b806109245750303b15801561092457505f5460ff166001145b6109875760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016106db565b5f805460ff1916600117905580156109a8575f805461ff0019166101001790555b6109b28585611811565b6001600160401b03831615806109d0575046836001600160401b0316145b156109ee576040516308279a2560e31b815260040160405180910390fd5b600146111580610a0457506001600160401b0346115b15610a2257604051638f972ecb60e01b815260040160405180910390fd5b4315610a6c5743600103610a53575f610a3c6001436129d7565b5f81815260fb602052604090209040905550610a6c565b604051635a0f9e4160e11b815260040160405180910390fd5b60fe80546001600160401b0380861667ffffffffffffffff199283161790925560fd805492851692909116919091179055610aa64361184b565b5060fc558015610aef575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b610afe6118db565b6107815f611935565b60655433906001600160a01b03168114610b755760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016106db565b61076081611935565b610b8661194e565b610781336001611809565b5f610b9a61159a565b905090565b5f5f5f610baa610c2a565b9050610c09816020015160ff16825f015163ffffffff16610bcb91906129ea565b60fd5483516001600160401b038083169263ffffffff90921691610bf891600160401b909104168a612a01565b610c029190612a20565b875f6119bf565b90969095509350505050565b5f610c21468484611727565b90505b92915050565b604080518082019091525f8082526020820152610b9a60408051808201909152630393870081526008602082015290565b825f819003610c7d5760405163ec73295960e01b815260040160405180910390fd5b826001600160401b0316805f03610ca75760405163ec73295960e01b815260040160405180910390fd5b3371777735367b36bc9b61c50022d9d0700db4ec14610cd957604051636494e9f760e01b815260040160405180910390fd5b6002610ce760c95460ff1690565b60ff1603610d085760405163dfc60d8560e01b815260040160405180910390fd5b610d126002611a48565b604051631799c89b60e01b815260040160405180910390fd5b5f8080610d3e6060880160408901612a60565b610d4e9063ffffffff1687612a20565b9050610d6060a0880160808901612a60565b63ffffffff1615801590610d915750610d7f60a0880160808901612a60565b63ffffffff16816001600160401b0316115b15610daf57610da660a0880160808901612a60565b63ffffffff1690505b5f610dbd6020890189612a79565b60ff16610dd060608a0160408b01612a60565b63ffffffff16610de091906129ea565b9050610dfe81878488610df960808e0160608f01612a99565b6119bf565b93509350505094509492505050565b5f438210610e1c57505f919050565b43610e2983610100612ab2565b10610e3357504090565b505f90815260fb602052604090205490565b610e4d6118db565b606580546001600160a01b0383166001600160a01b03199091168117909155610e7e6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b610eca60c954610100900460ff1660021490565b15610ee85760405163bae6e2a960e01b815260040160405180910390fd5b693bb4ba34323930bbb2b960b11b610f086033546001600160a01b031690565b6001600160a01b0316336001600160a01b031614158015610f455750610f2f816001610c15565b6001600160a01b0316336001600160a01b031614155b15610f6357604051630d85cccf60e11b815260040160405180910390fd5b6002610f7160c95460ff1690565b60ff1603610f925760405163dfc60d8560e01b815260040160405180910390fd5b610f9c6002611a48565b6001600160a01b038216610fc35760405163053fd54760e01b815260040160405180910390fd5b6001600160a01b038316610fe957610fe46001600160a01b03831647611a5e565b611066565b6040516370a0823160e01b81523060048201526110669083906001600160a01b038616906370a0823190602401602060405180830381865afa158015611031573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110559190612a49565b6001600160a01b0386169190611a69565b6110706001611a48565b505050565b825f8190036110975760405163ec73295960e01b815260040160405180910390fd5b846001600160401b0316805f036110c15760405163ec73295960e01b815260040160405180910390fd5b6110d16060840160408501612a60565b63ffffffff16805f036110f75760405163ec73295960e01b815260040160405180910390fd5b6111046020850185612a79565b60ff16805f036111275760405163ec73295960e01b815260040160405180910390fd5b3371777735367b36bc9b61c50022d9d0700db4ec1461115957604051636494e9f760e01b815260040160405180910390fd5b600261116760c95460ff1690565b60ff16036111885760405163dfc60d8560e01b815260040160405180910390fd5b6111926002611a48565b5f61119e6001436129d7565b90505f5f6111ab8361184b565b915091508160fc54146111d15760405163d719258d60e01b815260040160405180910390fd5b60fc55505f6111e36020880188612a79565b60ff166111f66060890160408a01612a60565b63ffffffff166112069190612a20565b60fd549091506001600160401b03808316600160c01b90920416146112a15760fd54600160c01b90046001600160401b0316156112805760fd5461125e906001600160401b0380821691600160c01b90041683610665565b60fd805467ffffffffffffffff19166001600160401b03929092169190911790555b60fd80546001600160c01b0316600160c01b6001600160401b038416021790555b5060fd545f9081906112db9089906112c990600160801b90046001600160401b0316426129d7565b60fd546001600160401b03168c610d2b565b915091506112e65f90565b1580156112f35750814814155b15611311576040516336d54d4f60e11b815260040160405180910390fd5b60fd805467ffffffffffffffff19166001600160401b039283161790819055600160401b90048116908b16111590506114365761135f6d7369676e616c5f7365727669636560901b5f610c15565b60fe546040516313e4299d60e21b81526001600160401b0391821660048201527f73e6d340850343cc6f001515dc593377337c95a6ffe034fe1e844d4dab5da1696024820152908b166044820152606481018a90526001600160a01b039190911690634f90a674906084016020604051808303815f875af11580156113e6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061140a9190612a49565b5060fd80546fffffffffffffffff00000000000000001916600160401b6001600160401b038c16021790555b5f81815260fb60205260409081902082409081905560fd80546001600160401b03428116600160801b0267ffffffffffffffff60801b1983168117909355935192937f41c3f410f5c8ac36bb46b1dccef0de0f964087c9e688795fa02ecfa2c20b3fe4936114c1938693908316921691909117909182526001600160401b0316602082015260400190565b60405180910390a150506114d56001611a48565b5050505050505050565b5f826001600160401b03165f036114f7575080610674565b670de0b6b3a76400005f6001600160401b0380861690611519908616846129ea565b6115239190612ad9565b90506001600160ff1b0381111561154d57604051636296f1b960e11b815260040160405180910390fd5b5f61155782611abb565b90505f828802828702015f81126001811461157657858204925061157a565b5f92505b5061158e9050816001600160401b03611cd8565b98975050505050505050565b5f516020612c045f395f51905f52546001600160a01b031690565b6107606118db565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156115f05761107083611cec565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561164a575060408051601f3d908101601f1916820190925261164791810190612a49565b60015b6116ad5760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b60648201526084016106db565b5f516020612c045f395f51905f52811461171b5760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b60648201526084016106db565b50611070838383611d87565b5f6117328484611db1565b90508115801561174957506001600160a01b038116155b1561067457604051632b0d65db60e01b81526001600160401b0385166004820152602481018490526044016106db565b61178d60c954610100900460ff1660021490565b6117aa5760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff001990911662010000426001600160401b031602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b6108386118db565b806001600160a01b0381166118395760405163538ba4f960e01b815260040160405180910390fd5b61184283611e5b565b61107082611eb9565b5f5f611855612585565b5f5b60ff8110801561186a5750806001018510155b1561189b575f198186030180408360ff8306610100811061188d5761188d612aec565b602002015250600101611857565b5046611fe0820152612000812092508340816118b860ff87612b00565b61010081106118c9576118c9612aec565b60200201526120009020919391925050565b6033546001600160a01b031633146107815760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106db565b606580546001600160a01b031916905561076081611f29565b61196260c954610100900460ff1660021490565b156119805760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016117ff565b5f80806119db63ffffffff86166001600160401b038916612ab2565b9050856001600160401b031681116119f4576001611a07565b611a076001600160401b038716826129d7565b9050611a266001600160401b03611a2083878316611f7a565b90611cd8565b9150611a3b826001600160401b031689611f8f565b9250509550959350505050565b60c9805460ff191660ff92909216919091179055565b61083882825a611fbe565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611070908490612001565b6fffffffffffffffffffffffffffffffff811160071b81811c6001600160401b031060061b1781811c63ffffffff1060051b1781811c61ffff1060041b1781811c60ff1060031b175f8213611b1757631615e6385f526004601cfd5b7ff8f9f9faf9fdfafbf9fdfcfdfafbfcfef9fafdfafcfcfbfefafafcfbffffffff6f8421084210842108cc6318c6db6d54be83831c1c601f161a1890811b609f90811c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d6c8c3f38e95a6b1ff2ab1c3b343619018302821d6d02384773bdf1ac5676facced60901901830290911d6cb9a025d814b29c212b8b1a07cd1901909102780a09507084cc699bb0e71ea869ffffffffffffffffffffffff190105711340daa0d5f769dba1915cef59f0815a5506029190037d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b302017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d90565b5f818311611ce65782610c21565b50919050565b6001600160a01b0381163b611d595760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016106db565b5f516020612c045f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b611d90836120d4565b5f82511180611d9c5750805b1561107057611dab8383612113565b50505050565b6097545f906001600160a01b031680611ddd57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b81526001600160401b0385166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015611e2f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e539190612b13565b949350505050565b5f54610100900460ff16611e815760405162461bcd60e51b81526004016106db90612b2e565b611e89612138565b611ea76001600160a01b03821615611ea15781611935565b33611935565b5060c9805461ff001916610100179055565b5f54610100900460ff16611edf5760405162461bcd60e51b81526004016106db90612b2e565b6001600160401b03461115611f075760405163a12e8fa960e01b815260040160405180910390fd5b609780546001600160a01b0319166001600160a01b0392909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f818311611f885781610c21565b5090919050565b5f5f82611f9c858561215e565b611fa69190612ad9565b90508015611fb45780611e53565b5060019392505050565b815f03611fca57505050565b611fe483838360405180602001604052805f8152506121d8565b61107057604051634c67134d60e11b815260040160405180910390fd5b5f612055826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166122159092919063ffffffff16565b905080515f14806120755750808060200190518101906120759190612b79565b6110705760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106db565b6120dd81611cec565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b6060610c218383604051806060016040528060278152602001612c2460279139612223565b5f54610100900460ff166107815760405162461bcd60e51b81526004016106db90612b2e565b5f815f0361217f57604051636296f1b960e11b815260040160405180910390fd5b5f8261219385670de0b6b3a76400006129ea565b61219d9190612ad9565b9050680755bf798b4a1bf1e48111156121bc5750680755bf798b4a1bf1e45b670de0b6b3a76400006121ce82612297565b611e539190612ad9565b5f6001600160a01b03851661220057604051634c67134d60e11b815260040160405180910390fd5b5f5f835160208501878988f195945050505050565b606061067184845f85612411565b60605f5f856001600160a01b03168560405161223f9190612bb6565b5f60405180830381855af49150503d805f8114612277576040519150601f19603f3d011682016040523d82523d5f602084013e61227c565b606091505b509150915061228d868383876124e8565b9695505050505050565b5f68023f2fa8f6da5b9d281982136122ae57919050565b680755bf798b4a1bf1e582126122cb5763a37bfec95f526004601cfd5b6503782dace9d9604e83901b0591505f60606bb17217f7d1cf79abc9e3b39884821b056001605f1b01901d6bb17217f7d1cf79abc9e3b39881029093036c240c330e9fb2d9cbaf0fd5aafb1981018102606090811d6d0277594991cfc85f6e2461837cd9018202811d6d1a521255e34f6a5061b25ef1c9c319018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d6e02c72388d9f74f51a9331fed693f1419018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084016d01d3967ed30fc4f89c02bab5708119010290911d6e0587f503bb6ea29d25fcb740196450019091026d360d7aeea093263ecc6e0ecb291760621b010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6060824710156124725760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016106db565b5f5f866001600160a01b0316858760405161248d9190612bb6565b5f6040518083038185875af1925050503d805f81146124c7576040519150601f19603f3d011682016040523d82523d5f602084013e6124cc565b606091505b50915091506124dd878383876124e8565b979650505050505050565b606083156125565782515f0361254f576001600160a01b0385163b61254f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106db565b5081611e53565b611e53838381511561256b5781518083602001fd5b8060405162461bcd60e51b81526004016106db9190612bd1565b604051806120000160405280610100906020820280368337509192915050565b80356001600160401b03811681146125bb575f5ffd5b919050565b5f5f5f606084860312156125d2575f5ffd5b6125db846125a5565b92506125e9602085016125a5565b91506125f7604085016125a5565b90509250925092565b6001600160a01b0381168114610760575f5ffd5b5f60208284031215612624575f5ffd5b813561067481612600565b8015158114610760575f5ffd5b5f5f5f6060848603121561264e575f5ffd5b612657846125a5565b925060208401359150604084013561266e8161262f565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561269e575f5ffd5b82356126a981612600565b915060208301356001600160401b038111156126c3575f5ffd5b8301601f810185136126d3575f5ffd5b80356001600160401b038111156126ec576126ec612679565b604051601f8201601f19908116603f011681016001600160401b038111828210171561271a5761271a612679565b604052818152828201602001871015612731575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f5f5f60808587031215612763575f5ffd5b843561276e81612600565b9350602085013561277e81612600565b925061278c604086016125a5565b915061279a606086016125a5565b905092959194509250565b803563ffffffff811681146125bb575f5ffd5b5f5f604083850312156127c9575f5ffd5b6127d2836125a5565b91506127e0602084016127a5565b90509250929050565b5f5f604083850312156127fa575f5ffd5b82359150602083013561280c8161262f565b809150509250929050565b5f5f5f5f6080858703121561282a575f5ffd5b8435935060208501359250612841604086016125a5565b915061279a606086016127a5565b5f60a08284031215611ce6575f5ffd5b5f5f5f5f6101008587031215612873575f5ffd5b61287d868661284f565b935061288b60a086016125a5565b925061289960c086016125a5565b915061279a60e086016127a5565b5f602082840312156128b7575f5ffd5b5035919050565b5f5f604083850312156128cf575f5ffd5b82356128da81612600565b9150602083013561280c81612600565b5f5f5f5f61010085870312156128fe575f5ffd5b612907856125a5565b93506020850135925061291c604086016127a5565b915061279a866060870161284f565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610c2457610c246129c3565b8082028115828204841417610c2457610c246129c3565b6001600160401b038281168282160390811115610c2457610c246129c3565b6001600160401b038181168382160290811690818114612a4257612a426129c3565b5092915050565b5f60208284031215612a59575f5ffd5b5051919050565b5f60208284031215612a70575f5ffd5b610c21826127a5565b5f60208284031215612a89575f5ffd5b813560ff81168114610674575f5ffd5b5f60208284031215612aa9575f5ffd5b610c21826125a5565b80820180821115610c2457610c246129c3565b634e487b7160e01b5f52601260045260245ffd5b5f82612ae757612ae7612ac5565b500490565b634e487b7160e01b5f52603260045260245ffd5b5f82612b0e57612b0e612ac5565b500690565b5f60208284031215612b23575f5ffd5b815161067481612600565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215612b89575f5ffd5b81516106748161262f565b5f5b83811015612bae578181015183820152602001612b96565b50505f910152565b5f8251612bc7818460208701612b94565b9190910192915050565b602081525f8251806020840152612bef816040850160208701612b94565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220effaa84efcacfc056fb02202f151620faec2208bfd9251bf5034a0d35854a32e64736f6c634300081b0033", "balance": "0x0" }, - "0x1670000000000000000000000000000000010001": { + "0x1670100000000000000000000000000000010001": { "contractName": "TaikoL2", "storage": { "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", - "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670000000000000000000000000000000010002", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f", + "0x0000000000000000000000000000000000000000000000000000000000000097": "0x0000000000000000000000001670100000000000000000000000000000010002", "0x00000000000000000000000000000000000000000000000000000000000000fe": "0x0000000000000000000000000000000000000000000000000000000000007a69", - "0x00000000000000000000000000000000000000000000000000000000000000fd": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x00000000000000000000000000000000000000000000000000000000000000fc": "0x56648745cb667f52a0ae5eb338ad021411cede74141e72933401adba6c132b01", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000010001" + "0x00000000000000000000000000000000000000000000000000000000000000fd": "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x00000000000000000000000000000000000000000000000000000000000000fc": "0xc1dacae4531cef33c3d19601822ade91f548e191b030fa88c5964199df8c2a8f", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167010000000000000000000000000000010001" }, "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", "balance": "0x0" }, - "0x0167000000000000000000000000000000010002": { + "0x0167010000000000000000000000000000010002": { "contractName": "RollupAddressManagerImpl", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f" }, - "code": "0x608060405260043610610126575f3560e01c80635c975abb116100a85780638da5cb5b1161006d5780638da5cb5b14610301578063a86f9d9e1461031e578063d8f4648f1461033d578063e07baba61461035c578063e30c39781461039b578063f2fde38b146103b8575f5ffd5b80635c975abb14610291578063715018a6146102b157806379ba5097146102c55780638456cb59146102d95780638abf6077146102ed575f5ffd5b80633ab76e9f116100ee5780633ab76e9f1461020a5780633eb6b8cf146102295780633f4ba83a146102485780634f1ef2861461025c57806352d1902d1461026f575f5ffd5b8063069489a21461012a57806319ab453c1461014057806328f713cc1461015f5780633075db56146101c75780633659cfe6146101eb575b5f5ffd5b348015610135575f5ffd5b5061013e6103d7565b005b34801561014b575f5ffd5b5061013e61015a36600461110e565b610487565b34801561016a575f5ffd5b506101aa610179366004611145565b67ffffffffffffffff919091165f90815260fb6020908152604080832093835292905220546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101d2575f5ffd5b506101db61055f565b60405190151581526020016101be565b3480156101f6575f5ffd5b5061013e61020536600461110e565b610577565b348015610215575f5ffd5b506097546101aa906001600160a01b031681565b348015610234575f5ffd5b506101aa61024336600461117c565b61063e565b348015610253575f5ffd5b5061013e610654565b61013e61026a3660046111c9565b610668565b34801561027a575f5ffd5b5061028361071d565b6040519081526020016101be565b34801561029c575f5ffd5b506101db60c954610100900460ff1660021490565b3480156102bc575f5ffd5b5061013e6107ce565b3480156102d0575f5ffd5b5061013e6107df565b3480156102e4575f5ffd5b5061013e610856565b3480156102f8575f5ffd5b506101aa610869565b34801561030c575f5ffd5b506033546001600160a01b03166101aa565b348015610329575f5ffd5b506101aa61033836600461128f565b610877565b348015610348575f5ffd5b5061013e6103573660046112b9565b610883565b348015610367575f5ffd5b5060c9546103829062010000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101be565b3480156103a6575f5ffd5b506065546001600160a01b03166101aa565b3480156103c3575f5ffd5b5061013e6103d236600461110e565b610961565b6103df6109d2565b5f54600290610100900460ff161580156103ff57505f5460ff8083169116105b6104245760405162461bcd60e51b815260040161041b906112f6565b60405180910390fd5b5f8054609780546001600160a01b0319163017905561ffff191660ff83169081176101001761ff0019169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b5f54610100900460ff16158080156104a557505f54600160ff909116105b806104be5750303b1580156104be57505f5460ff166001145b6104da5760405162461bcd60e51b815260040161041b906112f6565b5f805460ff1916600117905580156104fb575f805461ff0019166101001790555b61050482610a2c565b609780546001600160a01b03191630179055801561055b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b5f600261056e60c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000100021630036105bf5760405162461bcd60e51b815260040161041b90611344565b7f00000000000000000000000001670000000000000000000000000000000100026001600160a01b03166105f1610a8a565b6001600160a01b0316146106175760405162461bcd60e51b815260040161041b90611390565b61062081610aa5565b604080515f8082526020820190925261063b91839190610aad565b50565b5f61064a848484610c1c565b90505b9392505050565b61065c610c6f565b610666335f610d00565b565b6001600160a01b037f00000000000000000000000001670000000000000000000000000000000100021630036106b05760405162461bcd60e51b815260040161041b90611344565b7f00000000000000000000000001670000000000000000000000000000000100026001600160a01b03166106e2610a8a565b6001600160a01b0316146107085760405162461bcd60e51b815260040161041b90611390565b61071182610aa5565b61055b82826001610aad565b5f306001600160a01b037f000000000000000000000000016700000000000000000000000000000001000216146107bc5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161041b565b505f5160206114c95f395f51905f5290565b6107d66109d2565b6106665f610d19565b60655433906001600160a01b0316811461084d5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b606482015260840161041b565b61063b81610d19565b61085e610d32565b610666336001610d00565b5f610872610a8a565b905090565b5f61064d468484610c1c565b61088b6109d2565b67ffffffffffffffff83165f90815260fb602090815260408083208584529091529020546001600160a01b039081169082168190036108dd5760405163a883089360e01b815260040160405180910390fd5b67ffffffffffffffff84165f81815260fb6020908152604080832087845282529182902080546001600160a01b0319166001600160a01b038781169182179092558351908152908516918101919091528592917f500dcd607a98daece9bccc2511bf6032471252929de73caf507aae0e082f8453910160405180910390a350505050565b6109696109d2565b606580546001600160a01b0383166001600160a01b0319909116811790915561099a6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6033546001600160a01b031633146106665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161041b565b5f54610100900460ff16610a525760405162461bcd60e51b815260040161041b906113dc565b610a5a610da3565b610a786001600160a01b03821615610a725781610d19565b33610d19565b5060c9805461ff001916610100179055565b5f5160206114c95f395f51905f52546001600160a01b031690565b61063b6109d2565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610ae557610ae083610dc9565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b3f575060408051601f3d908101601f19168201909252610b3c91810190611427565b60015b610ba25760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161041b565b5f5160206114c95f395f51905f528114610c105760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161041b565b50610ae0838383610e64565b5f610c278484610e8e565b905081158015610c3e57506001600160a01b038116155b1561064d57604051632b0d65db60e01b815267ffffffffffffffff851660048201526024810184905260440161041b565b610c8360c954610100900460ff1660021490565b610ca05760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff0019909116620100004267ffffffffffffffff1602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b604051630c2b8f8f60e11b815260040160405180910390fd5b606580546001600160a01b031916905561063b81610f39565b610d4660c954610100900460ff1660021490565b15610d645760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610cf6565b5f54610100900460ff166106665760405162461bcd60e51b815260040161041b906113dc565b6001600160a01b0381163b610e365760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161041b565b5f5160206114c95f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b610e6d83610f8a565b5f82511180610e795750805b15610ae057610e888383610fc9565b50505050565b6097545f906001600160a01b031680610eba57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b815267ffffffffffffffff85166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015610f0d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f31919061143e565b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b610f9381610dc9565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061064d83836040518060600160405280602781526020016114e96027913960605f5f856001600160a01b031685604051611005919061147b565b5f60405180830381855af49150503d805f811461103d576040519150601f19603f3d011682016040523d82523d5f602084013e611042565b606091505b50915091506110538683838761105d565b9695505050505050565b606083156110cb5782515f036110c4576001600160a01b0385163b6110c45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161041b565b5081610f31565b610f3183838151156110e05781518083602001fd5b8060405162461bcd60e51b815260040161041b9190611496565b6001600160a01b038116811461063b575f5ffd5b5f6020828403121561111e575f5ffd5b813561064d816110fa565b803567ffffffffffffffff81168114611140575f5ffd5b919050565b5f5f60408385031215611156575f5ffd5b61115f83611129565b946020939093013593505050565b80358015158114611140575f5ffd5b5f5f5f6060848603121561118e575f5ffd5b61119784611129565b9250602084013591506111ac6040850161116d565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156111da575f5ffd5b82356111e5816110fa565b9150602083013567ffffffffffffffff811115611200575f5ffd5b8301601f81018513611210575f5ffd5b803567ffffffffffffffff81111561122a5761122a6111b5565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715611259576112596111b5565b604052818152828201602001871015611270575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f604083850312156112a0575f5ffd5b823591506112b06020840161116d565b90509250929050565b5f5f5f606084860312156112cb575f5ffd5b6112d484611129565b92506020840135915060408401356112eb816110fa565b809150509250925092565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215611437575f5ffd5b5051919050565b5f6020828403121561144e575f5ffd5b815161064d816110fa565b5f5b8381101561147357818101518382015260200161145b565b50505f910152565b5f825161148c818460208701611459565b9190910192915050565b602081525f82518060208401526114b4816040850160208701611459565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220086d22e71c4d170ad7ce74f948ce47f2f39076babb18c7b950d99c756006877464736f6c634300081b0033", + "code": "0x608060405260043610610126575f3560e01c80635c975abb116100a85780638da5cb5b1161006d5780638da5cb5b14610301578063a86f9d9e1461031e578063d8f4648f1461033d578063e07baba61461035c578063e30c39781461039b578063f2fde38b146103b8575f5ffd5b80635c975abb14610291578063715018a6146102b157806379ba5097146102c55780638456cb59146102d95780638abf6077146102ed575f5ffd5b80633ab76e9f116100ee5780633ab76e9f1461020a5780633eb6b8cf146102295780633f4ba83a146102485780634f1ef2861461025c57806352d1902d1461026f575f5ffd5b8063069489a21461012a57806319ab453c1461014057806328f713cc1461015f5780633075db56146101c75780633659cfe6146101eb575b5f5ffd5b348015610135575f5ffd5b5061013e6103d7565b005b34801561014b575f5ffd5b5061013e61015a36600461110e565b610487565b34801561016a575f5ffd5b506101aa610179366004611145565b67ffffffffffffffff919091165f90815260fb6020908152604080832093835292905220546001600160a01b031690565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101d2575f5ffd5b506101db61055f565b60405190151581526020016101be565b3480156101f6575f5ffd5b5061013e61020536600461110e565b610577565b348015610215575f5ffd5b506097546101aa906001600160a01b031681565b348015610234575f5ffd5b506101aa61024336600461117c565b61063e565b348015610253575f5ffd5b5061013e610654565b61013e61026a3660046111c9565b610668565b34801561027a575f5ffd5b5061028361071d565b6040519081526020016101be565b34801561029c575f5ffd5b506101db60c954610100900460ff1660021490565b3480156102bc575f5ffd5b5061013e6107ce565b3480156102d0575f5ffd5b5061013e6107df565b3480156102e4575f5ffd5b5061013e610856565b3480156102f8575f5ffd5b506101aa610869565b34801561030c575f5ffd5b506033546001600160a01b03166101aa565b348015610329575f5ffd5b506101aa61033836600461128f565b610877565b348015610348575f5ffd5b5061013e6103573660046112b9565b610883565b348015610367575f5ffd5b5060c9546103829062010000900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101be565b3480156103a6575f5ffd5b506065546001600160a01b03166101aa565b3480156103c3575f5ffd5b5061013e6103d236600461110e565b610961565b6103df6109d2565b5f54600290610100900460ff161580156103ff57505f5460ff8083169116105b6104245760405162461bcd60e51b815260040161041b906112f6565b60405180910390fd5b5f8054609780546001600160a01b0319163017905561ffff191660ff83169081176101001761ff0019169091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b5f54610100900460ff16158080156104a557505f54600160ff909116105b806104be5750303b1580156104be57505f5460ff166001145b6104da5760405162461bcd60e51b815260040161041b906112f6565b5f805460ff1916600117905580156104fb575f805461ff0019166101001790555b61050482610a2c565b609780546001600160a01b03191630179055801561055b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b5f600261056e60c95460ff1690565b60ff1614905090565b6001600160a01b037f00000000000000000000000001670100000000000000000000000000000100021630036105bf5760405162461bcd60e51b815260040161041b90611344565b7f00000000000000000000000001670100000000000000000000000000000100026001600160a01b03166105f1610a8a565b6001600160a01b0316146106175760405162461bcd60e51b815260040161041b90611390565b61062081610aa5565b604080515f8082526020820190925261063b91839190610aad565b50565b5f61064a848484610c1c565b90505b9392505050565b61065c610c6f565b610666335f610d00565b565b6001600160a01b037f00000000000000000000000001670100000000000000000000000000000100021630036106b05760405162461bcd60e51b815260040161041b90611344565b7f00000000000000000000000001670100000000000000000000000000000100026001600160a01b03166106e2610a8a565b6001600160a01b0316146107085760405162461bcd60e51b815260040161041b90611390565b61071182610aa5565b61055b82826001610aad565b5f306001600160a01b037f000000000000000000000000016701000000000000000000000000000001000216146107bc5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000606482015260840161041b565b505f5160206114c95f395f51905f5290565b6107d66109d2565b6106665f610d19565b60655433906001600160a01b0316811461084d5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b606482015260840161041b565b61063b81610d19565b61085e610d32565b610666336001610d00565b5f610872610a8a565b905090565b5f61064d468484610c1c565b61088b6109d2565b67ffffffffffffffff83165f90815260fb602090815260408083208584529091529020546001600160a01b039081169082168190036108dd5760405163a883089360e01b815260040160405180910390fd5b67ffffffffffffffff84165f81815260fb6020908152604080832087845282529182902080546001600160a01b0319166001600160a01b038781169182179092558351908152908516918101919091528592917f500dcd607a98daece9bccc2511bf6032471252929de73caf507aae0e082f8453910160405180910390a350505050565b6109696109d2565b606580546001600160a01b0383166001600160a01b0319909116811790915561099a6033546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6033546001600160a01b031633146106665760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161041b565b5f54610100900460ff16610a525760405162461bcd60e51b815260040161041b906113dc565b610a5a610da3565b610a786001600160a01b03821615610a725781610d19565b33610d19565b5060c9805461ff001916610100179055565b5f5160206114c95f395f51905f52546001600160a01b031690565b61063b6109d2565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615610ae557610ae083610dc9565b505050565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610b3f575060408051601f3d908101601f19168201909252610b3c91810190611427565b60015b610ba25760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b606482015260840161041b565b5f5160206114c95f395f51905f528114610c105760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b606482015260840161041b565b50610ae0838383610e64565b5f610c278484610e8e565b905081158015610c3e57506001600160a01b038116155b1561064d57604051632b0d65db60e01b815267ffffffffffffffff851660048201526024810184905260440161041b565b610c8360c954610100900460ff1660021490565b610ca05760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461010069ffffffffffffffffff0019909116620100004267ffffffffffffffff1602171790556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b604051630c2b8f8f60e11b815260040160405180910390fd5b606580546001600160a01b031916905561063b81610f39565b610d4660c954610100900460ff1660021490565b15610d645760405163bae6e2a960e01b815260040160405180910390fd5b60c9805461ff0019166102001790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610cf6565b5f54610100900460ff166106665760405162461bcd60e51b815260040161041b906113dc565b6001600160a01b0381163b610e365760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161041b565b5f5160206114c95f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b610e6d83610f8a565b5f82511180610e795750805b15610ae057610e888383610fc9565b50505050565b6097545f906001600160a01b031680610eba57604051638ed88b2560e01b815260040160405180910390fd5b604051630a3dc4f360e21b815267ffffffffffffffff85166004820152602481018490526001600160a01b038216906328f713cc90604401602060405180830381865afa158015610f0d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f31919061143e565b949350505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b610f9381610dc9565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061064d83836040518060600160405280602781526020016114e96027913960605f5f856001600160a01b031685604051611005919061147b565b5f60405180830381855af49150503d805f811461103d576040519150601f19603f3d011682016040523d82523d5f602084013e611042565b606091505b50915091506110538683838761105d565b9695505050505050565b606083156110cb5782515f036110c4576001600160a01b0385163b6110c45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161041b565b5081610f31565b610f3183838151156110e05781518083602001fd5b8060405162461bcd60e51b815260040161041b9190611496565b6001600160a01b038116811461063b575f5ffd5b5f6020828403121561111e575f5ffd5b813561064d816110fa565b803567ffffffffffffffff81168114611140575f5ffd5b919050565b5f5f60408385031215611156575f5ffd5b61115f83611129565b946020939093013593505050565b80358015158114611140575f5ffd5b5f5f5f6060848603121561118e575f5ffd5b61119784611129565b9250602084013591506111ac6040850161116d565b90509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156111da575f5ffd5b82356111e5816110fa565b9150602083013567ffffffffffffffff811115611200575f5ffd5b8301601f81018513611210575f5ffd5b803567ffffffffffffffff81111561122a5761122a6111b5565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715611259576112596111b5565b604052818152828201602001871015611270575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f604083850312156112a0575f5ffd5b823591506112b06020840161116d565b90509250929050565b5f5f5f606084860312156112cb575f5ffd5b6112d484611129565b92506020840135915060408401356112eb816110fa565b809150509250925092565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c908201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060408201526b6163746976652070726f787960a01b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f60208284031215611437575f5ffd5b5051919050565b5f6020828403121561144e575f5ffd5b815161064d816110fa565b5f5b8381101561147357818101518382015260200161145b565b50505f910152565b5f825161148c818460208701611459565b9190910192915050565b602081525f82518060208401526114b4816040850160208701611459565b601f01601f1916919091016040019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220086d22e71c4d170ad7ce74f948ce47f2f39076babb18c7b950d99c756006877464736f6c634300081b0033", "balance": "0x0" }, - "0x1670000000000000000000000000000000010002": { + "0x1670100000000000000000000000000000010002": { "contractName": "RollupAddressManager", "storage": { "0x00000000000000000000000000000000000000000000000000000000000000c9": "0x0000000000000000000000000000000000000000000000000000000000000101", "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000df08f82de32b8d460adbe8d72043e3a7e25a3b39", - "0x6f603ad772aee14bf097b20bcdc2c1ce5646bfcfbe0e42c192e55416269268c9": "0x0000000000000000000000001670000000000000000000000000000000010001", - "0xee78643889fcb54c297d0ecf866d9df7d829a8c978e52394d135cdb40a501e38": "0x0000000000000000000000001670000000000000000000000000000000000001", - "0xd724ebf31fb7ffa376a4d5d51b51967009df0c86a4dfef5f55507cde2eb36739": "0x0000000000000000000000001670000000000000000000000000000000000005", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167000000000000000000000000000000010002" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000091c34396e640e3bb4ee80f2e523c23dda2b3f78f", + "0x1bd2b99f99179300cf02ec1d7601bc5aa76d7eff5110d5c1e971d6dad552d55c": "0x0000000000000000000000001670100000000000000000000000000000010001", + "0xe5868eccbe729200743507b6a76ef4952ff4776d6f6e681ea64d7940675418c0": "0x0000000000000000000000001670100000000000000000000000000000000001", + "0x84e8aac80b10d1364654096d750848d40210c937caf853cdc47e8784ad6cf9d5": "0x0000000000000000000000001670100000000000000000000000000000000005", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0167010000000000000000000000000000010002" }, "code": "0x608060405236601057600e6013565b005b600e5b601f601b6021565b6057565b565b5f60527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156070573d5ff35b3d5ffdfea26469706673582212207b080a80081bb3b6bfe354da7a048c8c76f2c38196dbdab17569c4eb15b5f26764736f6c634300081b0033", "balance": "0x0" }, - "0xbB21206518394cd6DaF38A6C31A3B1461b77CBC8": { + "0x7A4ea15A1713C80C7f6aE5Cd0036415B9dd4af36": { "contractName": "LibNetwork", "storage": {}, "code": "0x730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212204213774d0b1a3b266888223284a425ae694a8c5e97b18403ec7f442200eae55a64736f6c634300081b0033", "balance": "0x0" }, - "0x0167000000000000000000000000000000010099": { + "0x0167010000000000000000000000000000010099": { "contractName": "RegularERC20", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000003": "0x526567756c617245524332300000000000000000000000000000000000000018", "0x0000000000000000000000000000000000000000000000000000000000000004": "0x52474c0000000000000000000000000000000000000000000000000000000006", "0x0000000000000000000000000000000000000000000000000000000000000002": "0x00000000000000000000000000000000000000000000000000000000001f4000", - "0x1fe6b582a6b4d9b61da9024a045cb9bafc343b4b12713ba001e47b3500867413": "0x00000000000000000000000000000000000000000000000000000000000fa000", + "0x8577e88969d2fa50020a5de3ec00ef722a6ad13741e7d7b5288609c0c312c113": "0x00000000000000000000000000000000000000000000000000000000000fa000", "0xaaa7f9b700b86a1f8ec5dacd0ca81e3b1ea8214dae2b1856095f9d44c1f5b380": "0x00000000000000000000000000000000000000000000000000000000000fa000" }, "code": "0x608060405234801561000f575f5ffd5b50600436106100a6575f3560e01c8063395093511161006e578063395093511461011f57806370a082311461013257806395d89b411461015a578063a457c2d714610162578063a9059cbb14610175578063dd62ed3e14610188575f5ffd5b806306fdde03146100aa578063095ea7b3146100c857806318160ddd146100eb57806323b872dd146100fd578063313ce56714610110575b5f5ffd5b6100b261019b565b6040516100bf919061068a565b60405180910390f35b6100db6100d63660046106f0565b61022b565b60405190151581526020016100bf565b6002545b6040519081526020016100bf565b6100db61010b366004610718565b610244565b604051601281526020016100bf565b6100db61012d3660046106f0565b610267565b6100ef610140366004610752565b6001600160a01b03165f9081526020819052604090205490565b6100b2610288565b6100db6101703660046106f0565b610297565b6100db6101833660046106f0565b610316565b6100ef610196366004610772565b610323565b6060600380546101aa906107a3565b80601f01602080910402602001604051908101604052809291908181526020018280546101d6906107a3565b80156102215780601f106101f857610100808354040283529160200191610221565b820191905f5260205f20905b81548152906001019060200180831161020457829003601f168201915b5050505050905090565b5f3361023881858561034d565b60019150505b92915050565b5f33610251858285610470565b61025c8585856104e8565b506001949350505050565b5f336102388185856102798383610323565b61028391906107db565b61034d565b6060600480546101aa906107a3565b5f33816102a48286610323565b9050838110156103095760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b61025c828686840361034d565b5f336102388185856104e8565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166103af5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610300565b6001600160a01b0382166104105760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610300565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f61047b8484610323565b90505f1981146104e257818110156104d55760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610300565b6104e2848484840361034d565b50505050565b6001600160a01b03831661054c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610300565b6001600160a01b0382166105ae5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610300565b6001600160a01b0383165f90815260208190526040902054818110156106255760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610300565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36104e2565b602081525f82518060208401525f5b818110156106b65760208186018101516040868401015201610699565b505f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b03811681146106eb575f5ffd5b919050565b5f5f60408385031215610701575f5ffd5b61070a836106d5565b946020939093013593505050565b5f5f5f6060848603121561072a575f5ffd5b610733846106d5565b9250610741602085016106d5565b929592945050506040919091013590565b5f60208284031215610762575f5ffd5b61076b826106d5565b9392505050565b5f5f60408385031215610783575f5ffd5b61078c836106d5565b915061079a602084016106d5565b90509250929050565b600181811c908216806107b757607f821691505b6020821081036107d557634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561023e57634e487b7160e01b5f52601160045260245ffdfea2646970667358221220a1403924b9774521e0b2e4d325575d166c7612abf0d4b532ee23317cd4225a6b64736f6c634300081b0033", diff --git a/packages/protocol/test/genesis/data/genesis_config.js b/packages/protocol/test/genesis/data/genesis_config.js index df60b5b536..fcae9942ca 100644 --- a/packages/protocol/test/genesis/data/genesis_config.js +++ b/packages/protocol/test/genesis/data/genesis_config.js @@ -3,19 +3,18 @@ const ADDRESS_LENGTH = 40; module.exports = { // Owner address of the pre-deployed L2 contracts. - contractOwner: "0xDf08F82De32B8d460adbE8D72043E3a7e25A3B39", - l1ChainId: 1, - // Chain ID of the Taiko L2 network. - chainId: 167, + contractOwner: "0x91c34396e640e3bB4eE80f2e523c23dDa2b3f78F", + l1ChainId: 7014190335, + chainId: 167010, // Account address and pre-mint ETH amount as key-value pairs. seedAccounts: [ - { "0xDf08F82De32B8d460adbE8D72043E3a7e25A3B39": 1000 }, + { "0x91c34396e640e3bB4eE80f2e523c23dDa2b3f78F": 1000 }, { "0x79fcdef22feed20eddacbb2587640e45491b757f": 1000 }, ], // Owner Chain ID, Security Council, and Timelock Controller l1ChainId: 31337, - ownerSecurityCouncil: "0xDf08F82De32B8d460adbE8D72043E3a7e25A3B39", - ownerTimelockController: "0xDf08F82De32B8d460adbE8D72043E3a7e25A3B39", + ownerSecurityCouncil: "0x91c34396e640e3bB4eE80f2e523c23dDa2b3f78F", + ownerTimelockController: "0x91c34396e640e3bB4eE80f2e523c23dDa2b3f78F", get contractAddresses() { return { // ============ Implementations ============ @@ -48,7 +47,7 @@ module.exports = { }, // L2 EIP-1559 baseFee calculation related fields. param1559: { - gasExcess: 1, + gasExcess: 0, }, // Option to pre-deploy an ERC-20 token. predeployERC20: true, diff --git a/packages/protocol/test/genesis/data/genesis_config.json b/packages/protocol/test/genesis/data/genesis_config.json index 8d771d79b1..c0eb06ed51 100644 --- a/packages/protocol/test/genesis/data/genesis_config.json +++ b/packages/protocol/test/genesis/data/genesis_config.json @@ -1 +1 @@ -{"contractOwner":"0xDf08F82De32B8d460adbE8D72043E3a7e25A3B39","l1ChainId":31337,"chainId":167,"seedAccounts":[{"0xDf08F82De32B8d460adbE8D72043E3a7e25A3B39":1000},{"0x79fcdef22feed20eddacbb2587640e45491b757f":1000}],"ownerSecurityCouncil":"0xDf08F82De32B8d460adbE8D72043E3a7e25A3B39","ownerTimelockController":"0xDf08F82De32B8d460adbE8D72043E3a7e25A3B39","contractAddresses":{"BridgeImpl":"0x0167000000000000000000000000000000000001","ERC20VaultImpl":"0x0167000000000000000000000000000000000002","ERC721VaultImpl":"0x0167000000000000000000000000000000000003","ERC1155VaultImpl":"0x0167000000000000000000000000000000000004","SignalServiceImpl":"0x0167000000000000000000000000000000000005","SharedAddressManagerImpl":"0x0167000000000000000000000000000000000006","BridgedERC20Impl":"0x0167000000000000000000000000000000010096","BridgedERC721Impl":"0x0167000000000000000000000000000000010097","BridgedERC1155Impl":"0x0167000000000000000000000000000000010098","RegularERC20":"0x0167000000000000000000000000000000010099","TaikoL2Impl":"0x0167000000000000000000000000000000010001","RollupAddressManagerImpl":"0x0167000000000000000000000000000000010002","Bridge":"0x1670000000000000000000000000000000000001","ERC20Vault":"0x1670000000000000000000000000000000000002","ERC721Vault":"0x1670000000000000000000000000000000000003","ERC1155Vault":"0x1670000000000000000000000000000000000004","SignalService":"0x1670000000000000000000000000000000000005","SharedAddressManager":"0x1670000000000000000000000000000000000006","TaikoL2":"0x1670000000000000000000000000000000010001","RollupAddressManager":"0x1670000000000000000000000000000000010002"},"param1559":{"gasExcess":1},"predeployERC20":true} \ No newline at end of file +{"contractOwner":"0x91c34396e640e3bB4eE80f2e523c23dDa2b3f78F","l1ChainId":31337,"chainId":167010,"seedAccounts":[{"0x91c34396e640e3bB4eE80f2e523c23dDa2b3f78F":1000},{"0x79fcdef22feed20eddacbb2587640e45491b757f":1000}],"ownerSecurityCouncil":"0x91c34396e640e3bB4eE80f2e523c23dDa2b3f78F","ownerTimelockController":"0x91c34396e640e3bB4eE80f2e523c23dDa2b3f78F","contractAddresses":{"BridgeImpl":"0x0167010000000000000000000000000000000001","ERC20VaultImpl":"0x0167010000000000000000000000000000000002","ERC721VaultImpl":"0x0167010000000000000000000000000000000003","ERC1155VaultImpl":"0x0167010000000000000000000000000000000004","SignalServiceImpl":"0x0167010000000000000000000000000000000005","SharedAddressManagerImpl":"0x0167010000000000000000000000000000000006","BridgedERC20Impl":"0x0167010000000000000000000000000000010096","BridgedERC721Impl":"0x0167010000000000000000000000000000010097","BridgedERC1155Impl":"0x0167010000000000000000000000000000010098","RegularERC20":"0x0167010000000000000000000000000000010099","TaikoL2Impl":"0x0167010000000000000000000000000000010001","RollupAddressManagerImpl":"0x0167010000000000000000000000000000010002","Bridge":"0x1670100000000000000000000000000000000001","ERC20Vault":"0x1670100000000000000000000000000000000002","ERC721Vault":"0x1670100000000000000000000000000000000003","ERC1155Vault":"0x1670100000000000000000000000000000000004","SignalService":"0x1670100000000000000000000000000000000005","SharedAddressManager":"0x1670100000000000000000000000000000000006","TaikoL2":"0x1670100000000000000000000000000000010001","RollupAddressManager":"0x1670100000000000000000000000000000010002"},"param1559":{"gasExcess":0},"predeployERC20":true} \ No newline at end of file diff --git a/packages/protocol/test/genesis/test_config.js b/packages/protocol/test/genesis/test_config.js index 8b67ec687b..59dff796b9 100644 --- a/packages/protocol/test/genesis/test_config.js +++ b/packages/protocol/test/genesis/test_config.js @@ -2,9 +2,9 @@ const ADDRESS_LENGTH = 40; module.exports = { - contractOwner: "0x70997970C51812dc3A010C7d01b50e0d17dc79C8", - l1ChainId: 1, - chainId: 167, + contractOwner: "0x91c34396e640e3bB4eE80f2e523c23dDa2b3f78F", + l1ChainId: 7014190335, + chainId: 167010, seedAccounts: [ { "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266": 1024, @@ -76,7 +76,7 @@ module.exports = { "0x9eAF5590f2c84912A08de97FA28d0529361Deb9E": 1024, }, { - "0x1003ff39d25F2Ab16dBCc18EcE05a9B6154f65F4": 1024, + "0x91c34396e640e3bB4eE80f2e523c23dDa2b3f78F": 1024, }, ], get contractAddresses() { diff --git a/packages/taiko-client/Dockerfile b/packages/taiko-client/Dockerfile index 45004845b2..987585abe5 100644 --- a/packages/taiko-client/Dockerfile +++ b/packages/taiko-client/Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.21-alpine as builder +FROM golang:1.21-alpine AS builder RUN apk update && apk add --no-cache --update gcc musl-dev linux-headers git make build-base diff --git a/packages/taiko-client/bindings/encoding/protocol_config.go b/packages/taiko-client/bindings/encoding/protocol_config.go index 21f7f9d440..64c93be574 100644 --- a/packages/taiko-client/bindings/encoding/protocol_config.go +++ b/packages/taiko-client/bindings/encoding/protocol_config.go @@ -46,6 +46,23 @@ var ( MaxGasIssuancePerBlock: 600_000_000, }, } + PreconfsDevnetProtocolConfig = &bindings.TaikoDataConfig{ + ChainId: 167010, + BlockMaxProposals: 324_000, + BlockRingBufferSize: 360_000, + MaxBlocksToVerify: 16, + BlockMaxGasLimit: 240_000_000, + LivenessBond: livenessBond, + StateRootSyncInternal: 16, + MaxAnchorHeightOffset: 64, + BaseFeeConfig: bindings.LibSharedDataBaseFeeConfig{ + AdjustmentQuotient: 8, + GasIssuancePerSecond: 5_000_000, + MinGasExcess: 1_340_000_000, + MaxGasIssuancePerBlock: 600000000, + }, + OntakeForkHeight: 0, + } MainnetProtocolConfig = &bindings.TaikoDataConfig{ ChainId: params.TaikoMainnetNetworkID.Uint64(), BlockMaxProposals: 324_000, @@ -73,6 +90,8 @@ func GetProtocolConfig(chainID uint64) *bindings.TaikoDataConfig { return HeklaProtocolConfig case params.TaikoMainnetNetworkID.Uint64(): return MainnetProtocolConfig + case 167010: + return PreconfsDevnetProtocolConfig default: return InternlDevnetProtocolConfig } diff --git a/packages/taiko-client/cmd/flags/common.go b/packages/taiko-client/cmd/flags/common.go index 834dd8d3d6..40100e0554 100644 --- a/packages/taiko-client/cmd/flags/common.go +++ b/packages/taiko-client/cmd/flags/common.go @@ -10,13 +10,14 @@ import ( ) var ( - commonCategory = "COMMON" - metricsCategory = "METRICS" - loggingCategory = "LOGGING" - driverCategory = "DRIVER" - proposerCategory = "PROPOSER" - proverCategory = "PROVER" - txmgrCategory = "TX_MANAGER" + commonCategory = "COMMON" + metricsCategory = "METRICS" + loggingCategory = "LOGGING" + driverCategory = "DRIVER" + proposerCategory = "PROPOSER" + proverCategory = "PROVER" + txmgrCategory = "TX_MANAGER" + preconfAPICategory = "PRECONFA_API" ) // Required flags used by all client software. diff --git a/packages/taiko-client/cmd/flags/preconfapi.go b/packages/taiko-client/cmd/flags/preconfapi.go new file mode 100644 index 0000000000..da12b39621 --- /dev/null +++ b/packages/taiko-client/cmd/flags/preconfapi.go @@ -0,0 +1,50 @@ +package flags + +import ( + "time" + + "github.com/urfave/cli/v2" +) + +// Required flags used by preconfirmations api. +var ( + PreconfAPIHTTPServerPort = &cli.Uint64Flag{ + Name: "preconfapi.port", + Usage: "Port to expose for http server", + Category: preconfAPICategory, + Value: 9871, + EnvVars: []string{"PRECONFAPI_PORT"}, + } + PollingInterval = &cli.DurationFlag{ + Name: "preconfapi.pollingInterval", + Usage: "Interval at which to poll", + Category: preconfAPICategory, + Value: 1 * time.Second, + EnvVars: []string{"POLLING_INTERVAL"}, + } + DBPath = &cli.StringFlag{ + Name: "preconfapi.dbPath", + Usage: "DB Path", + Category: preconfAPICategory, + Value: "/tmp/badgerdb", + EnvVars: []string{"DB_PATH"}, + } + CORSOrigins = &cli.StringSliceFlag{ + Name: "preconfapi.corsOrigins", + Usage: "Cors Origins", + Category: preconfAPICategory, + EnvVars: []string{"CORS_ORIGINS"}, + Required: true, + } +) + +// PreconfAPIFlags contains all preconfirmations API flags +var PreconfAPIFlags = MergeFlags(CommonFlags, []cli.Flag{ + TxGasLimit, + PreconfAPIHTTPServerPort, + BlobAllowed, + PollingInterval, + L2HTTPEndpoint, + DBPath, + CORSOrigins, +}) diff --git a/packages/taiko-client/cmd/main.go b/packages/taiko-client/cmd/main.go index cfba0443e0..f27b00990d 100644 --- a/packages/taiko-client/cmd/main.go +++ b/packages/taiko-client/cmd/main.go @@ -10,6 +10,7 @@ import ( "github.com/taikoxyz/taiko-mono/packages/taiko-client/cmd/utils" "github.com/taikoxyz/taiko-mono/packages/taiko-client/driver" "github.com/taikoxyz/taiko-mono/packages/taiko-client/internal/version" + "github.com/taikoxyz/taiko-mono/packages/taiko-client/preconfapi" "github.com/taikoxyz/taiko-mono/packages/taiko-client/proposer" "github.com/taikoxyz/taiko-mono/packages/taiko-client/prover" ) @@ -48,6 +49,13 @@ func main() { Description: "Taiko prover software", Action: utils.SubcommandAction(new(prover.Prover)), }, + { + Name: "preconfapi", + Flags: flags.PreconfAPIFlags, + Usage: "Starts the preconfirmation API software", + Description: "Taiko preconfirmation API software", + Action: utils.SubcommandAction(new(preconfapi.PreconfAPI)), + }, } if err := app.Run(os.Args); err != nil { diff --git a/packages/taiko-client/pkg/rpc/methods.go b/packages/taiko-client/pkg/rpc/methods.go index 4317902e68..b32af19169 100644 --- a/packages/taiko-client/pkg/rpc/methods.go +++ b/packages/taiko-client/pkg/rpc/methods.go @@ -683,16 +683,6 @@ func (c *Client) checkSyncedL1SnippetFromAnchor( return false, err } - if l1HeightInAnchor+1 != l1Height { - log.Info( - "Reorg detected due to L1 height mismatch", - "blockID", blockID, - "l1HeightInAnchor", l1HeightInAnchor, - "l1Height", l1Height, - ) - return true, nil - } - if parentGasUsed != uint32(parent.GasUsed()) { log.Info( "Reorg detected due to parent gas used mismatch", diff --git a/packages/taiko-client/preconfapi/builder/blob.go b/packages/taiko-client/preconfapi/builder/blob.go new file mode 100644 index 0000000000..c90708cd66 --- /dev/null +++ b/packages/taiko-client/preconfapi/builder/blob.go @@ -0,0 +1,208 @@ +package builder + +import ( + "context" + + "github.com/ethereum-optimism/optimism/op-service/eth" + "github.com/ethereum-optimism/optimism/op-service/txmgr" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + + "github.com/taikoxyz/taiko-mono/packages/taiko-client/bindings/encoding" + "github.com/taikoxyz/taiko-mono/packages/taiko-client/internal/utils" +) + +// BlobTransactionBuilder is responsible for building a TaikoL1.proposeBlock transaction with txList +// bytes saved in blob. +type BlobTransactionBuilder struct { + taikoL1Address common.Address + gasLimit uint64 +} + +// NewBlobTransactionBuilder creates a new BlobTransactionBuilder instance based on giving configurations. +func NewBlobTransactionBuilder( + taikoL1Address common.Address, + gasLimit uint64, +) *BlobTransactionBuilder { + return &BlobTransactionBuilder{ + taikoL1Address, + gasLimit, + } +} + +// BuildBlockUnsigned implements the ProposeBlockTransactionBuilder interface to +// return an unsigned transaction, intended for preconfirmations. +func (b *BlobTransactionBuilder) BuildBlockUnsigned( + _ context.Context, + opts BuildBlockUnsignedOpts, +) (*types.Transaction, error) { + txListBytes, err := signedTransactionsToTxListBytes(opts.SignedTransactions) + if err != nil { + return nil, err + } + + compressedTxListBytes, err := utils.Compress(txListBytes) + if err != nil { + return nil, err + } + + var blob = ð.Blob{} + if err := blob.FromData(compressedTxListBytes); err != nil { + return nil, err + } + + // ABI encode the TaikoL1.proposeBlock parameters. + encodedParams, err := encoding.EncodeBlockParamsOntake(&encoding.BlockParamsV2{ + Coinbase: common.HexToAddress(opts.Coinbase), + AnchorBlockId: uint64(opts.L1StateBlockNumber), + Timestamp: opts.Timestamp, + BlobIndex: 0, + BlobTxListOffset: 0, + BlobTxListLength: uint32(len(compressedTxListBytes)), + }) + if err != nil { + return nil, err + } + + data, err := encoding.TaikoL1ABI.Pack("proposeBlockV2", encodedParams, []byte{}) + if err != nil { + return nil, err + } + + sidecar, blobHashes, err := txmgr.MakeSidecar([]*eth.Blob{blob}) + if err != nil { + return nil, err + } + + blobTx := &types.BlobTx{ + To: b.taikoL1Address, + Value: nil, // maxFee / prover selecting no longer happens + Gas: b.gasLimit, + Data: data, + Sidecar: sidecar, + BlobHashes: blobHashes, + } + + tx := types.NewTx(blobTx) + + return tx, nil +} + +// BuildBlocksUnsigned implements the ProposeBlockTransactionBuilder interface to +// return an unsigned transaction, intended for preconfirmations. +func (b *BlobTransactionBuilder) BuildBlocksUnsigned( + _ context.Context, + opts BuildBlocksUnsignedOpts, +) (*types.Transaction, error) { + encodedParams := make([][]byte, 0) + + blobs := make([]*eth.Blob, 0) + + type blobInfo struct { + index uint8 + offset uint32 + length uint32 + } + + blobInfos := make([]blobInfo, 0) + + var totalBytes []byte + + var idx uint8 + + for i, opt := range opts.BlockOpts { + txListBytes, err := signedTransactionsToTxListBytes(opt.SignedTransactions) + if err != nil { + return nil, err + } + + compressedTxListBytes, err := utils.Compress(txListBytes) + if err != nil { + return nil, err + } + // if we have exceeded max blob data size, we can make a blob with all the data + // *except* this one. + if len(totalBytes)+len(compressedTxListBytes) >= eth.MaxBlobDataSize { + var blob = ð.Blob{} + if err := blob.FromData(totalBytes); err != nil { + return nil, err + } + + blobs = append(blobs, blob) + + // clear the bytes array and increment the blob index for next iterations of the loop + totalBytes = []byte{} + + idx++ + } + + // create a new blobInfos to be attached to a BlockParams after. + blobInfos = append(blobInfos, blobInfo{ + index: idx, + offset: uint32(len(totalBytes)), + length: uint32(len(compressedTxListBytes)), + }) + + totalBytes = append(totalBytes, compressedTxListBytes...) + + // and finally check if we are at the end of the list. + if i == len(opts.BlockOpts)-1 { + // we need to make a final blob with the remaining txList, + // or all the txLists summed together. regardless, there will be a + // blob to make here: either the only blob, or the final blob. + var blob = ð.Blob{} + if err := blob.FromData(totalBytes); err != nil { + return nil, err + } + + blobs = append(blobs, blob) + } + } + + for i, opt := range opts.BlockOpts { + params := &encoding.BlockParamsV2{ + Coinbase: common.HexToAddress(opt.Coinbase), + AnchorBlockId: uint64(opt.L1StateBlockNumber), + Timestamp: opt.Timestamp, + BlobIndex: blobInfos[i].index, + BlobTxListOffset: blobInfos[i].offset, + BlobTxListLength: blobInfos[i].length, + } + + encoded, err := encoding.EncodeBlockParamsOntake(params) + if err != nil { + return nil, err + } + + encodedParams = append(encodedParams, encoded) + } + + emptyTxLists := make([][]byte, 0) + + for i := range encodedParams { + emptyTxLists[i] = []byte{0xff} + } + + data, err := encoding.TaikoL1ABI.Pack("proposeBlocks", encodedParams, emptyTxLists) + if err != nil { + return nil, err + } + + sidecar, blobHashes, err := txmgr.MakeSidecar(blobs) + if err != nil { + return nil, err + } + + blobTx := &types.BlobTx{ + To: b.taikoL1Address, + Value: nil, // maxFee / prover selecting no longer happens + Gas: b.gasLimit, + Data: data, + Sidecar: sidecar, + BlobHashes: blobHashes, + } + + tx := types.NewTx(blobTx) + + return tx, nil +} diff --git a/packages/taiko-client/preconfapi/builder/calldata.go b/packages/taiko-client/preconfapi/builder/calldata.go new file mode 100644 index 0000000000..5385c495fd --- /dev/null +++ b/packages/taiko-client/preconfapi/builder/calldata.go @@ -0,0 +1,129 @@ +package builder + +import ( + "context" + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + + "github.com/taikoxyz/taiko-mono/packages/taiko-client/bindings/encoding" + "github.com/taikoxyz/taiko-mono/packages/taiko-client/internal/utils" +) + +// CalldataTransactionBuilder is responsible for building a TaikoL1.proposeBlock transaction with txList +// bytes saved in blob. +type CalldataTransactionBuilder struct { + taikoL1Address common.Address + gasLimit uint64 +} + +// NewCalldataTransactionBuilder creates a new CalldataTransactionBuilder instance based on giving configurations. +func NewCalldataTransactionBuilder( + taikoL1Address common.Address, + gasLimit uint64, +) *CalldataTransactionBuilder { + return &CalldataTransactionBuilder{ + taikoL1Address, + gasLimit, + } +} + +// BuildBlockUnsigned implements the ProposeBlockTransactionBuilder interface to +// return an unsigned transaction, intended for preconfirmations. +func (b *CalldataTransactionBuilder) BuildBlockUnsigned( + _ context.Context, + opts BuildBlockUnsignedOpts, +) (*types.Transaction, error) { + txListBytes, err := signedTransactionsToTxListBytes(opts.SignedTransactions) + if err != nil { + return nil, err + } + + compressedTxListBytes, err := utils.Compress(txListBytes) + if err != nil { + return nil, err + } + + // ABI encode the TaikoL1.proposeBlock parameters. + encodedParams, err := encoding.EncodeBlockParamsOntake(&encoding.BlockParamsV2{ + Coinbase: common.HexToAddress(opts.Coinbase), + AnchorBlockId: uint64(opts.L1StateBlockNumber), + Timestamp: opts.Timestamp, + }) + if err != nil { + return nil, err + } + + data, err := encoding.TaikoL1ABI.Pack("proposeBlockV2", encodedParams, compressedTxListBytes) + if err != nil { + return nil, err + } + + // Create the transaction + tx := types.NewTransaction( + 0, + b.taikoL1Address, + nil, + b.gasLimit, + big.NewInt(0), + data, + ) + + return tx, nil +} + +// BuildBlockUnsigned implements the ProposeBlockTransactionBuilder interface to +// return an unsigned transaction for a tx with multiple blocks, +// intended for preconfirmations. +func (b *CalldataTransactionBuilder) BuildBlocksUnsigned( + _ context.Context, + opts BuildBlocksUnsignedOpts, +) (*types.Transaction, error) { + encodedParams := make([][]byte, 0) + + txLists := make([][]byte, 0) + + for _, opt := range opts.BlockOpts { + txListBytes, err := signedTransactionsToTxListBytes(opt.SignedTransactions) + if err != nil { + return nil, err + } + + compressedTxListBytes, err := utils.Compress(txListBytes) + if err != nil { + return nil, err + } + + // ABI encode the TaikoL1.proposeBlock parameters. + encoded, err := encoding.EncodeBlockParamsOntake(&encoding.BlockParamsV2{ + Coinbase: common.HexToAddress(opt.Coinbase), + AnchorBlockId: uint64(opt.L1StateBlockNumber), + Timestamp: opt.Timestamp, + }) + if err != nil { + return nil, err + } + + encodedParams = append(encodedParams, encoded) + + txLists = append(txLists, compressedTxListBytes) + } + + data, err := encoding.TaikoL1ABI.Pack("proposeBlocks", encodedParams, txLists) + if err != nil { + return nil, err + } + + // Create the transaction + tx := types.NewTransaction( + 0, + b.taikoL1Address, + nil, + b.gasLimit, + big.NewInt(0), + data, + ) + + return tx, nil +} diff --git a/packages/taiko-client/preconfapi/builder/interface.go b/packages/taiko-client/preconfapi/builder/interface.go new file mode 100644 index 0000000000..29385c0db6 --- /dev/null +++ b/packages/taiko-client/preconfapi/builder/interface.go @@ -0,0 +1,58 @@ +package builder + +import ( + "context" + "encoding/hex" + "strings" + + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/rlp" +) + +type BuildBlocksUnsignedOpts struct { + BlockOpts []BuildBlockUnsignedOpts +} +type BuildBlockUnsignedOpts struct { + L1StateBlockNumber uint32 + Timestamp uint64 + SignedTransactions []string + Coinbase string +} + +type TxBuilder interface { + BuildBlockUnsigned( + ctx context.Context, + opts BuildBlockUnsignedOpts, + ) (*types.Transaction, error) + BuildBlocksUnsigned( + ctx context.Context, + opts BuildBlocksUnsignedOpts, + ) (*types.Transaction, error) +} + +func signedTransactionsToTxListBytes(txs []string) ([]byte, error) { + var transactions types.Transactions + + for _, signedTxHex := range txs { + signedTxHex = strings.TrimPrefix(signedTxHex, "0x") + + rlpEncodedBytes, err := hex.DecodeString(signedTxHex) + if err != nil { + return nil, err + } + + var tx types.Transaction + if err := rlp.DecodeBytes(rlpEncodedBytes, &tx); err != nil { + return nil, err + } + + transactions = append(transactions, &tx) + } + + txListBytes, err := rlp.EncodeToBytes(transactions) + if err != nil { + return nil, err + } + + return txListBytes, nil +} diff --git a/packages/taiko-client/preconfapi/config.go b/packages/taiko-client/preconfapi/config.go new file mode 100644 index 0000000000..d73e2c520e --- /dev/null +++ b/packages/taiko-client/preconfapi/config.go @@ -0,0 +1,45 @@ +package preconfapi + +import ( + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/urfave/cli/v2" + + "github.com/taikoxyz/taiko-mono/packages/taiko-client/cmd/flags" + "github.com/taikoxyz/taiko-mono/packages/taiko-client/pkg/rpc" +) + +type Config struct { + *rpc.ClientConfig + TaikoL1Address common.Address + BlobAllowed bool + HTTPPort uint64 + ProposeBlockTxGasLimit uint64 + PollingInterval time.Duration + L2HTTPEndpoint string + DBPath string + CORSOrigins []string +} + +// NewConfigFromCliContext initializes a Config instance from +// command line flags. +func NewConfigFromCliContext(c *cli.Context) (*Config, error) { + return &Config{ + TaikoL1Address: common.HexToAddress(c.String(flags.TaikoL1Address.Name)), + BlobAllowed: c.Bool(flags.BlobAllowed.Name), + HTTPPort: c.Uint64(flags.PreconfAPIHTTPServerPort.Name), + ProposeBlockTxGasLimit: c.Uint64(flags.TxGasLimit.Name), + PollingInterval: c.Duration(flags.PollingInterval.Name), + L2HTTPEndpoint: c.String(flags.L2HTTPEndpoint.Name), + DBPath: c.String(flags.DBPath.Name), + CORSOrigins: c.StringSlice(flags.CORSOrigins.Name), + ClientConfig: &rpc.ClientConfig{ + L1Endpoint: c.String(flags.L1WSEndpoint.Name), + L2Endpoint: c.String(flags.L2HTTPEndpoint.Name), + TaikoL1Address: common.HexToAddress(c.String(flags.TaikoL1Address.Name)), + TaikoL2Address: common.HexToAddress(c.String(flags.TaikoL2Address.Name)), + Timeout: c.Duration(flags.RPCTimeout.Name), + }, + }, nil +} diff --git a/packages/taiko-client/preconfapi/model/transaction.go b/packages/taiko-client/preconfapi/model/transaction.go new file mode 100644 index 0000000000..c4a3252155 --- /dev/null +++ b/packages/taiko-client/preconfapi/model/transaction.go @@ -0,0 +1,118 @@ +package model + +type Transaction struct { + To *AddressParam `json:"to"` + CreatedContract *AddressParam `json:"created_contract"` + Hash string `json:"hash"` + Result string `json:"result"` + Confirmations int `json:"confirmations"` + Status *string `json:"status"` + Block *int `json:"block"` + Timestamp *string `json:"timestamp"` + ConfirmationDuration []int `json:"confirmation_duration"` + From AddressParam `json:"from"` + Value string `json:"value"` + Fee Fee `json:"fee"` + GasPrice string `json:"gas_price"` + Type *int `json:"type"` + GasUsed *uint64 `json:"gas_used"` + GasLimit uint64 `json:"gas_limit"` + MaxFeePerGas *string `json:"max_fee_per_gas"` + MaxPriorityFeePerGas *string `json:"max_priority_fee_per_gas"` + PriorityFee *string `json:"priority_fee"` + BaseFeePerGas *string `json:"base_fee_per_gas"` + TxBurntFee *string `json:"tx_burnt_fee"` + Nonce int `json:"nonce"` + Position *uint `json:"position"` + RevertReason *TransactionRevertReason `json:"revert_reason"` + RawInput string `json:"raw_input"` + DecodedInput *DecodedInput `json:"decoded_input"` + TokenTransfers *[]TokenTransfer `json:"token_transfers"` + TokenTransfersOverflow bool `json:"token_transfers_overflow"` + ExchangeRate string `json:"exchange_rate"` + Method *string `json:"method"` + TxTypes []TransactionType `json:"tx_types"` + TxTag *string `json:"tx_tag"` + Actions []TxAction `json:"actions"` + L1Fee *string `json:"l1_fee"` + L1FeeScalar *string `json:"l1_fee_scalar"` + L1GasPrice *string `json:"l1_gas_price"` + L1GasUsed *string `json:"l1_gas_used"` + HasErrorInInternalTxs *bool `json:"has_error_in_internal_txs"` +} + +type TransactionRevertReason struct { + Raw string `json:"raw"` +} + +type Fee struct { + Type string `json:"type"` + Value string `json:"value"` +} + +type TransactionType string + +const ( + TxTypeTokenTransfer TransactionType = "token_transfer" + TxTypeContractCreation TransactionType = "contract_creation" + TxTypeContractCall TransactionType = "contract_call" + TxTypeTokenCreation TransactionType = "token_creation" + TxTypeCoinTransfer TransactionType = "coin_transfer" +) + +type AddressParam struct { + UserTags + Hash string `json:"hash"` + ImplementationName *string `json:"implementation_name"` + Name *string `json:"name"` + IsContract bool `json:"is_contract"` + IsVerified *bool `json:"is_verified"` +} + +type DecodedInput struct { + // Define fields as needed +} + +type TxAction struct { + // Define fields as needed +} + +type UserTags struct { + // Define fields as needed +} + +type TokenTransfer struct { + Token TokenInfo `json:"token"` + Total TokenTotal `json:"total"` + Type string `json:"type"` + TxHash string `json:"tx_hash"` + From AddressParam `json:"from"` + To AddressParam `json:"to"` + Timestamp string `json:"timestamp"` + BlockHash string `json:"block_hash"` + LogIndex string `json:"log_index"` + Method *string `json:"method,omitempty"` +} + +type TokenInfo struct { + Type string `json:"type"` + // Add other fields as necessary +} + +type TokenTotal struct { + Erc20TotalPayload *Erc20TotalPayload `json:"erc20_total_payload,omitempty"` + Erc721TotalPayload *Erc721TotalPayload `json:"erc721_total_payload,omitempty"` + Erc1155TotalPayload *Erc1155TotalPayload `json:"erc1155_total_payload,omitempty"` +} + +type Erc20TotalPayload struct { + // Define fields as necessary +} + +type Erc721TotalPayload struct { + // Define fields as necessary +} + +type Erc1155TotalPayload struct { + // Define fields as necessary +} diff --git a/packages/taiko-client/preconfapi/preconfapi.go b/packages/taiko-client/preconfapi/preconfapi.go new file mode 100644 index 0000000000..32e41844e4 --- /dev/null +++ b/packages/taiko-client/preconfapi/preconfapi.go @@ -0,0 +1,317 @@ +package preconfapi + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "math/big" + "net/http" + "strconv" + "sync" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/ethclient" + "github.com/ethereum/go-ethereum/log" + "github.com/urfave/cli/v2" + + anchortxconstructor "github.com/taikoxyz/taiko-mono/packages/taiko-client/driver/anchor_tx_constructor" + "github.com/taikoxyz/taiko-mono/packages/taiko-client/pkg/rpc" + "github.com/taikoxyz/taiko-mono/packages/taiko-client/preconfapi/builder" + "github.com/taikoxyz/taiko-mono/packages/taiko-client/preconfapi/model" + "github.com/taikoxyz/taiko-mono/packages/taiko-client/preconfapi/server" + + badger "github.com/dgraph-io/badger/v4" +) + +type PreconfAPI struct { + cfg *Config + server *server.PreconfAPIServer + wg *sync.WaitGroup + ctx context.Context + ethclient *ethclient.Client + latestSeenBlockNumber uint64 + chainID *big.Int + db *badger.DB +} + +// InitFromCli New initializes the given proposer instance based on the command line flags. +func (p *PreconfAPI) InitFromCli(ctx context.Context, c *cli.Context) error { + cfg, err := NewConfigFromCliContext(c) + if err != nil { + return err + } + + return p.InitFromConfig(ctx, cfg) +} + +func (p *PreconfAPI) InitFromConfig(ctx context.Context, cfg *Config) (err error) { + txBuilders := make(map[string]builder.TxBuilder) + txBuilders["blob"] = builder.NewBlobTransactionBuilder( + cfg.TaikoL1Address, + cfg.ProposeBlockTxGasLimit, + ) + + txBuilders["calldata"] = builder.NewCalldataTransactionBuilder( + cfg.TaikoL1Address, + cfg.ProposeBlockTxGasLimit, + ) + + p.cfg = cfg + p.wg = &sync.WaitGroup{} + p.ctx = ctx + + p.ethclient, err = ethclient.DialContext(ctx, cfg.L2HTTPEndpoint) + if err != nil { + return err + } + + // get latest block number from L2 + p.latestSeenBlockNumber, err = p.ethclient.BlockNumber(ctx) + if err != nil { + return err + } + + p.chainID, err = p.ethclient.ChainID(ctx) + if err != nil { + return err + } + + p.db, err = badger.Open(badger.DefaultOptions(p.cfg.DBPath)) + if err != nil { + return err + } + + rpcClient, err := rpc.NewClient(ctx, cfg.ClientConfig) + if err != nil { + return err + } + + anchor, err := anchortxconstructor.New(rpcClient) + if err != nil { + return err + } + + if p.server, err = server.New(&server.NewPreconfAPIServerOpts{ + TxBuilders: txBuilders, + DB: p.db, + CORSOrigins: p.cfg.CORSOrigins, + Anchor: anchor, + }); err != nil { + return err + } + + return nil +} + +func (p *PreconfAPI) Start() error { + p.wg.Add(1) + go p.pollLoop(p.ctx) + + go func() { + if err := p.server.Start(fmt.Sprintf(":%v", p.cfg.HTTPPort)); !errors.Is(err, http.ErrServerClosed) { + log.Crit("Failed to start http server", "error", err) + } + }() + + return nil +} + +// Close closes the proposer instance. +func (p *PreconfAPI) Close(ctx context.Context) { + if err := p.server.Shutdown(ctx); err != nil { + log.Error("Failed to shut down prover server", "error", err) + } + + p.db.Close() + + p.wg.Wait() +} + +func (p *PreconfAPI) Name() string { + return "preconfapi" +} + +func (p *PreconfAPI) pollLoop(ctx context.Context) { + defer p.wg.Done() + + t := time.NewTicker(p.cfg.PollingInterval) + + for { + select { + case <-ctx.Done(): + return + case <-t.C: + if err := p.poll(); err != nil { + log.Error("Failed to poll", "error", err) + } + } + } +} + +func (p *PreconfAPI) poll() error { + // get latest block number from L2 + latestBlockNumber, err := p.ethclient.BlockNumber(context.Background()) + if err != nil { + return err + } + + if latestBlockNumber < p.latestSeenBlockNumber { + return nil + } + + for i := p.latestSeenBlockNumber; i <= latestBlockNumber; i++ { + var result json.RawMessage + err := p.ethclient.Client().CallContext( + context.Background(), + &result, + "eth_getBlockByNumber", + fmt.Sprintf("0x%v", new(big.Int).SetUint64(latestBlockNumber).Text(16)), + true, + ) + if err != nil { + return err + } + + var preconfBlock CustomBlock + err = json.Unmarshal(result, &preconfBlock) + if err != nil { + return err + } + + for _, tx := range preconfBlock.Transactions { + if err := p.db.Update(func(txn *badger.Txn) error { + _, err := txn.Get(common.HexToHash(tx.Hash).Bytes()) + if err == nil { + return nil + } + + receipt, err := p.ethclient.TransactionReceipt(p.ctx, common.Hash(common.HexToHash(tx.Hash).Bytes())) + if err != nil { + return err + } + + fromAddress := model.AddressParam{ + Hash: tx.From, + IsContract: false, + } + + toAddress := &model.AddressParam{ + Hash: "", + IsContract: false, + } + if tx.To != nil { + to := tx.To + toAddress.Hash = *to + code, err := p.ethclient.CodeAt(p.ctx, common.HexToAddress(*to), nil) + if err != nil { + return err + } + + toAddress.IsContract = len(code) > 2 + } + + status := "ok" + if receipt.Status != 1 { + status = "error" + } + + maxFeePerGas := tx.MaxFeePerGas + + maxPrioFee := tx.MaxPriorityFeePerGas + + ts := time.Now().UTC().Format("2006-01-02T15:04:05.000000Z") + + txT, err := strconv.ParseInt(tx.Type, 0, 64) + if err != nil { + return err + } + + txType := int(txT) + + nonceT, err := strconv.ParseInt(tx.Nonce, 0, 64) + if err != nil { + return err + } + + nonce := int(nonceT) + + txTypes := []model.TransactionType{} + if toAddress.IsContract { + txTypes = append(txTypes, model.TxTypeContractCall) + } else { + txTypes = append(txTypes, model.TxTypeCoinTransfer) + } + + if tx.To == nil { + txTypes = append(txTypes, model.TxTypeContractCreation) + } + + baseFee := "1" // TODO + + gpT, err := strconv.ParseInt(tx.GasPrice, 0, 64) + if err != nil { + return err + } + + gas, err := strconv.ParseInt(tx.Gas, 0, 64) + if err != nil { + return err + } + + modelTx := model.Transaction{ + Actions: make([]model.TxAction, 0), + From: fromAddress, + To: toAddress, + Fee: model.Fee{ + Type: "actual", + Value: new(big.Int).Mul(new(big.Int).SetInt64(gpT), new(big.Int).SetUint64(receipt.GasUsed)).String(), + }, + Hash: tx.Hash, + Value: tx.Value, + GasPrice: tx.GasPrice, + Nonce: nonce, + Block: new(int), + GasLimit: uint64(gas), + TxTypes: txTypes, + Status: &status, + Confirmations: int(latestBlockNumber) - int(receipt.BlockNumber.Uint64()), + GasUsed: &receipt.GasUsed, + MaxFeePerGas: &maxFeePerGas, + MaxPriorityFeePerGas: &maxPrioFee, + BaseFeePerGas: &baseFee, + Position: &receipt.TransactionIndex, + Timestamp: &ts, + ConfirmationDuration: []int{}, + RawInput: tx.Input, + Type: &txType, + // Add other fields as necessary + } + + *modelTx.Block = int(latestBlockNumber) + + marshalled, err := json.Marshal(modelTx) + if err != nil { + return err + } + + err = txn.Set(common.HexToHash(tx.Hash).Bytes(), marshalled) + if err != nil { + log.Error("Failed to set transaction in BadgerDB", "error", err) + return err + } + + log.Info("saved tx", "hash", common.HexToHash(tx.Hash)) + + return nil + }); err != nil { + return err + } + } + } + + p.latestSeenBlockNumber = latestBlockNumber + + return nil +} diff --git a/packages/taiko-client/preconfapi/server/api.go b/packages/taiko-client/preconfapi/server/api.go new file mode 100644 index 0000000000..f8e7498f16 --- /dev/null +++ b/packages/taiko-client/preconfapi/server/api.go @@ -0,0 +1,183 @@ +package server + +import ( + "bytes" + "encoding/hex" + "encoding/json" + "net/http" + + badger "github.com/dgraph-io/badger/v4" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/rlp" + "github.com/labstack/echo/v4" + + "github.com/taikoxyz/taiko-mono/packages/taiko-client/preconfapi/builder" + "github.com/taikoxyz/taiko-mono/packages/taiko-client/preconfapi/model" +) + +// @title Taiko Preconf Server API +// @version 1.0 +// @termsOfService http://swagger.io/terms/ + +// @contact.name API Support +// @contact.url https://community.taiko.xyz/ +// @contact.email info@taiko.xyz + +// @license.name MIT +// @license.url https://github.com/taikoxyz/taiko-mono/packages/taiko-client/blob/main/LICENSE.md + +type buildBlocksRequest struct { + BlockParams []buildBlockParams `json:"blockParams"` + CalldataOrBlob string `json:"calldataOrBlob"` +} + +type buildBlockRequest struct { + buildBlockParams + CalldataOrBlob string `json:"calldataOrBlob"` +} +type buildBlockParams struct { + L1StateBlockNumber uint32 `json:"l1StateBlockNumber"` + Timestamp uint64 `json:"timestamp"` + SignedTransactions []string `json:"signedTransactions"` + Coinbase string `json:"coinbase"` +} + +type buildBlockResponse struct { + RLPEncodedTx string `json:"rlpEncodedTx"` +} + +// BuildBlock handles a query to build blocks according to our protocol, given the inputs, +// and returns an unsigned transaction to `taikol1.ProposeBlock`. +// +// @Summary Build builds and return an unsigned `taikol1.ProposeBlock` transaction +// @ID build +// @Accept json +// @Produce json +// @Success 200 {object} buildBlockResponse +// @Router /block/build [post] +func (s *PreconfAPIServer) BuildBlock(c echo.Context) error { + req := &buildBlockRequest{} + if err := c.Bind(req); err != nil { + return c.JSON(http.StatusUnprocessableEntity, err) + } + + // default to blob + t := req.CalldataOrBlob + if t == "" { + t = "blob" + } + + tx, err := s.txBuilders[t].BuildBlockUnsigned( + c.Request().Context(), + builder.BuildBlockUnsignedOpts{ + L1StateBlockNumber: req.L1StateBlockNumber, + Timestamp: req.Timestamp, + SignedTransactions: req.SignedTransactions, + Coinbase: req.Coinbase, + }, + ) + if err != nil { + return c.JSON(http.StatusInternalServerError, err) + } + + // RLP encode the transaction + var rlpEncodedTx bytes.Buffer + if err := rlp.Encode(&rlpEncodedTx, tx); err != nil { + return c.JSON(http.StatusInternalServerError, err) + } + + hexEncodedTx := hex.EncodeToString(rlpEncodedTx.Bytes()) + + return c.JSON(http.StatusOK, buildBlockResponse{RLPEncodedTx: hexEncodedTx}) +} + +// BuildBlocks handles a query to build blocks according to our protocol, given the inputs, +// and returns an unsigned transaction to `taikol1.ProposeBlocks`. +// +// @Summary Build builds and return an unsigned `taikol1.ProposeBlocks` transaction +// @ID build +// @Accept json +// @Produce json +// @Success 200 {object} buildBlockResponse +// @Router /blocks/build [post] +func (s *PreconfAPIServer) BuildBlocks(c echo.Context) error { + req := &buildBlocksRequest{} + if err := c.Bind(req); err != nil { + return c.JSON(http.StatusUnprocessableEntity, err) + } + + // default to blob + t := req.CalldataOrBlob + if t == "" { + t = "blob" + } + + tx, err := s.txBuilders[t].BuildBlocksUnsigned( + c.Request().Context(), + paramsToOpts(req.BlockParams), + ) + if err != nil { + return c.JSON(http.StatusInternalServerError, err) + } + + // RLP encode the transaction + var rlpEncodedTx bytes.Buffer + if err := rlp.Encode(&rlpEncodedTx, tx); err != nil { + return c.JSON(http.StatusInternalServerError, err) + } + + hexEncodedTx := hex.EncodeToString(rlpEncodedTx.Bytes()) + + return c.JSON(http.StatusOK, buildBlockResponse{RLPEncodedTx: hexEncodedTx}) +} + +func (s *PreconfAPIServer) GetTransactionByHash(c echo.Context) error { + hash := c.Param("hash") + + // get from badger db + tx := &model.Transaction{} + + if err := s.db.View(func(txn *badger.Txn) error { + item, err := txn.Get(common.HexToHash(hash).Bytes()) + if err != nil { + return err + } + + if item == nil { + return nil + } + + if err := item.Value(func(val []byte) error { + return json.Unmarshal(val, tx) + }); err != nil { + return err + } + + return nil + }); err != nil { + return c.JSON(http.StatusNotFound, nil) + } + + if tx == nil { + return c.JSON(http.StatusNotFound, nil) + } + + return c.JSON(http.StatusOK, tx) +} + +func paramsToOpts(params []buildBlockParams) builder.BuildBlocksUnsignedOpts { + opts := make([]builder.BuildBlockUnsignedOpts, 0) + + for _, p := range params { + opts = append(opts, builder.BuildBlockUnsignedOpts{ + L1StateBlockNumber: p.L1StateBlockNumber, + Timestamp: p.Timestamp, + SignedTransactions: p.SignedTransactions, + Coinbase: p.Coinbase, + }) + } + + return builder.BuildBlocksUnsignedOpts{ + BlockOpts: opts, + } +} diff --git a/packages/taiko-client/preconfapi/server/server.go b/packages/taiko-client/preconfapi/server/server.go new file mode 100644 index 0000000000..4f097fb494 --- /dev/null +++ b/packages/taiko-client/preconfapi/server/server.go @@ -0,0 +1,110 @@ +package server + +import ( + "context" + "net/http" + "os" + + badger "github.com/dgraph-io/badger/v4" + "github.com/labstack/echo/v4" + "github.com/labstack/echo/v4/middleware" + + anchorTxConstructor "github.com/taikoxyz/taiko-mono/packages/taiko-client/driver/anchor_tx_constructor" + "github.com/taikoxyz/taiko-mono/packages/taiko-client/preconfapi/builder" +) + +// @title Taiko Proposer Server API +// @version 1.0 +// @termsOfService http://swagger.io/terms/ + +// @contact.name API Support +// @contact.url https://community.taiko.xyz/ +// @contact.email info@taiko.xyz + +// @license.name MIT +// @license.url https://github.com/taikoxyz/taiko-mono/blob/main/LICENSE.md +// PreconfAPIServer represents a proposer server instance. +type PreconfAPIServer struct { + db *badger.DB + echo *echo.Echo + txBuilders map[string]builder.TxBuilder // calldata or blob map to txbuilder type + anchor *anchorTxConstructor.AnchorTxConstructor +} + +// NewPreconfAPIServerOpts contains all configurations for creating a prover server instance. +type NewPreconfAPIServerOpts struct { + TxBuilders map[string]builder.TxBuilder + DB *badger.DB + CORSOrigins []string + Anchor *anchorTxConstructor.AnchorTxConstructor +} + +// New creates a new prover server instance. +func New(opts *NewPreconfAPIServerOpts) (*PreconfAPIServer, error) { + srv := &PreconfAPIServer{ + echo: echo.New(), + txBuilders: opts.TxBuilders, + db: opts.DB, + anchor: opts.Anchor, + } + + srv.echo.HideBanner = true + srv.configureMiddleware(opts.CORSOrigins) + srv.configureRoutes() + + return srv, nil +} + +// Start starts the HTTP server. +func (s *PreconfAPIServer) Start(address string) error { + return s.echo.Start(address) +} + +// Shutdown shuts down the HTTP server. +func (s *PreconfAPIServer) Shutdown(ctx context.Context) error { + return s.echo.Shutdown(ctx) +} + +// Health endpoints for probes. +func (s *PreconfAPIServer) Health(c echo.Context) error { + return c.NoContent(http.StatusOK) +} + +// LogSkipper implements the `middleware.Skipper` interface. +func LogSkipper(c echo.Context) bool { + switch c.Request().URL.Path { + case "/healthz": + return true + default: + return true + } +} + +// configureMiddleware configures the server middlewares. +func (s *PreconfAPIServer) configureMiddleware(corsOrigins []string) { + s.echo.Use(middleware.RequestID()) + + s.echo.Use(middleware.LoggerWithConfig(middleware.LoggerConfig{ + Skipper: LogSkipper, + Format: `{"time":"${time_rfc3339_nano}","level":"INFO","message":{"id":"${id}","remote_ip":"${remote_ip}",` + + `"host":"${host}","method":"${method}","uri":"${uri}","user_agent":"${user_agent}",` + + `"response_status":${status},"error":"${error}","latency":${latency},"latency_human":"${latency_human}",` + + `"bytes_in":${bytes_in},"bytes_out":${bytes_out}}}` + "\n", + Output: os.Stdout, + })) + + // Add CORS middleware + s.echo.Use(middleware.CORSWithConfig(middleware.CORSConfig{ + AllowOrigins: corsOrigins, + AllowCredentials: true, + })) +} + +// configureRoutes contains all routes which will be used by prover server. +func (s *PreconfAPIServer) configureRoutes() { + s.echo.GET("/", s.Health) + s.echo.GET("/healthz", s.Health) + s.echo.POST("/blocks/build", s.BuildBlocks) + s.echo.POST("/block/build", s.BuildBlock) + s.echo.GET("/tx/:hash", s.GetTransactionByHash) +} diff --git a/packages/taiko-client/preconfapi/server/server_test.go b/packages/taiko-client/preconfapi/server/server_test.go new file mode 100644 index 0000000000..c08aa9f826 --- /dev/null +++ b/packages/taiko-client/preconfapi/server/server_test.go @@ -0,0 +1,88 @@ +package server + +import ( + "context" + "fmt" + "net/http" + "net/http/httptest" + "net/url" + "testing" + + "github.com/cenkalti/backoff/v4" + "github.com/ethereum/go-ethereum/log" + "github.com/go-resty/resty/v2" + "github.com/phayes/freeport" + "github.com/stretchr/testify/suite" +) + +type PreconfAPIServerTestSuite struct { + suite.Suite + s *PreconfAPIServer + testServer *httptest.Server +} + +func (s *PreconfAPIServerTestSuite) SetupTest() { + p, err := New(&NewPreconfAPIServerOpts{}) + s.Nil(err) + + p.echo.HideBanner = true + p.configureMiddleware([]string{"*"}) + p.configureRoutes() + s.s = p + s.testServer = httptest.NewServer(p.echo) +} + +func (s *PreconfAPIServerTestSuite) TestHealth() { + resp := s.sendReq("/healthz") + defer resp.Body.Close() + s.Equal(http.StatusOK, resp.StatusCode) +} + +func (s *PreconfAPIServerTestSuite) TestRoot() { + resp := s.sendReq("/") + defer resp.Body.Close() + s.Equal(http.StatusOK, resp.StatusCode) +} + +func (s *PreconfAPIServerTestSuite) TestStartShutdown() { + port, err := freeport.GetFreePort() + s.Nil(err) + + url, err := url.Parse(fmt.Sprintf("http://localhost:%v", port)) + s.Nil(err) + + go func() { + if err := s.s.Start(fmt.Sprintf(":%v", port)); err != nil { + log.Error("Failed to start prover server", "error", err) + } + }() + + // Wait till the server fully started. + s.Nil(backoff.Retry(func() error { + res, err := resty.New().R().Get(url.String() + "/healthz") + if err != nil { + return err + } + if !res.IsSuccess() { + return fmt.Errorf("invalid response status code: %d", res.StatusCode()) + } + + return nil + }, backoff.NewExponentialBackOff())) + + s.Nil(s.s.Shutdown(context.Background())) +} + +func (s *PreconfAPIServerTestSuite) TearDownTest() { + s.testServer.Close() +} + +func TestPreconfAPIServerTestSuite(t *testing.T) { + suite.Run(t, new(PreconfAPIServerTestSuite)) +} + +func (s *PreconfAPIServerTestSuite) sendReq(path string) *http.Response { + res, err := http.Get(s.testServer.URL + path) + s.Nil(err) + return res +} diff --git a/packages/taiko-client/preconfapi/types.go b/packages/taiko-client/preconfapi/types.go new file mode 100644 index 0000000000..43b825e288 --- /dev/null +++ b/packages/taiko-client/preconfapi/types.go @@ -0,0 +1,50 @@ +package preconfapi + +type CustomTransaction struct { + BlockHash string `json:"blockHash"` + BlockNumber string `json:"blockNumber"` + From string `json:"from"` + Gas string `json:"gas"` + GasPrice string `json:"gasPrice"` + MaxFeePerGas string `json:"maxFeePerGas"` + MaxPriorityFeePerGas string `json:"maxPriorityFeePerGas"` + Hash string `json:"hash"` + Input string `json:"input"` + Nonce string `json:"nonce"` + To *string `json:"to"` + TransactionIndex string `json:"transactionIndex"` + Value string `json:"value"` + Type string `json:"type"` + AccessList []interface{} `json:"accessList"` + ChainID string `json:"chainId"` + V string `json:"v"` + R string `json:"r"` + S string `json:"s"` + YParity string `json:"yParity"` +} + +type CustomBlock struct { + BaseFeePerGas string `json:"baseFeePerGas"` + Difficulty string `json:"difficulty"` + ExtraData string `json:"extraData"` + GasLimit string `json:"gasLimit"` + GasUsed string `json:"gasUsed"` + Hash string `json:"hash"` + LogsBloom string `json:"logsBloom"` + Miner string `json:"miner"` + MixHash string `json:"mixHash"` + Nonce string `json:"nonce"` + Number string `json:"number"` + ParentHash string `json:"parentHash"` + ReceiptsRoot string `json:"receiptsRoot"` + Sha3Uncles string `json:"sha3Uncles"` + Size string `json:"size"` + StateRoot string `json:"stateRoot"` + Timestamp string `json:"timestamp"` + TotalDifficulty string `json:"totalDifficulty"` + Transactions []CustomTransaction `json:"transactions"` + TransactionsRoot string `json:"transactionsRoot"` + Uncles []interface{} `json:"uncles"` + Withdrawals []interface{} `json:"withdrawals"` + WithdrawalsRoot string `json:"withdrawalsRoot"` +}