0 txs
0 calls
constructor
No constructor.
functions
admin
viewfunction admin() view returns (address)
getDefaultConnection
viewfunction getDefaultConnection(string _nid) view returns (address)
getFee
viewfunction getFee(string _net, bool _rollback, string[] _sources) view returns (uint256)
getFee
viewfunction getFee(string _net, bool _rollback) view returns (uint256)
getNetworkAddress
viewfunction getNetworkAddress() view returns (string)
getNetworkId
viewfunction getNetworkId() view returns (string)
getProtocolFee
viewfunction getProtocolFee() view returns (uint256)
getProtocolFeeHandler
viewfunction getProtocolFeeHandler() view returns (address)
verifySuccess
viewfunction verifySuccess(uint256 _sn) view returns (bool)
executeCall
nonpayablefunction executeCall(uint256 _reqId, bytes _data)
executeMessage
nonpayablefunction executeMessage(address to, string from, bytes data, string[] protocols)
executeRollback
nonpayablefunction executeRollback(uint256 _sn)
handleBTPError
nonpayablefunction handleBTPError(string _src, string _svc, uint256 _sn, uint256 _code, string _msg)
handleBTPMessage
nonpayablefunction handleBTPMessage(string _from, string _svc, uint256 _sn, bytes _msg)
handleError
nonpayablefunction handleError(uint256 _sn)
handleMessage
nonpayablefunction handleMessage(string _from, bytes _msg)
initialize
nonpayablefunction initialize(string _nid)
sendCall
payablefunction sendCall(string _to, bytes _data) payable returns (uint256)
sendCallMessage
payablefunction sendCallMessage(string _to, bytes _data, bytes _rollback, string[] sources, string[] destinations) payable returns (uint256)
sendCallMessage
payablefunction sendCallMessage(string _to, bytes _data, bytes _rollback) payable returns (uint256)
setAdmin
nonpayablefunction setAdmin(address _address)
setDefaultConnection
nonpayablefunction setDefaultConnection(string _nid, address connection)
setProtocolFee
nonpayablefunction setProtocolFee(uint256 _value)
setProtocolFeeHandler
nonpayablefunction setProtocolFeeHandler(address _addr)
events
CallExecuted
event CallExecuted(uint256 indexed _reqId, int256 _code, string _msg)
CallMessage
event CallMessage(string indexed _from, string indexed _to, uint256 indexed _sn, uint256 _reqId, bytes _data)
CallMessageSent
event CallMessageSent(address indexed _from, string indexed _to, uint256 indexed _sn)
Initialized
event Initialized(uint64 version)
ResponseMessage
event ResponseMessage(uint256 indexed _sn, int256 _code)
RollbackExecuted
event RollbackExecuted(uint256 indexed _sn)
RollbackMessage
event RollbackMessage(uint256 indexed _sn)
errors
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
creation bytecode
0x608060405234801561001057600080fd5b50615e4280620000216000396000f3fe60806040526004361061014b5760003560e01c80637d4c4f4a116100b6578063bbc22efd1161006f578063bbc22efd14610389578063bda8ce21146103a9578063ec05386b146103c9578063edc6afff14610409578063f62d18881461041c578063f851a4401461043c57600080fd5b80637d4c4f4a146102e15780638ef378b8146103015780639e553a4f14610314578063a5a4103114610334578063b070f9e514610349578063b70eeb8d1461036957600080fd5b806339c5f3fc1161010857806339c5f3fc1461022a578063502bf8e01461024c57806364f037571461026c5780636bf459cb1461028c578063704b6c02146102a1578063787dce3d146102c157600080fd5b80630a823dea1461015057806317fd7a33146101725780632a84e1b0146101985780632eb71414146101b8578063304a70b5146101ea578063313bf3981461020a575b600080fd5b34801561015c57600080fd5b5061017061016b366004614dde565b610451565b005b610185610180366004614f3f565b61046e565b6040519081526020015b60405180910390f35b3480156101a457600080fd5b506101706101b3366004614fa2565b6106f5565b3480156101c457600080fd5b50600d546001600160a01b03165b6040516001600160a01b03909116815260200161018f565b3480156101f657600080fd5b5061018561020536600461506f565b610a61565b34801561021657600080fd5b506101706102253660046150f9565b610b18565b34801561023657600080fd5b5061023f610c28565b60405161018f91906151e1565b34801561025857600080fd5b506101706102673660046151f4565b610cba565b34801561027857600080fd5b5061017061028736600461520f565b610d5b565b34801561029857600080fd5b5061023f610dd7565b3480156102ad57600080fd5b506101706102bc3660046151f4565b610de6565b3480156102cd57600080fd5b506101706102dc366004614fa2565b610e87565b3480156102ed57600080fd5b506101856102fc36600461525c565b610ec4565b61018561030f3660046152a0565b610f06565b34801561032057600080fd5b506101d261032f36600461531d565b610f22565b34801561034057600080fd5b50600454610185565b34801561035557600080fd5b50610170610364366004614fa2565b610f53565b34801561037557600080fd5b50610170610384366004615351565b610f89565b34801561039557600080fd5b506101706103a43660046153f4565b610fa8565b3480156103b557600080fd5b506101706103c436600461545f565b6111f0565b3480156103d557600080fd5b506103f96103e4366004614fa2565b60009081526007602052604090205460ff1690565b604051901515815260200161018f565b61018561041736600461549b565b611812565b34801561042857600080fd5b5061017061043736600461531d565b61182d565b34801561044857600080fd5b506101d261197b565b61045b868661198a565b61046484610f53565b5050505050505050565b6000338161047b84611a2c565b90506000610487611b0e565b90506000610496828885611b29565b905060006105486104af866001600160a01b0316611d0d565b600080546104bc9061556c565b80601f01602080910402602001604051908101604052809291908181526020018280546104e89061556c565b80156105355780601f1061050a57610100808354040283529160200191610535565b820191906000526020600020905b81548152906001019060200180831161051857829003601f168201915b5050505050611d1890919063ffffffff16565b90506000806105568a611d5f565b9150915060006040518060c0016040528085815260200183815260200187815260200188600001518152602001866020015181526020018860600151815250905060006105a282611d9b565b9050610800815111156105f25760405162461bcd60e51b815260206004820152601360248201527213585e11185d1854da5e99515e18d959591959606a1b60448201526064015b60405180910390fd5b610600848960400151611ea0565b801561060b57508551155b15610669576011600061061e8282614c97565b61062c600183016000614c97565b6002820160009055600382016000905560048201600090556005820160006106549190614cd1565b506010905061066382826155e8565b50610699565b855160009061067957600061067b565b875b905061068f896040015186600184866120ea565b6106976121fb565b505b868c6040516106a891906156a7565b604051908190038120906001600160a01b038c16907f69e53ea70fdf945f6d035b3979748bc999151691fb1dc69d66f8017f8840ae2890600090a450949750505050505050505b92915050565b6000818152600e60209081526040808320815160a0810190925280546001600160a01b0316825260018101805492939192918401916107339061556c565b80601f016020809104026020016040519081016040528092919081815260200182805461075f9061556c565b80156107ac5780601f10610781576101008083540402835291602001916107ac565b820191906000526020600020905b81548152906001019060200180831161078f57829003601f168201915b5050505050815260200160028201805480602002602001604051908101604052809291908181526020016000905b828210156108865783829060005260206000200180546107f99061556c565b80601f01602080910402602001604051908101604052809291908181526020018280546108259061556c565b80156108725780601f1061084757610100808354040283529160200191610872565b820191906000526020600020905b81548152906001019060200180831161085557829003601f168201915b5050505050815260200190600101906107da565b50505050815260200160038201805461089e9061556c565b80601f01602080910402602001604051908101604052809291908181526020018280546108ca9061556c565b80156109175780601f106108ec57610100808354040283529160200191610917565b820191906000526020600020905b8154815290600101906020018083116108fa57829003601f168201915b50505091835250506004919091015460ff16151560209091015280519091506001600160a01b031661097e5760405162461bcd60e51b815260206004820152601060248201526f496e76616c696453657269616c4e756d60801b60448201526064016105e9565b80608001516109c45760405162461bcd60e51b8152602060048201526012602482015271149bdb1b189858dad39bdd115b98589b195960721b60448201526064016105e9565b6109cd8261227f565b8051606082015160408084015190516306277e7360e31b8152309363313bf39893610a009391926001929060040161571d565b600060405180830381600087803b158015610a1a57600080fd5b505af1158015610a2e573d6000803e3d6000fd5b50506040518492507f08f0ac7aef6da8bbe43bee8b1444a1883f1359566618bc379ce5abba448838379150600090a25050565b600454600090610a718584611ea0565b8015610a7b575083155b15610a8a576000915050610b11565b60005b8351811015610b0d576000610aeb6040518060400160405280600f81526020016e125b1b1959d85b105c99dd5b595b9d608a1b815250868481518110610ad557610ad56157e5565b60200260200101516122d490919063ffffffff16565b9050610af88188886125a6565b610b029084615811565b925050600101610a8d565b5090505b9392505050565b333014610b565760405162461bcd60e51b815260206004820152600c60248201526b13db9b1e525b9d195c9b985b60a21b60448201526064016105e9565b8051600003610bc4576040516325ecfc2360e11b81526001600160a01b03851690634bd9f84690610b8d9086908690600401615824565b600060405180830381600087803b158015610ba757600080fd5b505af1158015610bbb573d6000803e3d6000fd5b50505050610c22565b604051635d6a16f560e01b81526001600160a01b03851690635d6a16f590610bf490869086908690600401615849565b600060405180830381600087803b158015610c0e57600080fd5b505af1158015610464573d6000803e3d6000fd5b50505050565b606060008054610c379061556c565b80601f0160208091040260200160405190810160405280929190818152602001828054610c639061556c565b8015610cb05780601f10610c8557610100808354040283529160200191610cb0565b820191906000526020600020905b815481529060010190602001808311610c9357829003601f168201915b5050505050905090565b610cc2612620565b6001600160a01b0316336001600160a01b031614610cf25760405162461bcd60e51b81526004016105e990615882565b6001600160a01b038116610d395760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69644164647265737360901b60448201526064016105e9565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b610d63612620565b6001600160a01b0316336001600160a01b031614610d935760405162461bcd60e51b81526004016105e990615882565b80600a83604051610da491906156a7565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b03199092169190911790555050565b606060018054610c379061556c565b610dee612620565b6001600160a01b0316336001600160a01b031614610e1e5760405162461bcd60e51b81526004016105e990615882565b6001600160a01b038116610e655760405162461bcd60e51b815260206004820152600e60248201526d496e76616c69644164647265737360901b60448201526064016105e9565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b610e8f612620565b6001600160a01b0316336001600160a01b031614610ebf5760405162461bcd60e51b81526004016105e990615882565b600455565b6000610ef9600a84604051610ed991906156a7565b908152604051908190036020019020546001600160a01b031684846125a6565b600454610b119190615811565b6000606080610f188686868585612653565b9695505050505050565b6000600a82604051610f3491906156a7565b908152604051908190036020019020546001600160a01b031692915050565b610f866040518060600160405280838152602001600081526020016040518060200160405280600081525081525061271d565b50565b610f93858561198a565b610f9f87878484610fa8565b50505050505050565b61107560008054610fb89061556c565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe49061556c565b80156110315780601f1061100657610100808354040283529160200191611031565b820191906000526020600020905b81548152906001019060200180831161101457829003601f168201915b505050505085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293925050612d549050565b156110b75760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a590813995d1ddbdc9ac8125160721b60448201526064016105e9565b60006110f883838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612db192505050565b80519091506000190161114d5761114885858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506020830151612e12565b6111e9565b80516001190161116c5761114861116782602001516131b8565b61271d565b60006111cd604051806040016040528060018152602001602960f81b8152506111c761119b8560000151613250565b60408051808201909152600f81526e0aadcd6dcdeeedc9ae6cea8f2e0ca5608b1b6020820152906133c0565b906133c0565b90508060405162461bcd60e51b81526004016105e991906151e1565b5050505050565b6000828152600f6020526040808220815160c081019092528054829082906112179061556c565b80601f01602080910402602001604051908101604052809291908181526020018280546112439061556c565b80156112905780601f1061126557610100808354040283529160200191611290565b820191906000526020600020905b81548152906001019060200180831161127357829003601f168201915b505050505081526020016001820180546112a99061556c565b80601f01602080910402602001604051908101604052809291908181526020018280546112d59061556c565b80156113225780601f106112f757610100808354040283529160200191611322565b820191906000526020600020905b81548152906001019060200180831161130557829003601f168201915b5050505050815260200160028201548152602001600382015481526020016004820154815260200160058201805480602002602001604051908101604052809291908181526020016000905b8282101561141a57838290600052602060002001805461138d9061556c565b80601f01602080910402602001604051908101604052809291908181526020018280546113b99061556c565b80156114065780601f106113db57610100808354040283529160200191611406565b820191906000526020600020905b8154815290600101906020018083116113e957829003601f168201915b50505050508152602001906001019061136e565b505050915250508051519091506114665760405162461bcd60e51b815260206004820152601060248201526f125b9d985b1a5914995c5d595cdd125960821b60448201526064016105e9565b815160208301206080820151146114b25760405162461bcd60e51b815260206004820152601060248201526f088c2e8c290c2e6d09ad2e6dac2e8c6d60831b60448201526064016105e9565b6000838152600f60205260408120906114cb8282614c97565b6114d9600183016000614c97565b6002820160009055600382016000905560048201600090556005820160006115019190614cd1565b505060008160a001519050600061154c6040518060400160405280600f81526020016e125b1b1959d85b105c99dd5b595b9d608a1b81525084602001516122d490919063ffffffff16565b606084015190915061156f576115698582856000015187866133d5565b506111e9565b60028360600151036115db5782516040516306277e7360e31b8152309163313bf398916115a4918591899088906004016158a5565b600060405180830381600087803b1580156115be57600080fd5b505af11580156115d2573d6000803e3d6000fd5b505050506111e9565b60018360600151036117c0578251839060119081906115fa90826155e8565b506020820151600182019061160f90826155e8565b5060408201516002820155606082015160038201556080820151600482015560a08201518051611649916005840191602090910190614cef565b5090505060006116608683866000015188876133d5565b9050601160006116708282614c97565b61167e600183016000614c97565b6002820160009055600382016000905560048201600090556005820160006116a69190614cd1565b505060606000601080546116b99061556c565b90501180156116c85750600182145b1561176857601080546116da9061556c565b80601f01602080910402602001604051908101604052809291908181526020018280546117069061556c565b80156117535780601f1061172857610100808354040283529160200191611753565b820191906000526020600020905b81548152906001019060200180831161173657829003601f168201915b50505050509050601060006117689190614c97565b604080516060810182528682015181526020810184905290810182905285516117b890869061179690613577565b600289604001516000196117aa91906158ef565b6117b38661358d565b6120ea565b5050506111e9565b60405162461bcd60e51b815260206004820152602160248201527f4d6573736167652074797065206973206e6f742079657420737570706f7274656044820152601960fa1b60648201526084016105e9565b60006118218686868686612653565b90505b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03166000811580156118725750825b90506000826001600160401b0316600114801561188e5750303b155b90508115801561189c575080155b156118ba5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156118e457845460ff60401b1916600160401b1785555b600b8054336001600160a01b03199182168117909255600c80549091169091179055600061191287826155e8565b5061191f6104af30611d0d565b60019061192c90826155e8565b50831561197357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6000611985612620565b905090565b6119e782828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260068152657863616c6c4d60d01b602082015292915050612d54565b611a285760405162461bcd60e51b8152602060048201526012602482015271496e76616c6964536572766963654e616d6560701b60448201526064016105e9565b5050565b611a576040518060800160405280600081526020016060815260200160608152602001606081525090565b6000611a6a611a65846135e4565b613611565b90506040518060800160405280611a9a83600081518110611a8d57611a8d6157e5565b6020026020010151613750565b8152602001611ac283600181518110611ab557611ab56157e5565b60200260200101516137f3565b8152602001611aea83600281518110611add57611add6157e5565b60200260200101516138c3565b8152602001611b0583600381518110611add57611add6157e5565b90529392505050565b60006002546001611b1f9190615811565b6002819055919050565b6040805180820190915260008152606060208201528151801580611b4d5750600281145b15611b71575050604080518082019091526000815260208281015190820152610b11565b60018103611cc55760003390506000611b8d8560200151613971565b9050333b611bd35760405162461bcd60e51b8152602060048201526013602482015272526f6c6c6261636b4e6f74506f737369626c6560681b60448201526064016105e9565b60006040518060a00160405280846001600160a01b03168152602001611bf889613577565b81526040888101516020808401919091528581015182840152600060609093018390528b8352600e81529120825181546001600160a01b0319166001600160a01b039091161781559082015191925082916001820190611c5890826155e8565b5060408201518051611c74916002840191602090910190614cef565b5060608201516003820190611c8990826155e8565b50608091909101516004909101805460ff1916911515919091179055506040805180820190915260018152905160208201529250610b11915050565b60405162461bcd60e51b815260206004820152601d60248201527f4d6573736167652074797065206973206e6f7420737570706f7274656400000060448201526064016105e9565b60606106ef826139b6565b606082604051806040016040528060018152602001602f60f81b81525083604051602001611d489392919061591f565b604051602081830303815290604052905092915050565b6060806000611d6d84613b81565b9050611d7b84600083613c24565b611d9185611d8a846001615811565b8751613c24565b9250925050915091565b606080606060005b8460a0015151811015611e2457611dd68560a001518281518110611dc957611dc96157e5565b6020026020010151613ce9565b604051602001611de691906156a7565b60405160208183030381529060405291508282604051602001611e0a929190615962565b60408051601f198184030181529190529250600101611da3565b506000611e348560000151613ce9565b611e418660200151613ce9565b611e4e8760400151613cf4565b611e5b8860600151613d07565b611e688960800151613d15565b611e7188613d6d565b604051602001611e8696959493929190615991565b604051602081830303815290604052905061182481613d6d565b6000611f516040518060200160405280600081525060116000018054611ec59061556c565b80601f0160208091040260200160405190810160405280929190818152602001828054611ef19061556c565b8015611f3e5780601f10611f1357610100808354040283529160200191611f3e565b820191906000526020600020905b815481529060010190602001808311611f2157829003601f168201915b5050505050612d5490919063ffffffff16565b6120e157611ff583611fef60116000018054611f6c9061556c565b80601f0160208091040260200160405190810160405280929190818152602001828054611f989061556c565b8015611fe55780601f10611fba57610100808354040283529160200191611fe5565b820191906000526020600020905b815481529060010190602001808311611fc857829003601f168201915b5050505050613577565b90612d54565b80156120da57506120da6011600501805480602002602001604051908101604052809291908181526020016000905b828210156120d05783829060005260206000200180546120439061556c565b80601f016020809104026020016040519081016040528092919081815260200182805461206f9061556c565b80156120bc5780601f10612091576101008083540402835291602001916120bc565b820191906000526020600020905b81548152906001019060200180831161209f57829003601f168201915b505050505081526020019060010190612024565b5050505083613da3565b90506106ef565b50600092915050565b8451600003612187576000600a8560405161210591906156a7565b908152604051908190036020019020546001600160a01b03169050806121635760405162461bcd60e51b81526020600482015260136024820152722737a232b330bab63a21b7b73732b1ba34b7b760691b60448201526064016105e9565b6000612170828786613e27565b9050612180828288888888613e6a565b50506111e9565b60005b85518110156119735760006121d26040518060400160405280600f81526020016e125b1b1959d85b105c99dd5b595b9d608a1b815250888481518110610ad557610ad56157e5565b905060006121e1828887613e27565b90506121f1828289898989613e6a565b505060010161218a565b60045447908110156122455760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e7442616c616e636560681b60448201526064016105e9565b600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611a28573d6000803e3d6000fd5b6000818152600e6020526040812080546001600160a01b0319168155906122a96001830182614c97565b6122b7600283016000614cd1565b6122c5600383016000614c97565b50600401805460ff1916905550565b81516000908390602a1480156123185750600360fc1b6001600160f81b03191681600081518110612307576123076157e5565b01602001516001600160f81b031916145b80156123525750600f60fb1b6001600160f81b03191681600181518110612341576123416157e5565b01602001516001600160f81b031916145b83906123715760405162461bcd60e51b81526004016105e991906151e1565b5060408051601480825281830190925260009160208201818036833701905050905060008080805b602881101561250157856123ae826002615811565b815181106123be576123be6157e5565b016020015160f81c9350600160308510156123d7575060005b8460ff1660391080156123ed575060418560ff16105b156123f6575060005b8460ff16604610801561240c575060618560ff16105b15612415575060005b8460ff1660661015612425575060005b80612444578860405162461bcd60e51b81526004016105e991906151e1565b60418560ff1610156124595760309250612473565b8460ff166046101561246e5760579250612473565b603792505b61247e600283615a26565b6000036124965761248f8386615a3a565b93506124f8565b6124a08386615a3a565b6124ab856010615a53565b6124b59190615a6f565b60f81b8660026124c6600186615a88565b6124d09190615a9b565b815181106124e0576124e06157e5565b60200101906001600160f81b031916908160001a9053505b50600101612399565b5060008460405160200161251591906156a7565b60408051601f198184030181529190526014810151975090506001600160a01b03871661259a5760025b86518110156125985786818151811061255a5761255a6157e5565b60209101015189906001600160f81b031916600360fc1b1461258f5760405162461bcd60e51b81526004016105e991906151e1565b5060010161253f565b505b50505050505092915050565b604051633ea627a560e11b81526000906001600160a01b03851690637d4c4f4a906125d79086908690600401615aaf565b602060405180830381865afa1580156125f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126189190615ad3565b949350505050565b600c546000906001600160a01b03166126435750600b546001600160a01b031690565b50600c546001600160a01b031690565b6000806126816040518060800160405280600081526020016060815260200160608152602001606081525090565b85516000036126bd5750604080516020808201835288825282516080810184526000815291519082015290810185905260608101849052612704565b600060405180604001604052808981526020018881525090506040518060800160405280600181526020016126f183613f11565b8152602001878152602001868152509150505b6127118861018083613f40565b98975050505050505050565b80516000908152600e60209081526040808320815160a0810190925280546001600160a01b03168252600181018054929391929184019161275d9061556c565b80601f01602080910402602001604051908101604052809291908181526020018280546127899061556c565b80156127d65780601f106127ab576101008083540402835291602001916127d6565b820191906000526020600020905b8154815290600101906020018083116127b957829003601f168201915b5050505050815260200160028201805480602002602001604051908101604052809291908181526020016000905b828210156128b05783829060005260206000200180546128239061556c565b80601f016020809104026020016040519081016040528092919081815260200182805461284f9061556c565b801561289c5780601f106128715761010080835404028352916020019161289c565b820191906000526020600020905b81548152906001019060200180831161287f57829003601f168201915b505050505081526020019060010190612804565b5050505081526020016003820180546128c89061556c565b80601f01602080910402602001604051908101604052809291908181526020018280546128f49061556c565b80156129415780601f1061291657610100808354040283529160200191612941565b820191906000526020600020905b81548152906001019060200180831161292457829003601f168201915b50505091835250506004919091015460ff16151560209091015280519091506001600160a01b03166129ab5760405162461bcd60e51b815260206004820152601360248201527210d85b1b14995c5d595cdd139bdd119bdd5b99606a1b60448201526064016105e9565b60018160400151511115612ae657815160009081526009602052604090206001906129d533611d0d565b6040516129e291906156a7565b908152604051908190036020019020805491151560ff1990921691909117905560005b816040015151811015612a735782516000908152600960205260409081902090830151805183908110612a3a57612a3a6157e5565b6020026020010151604051612a4f91906156a7565b9081526040519081900360200190205460ff16612a6b57505050565b600101612a05565b5060005b816040015151811015612ae05782516000908152600960205260409081902090830151805183908110612aac57612aac6157e5565b6020026020010151604051612ac191906156a7565b908152604051908190036020019020805460ff19169055600101612a77565b50612bb7565b806040015151600103612b6a57612b356040518060400160405280600f81526020016e125b1b1959d85b105c99dd5b595b9d608a1b8152508260400151600081518110610ad557610ad56157e5565b6001600160a01b0316336001600160a01b031614612b655760405162461bcd60e51b81526004016105e990615aec565b612bb7565b600a8160200151604051612b7e91906156a7565b90815260405190819003602001902054336001600160a01b0390911614612bb75760405162461bcd60e51b81526004016105e990615aec565b81516020808401516040519081527fbeacafd006c5e60667f6f04aec3a498f81c8e94142b4e95b5a5a763de43ca0ab910160405180910390a26001826020015103612c47578151612c079061227f565b60408201515115612c2857612c2881612c238460400151614092565b614183565b81516000908152600760205260409020805460ff191660011790555050565b600081606001515111612c8d5760405162461bcd60e51b815260206004820152600e60248201526d4e6f526f6c6c6261636b4461746160901b60448201526064016105e9565b60016080820181905282516000908152600e60209081526040909120835181546001600160a01b0319166001600160a01b03909116178155908301518392820190612cd890826155e8565b5060408201518051612cf4916002840191602090910190614cef565b5060608201516003820190612d0990826155e8565b50608091909101516004909101805460ff191691151591909117905581516040517f38934ab923f985814047679ba041577b8203ddd15fe9910d3fc6a7aa6001e9c790600090a25050565b600081604051602001612d6791906156a7565b6040516020818303038152906040528051906020012083604051602001612d8e91906156a7565b60405160208183030381529060405280519060200120036120e1575060016106ef565b6040805180820190915260008152606060208201526000612dd4611a65846135e4565b90506040518060400160405280612df783600081518110611a8d57611a8d6157e5565b8152602001611b0583600181518110611ab557611ab56157e5565b6000612e1d82614092565b90506000612e2e8260000151613577565b9050612e3a8482612d54565b612e745760405162461bcd60e51b815260206004820152600b60248201526a125b9d985b1a590813925160aa1b60448201526064016105e9565b6080820151805160209091012060a08301515160011015612fb7576000818152600860205260409020600190612ea933611d0d565b604051612eb691906156a7565b908152604051908190036020019020805491151560ff1990921691909117905560005b8360a0015151811015612f4757600082815260086020526040902060a0850151805183908110612f0b57612f0b6157e5565b6020026020010151604051612f2091906156a7565b9081526040519081900360200190205460ff16612f3f57505050505050565b600101612ed9565b5060005b8360a0015151811015612fb157600082815260086020526040902060a0850151805183908110612f7d57612f7d6157e5565b6020026020010151604051612f9291906156a7565b908152604051908190036020019020805460ff19169055600101612f4b565b50613084565b8260a001515160010361303b576130066040518060400160405280600f81526020016e125b1b1959d85b105c99dd5b595b9d608a1b8152508460a00151600081518110610ad557610ad56157e5565b6001600160a01b0316336001600160a01b0316146130365760405162461bcd60e51b81526004016105e990615aec565b613084565b600a8260405161304b91906156a7565b90815260405190819003602001902054336001600160a01b03909116146130845760405162461bcd60e51b81526004016105e990615aec565b600061308e614307565b6040805160c08101825286518152602080880151818301528783015182840152606080890151908301526080820186905260a080890151908301526000848152600f909152919091208151929350909181906130ea90826155e8565b50602082015160018201906130ff90826155e8565b5060408201516002820155606082015160038201556080820151600482015560a08201518051613139916005840191602090910190614cef565b509050508360400151846020015160405161315491906156a7565b6040519081900381208651909161316b91906156a7565b60405180910390207f2cbc78425621c181f9f8a25fc06e44a0ac2b67cd6a31f8ed7918934187f8cc598488608001516040516131a8929190615b13565b60405180910390a4505050505050565b6131dc60405180606001604052806000815260200160008152602001606081525090565b60006131ea611a65846135e4565b9050604051806060016040528061321a8360008151811061320d5761320d6157e5565b6020026020010151614322565b815260200161323583600181518110611a8d57611a8d6157e5565b8152602001611b0583600281518110611ab557611ab56157e5565b6060816000036132775750506040805180820190915260018152600360fc1b602082015290565b60408051602080825281830190925260009160208201818036833701905050905060005b8315613302576132ac600a85615a26565b6132b7906030615811565b60f81b8282815181106132cc576132cc6157e5565b60200101906001600160f81b031916908160001a9053506132ee600a85615a9b565b9350806132fa81615b2c565b91505061329b565b60008161330e81615b45565b92506001600160401b0381111561332757613327614e8a565b6040519080825280601f01601f191660200182016040528015613351576020820181803683370190505b50905060005b81518110156133b7578361336b8285615a88565b8151811061337b5761337b6157e5565b602001015160f81c60f81b828281518110613398576133986157e5565b60200101906001600160f81b031916908160001a905350600101613357565b50949350505050565b60608282604051602001611d48929190615962565b6040516306277e7360e31b8152600090309063313bf398906134019088908890889088906004016158a5565b600060405180830381600087803b15801561341b57600080fd5b505af192505050801561342c575060015b61352557613438615b5c565b806308c379a00361349c575061344c615b78565b80613457575061349e565b867fc7391e04887f8b3c16fa20877e028e8163139a478c8447e7d449eba1905caa5160008360405161348a929190615b13565b60405180910390a26000915050611824565b505b3d8080156134c8576040519150601f19603f3d011682016040523d82523d6000602084013e6134cd565b606091505b50867fc7391e04887f8b3c16fa20877e028e8163139a478c8447e7d449eba1905caa51600060405161348a918152604060208201819052600c908201526b3ab735b737bbb722b93937b960a11b606082015260800190565b857fc7391e04887f8b3c16fa20877e028e8163139a478c8447e7d449eba1905caa51600160405161356791815260406020820181905260009082015260600190565b60405180910390a2506001611824565b60606106ef82600061358885613b81565b613c24565b6060600061359e8360000151613cf4565b6135ab8460200151613d07565b6135b88560400151613d15565b6040516020016135ca9392919061591f565b6040516020818303038152906040529050610b1181613d6d565b60408051808201825260008082526020918201528151808301909252825182529182019181019190915290565b606061361c826143d4565b6136595760405162461bcd60e51b815260206004820152600e60248201526d135d5cdd0818994818481b1a5cdd60921b60448201526064016105e9565b600061366483614405565b90506000816001600160401b0381111561368057613680614e8a565b6040519080825280602002602001820160405280156136c557816020015b604080518082019091526000808252602082015281526020019060019003908161369e5790505b50905060006136d7856020015161448a565b85602001516136e69190615811565b90506000805b84811015613745576136fd8361450b565b9150604051806040016040528083815260200184815250848281518110613726576137266157e5565b602090810291909101015261373b8284615811565b92506001016136ec565b509195945050505050565b600081516021116137985760405162461bcd60e51b815260206004820152601260248201527124b73b30b634b21034b73a10373ab6b132b960711b60448201526064016105e9565b60006137a7836020015161448a565b905060008184600001516137bb9190615a88565b90506000808386602001516137d09190615811565b90508051915060208310156133b75781836020036008021d915050949350505050565b80516060906138355760405162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b60448201526064016105e9565b6000613844836020015161448a565b905060008184600001516138589190615a88565b90506000816001600160401b0381111561387457613874614e8a565b6040519080825280601f01601f19166020018201604052801561389e576020820181803683370190505b50905060008160200190506133b78487602001516138bc9190615811565b82856145b4565b606060006138d083613611565b9050600081516001600160401b038111156138ed576138ed614e8a565b60405190808252806020026020018201604052801561392057816020015b606081526020019060019003908161390b5790505b50905060005b825181101561396957613944838281518110611ab557611ab56157e5565b828281518110613956576139566157e5565b6020908102919091010152600101613926565b509392505050565b60408051808201909152606080825260208201526000613993611a65846135e4565b90506040518060400160405280612df783600081518110611ab557611ab56157e5565b604080516028808252606082810190935283831b9160009160208201818036833701905050905060008060008060008060006139f18b614637565b905060005b6014811015613b5057613a0a816013615a88565b613a15906008615c01565b613a20906002615cfc565b613a2e9060608c901c615a9b565b9750613a3b601089615d08565b9650613a48876010615a53565b613a529089615a3a565b955081613a60826002615c01565b60288110613a7057613a706157e5565b6020020151945081613a83826002615c01565b613a8e906001615811565b60288110613a9e57613a9e6157e5565b60200201519350613aaf87866147be565b9250613abb8388615a6f565b60f81b89613aca836002615c01565b81518110613ada57613ada6157e5565b60200101906001600160f81b031916908160001a905350613afb86856147be565b9250613b078387615a6f565b60f81b89613b16836002615c01565b613b21906001615811565b81518110613b3157613b316157e5565b60200101906001600160f81b031916908160001a9053506001016139f6565b5087604051602001613b629190615d2a565b6040516020818303038152906040529950505050505050505050919050565b600081815b8151811015613be1576040805180820190915260018152602f60f81b60209091018190528251839083908110613bbe57613bbe6157e5565b01602001516001600160f81b03191603613bd9579392505050565b600101613b86565b6040805180820182526015815274696e76616c69644e6574776f726b4164647265737360581b6020820152905162461bcd60e51b81526105e991906004016151e1565b6060836000613c338585615a88565b6001600160401b03811115613c4a57613c4a614e8a565b6040519080825280601f01601f191660200182016040528015613c74576020820181803683370190505b5090508460005b8251811015613cdd578382613c8f81615b2c565b935081518110613ca157613ca16157e5565b602001015160f81c60f81b838281518110613cbe57613cbe6157e5565b60200101906001600160f81b031916908160001a905350600101613c7b565b50909695505050505050565b60606106ef82613d15565b60606106ef613d02836147eb565b613d15565b60606106ef613d028361489d565b60608082516001148015613d435750608083600081518110613d3957613d396157e5565b016020015160f81c105b15613d4f5750816106ef565b613d5b83516080614914565b83604051602001611d48929190615962565b6060613d7b825160c0614914565b82604051602001613d8d929190615962565b6040516020818303038152906040529050919050565b60008151835114613db6575060006106ef565b60005b8351811015613e1d57613e07838281518110613dd757613dd76157e5565b6020026020010151858381518110613df157613df16157e5565b6020026020010151612d5490919063ffffffff16565b613e155760009150506106ef565b600101613db9565b5060019392505050565b600080821215613e3957506000610b11565b604051633ea627a560e11b81526001600160a01b03851690637d4c4f4a906125d79086906000871390600401615aaf565b856001600160a01b031663522a901e8686604051806040016040528060068152602001657863616c6c4d60d01b81525086613eb860405180604001604052808b815260200189815250614aca565b6040518663ffffffff1660e01b8152600401613ed79493929190615d54565b6000604051808303818588803b158015613ef057600080fd5b505af1158015613f04573d6000803e3d6000fd5b5050505050505050505050565b60606000613f228360000151613d15565b613f2f8460200151613d15565b6040516020016135ca929190615962565b606080606060005b846040015151811015613fbc57613f6e85604001518281518110611dc957611dc96157e5565b604051602001613f7e91906156a7565b60405160208183030381529060405291508282604051602001613fa2929190615962565b60408051601f198184030181529190529250600101613f48565b50606060005b85606001515181101561403657613fe886606001518281518110611dc957611dc96157e5565b604051602001613ff891906156a7565b6040516020818303038152906040529250818360405160200161401c929190615962565b60408051601f198184030181529190529150600101613fc2565b5060006140468660000151613d07565b6140538760200151613d15565b61405c86613d6d565b61406585613d6d565b6040516020016140789493929190615d93565b6040516020818303038152906040529050610f1881613d6d565b6140cb6040518060c001604052806060815260200160608152602001600081526020016000815260200160608152602001606081525090565b60006140d9611a65846135e4565b90506040518060c001604052806140fc83600081518110611ab557611ab56157e5565b815260200161411783600181518110611ab557611ab56157e5565b81526020016141328360028151811061320d5761320d6157e5565b815260200161414d83600381518110611a8d57611a8d6157e5565b815260200161416883600481518110611ab557611ab56157e5565b8152602001611b0583600581518110611add57611add6157e5565b61419e6141938260000151613577565b602084015190612d54565b6141da5760405162461bcd60e51b815260206004820152600d60248201526c496e76616c6964205265706c7960981b60448201526064016105e9565b60006141e4614307565b9050816040015182602001516040516141fd91906156a7565b6040519081900381208451909161421491906156a7565b60405180910390207f2cbc78425621c181f9f8a25fc06e44a0ac2b67cd6a31f8ed7918934187f8cc59848660800151604051614251929190615b13565b60405180910390a46040805160c0810182528351815260208085015181830152848301518284015260608086015190830152608080860151805190830120908301528583015160a08301526000848152600f90915291909120815181906142b890826155e8565b50602082015160018201906142cd90826155e8565b5060408201516002820155606082015160038201556080820151600482015560a08201518051611973916005840191602090910190614cef565b600060035460016143189190615811565b6003819055919050565b80516000901580159061433757508151602110155b6143795760405162461bcd60e51b815260206004820152601360248201527224b73b30b634b2103ab4b73a10373ab6b132b960691b60448201526064016105e9565b6000614388836020015161448a565b9050600081846000015161439c9190615a88565b90506000808386602001516143b19190615811565b90508051915060208310156133b757506020919091036101000a90049392505050565b805160009081036143e757506000919050565b6020820151805160001a9060c0821015613e1d575060009392505050565b8051600090810361441857506000919050565b600080614428846020015161448a565b84602001516144379190615811565b905060008460000151856020015161444f9190615811565b90505b80821015614481576144638261450b565b61446d9083615811565b91508261447981615b2c565b935050614452565b50909392505050565b8051600090811a60808110156144a35750600092915050565b60b88110806144be575060c081108015906144be575060f881105b156144cc5750600192915050565b60c08110156144f9576144e1600160b8615a3a565b6144ee9060ff1682615a88565b610b11906001615811565b6144e1600160f8615a3a565b50919050565b80516000908190811a608081101561452657600191506145ad565b60b881101561454c5761453a608082615a88565b614545906001615811565b91506145ad565b60c08110156145795760b78103600185019450806020036101000a855104600182018101935050506145ad565b60f881101561458d5761453a60c082615a88565b60f78103600185019450806020036101000a855104600182018101935050505b5092915050565b806000036145c157505050565b602081106145f957825182526145d8602084615811565b92506145e5602083615811565b91506145f2602082615a88565b90506145c1565b8015614632576000600161460e836020615a88565b61461a90610100615cfc565b6146249190615a88565b845184518216911916178352505b505050565b61463f614d45565b606082901b600061464f82614adb565b60405160200161465f91906156a7565b60405160208183030381529060405280519060200120905060008060008060005b60148110156147b257601087826014811061469d5761469d6157e5565b6146a99291901a615dea565b93506010848883601481106146c0576146c06157e5565b6146cc9291901a615a3a565b6146d69190615d08565b945060108682602081106146ec576146ec6157e5565b6146f89291901a615dea565b915060108287836020811061470f5761470f6157e5565b61471b9291901a615a3a565b6147259190615d08565b925060098560ff1611801561473d575060078360ff16115b88614749836002615c01565b60288110614759576147596157e5565b91151560209092020152600960ff8516118015614779575060078260ff16115b88614785836002615c01565b614790906001615811565b602881106147a0576147a06157e5565b91151560209092020152600101614680565b50505050505050919050565b6000600a8360ff1610156147d4575060306106ef565b81156147e2575060376106ef565b50605792915050565b6060816000036148285760015b6040519080825280601f01601f1916602001820160405280156145ad576020820181803683370190505092915050565b608060015b60208110156148575781841015614848576126188482614c2b565b60089190911b9060010161482d565b5080831015614884576040805160208101859052015b604051602081830303815290604052915050919050565b604051600060208201526021810184905260410161486d565b6060816000036148ae5760016147f8565b608060801960015b60208110156148ef5782851280156148cd57508185135b156148dc576118248582614c2b565b600892831b929190911b906001016148b6565b5060408051602081018690520160405160208183030381529060405292505050919050565b606080603884101561497e57604080516001808252818301909252906020820181803683370190505090506149498385615811565b601f1a60f81b81600081518110614962576149626157e5565b60200101906001600160f81b031916908160001a905350610b11565b600060015b61498d8187615a9b565b156149b3578161499c81615b2c565b92506149ac905061010082615c01565b9050614983565b6149be826001615811565b6001600160401b038111156149d5576149d5614e8a565b6040519080825280601f01601f1916602001820160405280156149ff576020820181803683370190505b509250614a0c8583615811565b614a17906037615811565b601f1a60f81b83600081518110614a3057614a306157e5565b60200101906001600160f81b031916908160001a905350600190505b818111614ac157610100614a608284615a88565b614a6c90610100615cfc565b614a769088615a9b565b614a809190615a26565b601f1a60f81b838281518110614a9857614a986157e5565b60200101906001600160f81b031916908160001a90535080614ab981615b2c565b915050614a4c565b50509392505050565b60606000613f228360000151613d07565b60408051602880825260608281019093526000919060208201818036833701905050905060008080805b6014811015614c2057614b19816013615a88565b614b24906008615c01565b614b2f906002615cfc565b614b3d90606089901c615a9b565b9350614b4a601085615d08565b9250614b57836010615a53565b614b619085615a3a565b9150600a8360ff1610614b75576057614b78565b60305b614b829084615a6f565b60f81b85614b91836002615c01565b81518110614ba157614ba16157e5565b60200101906001600160f81b031916908160001a905350600a8260ff1610614bca576057614bcd565b60305b614bd79083615a6f565b60f81b85614be6836002615c01565b614bf1906001615811565b81518110614c0157614c016157e5565b60200101906001600160f81b031916908160001a905350600101614b05565b509295945050505050565b60606000826001600160401b03811115614c4757614c47614e8a565b6040519080825280601f01601f191660200182016040528015614c71576020820181803683370190505b50905060208101836020035b6020811015614ac15785811a825360019182019101614c7d565b508054614ca39061556c565b6000825580601f10614cb3575050565b601f016020900490600052602060002090810190610f869190614d64565b5080546000825590600052602060002090810190610f869190614d79565b828054828255906000526020600020908101928215614d35579160200282015b82811115614d355782518290614d2590826155e8565b5091602001919060010190614d0f565b50614d41929150614d79565b5090565b6040518061050001604052806028906020820280368337509192915050565b5b80821115614d415760008155600101614d65565b80821115614d41576000614d8d8282614c97565b50600101614d79565b60008083601f840112614da857600080fd5b5081356001600160401b03811115614dbf57600080fd5b602083019150836020828501011115614dd757600080fd5b9250929050565b60008060008060008060008060a0898b031215614dfa57600080fd5b88356001600160401b0380821115614e1157600080fd5b614e1d8c838d01614d96565b909a50985060208b0135915080821115614e3657600080fd5b614e428c838d01614d96565b909850965060408b0135955060608b0135945060808b0135915080821115614e6957600080fd5b50614e768b828c01614d96565b999c989b5096995094979396929594505050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b0381118282101715614ec557614ec5614e8a565b6040525050565b600082601f830112614edd57600080fd5b81356001600160401b03811115614ef657614ef6614e8a565b604051614f0d601f8301601f191660200182614ea0565b818152846020838601011115614f2257600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215614f5257600080fd5b82356001600160401b0380821115614f6957600080fd5b614f7586838701614ecc565b93506020850135915080821115614f8b57600080fd5b50614f9885828601614ecc565b9150509250929050565b600060208284031215614fb457600080fd5b5035919050565b80358015158114614fcb57600080fd5b919050565b600082601f830112614fe157600080fd5b813560206001600160401b0380831115614ffd57614ffd614e8a565b8260051b60405161501084830182614ea0565b9384528581018301938381018886111561502957600080fd5b84880192505b85831015615063578235848111156150475760008081fd5b6150558a87838c0101614ecc565b82525091840191840161502f565b50979650505050505050565b60008060006060848603121561508457600080fd5b83356001600160401b038082111561509b57600080fd5b6150a787838801614ecc565b94506150b560208701614fbb565b935060408601359150808211156150cb57600080fd5b506150d886828701614fd0565b9150509250925092565b80356001600160a01b0381168114614fcb57600080fd5b6000806000806080858703121561510f57600080fd5b615118856150e2565b935060208501356001600160401b038082111561513457600080fd5b61514088838901614ecc565b9450604087013591508082111561515657600080fd5b61516288838901614ecc565b9350606087013591508082111561517857600080fd5b5061518587828801614fd0565b91505092959194509250565b60005b838110156151ac578181015183820152602001615194565b50506000910152565b600081518084526151cd816020860160208601615191565b601f01601f19169290920160200192915050565b602081526000610b1160208301846151b5565b60006020828403121561520657600080fd5b610b11826150e2565b6000806040838503121561522257600080fd5b82356001600160401b0381111561523857600080fd5b61524485828601614ecc565b925050615253602084016150e2565b90509250929050565b6000806040838503121561526f57600080fd5b82356001600160401b0381111561528557600080fd5b61529185828601614ecc565b92505061525360208401614fbb565b6000806000606084860312156152b557600080fd5b83356001600160401b03808211156152cc57600080fd5b6152d887838801614ecc565b945060208601359150808211156152ee57600080fd5b6152fa87838801614ecc565b9350604086013591508082111561531057600080fd5b506150d886828701614ecc565b60006020828403121561532f57600080fd5b81356001600160401b0381111561534557600080fd5b61261884828501614ecc565b60008060008060008060006080888a03121561536c57600080fd5b87356001600160401b038082111561538357600080fd5b61538f8b838c01614d96565b909950975060208a01359150808211156153a857600080fd5b6153b48b838c01614d96565b909750955060408a0135945060608a01359150808211156153d457600080fd5b506153e18a828b01614d96565b989b979a50959850939692959293505050565b6000806000806040858703121561540a57600080fd5b84356001600160401b038082111561542157600080fd5b61542d88838901614d96565b9096509450602087013591508082111561544657600080fd5b5061545387828801614d96565b95989497509550505050565b6000806040838503121561547257600080fd5b8235915060208301356001600160401b0381111561548f57600080fd5b614f9885828601614ecc565b600080600080600060a086880312156154b357600080fd5b85356001600160401b03808211156154ca57600080fd5b6154d689838a01614ecc565b965060208801359150808211156154ec57600080fd5b6154f889838a01614ecc565b9550604088013591508082111561550e57600080fd5b61551a89838a01614ecc565b9450606088013591508082111561553057600080fd5b61553c89838a01614fd0565b9350608088013591508082111561555257600080fd5b5061555f88828901614fd0565b9150509295509295909350565b600181811c9082168061558057607f821691505b60208210810361450557634e487b7160e01b600052602260045260246000fd5b601f821115614632576000816000526020600020601f850160051c810160208610156155c95750805b601f850160051c820191505b81811015611973578281556001016155d5565b81516001600160401b0381111561560157615601614e8a565b6156158161560f845461556c565b846155a0565b602080601f83116001811461564a57600084156156325750858301515b600019600386901b1c1916600185901b178555611973565b600085815260208120601f198616915b828110156156795788860151825594840194600190910190840161565a565b50858210156156975787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082516156b9818460208701615191565b9190910192915050565b60008282518085526020808601955060208260051b8401016020860160005b8481101561571057601f198684030189526156fe8383516151b5565b988401989250908301906001016156e2565b5090979650505050505050565b60018060a01b03851681526000602060806020840152600086546157408161556c565b80608087015260a0600180841660008114615762576001811461577e576157ae565b60ff19851660a08a015260a084151560051b8a010195506157ae565b8b600052602060002060005b858110156157a55781548b820186015290830190880161578a565b8a0160a0019650505b505050505083810360408501526157c581876151b5565b91505082810360608401526157da81856156c3565b979650505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156106ef576106ef6157fb565b60408152600061583760408301856151b5565b828103602084015261182481856151b5565b60608152600061585c60608301866151b5565b828103602084015261586e81866151b5565b90508281036040840152610f1881856156c3565b60208082526009908201526827b7363ca0b236b4b760b91b604082015260600190565b6001600160a01b03851681526080602082018190526000906158c9908301866151b5565b82810360408401526158db81866151b5565b905082810360608401526157da81856156c3565b80820260008212600160ff1b8414161561590b5761590b6157fb565b81810583148215176106ef576106ef6157fb565b60008451615931818460208901615191565b845190830190615945818360208901615191565b8451910190615958818360208801615191565b0195945050505050565b60008351615974818460208801615191565b835190830190615988818360208801615191565b01949350505050565b6000875160206159a48285838d01615191565b8851918401916159b78184848d01615191565b88519201916159c98184848c01615191565b87519201916159db8184848b01615191565b86519201916159ed8184848a01615191565b85519201916159ff8184848901615191565b919091019998505050505050505050565b634e487b7160e01b600052601260045260246000fd5b600082615a3557615a35615a10565b500690565b60ff82811682821603908111156106ef576106ef6157fb565b60ff81811683821602908116908181146145ad576145ad6157fb565b60ff81811683821601908111156106ef576106ef6157fb565b818103818111156106ef576106ef6157fb565b600082615aaa57615aaa615a10565b500490565b604081526000615ac260408301856151b5565b905082151560208301529392505050565b600060208284031215615ae557600080fd5b5051919050565b6020808252600d908201526c139bdd105d5d1a1bdc9a5e9959609a1b604082015260600190565b82815260406020820152600061261860408301846151b5565b600060018201615b3e57615b3e6157fb565b5060010190565b600081615b5457615b546157fb565b506000190190565b600060033d1115615b755760046000803e5060005160e01c5b90565b600060443d1015615b865790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715615bb557505050505090565b8285019150815181811115615bcd5750505050505090565b843d8701016020828501011115615be75750505050505090565b615bf660208286010187614ea0565b509095945050505050565b80820281158282048414176106ef576106ef6157fb565b600181815b80851115615c53578160001904821115615c3957615c396157fb565b80851615615c4657918102915b93841c9390800290615c1d565b509250929050565b600082615c6a575060016106ef565b81615c77575060006106ef565b8160018114615c8d5760028114615c9757615cb3565b60019150506106ef565b60ff841115615ca857615ca86157fb565b50506001821b6106ef565b5060208310610133831016604e8410600b8410161715615cd6575081810a6106ef565b615ce08383615c18565b8060001904821115615cf457615cf46157fb565b029392505050565b6000610b118383615c5b565b600060ff831680615d1b57615d1b615a10565b8060ff84160491505092915050565b61060f60f31b815260008251615d47816002850160208701615191565b9190910160020192915050565b608081526000615d6760808301876151b5565b8281036020840152615d7981876151b5565b905084604084015282810360608401526157da81856151b5565b60008551615da5818460208a01615191565b855190830190615db9818360208a01615191565b8551910190615dcc818360208901615191565b8451910190615ddf818360208801615191565b019695505050505050565b600060ff831680615dfd57615dfd615a10565b8060ff8416069150509291505056fea26469706673582212203113952f22d5dac74b12d5d8cf77ca5834468d958318d6fc6bf40a42f9179ee264736f6c63430008170033