diff --git a/CHANGELOG.md b/CHANGELOG.md index 18a80a058..588623825 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ Documents changes that result in: ## Unreleased +- [#1150](https://github.com/raiden-network/raiden-contracts/pull/1150) Use different message ID for chnanelClose() and updateNonClosingBalanceProof() - [#1148](https://github.com/raiden-network/raiden-contracts/pull/1148) Add TokenNetworkRegistry's address to MonitoringService's constructor arguments - [#PR ID] Revert the upgrade web3.py and other dependencies - [#1151](https://github.com/raiden-network/raiden-contracts/pull/1151) OneToN doesn't work for service providers not registered in ServiceRegistry diff --git a/raiden_contracts/data/contracts.json b/raiden_contracts/data/contracts.json index fe94d4142..559d7e4cc 100644 --- a/raiden_contracts/data/contracts.json +++ b/raiden_contracts/data/contracts.json @@ -1066,9 +1066,9 @@ "type": "event" } ], - "bin": "60806040523480156200001157600080fd5b506040516080806200265c833981018060405260808110156200003357600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151562000108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f546f6b656e2061742061646472657373207a65726f000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515620001ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5365727669636552656769737472792061742061646472657373207a65726f0081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151562000254576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5544432061742061646472657373207a65726f0000000000000000000000000081525060200191505060405180910390fd5b6200026e84620006d6640100000000026401000000009004565b1515620002e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f746f6b656e20686173206e6f20636f646500000000000000000000000000000081525060200191505060405180910390fd5b620002fd83620006d6640100000000026401000000009004565b151562000372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f53657276696365526567697374727920686173206e6f20636f6465000000000081525060200191505060405180910390fd5b6200038c82620006d6640100000000026401000000009004565b151562000401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f55444320686173206e6f20636f6465000000000000000000000000000000000081525060200191505060405180910390fd5b6200041b81620006d6640100000000026401000000009004565b151562000490576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f546f6b656e4e6574776f726b526567697374727920686173206e6f20636f646581525060200191505060405180910390fd5b836000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156200061957600080fd5b505afa1580156200062e573d6000803e3d6000fd5b505050506040513d60208110156200064557600080fd5b8101908080519060200190929190505050111515620006cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f546f6b656e2077697468207a65726f20746f74616c20737570706c790000000081525060200191505060405180910390fd5b50505050620006e9565b600080823b905060008111915050919050565b611f6380620006f96000396000f3fe608060405234801561001057600080fd5b50600436106100a5576000357c01000000000000000000000000000000000000000000000000000000009004806381c6dac21161007857806381c6dac2146102a2578063b4238f4a146102ec578063d3b6c08014610336578063fc0c546a146105a8576100a5565b80630e7dfb73146100aa578063637d89d4146101505780636766923e1461019a5780637709bc7814610246575b600080fd5b610136600480360360808110156100c057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105f2565b604051808215151515815260200191505060405180910390f35b610158610ca0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610230600480360360a08110156101b057600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610cc6565b6040518082815260200191505060405180910390f35b6102886004803603602081101561025c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ead565b604051808215151515815260200191505060405180910390f35b6102aa610ec0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102f4610ee6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105a6600480360361014081101561034d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156103c857600080fd5b8201836020820111156103da57600080fd5b803590602001918460018302840111640100000000831117156103fc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561045f57600080fd5b82018360208201111561047157600080fd5b8035906020019184600183028401116401000000008311171561049357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561052057600080fd5b82018360208201111561053257600080fd5b8035906020019184600183028401116401000000008311171561055457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610f0c565b005b6105b061133f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008084905060008686604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090506000808373ffffffffffffffffffffffffffffffffffffffff1663838d6e058a89896040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604080518083038186803b15801561073d57600080fd5b505afa158015610751573d6000803e3d6000fd5b505050506040513d604081101561076757600080fd5b81019080805190602001909291908051906020019092919050505080935081925050506002600481111561079757fe5b8260048111156107a357fe5b14806107c55750600360048111156107b757fe5b8260048111156107c357fe5b145b806107e557506004808111156107d757fe5b8260048111156107e357fe5b145b1515610859576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f746f6f206561726c79206368616e6e656c20737461746500000000000000000081525060200191505060405180910390fd5b43811015156108d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6368616e6e656c206e6f7420736574746c65642079657400000000000000000081525060200191505060405180910390fd5b6000600460008581526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156109b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f7265776172645f73656e646572206973207a65726f000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663beabacc88260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600001546040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610af557600080fd5b505af1158015610b09573d6000803e3d6000fd5b505050506040513d6020811015610b1f57600080fd5b81019080805190602001909291905050501515610ba4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f55444320646964206e6f74207472616e7366657200000000000000000000000081525060200191505060405180910390fd5b838160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe413caa6d70a6d9b51c2af2575a2914490f614355049af8ae7cde5caab9fd20183600001546040518082815260200191505060405180910390a36004600085815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555050600195505050505050949350505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811515610cf457fe5b0485101515610d6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6d616c6963696f75736c792062696720736574746c652074696d656f7574000081525060200191505060405180910390fd5b60647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811515610d9757fe5b0486101515610e0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6d616c6963696f75736c792062696720636c6f7365645f61745f626c6f636b0081525060200191505060405180910390fd5b6000601e905060006050905060006064888402811515610e2a57fe5b0489019050600060648985850302811515610e4157fe5b0490506000818773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff160101811515610e9757fe5b0690508083019550505050505095945050505050565b600080823b905060008111915050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f1c828b8b868b338a88611364565b600082905060008173ffffffffffffffffffffffffffffffffffffffff1663938bcd678d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015610ff057600080fd5b505afa158015611004573d6000803e3d6000fd5b505050506040513d602081101561101a57600080fd5b8101908080519060200190929190505050905061103a82828e8e33611a14565b15156110ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6e6f7420616c6c6f77656420746f206d6f6e69746f720000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663fadc554b828e8e8e8e8e8e8e6040518963ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156111bd5780820151818401526020810190506111a2565b50505050905090810190601f1680156111ea5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015611223578082015181840152602081019050611208565b50505050905090810190601f1680156112505780820380516001836020036101000a031916815260200191505b509a5050505050505050505050600060405180830381600087803b15801561127757600080fd5b505af115801561128b573d6000803e3d6000fd5b505050508a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a7f486d5933a2980e097e7c32c7fe217158facf1a3973bac8235ac6c8b0e77d3dff87858a604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a4505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600088905060008173ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156113cd57600080fd5b505afa1580156113e1573d6000803e3d6000fd5b505050506040513d60208110156113f757600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630fabd9e7836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156114dc57600080fd5b505afa1580156114f0573d6000803e3d6000fd5b505050506040513d602081101561150657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161415156115a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f556e6b6e6f776e20546f6b656e4e6574776f726b00000000000000000000000081525060200191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1663938bcd678b8b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561167157600080fd5b505afa158015611685573d6000803e3d6000fd5b505050506040513d602081101561169b57600080fd5b810190808051906020019092919050505090506000611759308573ffffffffffffffffffffffffffffffffffffffff16633af973b16040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561171657600080fd5b505afa15801561172a573d6000803e3d6000fd5b505050506040513d602081101561174057600080fd5b8101908080519060200190929190505050888c89611d07565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415156117fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f426164207265776172642070726f6f660000000000000000000000000000000081525060200191505060405180910390fd5b6000828d604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014019250505060405160208183030381529060405280519060200120905060006004600083815260200190815260200160002090508981600101541015156118fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f7374616c65206e6f6e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b6080604051908101604052808c81526020018b81526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1681525060046000848152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050505050505050505050505050505050565b60008060008773ffffffffffffffffffffffffffffffffffffffff1663838d6e058888886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604080518083038186803b158015611aed57600080fd5b505afa158015611b01573d6000803e3d6000fd5b505050506040513d6040811015611b1757600080fd5b810190808051906020019092919080519060200190929190505050809350819250505060026004811115611b4757fe5b826004811115611b5357fe5b141515611bc8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f6368616e6e656c206e6f7420636c6f736564000000000000000000000000000081525060200191505060405180910390fd5b60008873ffffffffffffffffffffffffffffffffffffffff1663b8378f756040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015611c2c57600080fd5b505afa158015611c40573d6000803e3d6000fd5b505050506040513d6020811015611c5657600080fd5b81019080805190602001909291905050509050808210151515611ce1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f746f6f206c6f7720736574746c6520626c6f636b206e756d626572000000000081525060200191505060405180910390fd5b60008183039050611cf581838a8a8a610cc6565b43101594505050505095945050505050565b6000808686600680811115611d1857fe5b878760405160200180807f19457468657265756d205369676e6564204d6573736167653a0a313831000000815250601d018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140185815260200184815260200183805190602001908083835b602083101515611dc75780518252602082019150602081019050602083039250611da2565b6001836020036101000a03801982511681845116808217855250505050505090500182815260200195505050505050604051602081830303815290604052805190602001209050611e188184611e24565b91505095945050505050565b600060418251141515611e3657600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff161015611e6657601b810190505b601b8160ff161480611e7b5750601c8160ff16145b1515611e8657600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611ee3573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515611f2b57600080fd5b8393505050509291505056fea165627a7a723058202d7e7c60f10fdc689964cfdc95041a6ed33557b06bc6d7f971188ad2fc3db7f90029", - "bin-runtime": "608060405234801561001057600080fd5b50600436106100a5576000357c01000000000000000000000000000000000000000000000000000000009004806381c6dac21161007857806381c6dac2146102a2578063b4238f4a146102ec578063d3b6c08014610336578063fc0c546a146105a8576100a5565b80630e7dfb73146100aa578063637d89d4146101505780636766923e1461019a5780637709bc7814610246575b600080fd5b610136600480360360808110156100c057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105f2565b604051808215151515815260200191505060405180910390f35b610158610ca0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610230600480360360a08110156101b057600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610cc6565b6040518082815260200191505060405180910390f35b6102886004803603602081101561025c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ead565b604051808215151515815260200191505060405180910390f35b6102aa610ec0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102f4610ee6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105a6600480360361014081101561034d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156103c857600080fd5b8201836020820111156103da57600080fd5b803590602001918460018302840111640100000000831117156103fc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561045f57600080fd5b82018360208201111561047157600080fd5b8035906020019184600183028401116401000000008311171561049357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561052057600080fd5b82018360208201111561053257600080fd5b8035906020019184600183028401116401000000008311171561055457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610f0c565b005b6105b061133f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008084905060008686604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090506000808373ffffffffffffffffffffffffffffffffffffffff1663838d6e058a89896040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604080518083038186803b15801561073d57600080fd5b505afa158015610751573d6000803e3d6000fd5b505050506040513d604081101561076757600080fd5b81019080805190602001909291908051906020019092919050505080935081925050506002600481111561079757fe5b8260048111156107a357fe5b14806107c55750600360048111156107b757fe5b8260048111156107c357fe5b145b806107e557506004808111156107d757fe5b8260048111156107e357fe5b145b1515610859576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f746f6f206561726c79206368616e6e656c20737461746500000000000000000081525060200191505060405180910390fd5b43811015156108d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6368616e6e656c206e6f7420736574746c65642079657400000000000000000081525060200191505060405180910390fd5b6000600460008581526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156109b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f7265776172645f73656e646572206973207a65726f000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663beabacc88260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600001546040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610af557600080fd5b505af1158015610b09573d6000803e3d6000fd5b505050506040513d6020811015610b1f57600080fd5b81019080805190602001909291905050501515610ba4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f55444320646964206e6f74207472616e7366657200000000000000000000000081525060200191505060405180910390fd5b838160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe413caa6d70a6d9b51c2af2575a2914490f614355049af8ae7cde5caab9fd20183600001546040518082815260200191505060405180910390a36004600085815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555050600195505050505050949350505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811515610cf457fe5b0485101515610d6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6d616c6963696f75736c792062696720736574746c652074696d656f7574000081525060200191505060405180910390fd5b60647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811515610d9757fe5b0486101515610e0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6d616c6963696f75736c792062696720636c6f7365645f61745f626c6f636b0081525060200191505060405180910390fd5b6000601e905060006050905060006064888402811515610e2a57fe5b0489019050600060648985850302811515610e4157fe5b0490506000818773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff160101811515610e9757fe5b0690508083019550505050505095945050505050565b600080823b905060008111915050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f1c828b8b868b338a88611364565b600082905060008173ffffffffffffffffffffffffffffffffffffffff1663938bcd678d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015610ff057600080fd5b505afa158015611004573d6000803e3d6000fd5b505050506040513d602081101561101a57600080fd5b8101908080519060200190929190505050905061103a82828e8e33611a14565b15156110ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6e6f7420616c6c6f77656420746f206d6f6e69746f720000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663fadc554b828e8e8e8e8e8e8e6040518963ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156111bd5780820151818401526020810190506111a2565b50505050905090810190601f1680156111ea5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015611223578082015181840152602081019050611208565b50505050905090810190601f1680156112505780820380516001836020036101000a031916815260200191505b509a5050505050505050505050600060405180830381600087803b15801561127757600080fd5b505af115801561128b573d6000803e3d6000fd5b505050508a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a7f486d5933a2980e097e7c32c7fe217158facf1a3973bac8235ac6c8b0e77d3dff87858a604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a4505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600088905060008173ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156113cd57600080fd5b505afa1580156113e1573d6000803e3d6000fd5b505050506040513d60208110156113f757600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630fabd9e7836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156114dc57600080fd5b505afa1580156114f0573d6000803e3d6000fd5b505050506040513d602081101561150657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161415156115a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f556e6b6e6f776e20546f6b656e4e6574776f726b00000000000000000000000081525060200191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1663938bcd678b8b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561167157600080fd5b505afa158015611685573d6000803e3d6000fd5b505050506040513d602081101561169b57600080fd5b810190808051906020019092919050505090506000611759308573ffffffffffffffffffffffffffffffffffffffff16633af973b16040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561171657600080fd5b505afa15801561172a573d6000803e3d6000fd5b505050506040513d602081101561174057600080fd5b8101908080519060200190929190505050888c89611d07565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415156117fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f426164207265776172642070726f6f660000000000000000000000000000000081525060200191505060405180910390fd5b6000828d604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014019250505060405160208183030381529060405280519060200120905060006004600083815260200190815260200160002090508981600101541015156118fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f7374616c65206e6f6e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b6080604051908101604052808c81526020018b81526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1681525060046000848152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050505050505050505050505050505050565b60008060008773ffffffffffffffffffffffffffffffffffffffff1663838d6e058888886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604080518083038186803b158015611aed57600080fd5b505afa158015611b01573d6000803e3d6000fd5b505050506040513d6040811015611b1757600080fd5b810190808051906020019092919080519060200190929190505050809350819250505060026004811115611b4757fe5b826004811115611b5357fe5b141515611bc8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f6368616e6e656c206e6f7420636c6f736564000000000000000000000000000081525060200191505060405180910390fd5b60008873ffffffffffffffffffffffffffffffffffffffff1663b8378f756040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015611c2c57600080fd5b505afa158015611c40573d6000803e3d6000fd5b505050506040513d6020811015611c5657600080fd5b81019080805190602001909291905050509050808210151515611ce1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f746f6f206c6f7720736574746c6520626c6f636b206e756d626572000000000081525060200191505060405180910390fd5b60008183039050611cf581838a8a8a610cc6565b43101594505050505095945050505050565b6000808686600680811115611d1857fe5b878760405160200180807f19457468657265756d205369676e6564204d6573736167653a0a313831000000815250601d018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140185815260200184815260200183805190602001908083835b602083101515611dc75780518252602082019150602081019050602083039250611da2565b6001836020036101000a03801982511681845116808217855250505050505090500182815260200195505050505050604051602081830303815290604052805190602001209050611e188184611e24565b91505095945050505050565b600060418251141515611e3657600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff161015611e6657601b810190505b601b8160ff161480611e7b5750601c8160ff16145b1515611e8657600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611ee3573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515611f2b57600080fd5b8393505050509291505056fea165627a7a723058202d7e7c60f10fdc689964cfdc95041a6ed33557b06bc6d7f971188ad2fc3db7f90029", - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"token_network_address\",\"type\":\"address\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"user_deposit\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"closed_at_block\",\"type\":\"uint256\"},{\"name\":\"settle_timeout\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"monitoring_service_address\",\"type\":\"address\"}],\"name\":\"firstBlockAllowedToMonitor\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contract_address\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"service_registry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token_network_registry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"},{\"name\":\"reward_amount\",\"type\":\"uint256\"},{\"name\":\"token_network_address\",\"type\":\"address\"},{\"name\":\"reward_proof_signature\",\"type\":\"bytes\"}],\"name\":\"monitor\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_token_address\",\"type\":\"address\"},{\"name\":\"_service_registry_address\",\"type\":\"address\"},{\"name\":\"_udc_address\",\"type\":\"address\"},{\"name\":\"_token_network_registry_address\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"token_network_address\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"reward_amount\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"ms_address\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"raiden_node_address\",\"type\":\"address\"}],\"name\":\"NewBalanceProofReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"ms_address\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"reward_identifier\",\"type\":\"bytes32\"}],\"name\":\"RewardClaimed\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"claimReward(uint256,address,address,address)\":{\"params\":{\"closing_participant\":\"Address of the participant of the channel that called close\",\"non_closing_participant\":\"The other participant of the channel\",\"token_network_address\":\"Address of the Token Network in which the channel exists\"}},\"constructor\":{\"params\":{\"_service_registry_address\":\"The address of the ServiceRegistry contract\",\"_token_address\":\"The address of the token to use for rewards\",\"_token_network_registry_address\":\"The address of the TokenNetworkRegistry for authenticating TokenNetworks\"}},\"contractExists(address)\":{\"params\":{\"contract_address\":\"The address to check whether a contract is deployed or not\"},\"return\":\"True if a contract exists, false otherwise\"},\"monitor(address,address,bytes32,uint256,bytes32,bytes,bytes,uint256,address,bytes)\":{\"params\":{\"nonce\":\"Strictly monotonic value used to order BPs omitting PB specific params, since these will not be provided in the future\",\"reward_amount\":\"Amount of tokens to be rewarded\",\"reward_proof_signature\":\"The signature of the signed reward proof\",\"token_network_address\":\"Address of the Token Network in which the channel being monitored exists.\"}}}},\"userdoc\":{\"methods\":{\"claimReward(uint256,address,address,address)\":{\"notice\":\"Called after a monitored channel is settled in order for MS to claim the reward Can be called once per settled channel by everyone on behalf of MS\"},\"constructor\":\"Set the default values for the smart contract\",\"contractExists(address)\":{\"notice\":\"Check if a contract exists\"},\"monitor(address,address,bytes32,uint256,bytes32,bytes,bytes,uint256,address,bytes)\":{\"notice\":\"Called by a registered MS, when providing a new balance proof to a monitored channel. Can be called multiple times by different registered MSs as long as the BP provided is newer than the current newest registered BP.\"}}}},\"settings\":{\"compilationTarget\":{\"data/source/services/MonitoringService.sol\":\"MonitoringService\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":.=.\",\":lib=data/source/lib\",\":raiden=data/source/raiden\",\":services=data/source/services\",\":test=data/source/test\"]},\"sources\":{\"data/source/lib/ECVerify.sol\":{\"keccak256\":\"0x8bb402baa478eb53252d77b63982e12685adda290cf4dfa1d8f510284f8df3e9\",\"urls\":[\"bzzr://474c3db1bb54bb831c32eb2ab67a0e870489994bd4d4b8a8fa24b54935211d43\"]},\"data/source/raiden/SecretRegistry.sol\":{\"keccak256\":\"0xb8078bc048ccdeb7c58026754f22fc378baf3b24090db0f17d10bda6cd4951b4\",\"urls\":[\"bzzr://f7a072330393a85a6a274ef526ac2ca0f8eb217bf5f48c18b3080be7ac3a7ede\"]},\"data/source/raiden/Token.sol\":{\"keccak256\":\"0x41b40819d7f6714550c742f48ce46daeb97255c08bc56e83bb9fde4fbe14c3b4\",\"urls\":[\"bzzr://a20e2bea336fb01584cf4dc80e77bb8db3c33666f77f840fd58559116849ae4b\"]},\"data/source/raiden/TokenNetwork.sol\":{\"keccak256\":\"0xe236e9c266564b1497d45cff4820b670e02cff86a07dba03310705e090620e66\",\"urls\":[\"bzzr://d629bfb011b3a81416e11a53816c3656f439ee2698b91cb015dade173e583a7c\"]},\"data/source/raiden/TokenNetworkRegistry.sol\":{\"keccak256\":\"0x33926a522c34bbeceb6d498c82cc1cf8415404b7348fbe40d16448ea96bc5535\",\"urls\":[\"bzzr://c668bf0336068e6e836dad2ec1c99f6d142ff1bcd4f04ef99fd59abd2e971c8e\"]},\"data/source/raiden/Utils.sol\":{\"keccak256\":\"0x602fd914e5644696d3c5d42e3a39fe6f16e7ddcc93f8864aa7e368a70cb56d0b\",\"urls\":[\"bzzr://b884810b9826074efb212a825d33409c35d9a159681690e821da3643052be3d1\"]},\"data/source/services/MonitoringService.sol\":{\"keccak256\":\"0x455822e01a72b00e47ded74b4ab8060c86738d60c7bde1fc3199de4fbe89cf36\",\"urls\":[\"bzzr://0e3d78d6c4371ccc67aee6da3c9bbb0bba0b9b2fac6d64c23243db34941e7cf6\"]},\"data/source/services/ServiceRegistry.sol\":{\"keccak256\":\"0xb045051a426047705bd2220b4481a1dfe2058992d50b9de9d940a5619035673c\",\"urls\":[\"bzzr://a4c71641c0774f5cc8ec43ac392aefc8a9fb737882c5714e3aa48319d7e05961\"]},\"data/source/services/UserDeposit.sol\":{\"keccak256\":\"0x23fae922fe184ab0e4a1a25349f7ade63103c298625bc29c4f1b285619d054f0\",\"urls\":[\"bzzr://42777a151afd25154d5adfc875921c00261cae360b676cad959e62829b2fe5b6\"]}},\"version\":1}" + "bin": "60806040523480156200001157600080fd5b506040516080806200265c833981018060405260808110156200003357600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151562000108576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f546f6b656e2061742061646472657373207a65726f000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515620001ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5365727669636552656769737472792061742061646472657373207a65726f0081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151562000254576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5544432061742061646472657373207a65726f0000000000000000000000000081525060200191505060405180910390fd5b6200026e84620006d6640100000000026401000000009004565b1515620002e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f746f6b656e20686173206e6f20636f646500000000000000000000000000000081525060200191505060405180910390fd5b620002fd83620006d6640100000000026401000000009004565b151562000372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f53657276696365526567697374727920686173206e6f20636f6465000000000081525060200191505060405180910390fd5b6200038c82620006d6640100000000026401000000009004565b151562000401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f55444320686173206e6f20636f6465000000000000000000000000000000000081525060200191505060405180910390fd5b6200041b81620006d6640100000000026401000000009004565b151562000490576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f546f6b656e4e6574776f726b526567697374727920686173206e6f20636f646581525060200191505060405180910390fd5b836000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156200061957600080fd5b505afa1580156200062e573d6000803e3d6000fd5b505050506040513d60208110156200064557600080fd5b8101908080519060200190929190505050111515620006cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f546f6b656e2077697468207a65726f20746f74616c20737570706c790000000081525060200191505060405180910390fd5b50505050620006e9565b600080823b905060008111915050919050565b611f6380620006f96000396000f3fe608060405234801561001057600080fd5b50600436106100a5576000357c01000000000000000000000000000000000000000000000000000000009004806381c6dac21161007857806381c6dac2146102a2578063b4238f4a146102ec578063d3b6c08014610336578063fc0c546a146105a8576100a5565b80630e7dfb73146100aa578063637d89d4146101505780636766923e1461019a5780637709bc7814610246575b600080fd5b610136600480360360808110156100c057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105f2565b604051808215151515815260200191505060405180910390f35b610158610ca0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610230600480360360a08110156101b057600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610cc6565b6040518082815260200191505060405180910390f35b6102886004803603602081101561025c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ead565b604051808215151515815260200191505060405180910390f35b6102aa610ec0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102f4610ee6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105a6600480360361014081101561034d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156103c857600080fd5b8201836020820111156103da57600080fd5b803590602001918460018302840111640100000000831117156103fc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561045f57600080fd5b82018360208201111561047157600080fd5b8035906020019184600183028401116401000000008311171561049357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561052057600080fd5b82018360208201111561053257600080fd5b8035906020019184600183028401116401000000008311171561055457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610f0c565b005b6105b061133f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008084905060008686604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090506000808373ffffffffffffffffffffffffffffffffffffffff1663838d6e058a89896040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604080518083038186803b15801561073d57600080fd5b505afa158015610751573d6000803e3d6000fd5b505050506040513d604081101561076757600080fd5b81019080805190602001909291908051906020019092919050505080935081925050506002600481111561079757fe5b8260048111156107a357fe5b14806107c55750600360048111156107b757fe5b8260048111156107c357fe5b145b806107e557506004808111156107d757fe5b8260048111156107e357fe5b145b1515610859576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f746f6f206561726c79206368616e6e656c20737461746500000000000000000081525060200191505060405180910390fd5b43811015156108d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6368616e6e656c206e6f7420736574746c65642079657400000000000000000081525060200191505060405180910390fd5b6000600460008581526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156109b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f7265776172645f73656e646572206973207a65726f000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663beabacc88260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600001546040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610af557600080fd5b505af1158015610b09573d6000803e3d6000fd5b505050506040513d6020811015610b1f57600080fd5b81019080805190602001909291905050501515610ba4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f55444320646964206e6f74207472616e7366657200000000000000000000000081525060200191505060405180910390fd5b838160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe413caa6d70a6d9b51c2af2575a2914490f614355049af8ae7cde5caab9fd20183600001546040518082815260200191505060405180910390a36004600085815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555050600195505050505050949350505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811515610cf457fe5b0485101515610d6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6d616c6963696f75736c792062696720736574746c652074696d656f7574000081525060200191505060405180910390fd5b60647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811515610d9757fe5b0486101515610e0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6d616c6963696f75736c792062696720636c6f7365645f61745f626c6f636b0081525060200191505060405180910390fd5b6000601e905060006050905060006064888402811515610e2a57fe5b0489019050600060648985850302811515610e4157fe5b0490506000818773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff160101811515610e9757fe5b0690508083019550505050505095945050505050565b600080823b905060008111915050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f1c828b8b868b338a88611364565b600082905060008173ffffffffffffffffffffffffffffffffffffffff1663938bcd678d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015610ff057600080fd5b505afa158015611004573d6000803e3d6000fd5b505050506040513d602081101561101a57600080fd5b8101908080519060200190929190505050905061103a82828e8e33611a14565b15156110ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6e6f7420616c6c6f77656420746f206d6f6e69746f720000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663fadc554b828e8e8e8e8e8e8e6040518963ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156111bd5780820151818401526020810190506111a2565b50505050905090810190601f1680156111ea5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015611223578082015181840152602081019050611208565b50505050905090810190601f1680156112505780820380516001836020036101000a031916815260200191505b509a5050505050505050505050600060405180830381600087803b15801561127757600080fd5b505af115801561128b573d6000803e3d6000fd5b505050508a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a7f486d5933a2980e097e7c32c7fe217158facf1a3973bac8235ac6c8b0e77d3dff87858a604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a4505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600088905060008173ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156113cd57600080fd5b505afa1580156113e1573d6000803e3d6000fd5b505050506040513d60208110156113f757600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630fabd9e7836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156114dc57600080fd5b505afa1580156114f0573d6000803e3d6000fd5b505050506040513d602081101561150657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161415156115a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f556e6b6e6f776e20546f6b656e4e6574776f726b00000000000000000000000081525060200191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1663938bcd678b8b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561167157600080fd5b505afa158015611685573d6000803e3d6000fd5b505050506040513d602081101561169b57600080fd5b810190808051906020019092919050505090506000611759308573ffffffffffffffffffffffffffffffffffffffff16633af973b16040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561171657600080fd5b505afa15801561172a573d6000803e3d6000fd5b505050506040513d602081101561174057600080fd5b8101908080519060200190929190505050888c89611d07565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415156117fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f426164207265776172642070726f6f660000000000000000000000000000000081525060200191505060405180910390fd5b6000828d604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014019250505060405160208183030381529060405280519060200120905060006004600083815260200190815260200160002090508981600101541015156118fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f7374616c65206e6f6e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b6080604051908101604052808c81526020018b81526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1681525060046000848152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050505050505050505050505050505050565b60008060008773ffffffffffffffffffffffffffffffffffffffff1663838d6e058888886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604080518083038186803b158015611aed57600080fd5b505afa158015611b01573d6000803e3d6000fd5b505050506040513d6040811015611b1757600080fd5b810190808051906020019092919080519060200190929190505050809350819250505060026004811115611b4757fe5b826004811115611b5357fe5b141515611bc8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f6368616e6e656c206e6f7420636c6f736564000000000000000000000000000081525060200191505060405180910390fd5b60008873ffffffffffffffffffffffffffffffffffffffff1663b8378f756040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015611c2c57600080fd5b505afa158015611c40573d6000803e3d6000fd5b505050506040513d6020811015611c5657600080fd5b81019080805190602001909291905050509050808210151515611ce1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f746f6f206c6f7720736574746c6520626c6f636b206e756d626572000000000081525060200191505060405180910390fd5b60008183039050611cf581838a8a8a610cc6565b43101594505050505095945050505050565b6000808686600680811115611d1857fe5b878760405160200180807f19457468657265756d205369676e6564204d6573736167653a0a313831000000815250601d018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140185815260200184815260200183805190602001908083835b602083101515611dc75780518252602082019150602081019050602083039250611da2565b6001836020036101000a03801982511681845116808217855250505050505090500182815260200195505050505050604051602081830303815290604052805190602001209050611e188184611e24565b91505095945050505050565b600060418251141515611e3657600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff161015611e6657601b810190505b601b8160ff161480611e7b5750601c8160ff16145b1515611e8657600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611ee3573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515611f2b57600080fd5b8393505050509291505056fea165627a7a72305820f026eafe31ea54b974fa1d7b70276a0a5819761e1bb9d047bf6fd5d5273aaa290029", + "bin-runtime": "608060405234801561001057600080fd5b50600436106100a5576000357c01000000000000000000000000000000000000000000000000000000009004806381c6dac21161007857806381c6dac2146102a2578063b4238f4a146102ec578063d3b6c08014610336578063fc0c546a146105a8576100a5565b80630e7dfb73146100aa578063637d89d4146101505780636766923e1461019a5780637709bc7814610246575b600080fd5b610136600480360360808110156100c057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506105f2565b604051808215151515815260200191505060405180910390f35b610158610ca0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610230600480360360a08110156101b057600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610cc6565b6040518082815260200191505060405180910390f35b6102886004803603602081101561025c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ead565b604051808215151515815260200191505060405180910390f35b6102aa610ec0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102f4610ee6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105a6600480360361014081101561034d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156103c857600080fd5b8201836020820111156103da57600080fd5b803590602001918460018302840111640100000000831117156103fc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561045f57600080fd5b82018360208201111561047157600080fd5b8035906020019184600183028401116401000000008311171561049357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561052057600080fd5b82018360208201111561053257600080fd5b8035906020019184600183028401116401000000008311171561055457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610f0c565b005b6105b061133f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008084905060008686604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090506000808373ffffffffffffffffffffffffffffffffffffffff1663838d6e058a89896040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604080518083038186803b15801561073d57600080fd5b505afa158015610751573d6000803e3d6000fd5b505050506040513d604081101561076757600080fd5b81019080805190602001909291908051906020019092919050505080935081925050506002600481111561079757fe5b8260048111156107a357fe5b14806107c55750600360048111156107b757fe5b8260048111156107c357fe5b145b806107e557506004808111156107d757fe5b8260048111156107e357fe5b145b1515610859576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f746f6f206561726c79206368616e6e656c20737461746500000000000000000081525060200191505060405180910390fd5b43811015156108d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6368616e6e656c206e6f7420736574746c65642079657400000000000000000081525060200191505060405180910390fd5b6000600460008581526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156109b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f7265776172645f73656e646572206973207a65726f000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663beabacc88260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600001546040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610af557600080fd5b505af1158015610b09573d6000803e3d6000fd5b505050506040513d6020811015610b1f57600080fd5b81019080805190602001909291905050501515610ba4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f55444320646964206e6f74207472616e7366657200000000000000000000000081525060200191505060405180910390fd5b838160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe413caa6d70a6d9b51c2af2575a2914490f614355049af8ae7cde5caab9fd20183600001546040518082815260200191505060405180910390a36004600085815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555050600195505050505050949350505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811515610cf457fe5b0485101515610d6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6d616c6963696f75736c792062696720736574746c652074696d656f7574000081525060200191505060405180910390fd5b60647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811515610d9757fe5b0486101515610e0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6d616c6963696f75736c792062696720636c6f7365645f61745f626c6f636b0081525060200191505060405180910390fd5b6000601e905060006050905060006064888402811515610e2a57fe5b0489019050600060648985850302811515610e4157fe5b0490506000818773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff160101811515610e9757fe5b0690508083019550505050505095945050505050565b600080823b905060008111915050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f1c828b8b868b338a88611364565b600082905060008173ffffffffffffffffffffffffffffffffffffffff1663938bcd678d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015610ff057600080fd5b505afa158015611004573d6000803e3d6000fd5b505050506040513d602081101561101a57600080fd5b8101908080519060200190929190505050905061103a82828e8e33611a14565b15156110ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6e6f7420616c6c6f77656420746f206d6f6e69746f720000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663fadc554b828e8e8e8e8e8e8e6040518963ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156111bd5780820151818401526020810190506111a2565b50505050905090810190601f1680156111ea5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015611223578082015181840152602081019050611208565b50505050905090810190601f1680156112505780820380516001836020036101000a031916815260200191505b509a5050505050505050505050600060405180830381600087803b15801561127757600080fd5b505af115801561128b573d6000803e3d6000fd5b505050508a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a7f486d5933a2980e097e7c32c7fe217158facf1a3973bac8235ac6c8b0e77d3dff87858a604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a4505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600088905060008173ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156113cd57600080fd5b505afa1580156113e1573d6000803e3d6000fd5b505050506040513d60208110156113f757600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630fabd9e7836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156114dc57600080fd5b505afa1580156114f0573d6000803e3d6000fd5b505050506040513d602081101561150657600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161415156115a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f556e6b6e6f776e20546f6b656e4e6574776f726b00000000000000000000000081525060200191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1663938bcd678b8b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561167157600080fd5b505afa158015611685573d6000803e3d6000fd5b505050506040513d602081101561169b57600080fd5b810190808051906020019092919050505090506000611759308573ffffffffffffffffffffffffffffffffffffffff16633af973b16040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561171657600080fd5b505afa15801561172a573d6000803e3d6000fd5b505050506040513d602081101561174057600080fd5b8101908080519060200190929190505050888c89611d07565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415156117fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f426164207265776172642070726f6f660000000000000000000000000000000081525060200191505060405180910390fd5b6000828d604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014019250505060405160208183030381529060405280519060200120905060006004600083815260200190815260200160002090508981600101541015156118fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f7374616c65206e6f6e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b6080604051908101604052808c81526020018b81526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1681525060046000848152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050505050505050505050505050505050565b60008060008773ffffffffffffffffffffffffffffffffffffffff1663838d6e058888886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604080518083038186803b158015611aed57600080fd5b505afa158015611b01573d6000803e3d6000fd5b505050506040513d6040811015611b1757600080fd5b810190808051906020019092919080519060200190929190505050809350819250505060026004811115611b4757fe5b826004811115611b5357fe5b141515611bc8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f6368616e6e656c206e6f7420636c6f736564000000000000000000000000000081525060200191505060405180910390fd5b60008873ffffffffffffffffffffffffffffffffffffffff1663b8378f756040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015611c2c57600080fd5b505afa158015611c40573d6000803e3d6000fd5b505050506040513d6020811015611c5657600080fd5b81019080805190602001909291905050509050808210151515611ce1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f746f6f206c6f7720736574746c6520626c6f636b206e756d626572000000000081525060200191505060405180910390fd5b60008183039050611cf581838a8a8a610cc6565b43101594505050505095945050505050565b6000808686600680811115611d1857fe5b878760405160200180807f19457468657265756d205369676e6564204d6573736167653a0a313831000000815250601d018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140185815260200184815260200183805190602001908083835b602083101515611dc75780518252602082019150602081019050602083039250611da2565b6001836020036101000a03801982511681845116808217855250505050505090500182815260200195505050505050604051602081830303815290604052805190602001209050611e188184611e24565b91505095945050505050565b600060418251141515611e3657600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff161015611e6657601b810190505b601b8160ff161480611e7b5750601c8160ff16145b1515611e8657600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015611ee3573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515611f2b57600080fd5b8393505050509291505056fea165627a7a72305820f026eafe31ea54b974fa1d7b70276a0a5819761e1bb9d047bf6fd5d5273aaa290029", + "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"token_network_address\",\"type\":\"address\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"user_deposit\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"closed_at_block\",\"type\":\"uint256\"},{\"name\":\"settle_timeout\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"monitoring_service_address\",\"type\":\"address\"}],\"name\":\"firstBlockAllowedToMonitor\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contract_address\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"service_registry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token_network_registry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"},{\"name\":\"reward_amount\",\"type\":\"uint256\"},{\"name\":\"token_network_address\",\"type\":\"address\"},{\"name\":\"reward_proof_signature\",\"type\":\"bytes\"}],\"name\":\"monitor\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_token_address\",\"type\":\"address\"},{\"name\":\"_service_registry_address\",\"type\":\"address\"},{\"name\":\"_udc_address\",\"type\":\"address\"},{\"name\":\"_token_network_registry_address\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"token_network_address\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"reward_amount\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"ms_address\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"raiden_node_address\",\"type\":\"address\"}],\"name\":\"NewBalanceProofReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"ms_address\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"reward_identifier\",\"type\":\"bytes32\"}],\"name\":\"RewardClaimed\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"claimReward(uint256,address,address,address)\":{\"params\":{\"closing_participant\":\"Address of the participant of the channel that called close\",\"non_closing_participant\":\"The other participant of the channel\",\"token_network_address\":\"Address of the Token Network in which the channel exists\"}},\"constructor\":{\"params\":{\"_service_registry_address\":\"The address of the ServiceRegistry contract\",\"_token_address\":\"The address of the token to use for rewards\",\"_token_network_registry_address\":\"The address of the TokenNetworkRegistry for authenticating TokenNetworks\"}},\"contractExists(address)\":{\"params\":{\"contract_address\":\"The address to check whether a contract is deployed or not\"},\"return\":\"True if a contract exists, false otherwise\"},\"monitor(address,address,bytes32,uint256,bytes32,bytes,bytes,uint256,address,bytes)\":{\"params\":{\"nonce\":\"Strictly monotonic value used to order BPs omitting PB specific params, since these will not be provided in the future\",\"reward_amount\":\"Amount of tokens to be rewarded\",\"reward_proof_signature\":\"The signature of the signed reward proof\",\"token_network_address\":\"Address of the Token Network in which the channel being monitored exists.\"}}}},\"userdoc\":{\"methods\":{\"claimReward(uint256,address,address,address)\":{\"notice\":\"Called after a monitored channel is settled in order for MS to claim the reward Can be called once per settled channel by everyone on behalf of MS\"},\"constructor\":\"Set the default values for the smart contract\",\"contractExists(address)\":{\"notice\":\"Check if a contract exists\"},\"monitor(address,address,bytes32,uint256,bytes32,bytes,bytes,uint256,address,bytes)\":{\"notice\":\"Called by a registered MS, when providing a new balance proof to a monitored channel. Can be called multiple times by different registered MSs as long as the BP provided is newer than the current newest registered BP.\"}}}},\"settings\":{\"compilationTarget\":{\"data/source/services/MonitoringService.sol\":\"MonitoringService\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":.=.\",\":lib=data/source/lib\",\":raiden=data/source/raiden\",\":services=data/source/services\",\":test=data/source/test\"]},\"sources\":{\"data/source/lib/ECVerify.sol\":{\"keccak256\":\"0x8bb402baa478eb53252d77b63982e12685adda290cf4dfa1d8f510284f8df3e9\",\"urls\":[\"bzzr://474c3db1bb54bb831c32eb2ab67a0e870489994bd4d4b8a8fa24b54935211d43\"]},\"data/source/raiden/SecretRegistry.sol\":{\"keccak256\":\"0xb8078bc048ccdeb7c58026754f22fc378baf3b24090db0f17d10bda6cd4951b4\",\"urls\":[\"bzzr://f7a072330393a85a6a274ef526ac2ca0f8eb217bf5f48c18b3080be7ac3a7ede\"]},\"data/source/raiden/Token.sol\":{\"keccak256\":\"0x41b40819d7f6714550c742f48ce46daeb97255c08bc56e83bb9fde4fbe14c3b4\",\"urls\":[\"bzzr://a20e2bea336fb01584cf4dc80e77bb8db3c33666f77f840fd58559116849ae4b\"]},\"data/source/raiden/TokenNetwork.sol\":{\"keccak256\":\"0x8a0471fe654a6eabe757133f5c6b3b3a8d19acce975625d097192cc775d94bbe\",\"urls\":[\"bzzr://7c9b05aac5ab23979b7863a4b15421d28ac2b515b673c0b0d296c580b60cde86\"]},\"data/source/raiden/TokenNetworkRegistry.sol\":{\"keccak256\":\"0x33926a522c34bbeceb6d498c82cc1cf8415404b7348fbe40d16448ea96bc5535\",\"urls\":[\"bzzr://c668bf0336068e6e836dad2ec1c99f6d142ff1bcd4f04ef99fd59abd2e971c8e\"]},\"data/source/raiden/Utils.sol\":{\"keccak256\":\"0x602fd914e5644696d3c5d42e3a39fe6f16e7ddcc93f8864aa7e368a70cb56d0b\",\"urls\":[\"bzzr://b884810b9826074efb212a825d33409c35d9a159681690e821da3643052be3d1\"]},\"data/source/services/MonitoringService.sol\":{\"keccak256\":\"0x455822e01a72b00e47ded74b4ab8060c86738d60c7bde1fc3199de4fbe89cf36\",\"urls\":[\"bzzr://0e3d78d6c4371ccc67aee6da3c9bbb0bba0b9b2fac6d64c23243db34941e7cf6\"]},\"data/source/services/ServiceRegistry.sol\":{\"keccak256\":\"0xb045051a426047705bd2220b4481a1dfe2058992d50b9de9d940a5619035673c\",\"urls\":[\"bzzr://a4c71641c0774f5cc8ec43ac392aefc8a9fb737882c5714e3aa48319d7e05961\"]},\"data/source/services/UserDeposit.sol\":{\"keccak256\":\"0x23fae922fe184ab0e4a1a25349f7ade63103c298625bc29c4f1b285619d054f0\",\"urls\":[\"bzzr://42777a151afd25154d5adfc875921c00261cae360b676cad959e62829b2fe5b6\"]}},\"version\":1}" }, "MonitoringServiceInternalsTest": { "abi": [ @@ -1442,9 +1442,9 @@ "type": "event" } ], - "bin": "60806040523480156200001157600080fd5b5060405160808062002ac8833981018060405260808110156200003357600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919050505083838383600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156200010c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f546f6b656e2061742061646472657373207a65726f000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515620001b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5365727669636552656769737472792061742061646472657373207a65726f0081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151562000258576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5544432061742061646472657373207a65726f0000000000000000000000000081525060200191505060405180910390fd5b6200027284620006de640100000000026401000000009004565b1515620002e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f746f6b656e20686173206e6f20636f646500000000000000000000000000000081525060200191505060405180910390fd5b6200030183620006de640100000000026401000000009004565b151562000376576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f53657276696365526567697374727920686173206e6f20636f6465000000000081525060200191505060405180910390fd5b6200039082620006de640100000000026401000000009004565b151562000405576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f55444320686173206e6f20636f6465000000000000000000000000000000000081525060200191505060405180910390fd5b6200041f81620006de640100000000026401000000009004565b151562000494576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f546f6b656e4e6574776f726b526567697374727920686173206e6f20636f646581525060200191505060405180910390fd5b836000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156200061d57600080fd5b505afa15801562000632573d6000803e3d6000fd5b505050506040513d60208110156200064957600080fd5b8101908080519060200190929190505050111515620006d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f546f6b656e2077697468207a65726f20746f74616c20737570706c790000000081525060200191505060405180910390fd5b5050505050505050620006f1565b600080823b905060008111915050919050565b6123c780620007016000396000f3fe608060405234801561001057600080fd5b50600436106100c6576000357c0100000000000000000000000000000000000000000000000000000000900480637709bc781161008e5780637709bc781461061457806381c6dac214610670578063b4238f4a146106ba578063d3b6c08014610704578063dcf1376714610976578063fc0c546a146109b8576100c6565b80630e7dfb73146100cb5780633a48602e14610171578063637d89d4146103375780636766923e146103815780636a83a9481461042d575b600080fd5b610157600480360360808110156100e157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a02565b604051808215151515815260200191505060405180910390f35b6102f5600480360360a081101561018757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156101ce57600080fd5b8201836020820111156101e057600080fd5b8035906020019184600183028401116401000000008311171561020257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291908035906020019064010000000081111561026f57600080fd5b82018360208201111561028157600080fd5b803590602001918460018302840111640100000000831117156102a357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506110b0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61033f6110ca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610417600480360360a081101561039757600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110f0565b6040518082815260200191505060405180910390f35b610612600480360361010081101561044457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156104f557600080fd5b82018360208201111561050757600080fd5b8035906020019184600183028401116401000000008311171561052957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561058c57600080fd5b82018360208201111561059e57600080fd5b803590602001918460018302840111640100000000831117156105c057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506112d7565b005b6106566004803603602081101561062a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112f1565b604051808215151515815260200191505060405180910390f35b610678611304565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106c261132a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610974600480360361014081101561071b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561079657600080fd5b8201836020820111156107a857600080fd5b803590602001918460018302840111640100000000831117156107ca57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561082d57600080fd5b82018360208201111561083f57600080fd5b8035906020019184600183028401116401000000008311171561086157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156108ee57600080fd5b82018360208201111561090057600080fd5b8035906020019184600183028401116401000000008311171561092257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611350565b005b6109a26004803603602081101561098c57600080fd5b8101908080359060200190929190505050611783565b6040518082815260200191505060405180910390f35b6109c06117a3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008084905060008686604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090506000808373ffffffffffffffffffffffffffffffffffffffff1663838d6e058a89896040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604080518083038186803b158015610b4d57600080fd5b505afa158015610b61573d6000803e3d6000fd5b505050506040513d6040811015610b7757600080fd5b810190808051906020019092919080519060200190929190505050809350819250505060026004811115610ba757fe5b826004811115610bb357fe5b1480610bd5575060036004811115610bc757fe5b826004811115610bd357fe5b145b80610bf55750600480811115610be757fe5b826004811115610bf357fe5b145b1515610c69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f746f6f206561726c79206368616e6e656c20737461746500000000000000000081525060200191505060405180910390fd5b4381101515610ce0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6368616e6e656c206e6f7420736574746c65642079657400000000000000000081525060200191505060405180910390fd5b6000600460008581526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515610dc0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f7265776172645f73656e646572206973207a65726f000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663beabacc88260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600001546040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610f0557600080fd5b505af1158015610f19573d6000803e3d6000fd5b505050506040513d6020811015610f2f57600080fd5b81019080805190602001909291905050501515610fb4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f55444320646964206e6f74207472616e7366657200000000000000000000000081525060200191505060405180910390fd5b838160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe413caa6d70a6d9b51c2af2575a2914490f614355049af8ae7cde5caab9fd20183600001546040518082815260200191505060405180910390a36004600085815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555050600195505050505050949350505050565b60006110bf86868686866117c8565b905095945050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81151561111e57fe5b0485101515611195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6d616c6963696f75736c792062696720736574746c652074696d656f7574000081525060200191505060405180910390fd5b60647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8115156111c157fe5b0486101515611238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6d616c6963696f75736c792062696720636c6f7365645f61745f626c6f636b0081525060200191505060405180910390fd5b6000601e90506000605090506000606488840281151561125457fe5b048901905060006064898585030281151561126b57fe5b0490506000818773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1601018115156112c157fe5b0690508083019550505050505095945050505050565b6112e788888888888888886118e5565b5050505050505050565b600080823b905060008111915050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611360828b8b868b338a886118e5565b600082905060008173ffffffffffffffffffffffffffffffffffffffff1663938bcd678d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561143457600080fd5b505afa158015611448573d6000803e3d6000fd5b505050506040513d602081101561145e57600080fd5b8101908080519060200190929190505050905061147e82828e8e33611f95565b15156114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6e6f7420616c6c6f77656420746f206d6f6e69746f720000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663fadc554b828e8e8e8e8e8e8e6040518963ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156116015780820151818401526020810190506115e6565b50505050905090810190601f16801561162e5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561166757808201518184015260208101905061164c565b50505050905090810190601f1680156116945780820380516001836020036101000a031916815260200191505b509a5050505050505050505050600060405180830381600087803b1580156116bb57600080fd5b505af11580156116cf573d6000803e3d6000fd5b505050508a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a7f486d5933a2980e097e7c32c7fe217158facf1a3973bac8235ac6c8b0e77d3dff87858a604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a4505050505050505050505050565b600060046000838152602001908152602001600020600101549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008086866006808111156117d957fe5b878760405160200180807f19457468657265756d205369676e6564204d6573736167653a0a313831000000815250601d018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140185815260200184815260200183805190602001908083835b6020831015156118885780518252602082019150602081019050602083039250611863565b6001836020036101000a038019825116818451168082178552505050505050905001828152602001955050505050506040516020818303038152906040528051906020012090506118d98184612288565b91505095945050505050565b600088905060008173ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561194e57600080fd5b505afa158015611962573d6000803e3d6000fd5b505050506040513d602081101561197857600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630fabd9e7836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a5d57600080fd5b505afa158015611a71573d6000803e3d6000fd5b505050506040513d6020811015611a8757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515611b23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f556e6b6e6f776e20546f6b656e4e6574776f726b00000000000000000000000081525060200191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1663938bcd678b8b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015611bf257600080fd5b505afa158015611c06573d6000803e3d6000fd5b505050506040513d6020811015611c1c57600080fd5b810190808051906020019092919050505090506000611cda308573ffffffffffffffffffffffffffffffffffffffff16633af973b16040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015611c9757600080fd5b505afa158015611cab573d6000803e3d6000fd5b505050506040513d6020811015611cc157600080fd5b8101908080519060200190929190505050888c896117c8565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515611d7f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f426164207265776172642070726f6f660000000000000000000000000000000081525060200191505060405180910390fd5b6000828d604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090506000600460008381526020019081526020016000209050898160010154101515611e7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f7374616c65206e6f6e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b6080604051908101604052808c81526020018b81526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1681525060046000848152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050505050505050505050505050505050565b60008060008773ffffffffffffffffffffffffffffffffffffffff1663838d6e058888886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604080518083038186803b15801561206e57600080fd5b505afa158015612082573d6000803e3d6000fd5b505050506040513d604081101561209857600080fd5b8101908080519060200190929190805190602001909291905050508093508192505050600260048111156120c857fe5b8260048111156120d457fe5b141515612149576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f6368616e6e656c206e6f7420636c6f736564000000000000000000000000000081525060200191505060405180910390fd5b60008873ffffffffffffffffffffffffffffffffffffffff1663b8378f756040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156121ad57600080fd5b505afa1580156121c1573d6000803e3d6000fd5b505050506040513d60208110156121d757600080fd5b81019080805190602001909291905050509050808210151515612262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f746f6f206c6f7720736574746c6520626c6f636b206e756d626572000000000081525060200191505060405180910390fd5b6000818303905061227681838a8a8a6110f0565b43101594505050505095945050505050565b60006041825114151561229a57600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff1610156122ca57601b810190505b601b8160ff1614806122df5750601c8160ff16145b15156122ea57600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612347573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561238f57600080fd5b8393505050509291505056fea165627a7a723058206b17bbc1a4319275ea44a0615f06a2fd7eeff5c4a3b94215599895b78fba4e620029", - "bin-runtime": "608060405234801561001057600080fd5b50600436106100c6576000357c0100000000000000000000000000000000000000000000000000000000900480637709bc781161008e5780637709bc781461061457806381c6dac214610670578063b4238f4a146106ba578063d3b6c08014610704578063dcf1376714610976578063fc0c546a146109b8576100c6565b80630e7dfb73146100cb5780633a48602e14610171578063637d89d4146103375780636766923e146103815780636a83a9481461042d575b600080fd5b610157600480360360808110156100e157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a02565b604051808215151515815260200191505060405180910390f35b6102f5600480360360a081101561018757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156101ce57600080fd5b8201836020820111156101e057600080fd5b8035906020019184600183028401116401000000008311171561020257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291908035906020019064010000000081111561026f57600080fd5b82018360208201111561028157600080fd5b803590602001918460018302840111640100000000831117156102a357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506110b0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61033f6110ca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610417600480360360a081101561039757600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110f0565b6040518082815260200191505060405180910390f35b610612600480360361010081101561044457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156104f557600080fd5b82018360208201111561050757600080fd5b8035906020019184600183028401116401000000008311171561052957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561058c57600080fd5b82018360208201111561059e57600080fd5b803590602001918460018302840111640100000000831117156105c057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506112d7565b005b6106566004803603602081101561062a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112f1565b604051808215151515815260200191505060405180910390f35b610678611304565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106c261132a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610974600480360361014081101561071b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561079657600080fd5b8201836020820111156107a857600080fd5b803590602001918460018302840111640100000000831117156107ca57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561082d57600080fd5b82018360208201111561083f57600080fd5b8035906020019184600183028401116401000000008311171561086157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156108ee57600080fd5b82018360208201111561090057600080fd5b8035906020019184600183028401116401000000008311171561092257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611350565b005b6109a26004803603602081101561098c57600080fd5b8101908080359060200190929190505050611783565b6040518082815260200191505060405180910390f35b6109c06117a3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008084905060008686604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090506000808373ffffffffffffffffffffffffffffffffffffffff1663838d6e058a89896040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604080518083038186803b158015610b4d57600080fd5b505afa158015610b61573d6000803e3d6000fd5b505050506040513d6040811015610b7757600080fd5b810190808051906020019092919080519060200190929190505050809350819250505060026004811115610ba757fe5b826004811115610bb357fe5b1480610bd5575060036004811115610bc757fe5b826004811115610bd357fe5b145b80610bf55750600480811115610be757fe5b826004811115610bf357fe5b145b1515610c69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f746f6f206561726c79206368616e6e656c20737461746500000000000000000081525060200191505060405180910390fd5b4381101515610ce0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6368616e6e656c206e6f7420736574746c65642079657400000000000000000081525060200191505060405180910390fd5b6000600460008581526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515610dc0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f7265776172645f73656e646572206973207a65726f000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663beabacc88260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600001546040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610f0557600080fd5b505af1158015610f19573d6000803e3d6000fd5b505050506040513d6020811015610f2f57600080fd5b81019080805190602001909291905050501515610fb4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f55444320646964206e6f74207472616e7366657200000000000000000000000081525060200191505060405180910390fd5b838160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe413caa6d70a6d9b51c2af2575a2914490f614355049af8ae7cde5caab9fd20183600001546040518082815260200191505060405180910390a36004600085815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555050600195505050505050949350505050565b60006110bf86868686866117c8565b905095945050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81151561111e57fe5b0485101515611195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6d616c6963696f75736c792062696720736574746c652074696d656f7574000081525060200191505060405180910390fd5b60647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8115156111c157fe5b0486101515611238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6d616c6963696f75736c792062696720636c6f7365645f61745f626c6f636b0081525060200191505060405180910390fd5b6000601e90506000605090506000606488840281151561125457fe5b048901905060006064898585030281151561126b57fe5b0490506000818773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1601018115156112c157fe5b0690508083019550505050505095945050505050565b6112e788888888888888886118e5565b5050505050505050565b600080823b905060008111915050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611360828b8b868b338a886118e5565b600082905060008173ffffffffffffffffffffffffffffffffffffffff1663938bcd678d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561143457600080fd5b505afa158015611448573d6000803e3d6000fd5b505050506040513d602081101561145e57600080fd5b8101908080519060200190929190505050905061147e82828e8e33611f95565b15156114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6e6f7420616c6c6f77656420746f206d6f6e69746f720000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663fadc554b828e8e8e8e8e8e8e6040518963ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156116015780820151818401526020810190506115e6565b50505050905090810190601f16801561162e5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561166757808201518184015260208101905061164c565b50505050905090810190601f1680156116945780820380516001836020036101000a031916815260200191505b509a5050505050505050505050600060405180830381600087803b1580156116bb57600080fd5b505af11580156116cf573d6000803e3d6000fd5b505050508a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a7f486d5933a2980e097e7c32c7fe217158facf1a3973bac8235ac6c8b0e77d3dff87858a604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a4505050505050505050505050565b600060046000838152602001908152602001600020600101549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008086866006808111156117d957fe5b878760405160200180807f19457468657265756d205369676e6564204d6573736167653a0a313831000000815250601d018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140185815260200184815260200183805190602001908083835b6020831015156118885780518252602082019150602081019050602083039250611863565b6001836020036101000a038019825116818451168082178552505050505050905001828152602001955050505050506040516020818303038152906040528051906020012090506118d98184612288565b91505095945050505050565b600088905060008173ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561194e57600080fd5b505afa158015611962573d6000803e3d6000fd5b505050506040513d602081101561197857600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630fabd9e7836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a5d57600080fd5b505afa158015611a71573d6000803e3d6000fd5b505050506040513d6020811015611a8757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515611b23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f556e6b6e6f776e20546f6b656e4e6574776f726b00000000000000000000000081525060200191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1663938bcd678b8b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015611bf257600080fd5b505afa158015611c06573d6000803e3d6000fd5b505050506040513d6020811015611c1c57600080fd5b810190808051906020019092919050505090506000611cda308573ffffffffffffffffffffffffffffffffffffffff16633af973b16040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015611c9757600080fd5b505afa158015611cab573d6000803e3d6000fd5b505050506040513d6020811015611cc157600080fd5b8101908080519060200190929190505050888c896117c8565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515611d7f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f426164207265776172642070726f6f660000000000000000000000000000000081525060200191505060405180910390fd5b6000828d604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090506000600460008381526020019081526020016000209050898160010154101515611e7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f7374616c65206e6f6e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b6080604051908101604052808c81526020018b81526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1681525060046000848152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050505050505050505050505050505050565b60008060008773ffffffffffffffffffffffffffffffffffffffff1663838d6e058888886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604080518083038186803b15801561206e57600080fd5b505afa158015612082573d6000803e3d6000fd5b505050506040513d604081101561209857600080fd5b8101908080519060200190929190805190602001909291905050508093508192505050600260048111156120c857fe5b8260048111156120d457fe5b141515612149576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f6368616e6e656c206e6f7420636c6f736564000000000000000000000000000081525060200191505060405180910390fd5b60008873ffffffffffffffffffffffffffffffffffffffff1663b8378f756040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156121ad57600080fd5b505afa1580156121c1573d6000803e3d6000fd5b505050506040513d60208110156121d757600080fd5b81019080805190602001909291905050509050808210151515612262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f746f6f206c6f7720736574746c6520626c6f636b206e756d626572000000000081525060200191505060405180910390fd5b6000818303905061227681838a8a8a6110f0565b43101594505050505095945050505050565b60006041825114151561229a57600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff1610156122ca57601b810190505b601b8160ff1614806122df5750601c8160ff16145b15156122ea57600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612347573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561238f57600080fd5b8393505050509291505056fea165627a7a723058206b17bbc1a4319275ea44a0615f06a2fd7eeff5c4a3b94215599895b78fba4e620029", - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"token_network_address\",\"type\":\"address\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"monitoring_service_contract_address\",\"type\":\"address\"},{\"name\":\"chain_id\",\"type\":\"uint256\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"},{\"name\":\"reward_amount\",\"type\":\"uint256\"},{\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"recoverAddressFromRewardProofPublic\",\"outputs\":[{\"name\":\"signature_address\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"user_deposit\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"closed_at_block\",\"type\":\"uint256\"},{\"name\":\"settle_timeout\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"monitoring_service_address\",\"type\":\"address\"}],\"name\":\"firstBlockAllowedToMonitor\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"token_network_address\",\"type\":\"address\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"reward_amount\",\"type\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"monitoring_service_address\",\"type\":\"address\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"},{\"name\":\"reward_proof_signature\",\"type\":\"bytes\"}],\"name\":\"updateRewardPublic\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contract_address\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"service_registry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token_network_registry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"},{\"name\":\"reward_amount\",\"type\":\"uint256\"},{\"name\":\"token_network_address\",\"type\":\"address\"},{\"name\":\"reward_proof_signature\",\"type\":\"bytes\"}],\"name\":\"monitor\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"reward_identifier\",\"type\":\"bytes32\"}],\"name\":\"rewardNonce\",\"outputs\":[{\"name\":\"nonce\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_token_address\",\"type\":\"address\"},{\"name\":\"_service_registry_address\",\"type\":\"address\"},{\"name\":\"_udc_address\",\"type\":\"address\"},{\"name\":\"_token_network_registry_address\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"token_network_address\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"reward_amount\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"ms_address\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"raiden_node_address\",\"type\":\"address\"}],\"name\":\"NewBalanceProofReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"ms_address\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"reward_identifier\",\"type\":\"bytes32\"}],\"name\":\"RewardClaimed\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"claimReward(uint256,address,address,address)\":{\"params\":{\"closing_participant\":\"Address of the participant of the channel that called close\",\"non_closing_participant\":\"The other participant of the channel\",\"token_network_address\":\"Address of the Token Network in which the channel exists\"}},\"contractExists(address)\":{\"params\":{\"contract_address\":\"The address to check whether a contract is deployed or not\"},\"return\":\"True if a contract exists, false otherwise\"},\"monitor(address,address,bytes32,uint256,bytes32,bytes,bytes,uint256,address,bytes)\":{\"params\":{\"nonce\":\"Strictly monotonic value used to order BPs omitting PB specific params, since these will not be provided in the future\",\"reward_amount\":\"Amount of tokens to be rewarded\",\"reward_proof_signature\":\"The signature of the signed reward proof\",\"token_network_address\":\"Address of the Token Network in which the channel being monitored exists.\"}}}},\"userdoc\":{\"methods\":{\"claimReward(uint256,address,address,address)\":{\"notice\":\"Called after a monitored channel is settled in order for MS to claim the reward Can be called once per settled channel by everyone on behalf of MS\"},\"contractExists(address)\":{\"notice\":\"Check if a contract exists\"},\"monitor(address,address,bytes32,uint256,bytes32,bytes,bytes,uint256,address,bytes)\":{\"notice\":\"Called by a registered MS, when providing a new balance proof to a monitored channel. Can be called multiple times by different registered MSs as long as the BP provided is newer than the current newest registered BP.\"}}}},\"settings\":{\"compilationTarget\":{\"data/source/test/MonitoringServiceInternalsTest.sol\":\"MonitoringServiceInternalsTest\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":.=.\",\":lib=data/source/lib\",\":raiden=data/source/raiden\",\":services=data/source/services\",\":test=data/source/test\"]},\"sources\":{\"data/source/lib/ECVerify.sol\":{\"keccak256\":\"0x8bb402baa478eb53252d77b63982e12685adda290cf4dfa1d8f510284f8df3e9\",\"urls\":[\"bzzr://474c3db1bb54bb831c32eb2ab67a0e870489994bd4d4b8a8fa24b54935211d43\"]},\"data/source/raiden/SecretRegistry.sol\":{\"keccak256\":\"0xb8078bc048ccdeb7c58026754f22fc378baf3b24090db0f17d10bda6cd4951b4\",\"urls\":[\"bzzr://f7a072330393a85a6a274ef526ac2ca0f8eb217bf5f48c18b3080be7ac3a7ede\"]},\"data/source/raiden/Token.sol\":{\"keccak256\":\"0x41b40819d7f6714550c742f48ce46daeb97255c08bc56e83bb9fde4fbe14c3b4\",\"urls\":[\"bzzr://a20e2bea336fb01584cf4dc80e77bb8db3c33666f77f840fd58559116849ae4b\"]},\"data/source/raiden/TokenNetwork.sol\":{\"keccak256\":\"0xe236e9c266564b1497d45cff4820b670e02cff86a07dba03310705e090620e66\",\"urls\":[\"bzzr://d629bfb011b3a81416e11a53816c3656f439ee2698b91cb015dade173e583a7c\"]},\"data/source/raiden/TokenNetworkRegistry.sol\":{\"keccak256\":\"0x33926a522c34bbeceb6d498c82cc1cf8415404b7348fbe40d16448ea96bc5535\",\"urls\":[\"bzzr://c668bf0336068e6e836dad2ec1c99f6d142ff1bcd4f04ef99fd59abd2e971c8e\"]},\"data/source/raiden/Utils.sol\":{\"keccak256\":\"0x602fd914e5644696d3c5d42e3a39fe6f16e7ddcc93f8864aa7e368a70cb56d0b\",\"urls\":[\"bzzr://b884810b9826074efb212a825d33409c35d9a159681690e821da3643052be3d1\"]},\"data/source/services/MonitoringService.sol\":{\"keccak256\":\"0x455822e01a72b00e47ded74b4ab8060c86738d60c7bde1fc3199de4fbe89cf36\",\"urls\":[\"bzzr://0e3d78d6c4371ccc67aee6da3c9bbb0bba0b9b2fac6d64c23243db34941e7cf6\"]},\"data/source/services/ServiceRegistry.sol\":{\"keccak256\":\"0xb045051a426047705bd2220b4481a1dfe2058992d50b9de9d940a5619035673c\",\"urls\":[\"bzzr://a4c71641c0774f5cc8ec43ac392aefc8a9fb737882c5714e3aa48319d7e05961\"]},\"data/source/services/UserDeposit.sol\":{\"keccak256\":\"0x23fae922fe184ab0e4a1a25349f7ade63103c298625bc29c4f1b285619d054f0\",\"urls\":[\"bzzr://42777a151afd25154d5adfc875921c00261cae360b676cad959e62829b2fe5b6\"]},\"data/source/test/MonitoringServiceInternalsTest.sol\":{\"keccak256\":\"0x73de74a3dcc50806b66a9a6361c620b68154616e0d3a2f9cf7bf90d258ea3767\",\"urls\":[\"bzzr://e4b70d151868ff0610dbc247caeeb536df3924a3efe7b087d1aa8f1dec5ab946\"]}},\"version\":1}" + "bin": "60806040523480156200001157600080fd5b5060405160808062002ac8833981018060405260808110156200003357600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919050505083838383600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156200010c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f546f6b656e2061742061646472657373207a65726f000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515620001b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5365727669636552656769737472792061742061646472657373207a65726f0081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151562000258576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5544432061742061646472657373207a65726f0000000000000000000000000081525060200191505060405180910390fd5b6200027284620006de640100000000026401000000009004565b1515620002e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f746f6b656e20686173206e6f20636f646500000000000000000000000000000081525060200191505060405180910390fd5b6200030183620006de640100000000026401000000009004565b151562000376576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f53657276696365526567697374727920686173206e6f20636f6465000000000081525060200191505060405180910390fd5b6200039082620006de640100000000026401000000009004565b151562000405576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f55444320686173206e6f20636f6465000000000000000000000000000000000081525060200191505060405180910390fd5b6200041f81620006de640100000000026401000000009004565b151562000494576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f546f6b656e4e6574776f726b526567697374727920686173206e6f20636f646581525060200191505060405180910390fd5b836000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156200061d57600080fd5b505afa15801562000632573d6000803e3d6000fd5b505050506040513d60208110156200064957600080fd5b8101908080519060200190929190505050111515620006d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f546f6b656e2077697468207a65726f20746f74616c20737570706c790000000081525060200191505060405180910390fd5b5050505050505050620006f1565b600080823b905060008111915050919050565b6123c780620007016000396000f3fe608060405234801561001057600080fd5b50600436106100c6576000357c0100000000000000000000000000000000000000000000000000000000900480637709bc781161008e5780637709bc781461061457806381c6dac214610670578063b4238f4a146106ba578063d3b6c08014610704578063dcf1376714610976578063fc0c546a146109b8576100c6565b80630e7dfb73146100cb5780633a48602e14610171578063637d89d4146103375780636766923e146103815780636a83a9481461042d575b600080fd5b610157600480360360808110156100e157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a02565b604051808215151515815260200191505060405180910390f35b6102f5600480360360a081101561018757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156101ce57600080fd5b8201836020820111156101e057600080fd5b8035906020019184600183028401116401000000008311171561020257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291908035906020019064010000000081111561026f57600080fd5b82018360208201111561028157600080fd5b803590602001918460018302840111640100000000831117156102a357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506110b0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61033f6110ca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610417600480360360a081101561039757600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110f0565b6040518082815260200191505060405180910390f35b610612600480360361010081101561044457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156104f557600080fd5b82018360208201111561050757600080fd5b8035906020019184600183028401116401000000008311171561052957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561058c57600080fd5b82018360208201111561059e57600080fd5b803590602001918460018302840111640100000000831117156105c057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506112d7565b005b6106566004803603602081101561062a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112f1565b604051808215151515815260200191505060405180910390f35b610678611304565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106c261132a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610974600480360361014081101561071b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561079657600080fd5b8201836020820111156107a857600080fd5b803590602001918460018302840111640100000000831117156107ca57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561082d57600080fd5b82018360208201111561083f57600080fd5b8035906020019184600183028401116401000000008311171561086157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156108ee57600080fd5b82018360208201111561090057600080fd5b8035906020019184600183028401116401000000008311171561092257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611350565b005b6109a26004803603602081101561098c57600080fd5b8101908080359060200190929190505050611783565b6040518082815260200191505060405180910390f35b6109c06117a3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008084905060008686604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090506000808373ffffffffffffffffffffffffffffffffffffffff1663838d6e058a89896040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604080518083038186803b158015610b4d57600080fd5b505afa158015610b61573d6000803e3d6000fd5b505050506040513d6040811015610b7757600080fd5b810190808051906020019092919080519060200190929190505050809350819250505060026004811115610ba757fe5b826004811115610bb357fe5b1480610bd5575060036004811115610bc757fe5b826004811115610bd357fe5b145b80610bf55750600480811115610be757fe5b826004811115610bf357fe5b145b1515610c69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f746f6f206561726c79206368616e6e656c20737461746500000000000000000081525060200191505060405180910390fd5b4381101515610ce0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6368616e6e656c206e6f7420736574746c65642079657400000000000000000081525060200191505060405180910390fd5b6000600460008581526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515610dc0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f7265776172645f73656e646572206973207a65726f000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663beabacc88260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600001546040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610f0557600080fd5b505af1158015610f19573d6000803e3d6000fd5b505050506040513d6020811015610f2f57600080fd5b81019080805190602001909291905050501515610fb4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f55444320646964206e6f74207472616e7366657200000000000000000000000081525060200191505060405180910390fd5b838160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe413caa6d70a6d9b51c2af2575a2914490f614355049af8ae7cde5caab9fd20183600001546040518082815260200191505060405180910390a36004600085815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555050600195505050505050949350505050565b60006110bf86868686866117c8565b905095945050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81151561111e57fe5b0485101515611195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6d616c6963696f75736c792062696720736574746c652074696d656f7574000081525060200191505060405180910390fd5b60647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8115156111c157fe5b0486101515611238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6d616c6963696f75736c792062696720636c6f7365645f61745f626c6f636b0081525060200191505060405180910390fd5b6000601e90506000605090506000606488840281151561125457fe5b048901905060006064898585030281151561126b57fe5b0490506000818773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1601018115156112c157fe5b0690508083019550505050505095945050505050565b6112e788888888888888886118e5565b5050505050505050565b600080823b905060008111915050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611360828b8b868b338a886118e5565b600082905060008173ffffffffffffffffffffffffffffffffffffffff1663938bcd678d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561143457600080fd5b505afa158015611448573d6000803e3d6000fd5b505050506040513d602081101561145e57600080fd5b8101908080519060200190929190505050905061147e82828e8e33611f95565b15156114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6e6f7420616c6c6f77656420746f206d6f6e69746f720000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663fadc554b828e8e8e8e8e8e8e6040518963ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156116015780820151818401526020810190506115e6565b50505050905090810190601f16801561162e5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561166757808201518184015260208101905061164c565b50505050905090810190601f1680156116945780820380516001836020036101000a031916815260200191505b509a5050505050505050505050600060405180830381600087803b1580156116bb57600080fd5b505af11580156116cf573d6000803e3d6000fd5b505050508a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a7f486d5933a2980e097e7c32c7fe217158facf1a3973bac8235ac6c8b0e77d3dff87858a604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a4505050505050505050505050565b600060046000838152602001908152602001600020600101549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008086866006808111156117d957fe5b878760405160200180807f19457468657265756d205369676e6564204d6573736167653a0a313831000000815250601d018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140185815260200184815260200183805190602001908083835b6020831015156118885780518252602082019150602081019050602083039250611863565b6001836020036101000a038019825116818451168082178552505050505050905001828152602001955050505050506040516020818303038152906040528051906020012090506118d98184612288565b91505095945050505050565b600088905060008173ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561194e57600080fd5b505afa158015611962573d6000803e3d6000fd5b505050506040513d602081101561197857600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630fabd9e7836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a5d57600080fd5b505afa158015611a71573d6000803e3d6000fd5b505050506040513d6020811015611a8757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515611b23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f556e6b6e6f776e20546f6b656e4e6574776f726b00000000000000000000000081525060200191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1663938bcd678b8b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015611bf257600080fd5b505afa158015611c06573d6000803e3d6000fd5b505050506040513d6020811015611c1c57600080fd5b810190808051906020019092919050505090506000611cda308573ffffffffffffffffffffffffffffffffffffffff16633af973b16040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015611c9757600080fd5b505afa158015611cab573d6000803e3d6000fd5b505050506040513d6020811015611cc157600080fd5b8101908080519060200190929190505050888c896117c8565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515611d7f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f426164207265776172642070726f6f660000000000000000000000000000000081525060200191505060405180910390fd5b6000828d604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090506000600460008381526020019081526020016000209050898160010154101515611e7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f7374616c65206e6f6e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b6080604051908101604052808c81526020018b81526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1681525060046000848152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050505050505050505050505050505050565b60008060008773ffffffffffffffffffffffffffffffffffffffff1663838d6e058888886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604080518083038186803b15801561206e57600080fd5b505afa158015612082573d6000803e3d6000fd5b505050506040513d604081101561209857600080fd5b8101908080519060200190929190805190602001909291905050508093508192505050600260048111156120c857fe5b8260048111156120d457fe5b141515612149576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f6368616e6e656c206e6f7420636c6f736564000000000000000000000000000081525060200191505060405180910390fd5b60008873ffffffffffffffffffffffffffffffffffffffff1663b8378f756040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156121ad57600080fd5b505afa1580156121c1573d6000803e3d6000fd5b505050506040513d60208110156121d757600080fd5b81019080805190602001909291905050509050808210151515612262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f746f6f206c6f7720736574746c6520626c6f636b206e756d626572000000000081525060200191505060405180910390fd5b6000818303905061227681838a8a8a6110f0565b43101594505050505095945050505050565b60006041825114151561229a57600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff1610156122ca57601b810190505b601b8160ff1614806122df5750601c8160ff16145b15156122ea57600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612347573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561238f57600080fd5b8393505050509291505056fea165627a7a723058200a73ca9b833e7bfc35ce06d96e13d093fa4953da124831676c1860f65a1589630029", + "bin-runtime": "608060405234801561001057600080fd5b50600436106100c6576000357c0100000000000000000000000000000000000000000000000000000000900480637709bc781161008e5780637709bc781461061457806381c6dac214610670578063b4238f4a146106ba578063d3b6c08014610704578063dcf1376714610976578063fc0c546a146109b8576100c6565b80630e7dfb73146100cb5780633a48602e14610171578063637d89d4146103375780636766923e146103815780636a83a9481461042d575b600080fd5b610157600480360360808110156100e157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610a02565b604051808215151515815260200191505060405180910390f35b6102f5600480360360a081101561018757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001906401000000008111156101ce57600080fd5b8201836020820111156101e057600080fd5b8035906020019184600183028401116401000000008311171561020257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001909291908035906020019064010000000081111561026f57600080fd5b82018360208201111561028157600080fd5b803590602001918460018302840111640100000000831117156102a357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506110b0565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61033f6110ca565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610417600480360360a081101561039757600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110f0565b6040518082815260200191505060405180910390f35b610612600480360361010081101561044457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156104f557600080fd5b82018360208201111561050757600080fd5b8035906020019184600183028401116401000000008311171561052957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561058c57600080fd5b82018360208201111561059e57600080fd5b803590602001918460018302840111640100000000831117156105c057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506112d7565b005b6106566004803603602081101561062a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112f1565b604051808215151515815260200191505060405180910390f35b610678611304565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106c261132a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610974600480360361014081101561071b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561079657600080fd5b8201836020820111156107a857600080fd5b803590602001918460018302840111640100000000831117156107ca57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561082d57600080fd5b82018360208201111561083f57600080fd5b8035906020019184600183028401116401000000008311171561086157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156108ee57600080fd5b82018360208201111561090057600080fd5b8035906020019184600183028401116401000000008311171561092257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611350565b005b6109a26004803603602081101561098c57600080fd5b8101908080359060200190929190505050611783565b6040518082815260200191505060405180910390f35b6109c06117a3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60008084905060008686604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090506000808373ffffffffffffffffffffffffffffffffffffffff1663838d6e058a89896040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604080518083038186803b158015610b4d57600080fd5b505afa158015610b61573d6000803e3d6000fd5b505050506040513d6040811015610b7757600080fd5b810190808051906020019092919080519060200190929190505050809350819250505060026004811115610ba757fe5b826004811115610bb357fe5b1480610bd5575060036004811115610bc757fe5b826004811115610bd357fe5b145b80610bf55750600480811115610be757fe5b826004811115610bf357fe5b145b1515610c69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f746f6f206561726c79206368616e6e656c20737461746500000000000000000081525060200191505060405180910390fd5b4381101515610ce0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f6368616e6e656c206e6f7420736574746c65642079657400000000000000000081525060200191505060405180910390fd5b6000600460008581526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515610dc0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f7265776172645f73656e646572206973207a65726f000000000000000000000081525060200191505060405180910390fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663beabacc88260020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168360030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600001546040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015610f0557600080fd5b505af1158015610f19573d6000803e3d6000fd5b505050506040513d6020811015610f2f57600080fd5b81019080805190602001909291905050501515610fb4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f55444320646964206e6f74207472616e7366657200000000000000000000000081525060200191505060405180910390fd5b838160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fe413caa6d70a6d9b51c2af2575a2914490f614355049af8ae7cde5caab9fd20183600001546040518082815260200191505060405180910390a36004600085815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556003820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555050600195505050505050949350505050565b60006110bf86868686866117c8565b905095945050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81151561111e57fe5b0485101515611195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f6d616c6963696f75736c792062696720736574746c652074696d656f7574000081525060200191505060405180910390fd5b60647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8115156111c157fe5b0486101515611238576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f6d616c6963696f75736c792062696720636c6f7365645f61745f626c6f636b0081525060200191505060405180910390fd5b6000601e90506000605090506000606488840281151561125457fe5b048901905060006064898585030281151561126b57fe5b0490506000818773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1601018115156112c157fe5b0690508083019550505050505095945050505050565b6112e788888888888888886118e5565b5050505050505050565b600080823b905060008111915050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611360828b8b868b338a886118e5565b600082905060008173ffffffffffffffffffffffffffffffffffffffff1663938bcd678d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561143457600080fd5b505afa158015611448573d6000803e3d6000fd5b505050506040513d602081101561145e57600080fd5b8101908080519060200190929190505050905061147e82828e8e33611f95565b15156114f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f6e6f7420616c6c6f77656420746f206d6f6e69746f720000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663fadc554b828e8e8e8e8e8e8e6040518963ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808981526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156116015780820151818401526020810190506115e6565b50505050905090810190601f16801561162e5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b8381101561166757808201518184015260208101905061164c565b50505050905090810190601f1680156116945780820380516001836020036101000a031916815260200191505b509a5050505050505050505050600060405180830381600087803b1580156116bb57600080fd5b505af11580156116cf573d6000803e3d6000fd5b505050508a73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff168a7f486d5933a2980e097e7c32c7fe217158facf1a3973bac8235ac6c8b0e77d3dff87858a604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a4505050505050505050505050565b600060046000838152602001908152602001600020600101549050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008086866006808111156117d957fe5b878760405160200180807f19457468657265756d205369676e6564204d6573736167653a0a313831000000815250601d018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140185815260200184815260200183805190602001908083835b6020831015156118885780518252602082019150602081019050602083039250611863565b6001836020036101000a038019825116818451168082178552505050505050905001828152602001955050505050506040516020818303038152906040528051906020012090506118d98184612288565b91505095945050505050565b600088905060008173ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b15801561194e57600080fd5b505afa158015611962573d6000803e3d6000fd5b505050506040513d602081101561197857600080fd5b810190808051906020019092919050505090508173ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630fabd9e7836040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a5d57600080fd5b505afa158015611a71573d6000803e3d6000fd5b505050506040513d6020811015611a8757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515611b23576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f556e6b6e6f776e20546f6b656e4e6574776f726b00000000000000000000000081525060200191505060405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1663938bcd678b8b6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b158015611bf257600080fd5b505afa158015611c06573d6000803e3d6000fd5b505050506040513d6020811015611c1c57600080fd5b810190808051906020019092919050505090506000611cda308573ffffffffffffffffffffffffffffffffffffffff16633af973b16040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b158015611c9757600080fd5b505afa158015611cab573d6000803e3d6000fd5b505050506040513d6020811015611cc157600080fd5b8101908080519060200190929190505050888c896117c8565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515611d7f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f426164207265776172642070726f6f660000000000000000000000000000000081525060200191505060405180910390fd5b6000828d604051602001808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090506000600460008381526020019081526020016000209050898160010154101515611e7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f7374616c65206e6f6e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b6080604051908101604052808c81526020018b81526020018d73ffffffffffffffffffffffffffffffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff1681525060046000848152602001908152602001600020600082015181600001556020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060608201518160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050505050505050505050505050505050565b60008060008773ffffffffffffffffffffffffffffffffffffffff1663838d6e058888886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050604080518083038186803b15801561206e57600080fd5b505afa158015612082573d6000803e3d6000fd5b505050506040513d604081101561209857600080fd5b8101908080519060200190929190805190602001909291905050508093508192505050600260048111156120c857fe5b8260048111156120d457fe5b141515612149576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f6368616e6e656c206e6f7420636c6f736564000000000000000000000000000081525060200191505060405180910390fd5b60008873ffffffffffffffffffffffffffffffffffffffff1663b8378f756040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156121ad57600080fd5b505afa1580156121c1573d6000803e3d6000fd5b505050506040513d60208110156121d757600080fd5b81019080805190602001909291905050509050808210151515612262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f746f6f206c6f7720736574746c6520626c6f636b206e756d626572000000000081525060200191505060405180910390fd5b6000818303905061227681838a8a8a6110f0565b43101594505050505095945050505050565b60006041825114151561229a57600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff1610156122ca57601b810190505b601b8160ff1614806122df5750601c8160ff16145b15156122ea57600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612347573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561238f57600080fd5b8393505050509291505056fea165627a7a723058200a73ca9b833e7bfc35ce06d96e13d093fa4953da124831676c1860f65a1589630029", + "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"token_network_address\",\"type\":\"address\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"}],\"name\":\"claimReward\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"monitoring_service_contract_address\",\"type\":\"address\"},{\"name\":\"chain_id\",\"type\":\"uint256\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"},{\"name\":\"reward_amount\",\"type\":\"uint256\"},{\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"recoverAddressFromRewardProofPublic\",\"outputs\":[{\"name\":\"signature_address\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"user_deposit\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"closed_at_block\",\"type\":\"uint256\"},{\"name\":\"settle_timeout\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"monitoring_service_address\",\"type\":\"address\"}],\"name\":\"firstBlockAllowedToMonitor\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"token_network_address\",\"type\":\"address\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"reward_amount\",\"type\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"monitoring_service_address\",\"type\":\"address\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"},{\"name\":\"reward_proof_signature\",\"type\":\"bytes\"}],\"name\":\"updateRewardPublic\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contract_address\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"service_registry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token_network_registry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"},{\"name\":\"reward_amount\",\"type\":\"uint256\"},{\"name\":\"token_network_address\",\"type\":\"address\"},{\"name\":\"reward_proof_signature\",\"type\":\"bytes\"}],\"name\":\"monitor\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"reward_identifier\",\"type\":\"bytes32\"}],\"name\":\"rewardNonce\",\"outputs\":[{\"name\":\"nonce\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_token_address\",\"type\":\"address\"},{\"name\":\"_service_registry_address\",\"type\":\"address\"},{\"name\":\"_udc_address\",\"type\":\"address\"},{\"name\":\"_token_network_registry_address\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"token_network_address\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"reward_amount\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"ms_address\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"raiden_node_address\",\"type\":\"address\"}],\"name\":\"NewBalanceProofReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"ms_address\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"reward_identifier\",\"type\":\"bytes32\"}],\"name\":\"RewardClaimed\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"claimReward(uint256,address,address,address)\":{\"params\":{\"closing_participant\":\"Address of the participant of the channel that called close\",\"non_closing_participant\":\"The other participant of the channel\",\"token_network_address\":\"Address of the Token Network in which the channel exists\"}},\"contractExists(address)\":{\"params\":{\"contract_address\":\"The address to check whether a contract is deployed or not\"},\"return\":\"True if a contract exists, false otherwise\"},\"monitor(address,address,bytes32,uint256,bytes32,bytes,bytes,uint256,address,bytes)\":{\"params\":{\"nonce\":\"Strictly monotonic value used to order BPs omitting PB specific params, since these will not be provided in the future\",\"reward_amount\":\"Amount of tokens to be rewarded\",\"reward_proof_signature\":\"The signature of the signed reward proof\",\"token_network_address\":\"Address of the Token Network in which the channel being monitored exists.\"}}}},\"userdoc\":{\"methods\":{\"claimReward(uint256,address,address,address)\":{\"notice\":\"Called after a monitored channel is settled in order for MS to claim the reward Can be called once per settled channel by everyone on behalf of MS\"},\"contractExists(address)\":{\"notice\":\"Check if a contract exists\"},\"monitor(address,address,bytes32,uint256,bytes32,bytes,bytes,uint256,address,bytes)\":{\"notice\":\"Called by a registered MS, when providing a new balance proof to a monitored channel. Can be called multiple times by different registered MSs as long as the BP provided is newer than the current newest registered BP.\"}}}},\"settings\":{\"compilationTarget\":{\"data/source/test/MonitoringServiceInternalsTest.sol\":\"MonitoringServiceInternalsTest\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":.=.\",\":lib=data/source/lib\",\":raiden=data/source/raiden\",\":services=data/source/services\",\":test=data/source/test\"]},\"sources\":{\"data/source/lib/ECVerify.sol\":{\"keccak256\":\"0x8bb402baa478eb53252d77b63982e12685adda290cf4dfa1d8f510284f8df3e9\",\"urls\":[\"bzzr://474c3db1bb54bb831c32eb2ab67a0e870489994bd4d4b8a8fa24b54935211d43\"]},\"data/source/raiden/SecretRegistry.sol\":{\"keccak256\":\"0xb8078bc048ccdeb7c58026754f22fc378baf3b24090db0f17d10bda6cd4951b4\",\"urls\":[\"bzzr://f7a072330393a85a6a274ef526ac2ca0f8eb217bf5f48c18b3080be7ac3a7ede\"]},\"data/source/raiden/Token.sol\":{\"keccak256\":\"0x41b40819d7f6714550c742f48ce46daeb97255c08bc56e83bb9fde4fbe14c3b4\",\"urls\":[\"bzzr://a20e2bea336fb01584cf4dc80e77bb8db3c33666f77f840fd58559116849ae4b\"]},\"data/source/raiden/TokenNetwork.sol\":{\"keccak256\":\"0x8a0471fe654a6eabe757133f5c6b3b3a8d19acce975625d097192cc775d94bbe\",\"urls\":[\"bzzr://7c9b05aac5ab23979b7863a4b15421d28ac2b515b673c0b0d296c580b60cde86\"]},\"data/source/raiden/TokenNetworkRegistry.sol\":{\"keccak256\":\"0x33926a522c34bbeceb6d498c82cc1cf8415404b7348fbe40d16448ea96bc5535\",\"urls\":[\"bzzr://c668bf0336068e6e836dad2ec1c99f6d142ff1bcd4f04ef99fd59abd2e971c8e\"]},\"data/source/raiden/Utils.sol\":{\"keccak256\":\"0x602fd914e5644696d3c5d42e3a39fe6f16e7ddcc93f8864aa7e368a70cb56d0b\",\"urls\":[\"bzzr://b884810b9826074efb212a825d33409c35d9a159681690e821da3643052be3d1\"]},\"data/source/services/MonitoringService.sol\":{\"keccak256\":\"0x455822e01a72b00e47ded74b4ab8060c86738d60c7bde1fc3199de4fbe89cf36\",\"urls\":[\"bzzr://0e3d78d6c4371ccc67aee6da3c9bbb0bba0b9b2fac6d64c23243db34941e7cf6\"]},\"data/source/services/ServiceRegistry.sol\":{\"keccak256\":\"0xb045051a426047705bd2220b4481a1dfe2058992d50b9de9d940a5619035673c\",\"urls\":[\"bzzr://a4c71641c0774f5cc8ec43ac392aefc8a9fb737882c5714e3aa48319d7e05961\"]},\"data/source/services/UserDeposit.sol\":{\"keccak256\":\"0x23fae922fe184ab0e4a1a25349f7ade63103c298625bc29c4f1b285619d054f0\",\"urls\":[\"bzzr://42777a151afd25154d5adfc875921c00261cae360b676cad959e62829b2fe5b6\"]},\"data/source/test/MonitoringServiceInternalsTest.sol\":{\"keccak256\":\"0x73de74a3dcc50806b66a9a6361c620b68154616e0d3a2f9cf7bf90d258ea3767\",\"urls\":[\"bzzr://e4b70d151868ff0610dbc247caeeb536df3924a3efe7b087d1aa8f1dec5ab946\"]}},\"version\":1}" }, "OneToN": { "abi": [ @@ -3989,9 +3989,9 @@ "type": "event" } ], - "bin": "60806040526000600860146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b50604051610100806200402183398101806040526101008110156200005057600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151515620000e457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141515156200012157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156200015e57600080fd5b6000861115156200016e57600080fd5b6000851115156200017e57600080fd5b84841115156200018d57600080fd5b620001a788620003cc640100000000026401000000009004565b1515620001b357600080fd5b620001cd87620003cc640100000000026401000000009004565b1515620001d957600080fd5b600082111515620001e957600080fd5b600081111515620001f957600080fd5b8181101515156200020957600080fd5b876000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600281905550846003819055508360048190555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156200032557600080fd5b505afa1580156200033a573d6000803e3d6000fd5b505050506040513d60208110156200035157600080fd5b81019080805190602001909291905050501115156200036f57600080fd5b82600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600581905550806006819055505050505050505050620003df565b600080823b905060008111915050919050565b613c3280620003ef6000396000f3fe608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610116578063b7506d70116100b4578063ee4516d91161008e578063ee4516d914610be8578063fadc554b14610c98578063fc0c546a14610dcf578063fe49ba1c14610e19576101e1565b8063b7506d7014610b51578063b8378f7514610b73578063e5949b5d14610b91576101e1565b806387234237116100f0578063872342371461089f578063938bcd67146109225780639cadb1591461099a5780639e67ca5f14610a45576101e1565b80637c4734f4146105d557806382fd77951461064d578063838d6e0514610808576101e1565b80634845be761161018357806363ea01431161015d57806363ea0143146104c5578063679b37631461053d57806371e759921461055b5780637709bc7814610579576101e1565b80634845be7614610447578063524bef8a146104655780635d6e441b146104a7576101e1565b8063224df42f116101bf578063224df42f1461037757806323aa81741461039557806324d73a93146103df5780633af973b114610429576101e1565b806303d9d253146101e65780630a798f24146102eb5780630fcc0c281461036d575b600080fd5b6102e9600480360360808110156101fc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561026357600080fd5b82018360208201111561027557600080fd5b8035906020019184600183028401116401000000008311171561029757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610e9b565b005b6103576004803603606081101561030157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611259565b6040518082815260200191505060405180910390f35b6103756114ff565b005b61037f6115e4565b6040518082815260200191505060405180910390f35b61039d6115ea565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e7611610565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610431611636565b6040518082815260200191505060405180910390f35b61044f61163c565b6040518082815260200191505060405180910390f35b6104916004803603602081101561047b57600080fd5b8101908080359060200190929190505050611642565b6040518082815260200191505060405180910390f35b6104af61165a565b6040518082815260200191505060405180910390f35b61053b600480360360808110156104db57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611660565b005b610545611aab565b6040518082815260200191505060405180910390f35b610563611ab1565b6040518082815260200191505060405180910390f35b6105bb6004803603602081101561058f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ad5565b604051808215151515815260200191505060405180910390f35b610637600480360360408110156105eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ae8565b6040518082815260200191505060405180910390f35b610806600480360361010081101561066457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156106e957600080fd5b8201836020820111156106fb57600080fd5b8035906020019184600183028401116401000000008311171561071d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561078057600080fd5b82018360208201111561079257600080fd5b803590602001918460018302840111640100000000831117156107b457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611d2a565b005b6108746004803603606081101561081e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f40565b6040518083815260200182600481111561088a57fe5b60ff1681526020019250505060405180910390f35b6108a7612033565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108e75780820151818401526020810190506108cc565b50505050905090810190601f1680156109145780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6109846004803603604081101561093857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061206c565b6040518082815260200191505060405180910390f35b610a4360048036036101208110156109b157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919050505061214b565b005b610b4f600480360360c0811015610a5b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610ab657600080fd5b820183602082011115610ac857600080fd5b80359060200191846001830284011164010000000083111715610aea57600080fd5b909192939192939080359060200190640100000000811115610b0b57600080fd5b820183602082011115610b1d57600080fd5b80359060200191846001830284011164010000000083111715610b3f57600080fd5b909192939192939050505061267f565b005b610b59612aa0565b604051808215151515815260200191505060405180910390f35b610b7b612ab3565b6040518082815260200191505060405180910390f35b610bbd60048036036020811015610ba757600080fd5b8101908080359060200190929190505050612ab9565b60405180838152602001826004811115610bd357fe5b60ff1681526020019250505060405180910390f35b610c5460048036036060811015610bfe57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612aea565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610dcd6004803603610100811015610caf57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610d3457600080fd5b820183602082011115610d4657600080fd5b80359060200191846001830284011164010000000083111715610d6857600080fd5b909192939192939080359060200190640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846001830284011164010000000083111715610dbd57600080fd5b9091929391929390505050612bbf565b005b610dd7612e88565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610e8560048036036060811015610e2f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ead565b6040518082815260200191505060405180910390f35b610ea5838361206c565b8414151515610eb357600080fd5b60006004811115610ec057fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff166004811115610eef57fe5b141515610efb57600080fd5b6000806000806000610f0c86612fa0565b8094508195505050610f1f89888a612ead565b94506000600b6000878152602001908152602001600020905080600101549250848160000154141515610f5157600080fd5b600083111515610f6057600080fd5b610f6a8484613010565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a46000841115611121576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156110da57600080fd5b505af11580156110ee573d6000803e3d6000fd5b505050506040513d602081101561110457600080fd5b8101908080519060200190929190505050151561112057600080fd5b5b6000821115611235576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156111ee57600080fd5b505af1158015611202573d6000803e3d6000fd5b505050506040513d602081101561121857600080fd5b8101908080519060200190929190505050151561123457600080fd5b5b81831015151561124157fe5b83831015151561124d57fe5b50505050505050505050565b6000801515600860149054906101000a900460ff16151514151561127c57600080fd5b81600354811015151561128e57600080fd5b600454811115151561129f57600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561135f57600080fd5b505afa158015611373573d6000803e3d6000fd5b505050506040513d602081101561138957600080fd5b81019080805190602001909291905050501015156113a657600080fd5b600160076000828254019250508190555060075490506113c68787611ae8565b91506000600a6000848152602001908152602001600020541415156113ea57600080fd5b80600a60008481526020019081526020016000208190555060006009600083815260200190815260200160002090506000816000015414151561142957fe5b6000600481111561143657fe5b8160010160009054906101000a900460ff16600481111561145357fe5b14151561145c57fe5b85816000018190555060018160010160006101000a81548160ff0219169083600481111561148657fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b60001515600860149054906101000a900460ff16151514151561152157600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561157d57600080fd5b6001600860146101000a81548160ff0219169083151502179055507f6151930a846a85f5e64d2dd1cc5deeafb010c63eec4b600458158edd0e33f15d600860149054906101000a900460ff16604051808215151515815260200191505060405180910390a1565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b60001515600860149054906101000a900460ff16151514151561168257600080fd5b836001600481111561169057fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff1660048111156116bf57fe5b1415156116cb57600080fd5b6116d5848361206c565b851415156116e257600080fd5b6000831115156116f157600080fd5b600554831115151561170257600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508160000154880394506000851115156117be57600080fd5b8785111515156117cd57600080fd5b87858360000154011415156117de57fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561189c57600080fd5b505afa1580156118b0573d6000803e3d6000fd5b505050506040513d60208110156118c657600080fd5b810190808051906020019092919050505001111515156118e557600080fd5b878260000181905550806000015482600001540193508160000154841015151561190e57600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611a5957600080fd5b505af1158015611a6d573d6000803e3d6000fd5b505050506040513d6020811015611a8357600080fd5b81019080805190602001909291905050501515611a9f57600080fd5b50505050505050505050565b60075481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611b2557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611b6157600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611b9c57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015611c7c578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050611d24565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b8760016004811115611d3857fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115611d6757fe5b141515611d7357600080fd5b611d7d878961206c565b89141515611d8a57600080fd5b600080600960008c8152602001908152602001600020905060028160010160006101000a81548160ff02191690836004811115611dc357fe5b021790555060018160020160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055504381600001600082825401925050819055506000611e478c8a8a8a8a8a613029565b90508073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16141515611e8357600080fd5b6000881115611ee257611e998c8a8a8a8a613255565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515611ed557600080fd5b611ee182848a8c61342b565b5b878a73ffffffffffffffffffffffffffffffffffffffff168d7f09d2f946e008c38931cd739dd20e35146deff8ab3134caee6d54fe50816a81b88c6040518082815260200191505060405180910390a4505050505050505050505050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff16905060006004811115611f8057fe5b816004811115611f8c57fe5b148015611f995750600089115b8015611fa757506007548911155b1561201d5760039050611fbb898989612ead565b93506000600b60008681526020019081526020016000209050611fdf8a898b612ead565b93506000600b6000868152602001908152602001600020905060008260010154148015612010575060008160010154145b1561201a57600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156120a957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156120e557600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561212057600080fd5b600061212c8484611ae8565b9050600a60008281526020019081526020016000205491505092915050565b612155888561206c565b8914151561216257600080fd5b600061216e8986611ae8565b90506000600960008c815260200190815260200160002090506002600481111561219457fe5b8160010160009054906101000a900460ff1660048111156121b157fe5b1415156121bd57600080fd5b4381600001541015156121cf57600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612265828c8c8c61349b565b151561227057600080fd5b61227c8188888861349b565b151561228757600080fd5b612295828c8c848b8b613515565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a6000858152602001908152602001600020600090556123eb8d8d8a8d8d613624565b6123f88d898e8989613624565b8c7f8db0e7d323ca765ce9ab550780131837e4942ccfea3be2b635ec1084c81f72628c8b8a896040518085815260200184815260200183815260200182815260200194505050505060405180910390a260008b111561255c576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561251557600080fd5b505af1158015612529573d6000803e3d6000fd5b505050506040513d602081101561253f57600080fd5b8101908080519060200190929190505050151561255b57600080fd5b5b6000871115612670576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561262957600080fd5b505af115801561263d573d6000803e3d6000fd5b505050506040513d602081101561265357600080fd5b8101908080519060200190929190505050151561266f57600080fd5b5b50505050505050505050505050565b876001600481111561268d57fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff1660048111156126bc57fe5b1415156126c857600080fd5b6000806000808a1115156126db57600080fd5b88431015156126e957600080fd5b61273a8c8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613674565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561277357600080fd5b6127c48c8c8c8c8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613674565b90506127d08b8261206c565b8c1415156127dd57600080fd5b6000600960008e8152602001908152602001600020905060008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000015482600001540195508581600101548e01111515156128a057600080fd5b80600101548d018d111515156128b557600080fd5b81600101548d0394508c85111515156128cd57600080fd5b6000851115156128dc57600080fd5b8c858360010154011415156128ed57fe5b8d73ffffffffffffffffffffffffffffffffffffffff168f7f98ed0357b86b313fa9f968de5c9d2bcf591432355b34aa1ab7e3e9e92f4284088f6040518082815260200191505060405180910390a38c82600101819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8f876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612a0957600080fd5b505af1158015612a1d573d6000803e3d6000fd5b505050506040513d6020811015612a3357600080fd5b81019080805190602001909291905050501515612a4f57600080fd5b81600001548610151515612a5f57fe5b80600001548610151515612a6f57fe5b60008260040154141515612a7f57fe5b60008160040154141515612a8f57fe5b505050505050505050505050505050565b600860149054906101000a900460ff1681565b60035481565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612b588c8c8c612ead565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b612bc9898961206c565b8a141515612bd657600080fd5b60006001028714151515612be957600080fd5b600086111515612bf857600080fd5b6000806000600960008e8152602001908152602001600020905060026004811115612c1f57fe5b8160010160009054906101000a900460ff166004811115612c3c57fe5b141515612c4857600080fd5b43816000015410151515612c5b57600080fd5b612cf18d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613029565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612d2d57600080fd5b612d7e8d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613255565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16141515612dba57600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff161515612e1c57600080fd5b612e28828e8c8e61342b565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f6fc5b4f4f9e65bfdc4c45456373906876cee8832b605478e281902468875eaed8e6040518082815260200191505060405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515612eea57600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b6000806000835190506000606082811515612fb757fe5b06141515612fc457600080fd5b6000806000806000602094505b85851015612ff557612fe38986613885565b92508284019350606085019450612fd1565b88805190602001209050808497509750505050505050915091565b600081831161301f5782613021565b815b905092915050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600260068111156130af57fe5b8d8d8d8d8d604051602001808b805190602001908083835b6020831015156130ec57805182526020820191506020810190506020830392506130c7565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b60208310151561313f578051825260208201915060208101905060208303925061311a565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b6020831015156131f757805182526020820191506020810190506020830392506131d2565b6001836020036101000a0380198251168184511680821785525050505050509050019a505050505050505050505060405160208183030381529060405280519060200120905061324781856139af565b925050509695505050505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600160068111156132db57fe5b8c8c8c8c604051602001808a805190602001908083835b60208310151561331757805182526020820191506020810190506020830392506132f2565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b60208310151561336a5780518252602082019150602081019050602083039250613345565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401878152602001868152602001858152602001848152602001838152602001828152602001995050505050505050505060405160208183030381529060405280519060200120905061341e81856139af565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600401548311151561348257600080fd5b8281600401819055508181600301819055505050505050565b60008060010285600301541480156134b35750600084145b80156134bf5750600083145b156134cd576001905061350d565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b6000806000806000806000613528613bdd565b613530613bdd565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a8160400181815250508981606001818152505061359a8f8d613ac2565b92506135a68282613ae3565b94506135b28584613010565b945084830393506135c3858b613b77565b809b5081965050506135d5848e613b77565b809e5081955050508285111515156135e957fe5b8284111515156135f557fe5b898d85870101018314151561360657fe5b84848e8c985098509850985050505050509650965096509692505050565b60008214156136325761366d565b600061363f868686612ead565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3230300000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600360068111156136fa57fe5b8c8c8c8c604051602001808a805190602001908083835b6020831015156137365780518252602082019150602081019050602083039250613711565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156137895780518252602082019150602081019050602083039250613764565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401838152602001828152602001995050505050505050505060405160208183030381529060405280519060200120905061387881856139af565b9250505095945050505050565b60008060008060008587511115156138a45760009450505050506139a9565b858701519350602086018701519250604086018701519050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561394b57600080fd5b505afa15801561395f573d6000803e3d6000fd5b505050506040513d602081101561397557600080fd5b8101908080519060200190929190505050915060008214806139975750818411155b156139a157600092505b829450505050505b92915050565b6000604182511415156139c157600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff1610156139f157601b810190505b601b8160ff161480613a065750601c8160ff16145b1515613a1157600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613a6e573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613ab657600080fd5b83935050505092915050565b60008160010154836001015483600001548560000154010303905092915050565b6000806000806000613afd87604001518860600151613b9c565b9350613b1186604001518760600151613b9c565b9250838310151515613b2257600080fd5b86604001518410151515613b3257fe5b85604001518310151515613b4257fe5b8383039150613b55828860000151613b9c565b9050613b65818860200151613b77565b50809150508094505050505092915050565b600080828411613b8c57600084819150613b91565b828403835b915091509250929050565b600080828401905083811015613bd2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613bd4565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a723058206bb6affb65a164571332eec843aad01588b035149b814ef684881f0f9fcf53680029", - "bin-runtime": "608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610116578063b7506d70116100b4578063ee4516d91161008e578063ee4516d914610be8578063fadc554b14610c98578063fc0c546a14610dcf578063fe49ba1c14610e19576101e1565b8063b7506d7014610b51578063b8378f7514610b73578063e5949b5d14610b91576101e1565b806387234237116100f0578063872342371461089f578063938bcd67146109225780639cadb1591461099a5780639e67ca5f14610a45576101e1565b80637c4734f4146105d557806382fd77951461064d578063838d6e0514610808576101e1565b80634845be761161018357806363ea01431161015d57806363ea0143146104c5578063679b37631461053d57806371e759921461055b5780637709bc7814610579576101e1565b80634845be7614610447578063524bef8a146104655780635d6e441b146104a7576101e1565b8063224df42f116101bf578063224df42f1461037757806323aa81741461039557806324d73a93146103df5780633af973b114610429576101e1565b806303d9d253146101e65780630a798f24146102eb5780630fcc0c281461036d575b600080fd5b6102e9600480360360808110156101fc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561026357600080fd5b82018360208201111561027557600080fd5b8035906020019184600183028401116401000000008311171561029757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610e9b565b005b6103576004803603606081101561030157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611259565b6040518082815260200191505060405180910390f35b6103756114ff565b005b61037f6115e4565b6040518082815260200191505060405180910390f35b61039d6115ea565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e7611610565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610431611636565b6040518082815260200191505060405180910390f35b61044f61163c565b6040518082815260200191505060405180910390f35b6104916004803603602081101561047b57600080fd5b8101908080359060200190929190505050611642565b6040518082815260200191505060405180910390f35b6104af61165a565b6040518082815260200191505060405180910390f35b61053b600480360360808110156104db57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611660565b005b610545611aab565b6040518082815260200191505060405180910390f35b610563611ab1565b6040518082815260200191505060405180910390f35b6105bb6004803603602081101561058f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ad5565b604051808215151515815260200191505060405180910390f35b610637600480360360408110156105eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ae8565b6040518082815260200191505060405180910390f35b610806600480360361010081101561066457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156106e957600080fd5b8201836020820111156106fb57600080fd5b8035906020019184600183028401116401000000008311171561071d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561078057600080fd5b82018360208201111561079257600080fd5b803590602001918460018302840111640100000000831117156107b457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611d2a565b005b6108746004803603606081101561081e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f40565b6040518083815260200182600481111561088a57fe5b60ff1681526020019250505060405180910390f35b6108a7612033565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108e75780820151818401526020810190506108cc565b50505050905090810190601f1680156109145780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6109846004803603604081101561093857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061206c565b6040518082815260200191505060405180910390f35b610a4360048036036101208110156109b157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919050505061214b565b005b610b4f600480360360c0811015610a5b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610ab657600080fd5b820183602082011115610ac857600080fd5b80359060200191846001830284011164010000000083111715610aea57600080fd5b909192939192939080359060200190640100000000811115610b0b57600080fd5b820183602082011115610b1d57600080fd5b80359060200191846001830284011164010000000083111715610b3f57600080fd5b909192939192939050505061267f565b005b610b59612aa0565b604051808215151515815260200191505060405180910390f35b610b7b612ab3565b6040518082815260200191505060405180910390f35b610bbd60048036036020811015610ba757600080fd5b8101908080359060200190929190505050612ab9565b60405180838152602001826004811115610bd357fe5b60ff1681526020019250505060405180910390f35b610c5460048036036060811015610bfe57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612aea565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610dcd6004803603610100811015610caf57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610d3457600080fd5b820183602082011115610d4657600080fd5b80359060200191846001830284011164010000000083111715610d6857600080fd5b909192939192939080359060200190640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846001830284011164010000000083111715610dbd57600080fd5b9091929391929390505050612bbf565b005b610dd7612e88565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610e8560048036036060811015610e2f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ead565b6040518082815260200191505060405180910390f35b610ea5838361206c565b8414151515610eb357600080fd5b60006004811115610ec057fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff166004811115610eef57fe5b141515610efb57600080fd5b6000806000806000610f0c86612fa0565b8094508195505050610f1f89888a612ead565b94506000600b6000878152602001908152602001600020905080600101549250848160000154141515610f5157600080fd5b600083111515610f6057600080fd5b610f6a8484613010565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a46000841115611121576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156110da57600080fd5b505af11580156110ee573d6000803e3d6000fd5b505050506040513d602081101561110457600080fd5b8101908080519060200190929190505050151561112057600080fd5b5b6000821115611235576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156111ee57600080fd5b505af1158015611202573d6000803e3d6000fd5b505050506040513d602081101561121857600080fd5b8101908080519060200190929190505050151561123457600080fd5b5b81831015151561124157fe5b83831015151561124d57fe5b50505050505050505050565b6000801515600860149054906101000a900460ff16151514151561127c57600080fd5b81600354811015151561128e57600080fd5b600454811115151561129f57600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561135f57600080fd5b505afa158015611373573d6000803e3d6000fd5b505050506040513d602081101561138957600080fd5b81019080805190602001909291905050501015156113a657600080fd5b600160076000828254019250508190555060075490506113c68787611ae8565b91506000600a6000848152602001908152602001600020541415156113ea57600080fd5b80600a60008481526020019081526020016000208190555060006009600083815260200190815260200160002090506000816000015414151561142957fe5b6000600481111561143657fe5b8160010160009054906101000a900460ff16600481111561145357fe5b14151561145c57fe5b85816000018190555060018160010160006101000a81548160ff0219169083600481111561148657fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b60001515600860149054906101000a900460ff16151514151561152157600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561157d57600080fd5b6001600860146101000a81548160ff0219169083151502179055507f6151930a846a85f5e64d2dd1cc5deeafb010c63eec4b600458158edd0e33f15d600860149054906101000a900460ff16604051808215151515815260200191505060405180910390a1565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b60001515600860149054906101000a900460ff16151514151561168257600080fd5b836001600481111561169057fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff1660048111156116bf57fe5b1415156116cb57600080fd5b6116d5848361206c565b851415156116e257600080fd5b6000831115156116f157600080fd5b600554831115151561170257600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508160000154880394506000851115156117be57600080fd5b8785111515156117cd57600080fd5b87858360000154011415156117de57fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561189c57600080fd5b505afa1580156118b0573d6000803e3d6000fd5b505050506040513d60208110156118c657600080fd5b810190808051906020019092919050505001111515156118e557600080fd5b878260000181905550806000015482600001540193508160000154841015151561190e57600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611a5957600080fd5b505af1158015611a6d573d6000803e3d6000fd5b505050506040513d6020811015611a8357600080fd5b81019080805190602001909291905050501515611a9f57600080fd5b50505050505050505050565b60075481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611b2557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611b6157600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611b9c57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015611c7c578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050611d24565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b8760016004811115611d3857fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115611d6757fe5b141515611d7357600080fd5b611d7d878961206c565b89141515611d8a57600080fd5b600080600960008c8152602001908152602001600020905060028160010160006101000a81548160ff02191690836004811115611dc357fe5b021790555060018160020160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055504381600001600082825401925050819055506000611e478c8a8a8a8a8a613029565b90508073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16141515611e8357600080fd5b6000881115611ee257611e998c8a8a8a8a613255565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515611ed557600080fd5b611ee182848a8c61342b565b5b878a73ffffffffffffffffffffffffffffffffffffffff168d7f09d2f946e008c38931cd739dd20e35146deff8ab3134caee6d54fe50816a81b88c6040518082815260200191505060405180910390a4505050505050505050505050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff16905060006004811115611f8057fe5b816004811115611f8c57fe5b148015611f995750600089115b8015611fa757506007548911155b1561201d5760039050611fbb898989612ead565b93506000600b60008681526020019081526020016000209050611fdf8a898b612ead565b93506000600b6000868152602001908152602001600020905060008260010154148015612010575060008160010154145b1561201a57600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156120a957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156120e557600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561212057600080fd5b600061212c8484611ae8565b9050600a60008281526020019081526020016000205491505092915050565b612155888561206c565b8914151561216257600080fd5b600061216e8986611ae8565b90506000600960008c815260200190815260200160002090506002600481111561219457fe5b8160010160009054906101000a900460ff1660048111156121b157fe5b1415156121bd57600080fd5b4381600001541015156121cf57600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612265828c8c8c61349b565b151561227057600080fd5b61227c8188888861349b565b151561228757600080fd5b612295828c8c848b8b613515565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a6000858152602001908152602001600020600090556123eb8d8d8a8d8d613624565b6123f88d898e8989613624565b8c7f8db0e7d323ca765ce9ab550780131837e4942ccfea3be2b635ec1084c81f72628c8b8a896040518085815260200184815260200183815260200182815260200194505050505060405180910390a260008b111561255c576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561251557600080fd5b505af1158015612529573d6000803e3d6000fd5b505050506040513d602081101561253f57600080fd5b8101908080519060200190929190505050151561255b57600080fd5b5b6000871115612670576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561262957600080fd5b505af115801561263d573d6000803e3d6000fd5b505050506040513d602081101561265357600080fd5b8101908080519060200190929190505050151561266f57600080fd5b5b50505050505050505050505050565b876001600481111561268d57fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff1660048111156126bc57fe5b1415156126c857600080fd5b6000806000808a1115156126db57600080fd5b88431015156126e957600080fd5b61273a8c8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613674565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561277357600080fd5b6127c48c8c8c8c8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613674565b90506127d08b8261206c565b8c1415156127dd57600080fd5b6000600960008e8152602001908152602001600020905060008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000015482600001540195508581600101548e01111515156128a057600080fd5b80600101548d018d111515156128b557600080fd5b81600101548d0394508c85111515156128cd57600080fd5b6000851115156128dc57600080fd5b8c858360010154011415156128ed57fe5b8d73ffffffffffffffffffffffffffffffffffffffff168f7f98ed0357b86b313fa9f968de5c9d2bcf591432355b34aa1ab7e3e9e92f4284088f6040518082815260200191505060405180910390a38c82600101819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8f876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612a0957600080fd5b505af1158015612a1d573d6000803e3d6000fd5b505050506040513d6020811015612a3357600080fd5b81019080805190602001909291905050501515612a4f57600080fd5b81600001548610151515612a5f57fe5b80600001548610151515612a6f57fe5b60008260040154141515612a7f57fe5b60008160040154141515612a8f57fe5b505050505050505050505050505050565b600860149054906101000a900460ff1681565b60035481565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612b588c8c8c612ead565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b612bc9898961206c565b8a141515612bd657600080fd5b60006001028714151515612be957600080fd5b600086111515612bf857600080fd5b6000806000600960008e8152602001908152602001600020905060026004811115612c1f57fe5b8160010160009054906101000a900460ff166004811115612c3c57fe5b141515612c4857600080fd5b43816000015410151515612c5b57600080fd5b612cf18d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613029565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612d2d57600080fd5b612d7e8d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613255565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16141515612dba57600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff161515612e1c57600080fd5b612e28828e8c8e61342b565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f6fc5b4f4f9e65bfdc4c45456373906876cee8832b605478e281902468875eaed8e6040518082815260200191505060405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515612eea57600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b6000806000835190506000606082811515612fb757fe5b06141515612fc457600080fd5b6000806000806000602094505b85851015612ff557612fe38986613885565b92508284019350606085019450612fd1565b88805190602001209050808497509750505050505050915091565b600081831161301f5782613021565b815b905092915050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600260068111156130af57fe5b8d8d8d8d8d604051602001808b805190602001908083835b6020831015156130ec57805182526020820191506020810190506020830392506130c7565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b60208310151561313f578051825260208201915060208101905060208303925061311a565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b6020831015156131f757805182526020820191506020810190506020830392506131d2565b6001836020036101000a0380198251168184511680821785525050505050509050019a505050505050505050505060405160208183030381529060405280519060200120905061324781856139af565b925050509695505050505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600160068111156132db57fe5b8c8c8c8c604051602001808a805190602001908083835b60208310151561331757805182526020820191506020810190506020830392506132f2565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b60208310151561336a5780518252602082019150602081019050602083039250613345565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401878152602001868152602001858152602001848152602001838152602001828152602001995050505050505050505060405160208183030381529060405280519060200120905061341e81856139af565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600401548311151561348257600080fd5b8281600401819055508181600301819055505050505050565b60008060010285600301541480156134b35750600084145b80156134bf5750600083145b156134cd576001905061350d565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b6000806000806000806000613528613bdd565b613530613bdd565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a8160400181815250508981606001818152505061359a8f8d613ac2565b92506135a68282613ae3565b94506135b28584613010565b945084830393506135c3858b613b77565b809b5081965050506135d5848e613b77565b809e5081955050508285111515156135e957fe5b8284111515156135f557fe5b898d85870101018314151561360657fe5b84848e8c985098509850985050505050509650965096509692505050565b60008214156136325761366d565b600061363f868686612ead565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3230300000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600360068111156136fa57fe5b8c8c8c8c604051602001808a805190602001908083835b6020831015156137365780518252602082019150602081019050602083039250613711565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156137895780518252602082019150602081019050602083039250613764565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401838152602001828152602001995050505050505050505060405160208183030381529060405280519060200120905061387881856139af565b9250505095945050505050565b60008060008060008587511115156138a45760009450505050506139a9565b858701519350602086018701519250604086018701519050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561394b57600080fd5b505afa15801561395f573d6000803e3d6000fd5b505050506040513d602081101561397557600080fd5b8101908080519060200190929190505050915060008214806139975750818411155b156139a157600092505b829450505050505b92915050565b6000604182511415156139c157600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff1610156139f157601b810190505b601b8160ff161480613a065750601c8160ff16145b1515613a1157600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613a6e573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613ab657600080fd5b83935050505092915050565b60008160010154836001015483600001548560000154010303905092915050565b6000806000806000613afd87604001518860600151613b9c565b9350613b1186604001518760600151613b9c565b9250838310151515613b2257600080fd5b86604001518410151515613b3257fe5b85604001518310151515613b4257fe5b8383039150613b55828860000151613b9c565b9050613b65818860200151613b77565b50809150508094505050505092915050565b600080828411613b8c57600084819150613b91565b828403835b915091509250929050565b600080828401905083811015613bd2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613bd4565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a723058206bb6affb65a164571332eec843aad01588b035149b814ef684881f0f9fcf53680029", - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"address\"},{\"name\":\"sender\",\"type\":\"address\"},{\"name\":\"locks\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"openChannel\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"deprecate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_max\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"deprecation_executor\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"secret_registry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"chain_id\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token_network_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"participants_hash_to_channel_identifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_participant_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"total_deposit\",\"type\":\"uint256\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"setTotalDeposit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_counter\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_SAFE_UINT256\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contract_address\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getParticipantsHash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"}],\"name\":\"closeChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"}],\"name\":\"getChannelInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"signature_prefix\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant1_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locksroot\",\"type\":\"bytes32\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"participant2_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locksroot\",\"type\":\"bytes32\"}],\"name\":\"settleChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"total_withdraw\",\"type\":\"uint256\"},{\"name\":\"expiration_block\",\"type\":\"uint256\"},{\"name\":\"participant_signature\",\"type\":\"bytes\"},{\"name\":\"partner_signature\",\"type\":\"bytes\"}],\"name\":\"setTotalWithdraw\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"safety_deprecation_switch\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_min\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"channels\",\"outputs\":[{\"name\":\"settle_block_number\",\"type\":\"uint256\"},{\"name\":\"state\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelParticipantInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bool\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"}],\"name\":\"updateNonClosingBalanceProof\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"getUnlockIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_token_address\",\"type\":\"address\"},{\"name\":\"_secret_registry\",\"type\":\"address\"},{\"name\":\"_chain_id\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_min\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_max\",\"type\":\"uint256\"},{\"name\":\"_deprecation_executor\",\"type\":\"address\"},{\"name\":\"_channel_participant_deposit_limit\",\"type\":\"uint256\"},{\"name\":\"_token_network_deposit_limit\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant1\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"participant2\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"ChannelOpened\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"total_deposit\",\"type\":\"uint256\"}],\"name\":\"ChannelNewDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"new_value\",\"type\":\"bool\"}],\"name\":\"DeprecationSwitch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"total_withdraw\",\"type\":\"uint256\"}],\"name\":\"ChannelWithdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"balance_hash\",\"type\":\"bytes32\"}],\"name\":\"ChannelClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"locksroot\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"unlocked_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"returned_tokens\",\"type\":\"uint256\"}],\"name\":\"ChannelUnlocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"balance_hash\",\"type\":\"bytes32\"}],\"name\":\"NonClosingBalanceProofUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant1_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant1_locksroot\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"participant2_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant2_locksroot\",\"type\":\"bytes32\"}],\"name\":\"ChannelSettled\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"closeChannel(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"closing_participant\":\"Channel participant who closes the channel.\",\"closing_signature\":\"Closing participant's signature of the balance proof data.\",\"non_closing_participant\":\"Channel partner of the `closing_participant`, who provided the balance proof.\",\"non_closing_signature\":\"Non-closing participant's signature of the balance proof data.\",\"nonce\":\"Strictly monotonic value used to order transfers.\"}},\"constructor\":{\"params\":{\"_chain_id\":\"EIP-155 Chain ID of the blockchain where this instance is being deployed.\",\"_channel_participant_deposit_limit\":\"The maximum amount of tokens that can be deposited by each participant of each channel. MAX_SAFE_UINT256 means no limits.\",\"_deprecation_executor\":\"The Ethereum address that can disable new deposits and channel creation.\",\"_secret_registry\":\"The address of SecretRegistry contract that witnesses the onchain secret reveals.\",\"_settlement_timeout_max\":\"The longest settlement period (in number of blocks) that can be chosen at the channel opening.\",\"_settlement_timeout_min\":\"The shortest settlement period (in number of blocks) that can be chosen at the channel opening.\",\"_token_address\":\"The address of the ERC20 token contract.\",\"_token_network_deposit_limit\":\"The maximum amount of tokens that this contract can hold. MAX_SAFE_UINT256 means no limits.\"}},\"contractExists(address)\":{\"params\":{\"contract_address\":\"The address to check whether a contract is deployed or not\"},\"return\":\"True if a contract exists, false otherwise\"},\"getChannelIdentifier(address,address)\":{\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"},\"return\":\"Unique identifier for the channel. It can be 0 if channel does not exist.\"},\"getChannelInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Address of a channel participant.\",\"participant2\":\"Address of the other channel participant.\"},\"return\":\"Channel settle_block_number and state.\"},\"getChannelParticipantInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Address of the channel participant whose data will be returned.\",\"partner\":\"Address of the channel partner.\"},\"return\":\"Participant's deposit, withdrawn_amount, whether the participant has called `closeChannel` or not, balance_hash, nonce, locksroot, locked_amount.\"},\"getParticipantsHash(address,address)\":{\"details\":\"Get the hash of the participant addresses, ordered lexicographically.\",\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"}},\"getUnlockIdentifier(uint256,address,address)\":{\"details\":\"Get the hash of the channel identifier and the participant addresses (whose ordering matters). The hash might be useful for the receiver to look up the appropriate UnlockData to claim.\",\"params\":{\"channel_identifier\":\"Identifier for the channel which the UnlockData is about.\",\"receiver\":\"Receiver of the pending transfers that the UnlockData represents.\",\"sender\":\"Sender of the pending transfers that the UnlockData represents.\"}},\"openChannel(address,address,uint256)\":{\"params\":{\"participant1\":\"Ethereum address of a channel participant.\",\"participant2\":\"Ethereum address of the other channel participant.\",\"settle_timeout\":\"Number of blocks that need to be mined between a call to closeChannel and settleChannel.\"}},\"setTotalDeposit(uint256,address,uint256,address)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Channel participant whose deposit is being set.\",\"partner\":\"Channel partner address, needed to compute the total channel deposit.\",\"total_deposit\":\"The total amount of tokens that the participant will have as a deposit.\"}},\"setTotalWithdraw(uint256,address,uint256,uint256,bytes,bytes)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Channel participant, who will receive the withdrawn amount.\",\"participant_signature\":\"Participant's signature on the withdraw data.\",\"partner_signature\":\"Partner's signature on the withdraw data.\",\"total_withdraw\":\"Total amount of tokens that are marked as withdrawn from the channel during the channel lifecycle.\"}},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Channel participant.\",\"participant1_locked_amount\":\"Amount of tokens owed by `participant1` to `participant2`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant1_locksroot\":\"The latest known hash of the pending hash-time locks of `participant1`, used to validate the unlocked proofs. If no balance_hash has been submitted, locksroot is ignored.\",\"participant1_transferred_amount\":\"The latest known amount of tokens transferred from `participant1` to `participant2`.\",\"participant2\":\"Other channel participant.\",\"participant2_locked_amount\":\"Amount of tokens owed by `participant2` to `participant1`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant2_locksroot\":\"The latest known hash of the pending hash-time locks of `participant2`, used to validate the unlocked proofs. If no balance_hash has been submitted, locksroot is ignored.\",\"participant2_transferred_amount\":\"The latest known amount of tokens transferred from `participant2` to `participant1`.\"}},\"unlock(uint256,address,address,bytes)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"locks\":\"All pending locks concatenated in order of creation. that `sender` sent to `receiver`.\",\"receiver\":\"Address who will receive the claimable unlocked tokens.\",\"sender\":\"Address who sent the pending transfers and will receive the unclaimable unlocked tokens.\"}},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"closing_participant\":\"Channel participant who closed the channel.\",\"closing_signature\":\"Closing participant's signature of the balance proof data.\",\"non_closing_participant\":\"Channel participant who needs to update the balance proof.\",\"non_closing_signature\":\"Non-closing participant signature of the balance proof data.\",\"nonce\":\"Strictly monotonic value used to order transfers.\"}}},\"title\":\"TokenNetwork\"},\"userdoc\":{\"methods\":{\"closeChannel(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"notice\":\"Close the channel defined by the two participant addresses. Anybody can call this function on behalf of a participant (called the closing participant), providing a balance proof signed by both parties. Callable only once.\"},\"contractExists(address)\":{\"notice\":\"Check if a contract exists\"},\"getChannelIdentifier(address,address)\":{\"notice\":\"Returns the unique identifier for the channel given by the contract.\"},\"getChannelInfo(uint256,address,address)\":{\"notice\":\"The contract cannot really distinguish Settled and Removed states, especially when wrong participants are given as input. The contract does not remember the participants of the channel.\"},\"openChannel(address,address,uint256)\":{\"notice\":\"Opens a new channel between `participant1` and `participant2`. Can be called by anyone.\"},\"setTotalDeposit(uint256,address,uint256,address)\":{\"notice\":\"Sets the channel participant total deposit value. Can be called by anyone.\"},\"setTotalWithdraw(uint256,address,uint256,uint256,bytes,bytes)\":{\"notice\":\"Allows `participant` to withdraw tokens from the channel that he has with `partner`, without closing it. Can be called by anyone. Can only be called once per each signed withdraw message.\"},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"notice\":\"Settles the balance between the two parties. Note that arguments order counts: `participant1_transferred_amount + participant1_locked_amount` <= `participant2_transferred_amount + participant2_locked_amount`\"},\"unlock(uint256,address,address,bytes)\":{\"notice\":\"Unlocks all pending off-chain transfers from `sender` to `receiver` and sends the locked tokens corresponding to locks with secrets registered on-chain to the `receiver`. Locked tokens corresponding to locks where the secret was not revealed on-chain will return to the `sender`. Anyone can call unlock.\"},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"notice\":\"Called on a closed channel, the function allows the non-closing participant to provide the last balance proof, which modifies the closing participant's state. Can be called multiple times by anyone.\"}},\"notice\":\"Stores and manages all the Raiden Network channels that use the token specified in this TokenNetwork contract.\"}},\"settings\":{\"compilationTarget\":{\"data/source/raiden/TokenNetwork.sol\":\"TokenNetwork\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":.=.\",\":lib=data/source/lib\",\":raiden=data/source/raiden\",\":services=data/source/services\",\":test=data/source/test\"]},\"sources\":{\"data/source/lib/ECVerify.sol\":{\"keccak256\":\"0x8bb402baa478eb53252d77b63982e12685adda290cf4dfa1d8f510284f8df3e9\",\"urls\":[\"bzzr://474c3db1bb54bb831c32eb2ab67a0e870489994bd4d4b8a8fa24b54935211d43\"]},\"data/source/raiden/SecretRegistry.sol\":{\"keccak256\":\"0xb8078bc048ccdeb7c58026754f22fc378baf3b24090db0f17d10bda6cd4951b4\",\"urls\":[\"bzzr://f7a072330393a85a6a274ef526ac2ca0f8eb217bf5f48c18b3080be7ac3a7ede\"]},\"data/source/raiden/Token.sol\":{\"keccak256\":\"0x41b40819d7f6714550c742f48ce46daeb97255c08bc56e83bb9fde4fbe14c3b4\",\"urls\":[\"bzzr://a20e2bea336fb01584cf4dc80e77bb8db3c33666f77f840fd58559116849ae4b\"]},\"data/source/raiden/TokenNetwork.sol\":{\"keccak256\":\"0xe236e9c266564b1497d45cff4820b670e02cff86a07dba03310705e090620e66\",\"urls\":[\"bzzr://d629bfb011b3a81416e11a53816c3656f439ee2698b91cb015dade173e583a7c\"]},\"data/source/raiden/Utils.sol\":{\"keccak256\":\"0x602fd914e5644696d3c5d42e3a39fe6f16e7ddcc93f8864aa7e368a70cb56d0b\",\"urls\":[\"bzzr://b884810b9826074efb212a825d33409c35d9a159681690e821da3643052be3d1\"]}},\"version\":1}" + "bin": "60806040526000600860146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b50604051610100806200402583398101806040526101008110156200005057600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151515620000e457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141515156200012157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156200015e57600080fd5b6000861115156200016e57600080fd5b6000851115156200017e57600080fd5b84841115156200018d57600080fd5b620001a788620003cc640100000000026401000000009004565b1515620001b357600080fd5b620001cd87620003cc640100000000026401000000009004565b1515620001d957600080fd5b600082111515620001e957600080fd5b600081111515620001f957600080fd5b8181101515156200020957600080fd5b876000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600281905550846003819055508360048190555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156200032557600080fd5b505afa1580156200033a573d6000803e3d6000fd5b505050506040513d60208110156200035157600080fd5b81019080805190602001909291905050501115156200036f57600080fd5b82600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600581905550806006819055505050505050505050620003df565b600080823b905060008111915050919050565b613c3680620003ef6000396000f3fe608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610116578063b7506d70116100b4578063ee4516d91161008e578063ee4516d914610be8578063fadc554b14610c98578063fc0c546a14610dcf578063fe49ba1c14610e19576101e1565b8063b7506d7014610b51578063b8378f7514610b73578063e5949b5d14610b91576101e1565b806387234237116100f0578063872342371461089f578063938bcd67146109225780639cadb1591461099a5780639e67ca5f14610a45576101e1565b80637c4734f4146105d557806382fd77951461064d578063838d6e0514610808576101e1565b80634845be761161018357806363ea01431161015d57806363ea0143146104c5578063679b37631461053d57806371e759921461055b5780637709bc7814610579576101e1565b80634845be7614610447578063524bef8a146104655780635d6e441b146104a7576101e1565b8063224df42f116101bf578063224df42f1461037757806323aa81741461039557806324d73a93146103df5780633af973b114610429576101e1565b806303d9d253146101e65780630a798f24146102eb5780630fcc0c281461036d575b600080fd5b6102e9600480360360808110156101fc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561026357600080fd5b82018360208201111561027557600080fd5b8035906020019184600183028401116401000000008311171561029757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610e9b565b005b6103576004803603606081101561030157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611259565b6040518082815260200191505060405180910390f35b6103756114ff565b005b61037f6115e4565b6040518082815260200191505060405180910390f35b61039d6115ea565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e7611610565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610431611636565b6040518082815260200191505060405180910390f35b61044f61163c565b6040518082815260200191505060405180910390f35b6104916004803603602081101561047b57600080fd5b8101908080359060200190929190505050611642565b6040518082815260200191505060405180910390f35b6104af61165a565b6040518082815260200191505060405180910390f35b61053b600480360360808110156104db57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611660565b005b610545611aab565b6040518082815260200191505060405180910390f35b610563611ab1565b6040518082815260200191505060405180910390f35b6105bb6004803603602081101561058f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ad5565b604051808215151515815260200191505060405180910390f35b610637600480360360408110156105eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ae8565b6040518082815260200191505060405180910390f35b610806600480360361010081101561066457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156106e957600080fd5b8201836020820111156106fb57600080fd5b8035906020019184600183028401116401000000008311171561071d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561078057600080fd5b82018360208201111561079257600080fd5b803590602001918460018302840111640100000000831117156107b457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611d2a565b005b6108746004803603606081101561081e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f42565b6040518083815260200182600481111561088a57fe5b60ff1681526020019250505060405180910390f35b6108a7612035565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108e75780820151818401526020810190506108cc565b50505050905090810190601f1680156109145780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6109846004803603604081101561093857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061206e565b6040518082815260200191505060405180910390f35b610a4360048036036101208110156109b157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919050505061214d565b005b610b4f600480360360c0811015610a5b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610ab657600080fd5b820183602082011115610ac857600080fd5b80359060200191846001830284011164010000000083111715610aea57600080fd5b909192939192939080359060200190640100000000811115610b0b57600080fd5b820183602082011115610b1d57600080fd5b80359060200191846001830284011164010000000083111715610b3f57600080fd5b9091929391929390505050612681565b005b610b59612aa2565b604051808215151515815260200191505060405180910390f35b610b7b612ab5565b6040518082815260200191505060405180910390f35b610bbd60048036036020811015610ba757600080fd5b8101908080359060200190929190505050612abb565b60405180838152602001826004811115610bd357fe5b60ff1681526020019250505060405180910390f35b610c5460048036036060811015610bfe57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612aec565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610dcd6004803603610100811015610caf57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610d3457600080fd5b820183602082011115610d4657600080fd5b80359060200191846001830284011164010000000083111715610d6857600080fd5b909192939192939080359060200190640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846001830284011164010000000083111715610dbd57600080fd5b9091929391929390505050612bc1565b005b610dd7612e8c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610e8560048036036060811015610e2f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612eb1565b6040518082815260200191505060405180910390f35b610ea5838361206e565b8414151515610eb357600080fd5b60006004811115610ec057fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff166004811115610eef57fe5b141515610efb57600080fd5b6000806000806000610f0c86612fa4565b8094508195505050610f1f89888a612eb1565b94506000600b6000878152602001908152602001600020905080600101549250848160000154141515610f5157600080fd5b600083111515610f6057600080fd5b610f6a8484613014565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a46000841115611121576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156110da57600080fd5b505af11580156110ee573d6000803e3d6000fd5b505050506040513d602081101561110457600080fd5b8101908080519060200190929190505050151561112057600080fd5b5b6000821115611235576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156111ee57600080fd5b505af1158015611202573d6000803e3d6000fd5b505050506040513d602081101561121857600080fd5b8101908080519060200190929190505050151561123457600080fd5b5b81831015151561124157fe5b83831015151561124d57fe5b50505050505050505050565b6000801515600860149054906101000a900460ff16151514151561127c57600080fd5b81600354811015151561128e57600080fd5b600454811115151561129f57600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561135f57600080fd5b505afa158015611373573d6000803e3d6000fd5b505050506040513d602081101561138957600080fd5b81019080805190602001909291905050501015156113a657600080fd5b600160076000828254019250508190555060075490506113c68787611ae8565b91506000600a6000848152602001908152602001600020541415156113ea57600080fd5b80600a60008481526020019081526020016000208190555060006009600083815260200190815260200160002090506000816000015414151561142957fe5b6000600481111561143657fe5b8160010160009054906101000a900460ff16600481111561145357fe5b14151561145c57fe5b85816000018190555060018160010160006101000a81548160ff0219169083600481111561148657fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b60001515600860149054906101000a900460ff16151514151561152157600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561157d57600080fd5b6001600860146101000a81548160ff0219169083151502179055507f6151930a846a85f5e64d2dd1cc5deeafb010c63eec4b600458158edd0e33f15d600860149054906101000a900460ff16604051808215151515815260200191505060405180910390a1565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b60001515600860149054906101000a900460ff16151514151561168257600080fd5b836001600481111561169057fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff1660048111156116bf57fe5b1415156116cb57600080fd5b6116d5848361206e565b851415156116e257600080fd5b6000831115156116f157600080fd5b600554831115151561170257600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508160000154880394506000851115156117be57600080fd5b8785111515156117cd57600080fd5b87858360000154011415156117de57fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561189c57600080fd5b505afa1580156118b0573d6000803e3d6000fd5b505050506040513d60208110156118c657600080fd5b810190808051906020019092919050505001111515156118e557600080fd5b878260000181905550806000015482600001540193508160000154841015151561190e57600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611a5957600080fd5b505af1158015611a6d573d6000803e3d6000fd5b505050506040513d6020811015611a8357600080fd5b81019080805190602001909291905050501515611a9f57600080fd5b50505050505050505050565b60075481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611b2557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611b6157600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611b9c57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015611c7c578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050611d24565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b8760016004811115611d3857fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115611d6757fe5b141515611d7357600080fd5b611d7d878961206e565b89141515611d8a57600080fd5b600080600960008c8152602001908152602001600020905060028160010160006101000a81548160ff02191690836004811115611dc357fe5b021790555060018160020160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055504381600001600082825401925050819055506000611e4960018d8b8b8b8b8b61302d565b90508073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16141515611e8557600080fd5b6000881115611ee457611e9b8c8a8a8a8a613259565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515611ed757600080fd5b611ee382848a8c61342f565b5b878a73ffffffffffffffffffffffffffffffffffffffff168d7f09d2f946e008c38931cd739dd20e35146deff8ab3134caee6d54fe50816a81b88c6040518082815260200191505060405180910390a4505050505050505050505050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff16905060006004811115611f8257fe5b816004811115611f8e57fe5b148015611f9b5750600089115b8015611fa957506007548911155b1561201f5760039050611fbd898989612eb1565b93506000600b60008681526020019081526020016000209050611fe18a898b612eb1565b93506000600b6000868152602001908152602001600020905060008260010154148015612012575060008160010154145b1561201c57600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156120ab57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156120e757600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561212257600080fd5b600061212e8484611ae8565b9050600a60008281526020019081526020016000205491505092915050565b612157888561206e565b8914151561216457600080fd5b60006121708986611ae8565b90506000600960008c815260200190815260200160002090506002600481111561219657fe5b8160010160009054906101000a900460ff1660048111156121b357fe5b1415156121bf57600080fd5b4381600001541015156121d157600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612267828c8c8c61349f565b151561227257600080fd5b61227e8188888861349f565b151561228957600080fd5b612297828c8c848b8b613519565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a6000858152602001908152602001600020600090556123ed8d8d8a8d8d613628565b6123fa8d898e8989613628565b8c7f8db0e7d323ca765ce9ab550780131837e4942ccfea3be2b635ec1084c81f72628c8b8a896040518085815260200184815260200183815260200182815260200194505050505060405180910390a260008b111561255e576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561251757600080fd5b505af115801561252b573d6000803e3d6000fd5b505050506040513d602081101561254157600080fd5b8101908080519060200190929190505050151561255d57600080fd5b5b6000871115612672576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561262b57600080fd5b505af115801561263f573d6000803e3d6000fd5b505050506040513d602081101561265557600080fd5b8101908080519060200190929190505050151561267157600080fd5b5b50505050505050505050505050565b876001600481111561268f57fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff1660048111156126be57fe5b1415156126ca57600080fd5b6000806000808a1115156126dd57600080fd5b88431015156126eb57600080fd5b61273c8c8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613678565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561277557600080fd5b6127c68c8c8c8c8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613678565b90506127d28b8261206e565b8c1415156127df57600080fd5b6000600960008e8152602001908152602001600020905060008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000015482600001540195508581600101548e01111515156128a257600080fd5b80600101548d018d111515156128b757600080fd5b81600101548d0394508c85111515156128cf57600080fd5b6000851115156128de57600080fd5b8c858360010154011415156128ef57fe5b8d73ffffffffffffffffffffffffffffffffffffffff168f7f98ed0357b86b313fa9f968de5c9d2bcf591432355b34aa1ab7e3e9e92f4284088f6040518082815260200191505060405180910390a38c82600101819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8f876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612a0b57600080fd5b505af1158015612a1f573d6000803e3d6000fd5b505050506040513d6020811015612a3557600080fd5b81019080805190602001909291905050501515612a5157600080fd5b81600001548610151515612a6157fe5b80600001548610151515612a7157fe5b60008260040154141515612a8157fe5b60008160040154141515612a9157fe5b505050505050505050505050505050565b600860149054906101000a900460ff1681565b60035481565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612b5a8c8c8c612eb1565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b612bcb898961206e565b8a141515612bd857600080fd5b60006001028714151515612beb57600080fd5b600086111515612bfa57600080fd5b6000806000600960008e8152602001908152602001600020905060026004811115612c2157fe5b8160010160009054906101000a900460ff166004811115612c3e57fe5b141515612c4a57600080fd5b43816000015410151515612c5d57600080fd5b612cf560028e8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061302d565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612d3157600080fd5b612d828d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613259565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16141515612dbe57600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff161515612e2057600080fd5b612e2c828e8c8e61342f565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f6fc5b4f4f9e65bfdc4c45456373906876cee8832b605478e281902468875eaed8e6040518082815260200191505060405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515612eee57600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b6000806000835190506000606082811515612fbb57fe5b06141515612fc857600080fd5b6000806000806000602094505b85851015612ff957612fe78986613889565b92508284019350606085019450612fd5565b88805190602001209050808497509750505050505050915091565b60008183116130235782613025565b815b905092915050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002548d60068111156130b257fe5b8d8d8d8d8d604051602001808b805190602001908083835b6020831015156130ef57805182526020820191506020810190506020830392506130ca565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b602083101515613142578051825260208201915060208101905060208303925061311d565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b6020831015156131fa57805182526020820191506020810190506020830392506131d5565b6001836020036101000a0380198251168184511680821785525050505050509050019a505050505050505050505060405160208183030381529060405280519060200120905061324a81856139b3565b92505050979650505050505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600160068111156132df57fe5b8c8c8c8c604051602001808a805190602001908083835b60208310151561331b57805182526020820191506020810190506020830392506132f6565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b60208310151561336e5780518252602082019150602081019050602083039250613349565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401878152602001868152602001858152602001848152602001838152602001828152602001995050505050505050505060405160208183030381529060405280519060200120905061342281856139b3565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600401548311151561348657600080fd5b8281600401819055508181600301819055505050505050565b60008060010285600301541480156134b75750600084145b80156134c35750600083145b156134d15760019050613511565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b600080600080600080600061352c613be1565b613534613be1565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a8160400181815250508981606001818152505061359e8f8d613ac6565b92506135aa8282613ae7565b94506135b68584613014565b945084830393506135c7858b613b7b565b809b5081965050506135d9848e613b7b565b809e5081955050508285111515156135ed57fe5b8284111515156135f957fe5b898d85870101018314151561360a57fe5b84848e8c985098509850985050505050509650965096509692505050565b600082141561363657613671565b6000613643868686612eb1565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3230300000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600360068111156136fe57fe5b8c8c8c8c604051602001808a805190602001908083835b60208310151561373a5780518252602082019150602081019050602083039250613715565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b60208310151561378d5780518252602082019150602081019050602083039250613768565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401838152602001828152602001995050505050505050505060405160208183030381529060405280519060200120905061387c81856139b3565b9250505095945050505050565b60008060008060008587511115156138a85760009450505050506139ad565b858701519350602086018701519250604086018701519050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561394f57600080fd5b505afa158015613963573d6000803e3d6000fd5b505050506040513d602081101561397957600080fd5b81019080805190602001909291905050509150600082148061399b5750818411155b156139a557600092505b829450505050505b92915050565b6000604182511415156139c557600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff1610156139f557601b810190505b601b8160ff161480613a0a5750601c8160ff16145b1515613a1557600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613a72573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613aba57600080fd5b83935050505092915050565b60008160010154836001015483600001548560000154010303905092915050565b6000806000806000613b0187604001518860600151613ba0565b9350613b1586604001518760600151613ba0565b9250838310151515613b2657600080fd5b86604001518410151515613b3657fe5b85604001518310151515613b4657fe5b8383039150613b59828860000151613ba0565b9050613b69818860200151613b7b565b50809150508094505050505092915050565b600080828411613b9057600084819150613b95565b828403835b915091509250929050565b600080828401905083811015613bd6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613bd8565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a72305820be5f6f7a51993db83ccc503856b6b85822c059c1d4571692e505e2c566ae41ce0029", + "bin-runtime": "608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610116578063b7506d70116100b4578063ee4516d91161008e578063ee4516d914610be8578063fadc554b14610c98578063fc0c546a14610dcf578063fe49ba1c14610e19576101e1565b8063b7506d7014610b51578063b8378f7514610b73578063e5949b5d14610b91576101e1565b806387234237116100f0578063872342371461089f578063938bcd67146109225780639cadb1591461099a5780639e67ca5f14610a45576101e1565b80637c4734f4146105d557806382fd77951461064d578063838d6e0514610808576101e1565b80634845be761161018357806363ea01431161015d57806363ea0143146104c5578063679b37631461053d57806371e759921461055b5780637709bc7814610579576101e1565b80634845be7614610447578063524bef8a146104655780635d6e441b146104a7576101e1565b8063224df42f116101bf578063224df42f1461037757806323aa81741461039557806324d73a93146103df5780633af973b114610429576101e1565b806303d9d253146101e65780630a798f24146102eb5780630fcc0c281461036d575b600080fd5b6102e9600480360360808110156101fc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561026357600080fd5b82018360208201111561027557600080fd5b8035906020019184600183028401116401000000008311171561029757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610e9b565b005b6103576004803603606081101561030157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611259565b6040518082815260200191505060405180910390f35b6103756114ff565b005b61037f6115e4565b6040518082815260200191505060405180910390f35b61039d6115ea565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e7611610565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610431611636565b6040518082815260200191505060405180910390f35b61044f61163c565b6040518082815260200191505060405180910390f35b6104916004803603602081101561047b57600080fd5b8101908080359060200190929190505050611642565b6040518082815260200191505060405180910390f35b6104af61165a565b6040518082815260200191505060405180910390f35b61053b600480360360808110156104db57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611660565b005b610545611aab565b6040518082815260200191505060405180910390f35b610563611ab1565b6040518082815260200191505060405180910390f35b6105bb6004803603602081101561058f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ad5565b604051808215151515815260200191505060405180910390f35b610637600480360360408110156105eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ae8565b6040518082815260200191505060405180910390f35b610806600480360361010081101561066457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156106e957600080fd5b8201836020820111156106fb57600080fd5b8035906020019184600183028401116401000000008311171561071d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561078057600080fd5b82018360208201111561079257600080fd5b803590602001918460018302840111640100000000831117156107b457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611d2a565b005b6108746004803603606081101561081e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f42565b6040518083815260200182600481111561088a57fe5b60ff1681526020019250505060405180910390f35b6108a7612035565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108e75780820151818401526020810190506108cc565b50505050905090810190601f1680156109145780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6109846004803603604081101561093857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061206e565b6040518082815260200191505060405180910390f35b610a4360048036036101208110156109b157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919050505061214d565b005b610b4f600480360360c0811015610a5b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610ab657600080fd5b820183602082011115610ac857600080fd5b80359060200191846001830284011164010000000083111715610aea57600080fd5b909192939192939080359060200190640100000000811115610b0b57600080fd5b820183602082011115610b1d57600080fd5b80359060200191846001830284011164010000000083111715610b3f57600080fd5b9091929391929390505050612681565b005b610b59612aa2565b604051808215151515815260200191505060405180910390f35b610b7b612ab5565b6040518082815260200191505060405180910390f35b610bbd60048036036020811015610ba757600080fd5b8101908080359060200190929190505050612abb565b60405180838152602001826004811115610bd357fe5b60ff1681526020019250505060405180910390f35b610c5460048036036060811015610bfe57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612aec565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610dcd6004803603610100811015610caf57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610d3457600080fd5b820183602082011115610d4657600080fd5b80359060200191846001830284011164010000000083111715610d6857600080fd5b909192939192939080359060200190640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846001830284011164010000000083111715610dbd57600080fd5b9091929391929390505050612bc1565b005b610dd7612e8c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610e8560048036036060811015610e2f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612eb1565b6040518082815260200191505060405180910390f35b610ea5838361206e565b8414151515610eb357600080fd5b60006004811115610ec057fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff166004811115610eef57fe5b141515610efb57600080fd5b6000806000806000610f0c86612fa4565b8094508195505050610f1f89888a612eb1565b94506000600b6000878152602001908152602001600020905080600101549250848160000154141515610f5157600080fd5b600083111515610f6057600080fd5b610f6a8484613014565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a46000841115611121576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156110da57600080fd5b505af11580156110ee573d6000803e3d6000fd5b505050506040513d602081101561110457600080fd5b8101908080519060200190929190505050151561112057600080fd5b5b6000821115611235576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156111ee57600080fd5b505af1158015611202573d6000803e3d6000fd5b505050506040513d602081101561121857600080fd5b8101908080519060200190929190505050151561123457600080fd5b5b81831015151561124157fe5b83831015151561124d57fe5b50505050505050505050565b6000801515600860149054906101000a900460ff16151514151561127c57600080fd5b81600354811015151561128e57600080fd5b600454811115151561129f57600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561135f57600080fd5b505afa158015611373573d6000803e3d6000fd5b505050506040513d602081101561138957600080fd5b81019080805190602001909291905050501015156113a657600080fd5b600160076000828254019250508190555060075490506113c68787611ae8565b91506000600a6000848152602001908152602001600020541415156113ea57600080fd5b80600a60008481526020019081526020016000208190555060006009600083815260200190815260200160002090506000816000015414151561142957fe5b6000600481111561143657fe5b8160010160009054906101000a900460ff16600481111561145357fe5b14151561145c57fe5b85816000018190555060018160010160006101000a81548160ff0219169083600481111561148657fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b60001515600860149054906101000a900460ff16151514151561152157600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561157d57600080fd5b6001600860146101000a81548160ff0219169083151502179055507f6151930a846a85f5e64d2dd1cc5deeafb010c63eec4b600458158edd0e33f15d600860149054906101000a900460ff16604051808215151515815260200191505060405180910390a1565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b60001515600860149054906101000a900460ff16151514151561168257600080fd5b836001600481111561169057fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff1660048111156116bf57fe5b1415156116cb57600080fd5b6116d5848361206e565b851415156116e257600080fd5b6000831115156116f157600080fd5b600554831115151561170257600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508160000154880394506000851115156117be57600080fd5b8785111515156117cd57600080fd5b87858360000154011415156117de57fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561189c57600080fd5b505afa1580156118b0573d6000803e3d6000fd5b505050506040513d60208110156118c657600080fd5b810190808051906020019092919050505001111515156118e557600080fd5b878260000181905550806000015482600001540193508160000154841015151561190e57600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611a5957600080fd5b505af1158015611a6d573d6000803e3d6000fd5b505050506040513d6020811015611a8357600080fd5b81019080805190602001909291905050501515611a9f57600080fd5b50505050505050505050565b60075481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611b2557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611b6157600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611b9c57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015611c7c578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050611d24565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b8760016004811115611d3857fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115611d6757fe5b141515611d7357600080fd5b611d7d878961206e565b89141515611d8a57600080fd5b600080600960008c8152602001908152602001600020905060028160010160006101000a81548160ff02191690836004811115611dc357fe5b021790555060018160020160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055504381600001600082825401925050819055506000611e4960018d8b8b8b8b8b61302d565b90508073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16141515611e8557600080fd5b6000881115611ee457611e9b8c8a8a8a8a613259565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515611ed757600080fd5b611ee382848a8c61342f565b5b878a73ffffffffffffffffffffffffffffffffffffffff168d7f09d2f946e008c38931cd739dd20e35146deff8ab3134caee6d54fe50816a81b88c6040518082815260200191505060405180910390a4505050505050505050505050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff16905060006004811115611f8257fe5b816004811115611f8e57fe5b148015611f9b5750600089115b8015611fa957506007548911155b1561201f5760039050611fbd898989612eb1565b93506000600b60008681526020019081526020016000209050611fe18a898b612eb1565b93506000600b6000868152602001908152602001600020905060008260010154148015612012575060008160010154145b1561201c57600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156120ab57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156120e757600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561212257600080fd5b600061212e8484611ae8565b9050600a60008281526020019081526020016000205491505092915050565b612157888561206e565b8914151561216457600080fd5b60006121708986611ae8565b90506000600960008c815260200190815260200160002090506002600481111561219657fe5b8160010160009054906101000a900460ff1660048111156121b357fe5b1415156121bf57600080fd5b4381600001541015156121d157600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612267828c8c8c61349f565b151561227257600080fd5b61227e8188888861349f565b151561228957600080fd5b612297828c8c848b8b613519565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a6000858152602001908152602001600020600090556123ed8d8d8a8d8d613628565b6123fa8d898e8989613628565b8c7f8db0e7d323ca765ce9ab550780131837e4942ccfea3be2b635ec1084c81f72628c8b8a896040518085815260200184815260200183815260200182815260200194505050505060405180910390a260008b111561255e576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561251757600080fd5b505af115801561252b573d6000803e3d6000fd5b505050506040513d602081101561254157600080fd5b8101908080519060200190929190505050151561255d57600080fd5b5b6000871115612672576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561262b57600080fd5b505af115801561263f573d6000803e3d6000fd5b505050506040513d602081101561265557600080fd5b8101908080519060200190929190505050151561267157600080fd5b5b50505050505050505050505050565b876001600481111561268f57fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff1660048111156126be57fe5b1415156126ca57600080fd5b6000806000808a1115156126dd57600080fd5b88431015156126eb57600080fd5b61273c8c8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613678565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561277557600080fd5b6127c68c8c8c8c8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613678565b90506127d28b8261206e565b8c1415156127df57600080fd5b6000600960008e8152602001908152602001600020905060008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000015482600001540195508581600101548e01111515156128a257600080fd5b80600101548d018d111515156128b757600080fd5b81600101548d0394508c85111515156128cf57600080fd5b6000851115156128de57600080fd5b8c858360010154011415156128ef57fe5b8d73ffffffffffffffffffffffffffffffffffffffff168f7f98ed0357b86b313fa9f968de5c9d2bcf591432355b34aa1ab7e3e9e92f4284088f6040518082815260200191505060405180910390a38c82600101819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8f876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612a0b57600080fd5b505af1158015612a1f573d6000803e3d6000fd5b505050506040513d6020811015612a3557600080fd5b81019080805190602001909291905050501515612a5157600080fd5b81600001548610151515612a6157fe5b80600001548610151515612a7157fe5b60008260040154141515612a8157fe5b60008160040154141515612a9157fe5b505050505050505050505050505050565b600860149054906101000a900460ff1681565b60035481565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612b5a8c8c8c612eb1565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b612bcb898961206e565b8a141515612bd857600080fd5b60006001028714151515612beb57600080fd5b600086111515612bfa57600080fd5b6000806000600960008e8152602001908152602001600020905060026004811115612c2157fe5b8160010160009054906101000a900460ff166004811115612c3e57fe5b141515612c4a57600080fd5b43816000015410151515612c5d57600080fd5b612cf560028e8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061302d565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612d3157600080fd5b612d828d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613259565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16141515612dbe57600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff161515612e2057600080fd5b612e2c828e8c8e61342f565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f6fc5b4f4f9e65bfdc4c45456373906876cee8832b605478e281902468875eaed8e6040518082815260200191505060405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515612eee57600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b6000806000835190506000606082811515612fbb57fe5b06141515612fc857600080fd5b6000806000806000602094505b85851015612ff957612fe78986613889565b92508284019350606085019450612fd5565b88805190602001209050808497509750505050505050915091565b60008183116130235782613025565b815b905092915050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002548d60068111156130b257fe5b8d8d8d8d8d604051602001808b805190602001908083835b6020831015156130ef57805182526020820191506020810190506020830392506130ca565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b602083101515613142578051825260208201915060208101905060208303925061311d565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b6020831015156131fa57805182526020820191506020810190506020830392506131d5565b6001836020036101000a0380198251168184511680821785525050505050509050019a505050505050505050505060405160208183030381529060405280519060200120905061324a81856139b3565b92505050979650505050505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600160068111156132df57fe5b8c8c8c8c604051602001808a805190602001908083835b60208310151561331b57805182526020820191506020810190506020830392506132f6565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b60208310151561336e5780518252602082019150602081019050602083039250613349565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401878152602001868152602001858152602001848152602001838152602001828152602001995050505050505050505060405160208183030381529060405280519060200120905061342281856139b3565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600401548311151561348657600080fd5b8281600401819055508181600301819055505050505050565b60008060010285600301541480156134b75750600084145b80156134c35750600083145b156134d15760019050613511565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b600080600080600080600061352c613be1565b613534613be1565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a8160400181815250508981606001818152505061359e8f8d613ac6565b92506135aa8282613ae7565b94506135b68584613014565b945084830393506135c7858b613b7b565b809b5081965050506135d9848e613b7b565b809e5081955050508285111515156135ed57fe5b8284111515156135f957fe5b898d85870101018314151561360a57fe5b84848e8c985098509850985050505050509650965096509692505050565b600082141561363657613671565b6000613643868686612eb1565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3230300000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600360068111156136fe57fe5b8c8c8c8c604051602001808a805190602001908083835b60208310151561373a5780518252602082019150602081019050602083039250613715565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b60208310151561378d5780518252602082019150602081019050602083039250613768565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401838152602001828152602001995050505050505050505060405160208183030381529060405280519060200120905061387c81856139b3565b9250505095945050505050565b60008060008060008587511115156138a85760009450505050506139ad565b858701519350602086018701519250604086018701519050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561394f57600080fd5b505afa158015613963573d6000803e3d6000fd5b505050506040513d602081101561397957600080fd5b81019080805190602001909291905050509150600082148061399b5750818411155b156139a557600092505b829450505050505b92915050565b6000604182511415156139c557600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff1610156139f557601b810190505b601b8160ff161480613a0a5750601c8160ff16145b1515613a1557600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613a72573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613aba57600080fd5b83935050505092915050565b60008160010154836001015483600001548560000154010303905092915050565b6000806000806000613b0187604001518860600151613ba0565b9350613b1586604001518760600151613ba0565b9250838310151515613b2657600080fd5b86604001518410151515613b3657fe5b85604001518310151515613b4657fe5b8383039150613b59828860000151613ba0565b9050613b69818860200151613b7b565b50809150508094505050505092915050565b600080828411613b9057600084819150613b95565b828403835b915091509250929050565b600080828401905083811015613bd6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613bd8565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a72305820be5f6f7a51993db83ccc503856b6b85822c059c1d4571692e505e2c566ae41ce0029", + "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"address\"},{\"name\":\"sender\",\"type\":\"address\"},{\"name\":\"locks\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"openChannel\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"deprecate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_max\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"deprecation_executor\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"secret_registry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"chain_id\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token_network_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"participants_hash_to_channel_identifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_participant_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"total_deposit\",\"type\":\"uint256\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"setTotalDeposit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_counter\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_SAFE_UINT256\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contract_address\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getParticipantsHash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"}],\"name\":\"closeChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"}],\"name\":\"getChannelInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"signature_prefix\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant1_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locksroot\",\"type\":\"bytes32\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"participant2_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locksroot\",\"type\":\"bytes32\"}],\"name\":\"settleChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"total_withdraw\",\"type\":\"uint256\"},{\"name\":\"expiration_block\",\"type\":\"uint256\"},{\"name\":\"participant_signature\",\"type\":\"bytes\"},{\"name\":\"partner_signature\",\"type\":\"bytes\"}],\"name\":\"setTotalWithdraw\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"safety_deprecation_switch\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_min\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"channels\",\"outputs\":[{\"name\":\"settle_block_number\",\"type\":\"uint256\"},{\"name\":\"state\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelParticipantInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bool\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"}],\"name\":\"updateNonClosingBalanceProof\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"getUnlockIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_token_address\",\"type\":\"address\"},{\"name\":\"_secret_registry\",\"type\":\"address\"},{\"name\":\"_chain_id\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_min\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_max\",\"type\":\"uint256\"},{\"name\":\"_deprecation_executor\",\"type\":\"address\"},{\"name\":\"_channel_participant_deposit_limit\",\"type\":\"uint256\"},{\"name\":\"_token_network_deposit_limit\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant1\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"participant2\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"ChannelOpened\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"total_deposit\",\"type\":\"uint256\"}],\"name\":\"ChannelNewDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"new_value\",\"type\":\"bool\"}],\"name\":\"DeprecationSwitch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"total_withdraw\",\"type\":\"uint256\"}],\"name\":\"ChannelWithdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"balance_hash\",\"type\":\"bytes32\"}],\"name\":\"ChannelClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"locksroot\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"unlocked_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"returned_tokens\",\"type\":\"uint256\"}],\"name\":\"ChannelUnlocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"balance_hash\",\"type\":\"bytes32\"}],\"name\":\"NonClosingBalanceProofUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant1_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant1_locksroot\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"participant2_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant2_locksroot\",\"type\":\"bytes32\"}],\"name\":\"ChannelSettled\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"closeChannel(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"closing_participant\":\"Channel participant who closes the channel.\",\"closing_signature\":\"Closing participant's signature of the balance proof data.\",\"non_closing_participant\":\"Channel partner of the `closing_participant`, who provided the balance proof.\",\"non_closing_signature\":\"Non-closing participant's signature of the balance proof data.\",\"nonce\":\"Strictly monotonic value used to order transfers.\"}},\"constructor\":{\"params\":{\"_chain_id\":\"EIP-155 Chain ID of the blockchain where this instance is being deployed.\",\"_channel_participant_deposit_limit\":\"The maximum amount of tokens that can be deposited by each participant of each channel. MAX_SAFE_UINT256 means no limits.\",\"_deprecation_executor\":\"The Ethereum address that can disable new deposits and channel creation.\",\"_secret_registry\":\"The address of SecretRegistry contract that witnesses the onchain secret reveals.\",\"_settlement_timeout_max\":\"The longest settlement period (in number of blocks) that can be chosen at the channel opening.\",\"_settlement_timeout_min\":\"The shortest settlement period (in number of blocks) that can be chosen at the channel opening.\",\"_token_address\":\"The address of the ERC20 token contract.\",\"_token_network_deposit_limit\":\"The maximum amount of tokens that this contract can hold. MAX_SAFE_UINT256 means no limits.\"}},\"contractExists(address)\":{\"params\":{\"contract_address\":\"The address to check whether a contract is deployed or not\"},\"return\":\"True if a contract exists, false otherwise\"},\"getChannelIdentifier(address,address)\":{\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"},\"return\":\"Unique identifier for the channel. It can be 0 if channel does not exist.\"},\"getChannelInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Address of a channel participant.\",\"participant2\":\"Address of the other channel participant.\"},\"return\":\"Channel settle_block_number and state.\"},\"getChannelParticipantInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Address of the channel participant whose data will be returned.\",\"partner\":\"Address of the channel partner.\"},\"return\":\"Participant's deposit, withdrawn_amount, whether the participant has called `closeChannel` or not, balance_hash, nonce, locksroot, locked_amount.\"},\"getParticipantsHash(address,address)\":{\"details\":\"Get the hash of the participant addresses, ordered lexicographically.\",\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"}},\"getUnlockIdentifier(uint256,address,address)\":{\"details\":\"Get the hash of the channel identifier and the participant addresses (whose ordering matters). The hash might be useful for the receiver to look up the appropriate UnlockData to claim.\",\"params\":{\"channel_identifier\":\"Identifier for the channel which the UnlockData is about.\",\"receiver\":\"Receiver of the pending transfers that the UnlockData represents.\",\"sender\":\"Sender of the pending transfers that the UnlockData represents.\"}},\"openChannel(address,address,uint256)\":{\"params\":{\"participant1\":\"Ethereum address of a channel participant.\",\"participant2\":\"Ethereum address of the other channel participant.\",\"settle_timeout\":\"Number of blocks that need to be mined between a call to closeChannel and settleChannel.\"}},\"setTotalDeposit(uint256,address,uint256,address)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Channel participant whose deposit is being set.\",\"partner\":\"Channel partner address, needed to compute the total channel deposit.\",\"total_deposit\":\"The total amount of tokens that the participant will have as a deposit.\"}},\"setTotalWithdraw(uint256,address,uint256,uint256,bytes,bytes)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Channel participant, who will receive the withdrawn amount.\",\"participant_signature\":\"Participant's signature on the withdraw data.\",\"partner_signature\":\"Partner's signature on the withdraw data.\",\"total_withdraw\":\"Total amount of tokens that are marked as withdrawn from the channel during the channel lifecycle.\"}},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Channel participant.\",\"participant1_locked_amount\":\"Amount of tokens owed by `participant1` to `participant2`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant1_locksroot\":\"The latest known hash of the pending hash-time locks of `participant1`, used to validate the unlocked proofs. If no balance_hash has been submitted, locksroot is ignored.\",\"participant1_transferred_amount\":\"The latest known amount of tokens transferred from `participant1` to `participant2`.\",\"participant2\":\"Other channel participant.\",\"participant2_locked_amount\":\"Amount of tokens owed by `participant2` to `participant1`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant2_locksroot\":\"The latest known hash of the pending hash-time locks of `participant2`, used to validate the unlocked proofs. If no balance_hash has been submitted, locksroot is ignored.\",\"participant2_transferred_amount\":\"The latest known amount of tokens transferred from `participant2` to `participant1`.\"}},\"unlock(uint256,address,address,bytes)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"locks\":\"All pending locks concatenated in order of creation. that `sender` sent to `receiver`.\",\"receiver\":\"Address who will receive the claimable unlocked tokens.\",\"sender\":\"Address who sent the pending transfers and will receive the unclaimable unlocked tokens.\"}},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"closing_participant\":\"Channel participant who closed the channel.\",\"closing_signature\":\"Closing participant's signature of the balance proof data.\",\"non_closing_participant\":\"Channel participant who needs to update the balance proof.\",\"non_closing_signature\":\"Non-closing participant signature of the balance proof data.\",\"nonce\":\"Strictly monotonic value used to order transfers.\"}}},\"title\":\"TokenNetwork\"},\"userdoc\":{\"methods\":{\"closeChannel(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"notice\":\"Close the channel defined by the two participant addresses. Anybody can call this function on behalf of a participant (called the closing participant), providing a balance proof signed by both parties. Callable only once.\"},\"contractExists(address)\":{\"notice\":\"Check if a contract exists\"},\"getChannelIdentifier(address,address)\":{\"notice\":\"Returns the unique identifier for the channel given by the contract.\"},\"getChannelInfo(uint256,address,address)\":{\"notice\":\"The contract cannot really distinguish Settled and Removed states, especially when wrong participants are given as input. The contract does not remember the participants of the channel.\"},\"openChannel(address,address,uint256)\":{\"notice\":\"Opens a new channel between `participant1` and `participant2`. Can be called by anyone.\"},\"setTotalDeposit(uint256,address,uint256,address)\":{\"notice\":\"Sets the channel participant total deposit value. Can be called by anyone.\"},\"setTotalWithdraw(uint256,address,uint256,uint256,bytes,bytes)\":{\"notice\":\"Allows `participant` to withdraw tokens from the channel that he has with `partner`, without closing it. Can be called by anyone. Can only be called once per each signed withdraw message.\"},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"notice\":\"Settles the balance between the two parties. Note that arguments order counts: `participant1_transferred_amount + participant1_locked_amount` <= `participant2_transferred_amount + participant2_locked_amount`\"},\"unlock(uint256,address,address,bytes)\":{\"notice\":\"Unlocks all pending off-chain transfers from `sender` to `receiver` and sends the locked tokens corresponding to locks with secrets registered on-chain to the `receiver`. Locked tokens corresponding to locks where the secret was not revealed on-chain will return to the `sender`. Anyone can call unlock.\"},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"notice\":\"Called on a closed channel, the function allows the non-closing participant to provide the last balance proof, which modifies the closing participant's state. Can be called multiple times by anyone.\"}},\"notice\":\"Stores and manages all the Raiden Network channels that use the token specified in this TokenNetwork contract.\"}},\"settings\":{\"compilationTarget\":{\"data/source/raiden/TokenNetwork.sol\":\"TokenNetwork\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":.=.\",\":lib=data/source/lib\",\":raiden=data/source/raiden\",\":services=data/source/services\",\":test=data/source/test\"]},\"sources\":{\"data/source/lib/ECVerify.sol\":{\"keccak256\":\"0x8bb402baa478eb53252d77b63982e12685adda290cf4dfa1d8f510284f8df3e9\",\"urls\":[\"bzzr://474c3db1bb54bb831c32eb2ab67a0e870489994bd4d4b8a8fa24b54935211d43\"]},\"data/source/raiden/SecretRegistry.sol\":{\"keccak256\":\"0xb8078bc048ccdeb7c58026754f22fc378baf3b24090db0f17d10bda6cd4951b4\",\"urls\":[\"bzzr://f7a072330393a85a6a274ef526ac2ca0f8eb217bf5f48c18b3080be7ac3a7ede\"]},\"data/source/raiden/Token.sol\":{\"keccak256\":\"0x41b40819d7f6714550c742f48ce46daeb97255c08bc56e83bb9fde4fbe14c3b4\",\"urls\":[\"bzzr://a20e2bea336fb01584cf4dc80e77bb8db3c33666f77f840fd58559116849ae4b\"]},\"data/source/raiden/TokenNetwork.sol\":{\"keccak256\":\"0x8a0471fe654a6eabe757133f5c6b3b3a8d19acce975625d097192cc775d94bbe\",\"urls\":[\"bzzr://7c9b05aac5ab23979b7863a4b15421d28ac2b515b673c0b0d296c580b60cde86\"]},\"data/source/raiden/Utils.sol\":{\"keccak256\":\"0x602fd914e5644696d3c5d42e3a39fe6f16e7ddcc93f8864aa7e368a70cb56d0b\",\"urls\":[\"bzzr://b884810b9826074efb212a825d33409c35d9a159681690e821da3643052be3d1\"]}},\"version\":1}" }, "TokenNetworkInternalStorageTest": { "abi": [ @@ -5018,9 +5018,9 @@ "type": "event" } ], - "bin": "60806040526000600860146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405160a080620045c0833981018060405260a08110156200004e57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050508484848484337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151515620000ec57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141515156200012957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156200016657600080fd5b6000861115156200017657600080fd5b6000851115156200018657600080fd5b84841115156200019557600080fd5b620001af88620003d9640100000000026401000000009004565b1515620001bb57600080fd5b620001d587620003d9640100000000026401000000009004565b1515620001e157600080fd5b600082111515620001f157600080fd5b6000811115156200020157600080fd5b8181101515156200021157600080fd5b876000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600281905550846003819055508360048190555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156200032d57600080fd5b505afa15801562000342573d6000803e3d6000fd5b505050506040513d60208110156200035957600080fd5b81019080805190602001909291905050501115156200037757600080fd5b82600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816005819055508060068190555050505050505050505050505050620003ec565b600080823b905060008111915050919050565b6141c480620003fc6000396000f3fe608060405234801561001057600080fd5b5060043610610218576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610137578063b8378f75116100ca578063f20a440311610099578063f20a440314610e63578063f5c6a22914610ec5578063fadc554b14610f65578063fc0c546a1461109c578063fe49ba1c146110e657610218565b8063b8378f7514610ca4578063c203d51e14610cc2578063e5949b5d14610d5c578063ee4516d914610db357610218565b8063938bcd6711610106578063938bcd6714610a535780639cadb15914610acb5780639e67ca5f14610b76578063b7506d7014610c8257610218565b80637c4734f41461070657806382fd77951461077e578063838d6e051461093957806387234237146109d057610218565b80634845be76116101af57806363ea01431161017e57806363ea0143146105f6578063679b37631461066e57806371e759921461068c5780637709bc78146106aa57610218565b80634845be76146104f6578063524bef8a146105145780635d6e441b146105565780635e5fd7f31461057457610218565b8063224df42f116101eb578063224df42f1461042657806323aa81741461044457806324d73a931461048e5780633af973b1146104d857610218565b806303d9d2531461021d5780630a798f24146103225780630c80b923146103a45780630fcc0c281461041c575b600080fd5b6103206004803603608081101561023357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561029a57600080fd5b8201836020820111156102ac57600080fd5b803590602001918460018302840111640100000000831117156102ce57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611168565b005b61038e6004803603606081101561033857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611526565b6040518082815260200191505060405180910390f35b610406600480360360408110156103ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117cc565b6040518082815260200191505060405180910390f35b610424611892565b005b61042e611977565b6040518082815260200191505060405180910390f35b61044c61197d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104966119a3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104e06119c9565b6040518082815260200191505060405180910390f35b6104fe6119cf565b6040518082815260200191505060405180910390f35b6105406004803603602081101561052a57600080fd5b81019080803590602001909291905050506119d5565b6040518082815260200191505060405180910390f35b61055e6119ed565b6040518082815260200191505060405180910390f35b6105f4600480360360a081101561058a57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506119f3565b005b61066c6004803603608081101561060c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a07565b005b610676611e52565b6040518082815260200191505060405180910390f35b610694611e58565b6040518082815260200191505060405180910390f35b6106ec600480360360208110156106c057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e7c565b604051808215151515815260200191505060405180910390f35b6107686004803603604081101561071c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e8f565b6040518082815260200191505060405180910390f35b610937600480360361010081101561079557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561081a57600080fd5b82018360208201111561082c57600080fd5b8035906020019184600183028401116401000000008311171561084e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156108b157600080fd5b8201836020820111156108c357600080fd5b803590602001918460018302840111640100000000831117156108e557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506120d1565b005b6109a56004803603606081101561094f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122e7565b604051808381526020018260048111156109bb57fe5b60ff1681526020019250505060405180910390f35b6109d86123da565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a185780820151818401526020810190506109fd565b50505050905090810190601f168015610a455780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610ab560048036036040811015610a6957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612413565b6040518082815260200191505060405180910390f35b610b746004803603610120811015610ae257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506124f2565b005b610c80600480360360c0811015610b8c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610be757600080fd5b820183602082011115610bf957600080fd5b80359060200191846001830284011164010000000083111715610c1b57600080fd5b909192939192939080359060200190640100000000811115610c3c57600080fd5b820183602082011115610c4e57600080fd5b80359060200191846001830284011164010000000083111715610c7057600080fd5b9091929391929390505050612a26565b005b610c8a612e47565b604051808215151515815260200191505060405180910390f35b610cac612e5a565b6040518082815260200191505060405180910390f35b610d42600480360360a0811015610cd857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050612e60565b604051808215151515815260200191505060405180910390f35b610d8860048036036020811015610d7257600080fd5b8101908080359060200190929190505050612ee5565b60405180838152602001826004811115610d9e57fe5b60ff1681526020019250505060405180910390f35b610e1f60048036036060811015610dc957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f16565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610ec360048036036080811015610e7957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612feb565b005b610f4f600480360360c0811015610edb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050613015565b6040518082815260200191505060405180910390f35b61109a6004803603610100811015610f7c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561100157600080fd5b82018360208201111561101357600080fd5b8035906020019184600183028401116401000000008311171561103557600080fd5b90919293919293908035906020019064010000000081111561105657600080fd5b82018360208201111561106857600080fd5b8035906020019184600183028401116401000000008311171561108a57600080fd5b9091929391929390505050613151565b005b6110a461341a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b611152600480360360608110156110fc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061343f565b6040518082815260200191505060405180910390f35b6111728383612413565b841415151561118057600080fd5b6000600481111561118d57fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff1660048111156111bc57fe5b1415156111c857600080fd5b60008060008060006111d986613532565b80945081955050506111ec89888a61343f565b94506000600b600087815260200190815260200160002090508060010154925084816000015414151561121e57600080fd5b60008311151561122d57600080fd5b61123784846135a2565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a460008411156113ee576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156113a757600080fd5b505af11580156113bb573d6000803e3d6000fd5b505050506040513d60208110156113d157600080fd5b810190808051906020019092919050505015156113ed57600080fd5b5b6000821115611502576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156114bb57600080fd5b505af11580156114cf573d6000803e3d6000fd5b505050506040513d60208110156114e557600080fd5b8101908080519060200190929190505050151561150157600080fd5b5b81831015151561150e57fe5b83831015151561151a57fe5b50505050505050505050565b6000801515600860149054906101000a900460ff16151514151561154957600080fd5b81600354811015151561155b57600080fd5b600454811115151561156c57600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561162c57600080fd5b505afa158015611640573d6000803e3d6000fd5b505050506040513d602081101561165657600080fd5b810190808051906020019092919050505010151561167357600080fd5b600160076000828254019250508190555060075490506116938787611e8f565b91506000600a6000848152602001908152602001600020541415156116b757600080fd5b80600a6000848152602001908152602001600020819055506000600960008381526020019081526020016000209050600081600001541415156116f657fe5b6000600481111561170357fe5b8160010160009054906101000a900460ff16600481111561172057fe5b14151561172957fe5b85816000018190555060018160010160006101000a81548160ff0219169083600481111561175357fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b6000806117d98484612413565b9050600060096000838152602001908152602001600020905060008160020160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061188682826135bb565b94505050505092915050565b60001515600860149054906101000a900460ff1615151415156118b457600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561191057600080fd5b6001600860146101000a81548160ff0219169083151502179055507f6151930a846a85f5e64d2dd1cc5deeafb010c63eec4b600458158edd0e33f15d600860149054906101000a900460ff16604051808215151515815260200191505060405180910390a1565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b611a0085858585856135dc565b5050505050565b60001515600860149054906101000a900460ff161515141515611a2957600080fd5b8360016004811115611a3757fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115611a6657fe5b141515611a7257600080fd5b611a7c8483612413565b85141515611a8957600080fd5b600083111515611a9857600080fd5b6005548311151515611aa957600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050816000015488039450600085111515611b6557600080fd5b878511151515611b7457600080fd5b8785836000015401141515611b8557fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611c4357600080fd5b505afa158015611c57573d6000803e3d6000fd5b505050506040513d6020811015611c6d57600080fd5b81019080805190602001909291905050500111151515611c8c57600080fd5b8782600001819055508060000154826000015401935081600001548410151515611cb557600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611e0057600080fd5b505af1158015611e14573d6000803e3d6000fd5b505050506040513d6020811015611e2a57600080fd5b81019080805190602001909291905050501515611e4657600080fd5b50505050505050505050565b60075481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611ecc57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611f0857600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611f4357600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015612023578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090506120cb565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b87600160048111156120df57fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff16600481111561210e57fe5b14151561211a57600080fd5b6121248789612413565b8914151561213157600080fd5b600080600960008c8152602001908152602001600020905060028160010160006101000a81548160ff0219169083600481111561216a57fe5b021790555060018160020160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555043816000016000828254019250508190555060006121ee8c8a8a8a8a8a61362c565b90508073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614151561222a57600080fd5b6000881115612289576122408c8a8a8a8a613858565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561227c57600080fd5b61228882848a8c613a2e565b5b878a73ffffffffffffffffffffffffffffffffffffffff168d7f09d2f946e008c38931cd739dd20e35146deff8ab3134caee6d54fe50816a81b88c6040518082815260200191505060405180910390a4505050505050505050505050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff1690506000600481111561232757fe5b81600481111561233357fe5b1480156123405750600089115b801561234e57506007548911155b156123c4576003905061236289898961343f565b93506000600b600086815260200190815260200160002090506123868a898b61343f565b93506000600b60008681526020019081526020016000209050600082600101541480156123b7575060008160010154145b156123c157600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561245057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561248c57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156124c757600080fd5b60006124d38484611e8f565b9050600a60008281526020019081526020016000205491505092915050565b6124fc8885612413565b8914151561250957600080fd5b60006125158986611e8f565b90506000600960008c815260200190815260200160002090506002600481111561253b57fe5b8160010160009054906101000a900460ff16600481111561255857fe5b14151561256457600080fd5b43816000015410151561257657600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061260c828c8c8c613a9e565b151561261757600080fd5b61262381888888613a9e565b151561262e57600080fd5b61263c828c8c848b8b613b18565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a6000858152602001908152602001600020600090556127928d8d8a8d8d6135dc565b61279f8d898e89896135dc565b8c7f8db0e7d323ca765ce9ab550780131837e4942ccfea3be2b635ec1084c81f72628c8b8a896040518085815260200184815260200183815260200182815260200194505050505060405180910390a260008b1115612903576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156128bc57600080fd5b505af11580156128d0573d6000803e3d6000fd5b505050506040513d60208110156128e657600080fd5b8101908080519060200190929190505050151561290257600080fd5b5b6000871115612a17576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156129d057600080fd5b505af11580156129e4573d6000803e3d6000fd5b505050506040513d60208110156129fa57600080fd5b81019080805190602001909291905050501515612a1657600080fd5b5b50505050505050505050505050565b8760016004811115612a3457fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115612a6357fe5b141515612a6f57600080fd5b6000806000808a111515612a8257600080fd5b8843101515612a9057600080fd5b612ae18c8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613c27565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612b1a57600080fd5b612b6b8c8c8c8c8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613c27565b9050612b778b82612413565b8c141515612b8457600080fd5b6000600960008e8152602001908152602001600020905060008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000015482600001540195508581600101548e0111151515612c4757600080fd5b80600101548d018d11151515612c5c57600080fd5b81600101548d0394508c8511151515612c7457600080fd5b600085111515612c8357600080fd5b8c85836001015401141515612c9457fe5b8d73ffffffffffffffffffffffffffffffffffffffff168f7f98ed0357b86b313fa9f968de5c9d2bcf591432355b34aa1ab7e3e9e92f4284088f6040518082815260200191505060405180910390a38c82600101819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8f876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612db057600080fd5b505af1158015612dc4573d6000803e3d6000fd5b505050506040513d6020811015612dda57600080fd5b81019080805190602001909291905050501515612df657600080fd5b81600001548610151515612e0657fe5b80600001548610151515612e1657fe5b60008260040154141515612e2657fe5b60008160040154141515612e3657fe5b505050505050505050505050505050565b600860149054906101000a900460ff1681565b60035481565b600080612e6d8787612413565b9050600060096000838152602001908152602001600020905060008160020160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612ed781888888613a9e565b935050505095945050505050565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612f848c8c8c61343f565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b600060096000868152602001908152602001600020905061300e81858585613a2e565b5050505050565b6000806130228886612413565b9050600060096000838152602001908152602001600020905060008160020160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506130cd61416f565b6130d561416f565b836000015482600001818152505083600101548260200181815250508b8260400181815250508a82606001818152505082600001548160000181815250508260010154816020018181525050888160400181815250508781606001818152505061313f8282613e38565b96505050505050509695505050505050565b61315b8989612413565b8a14151561316857600080fd5b6000600102871415151561317b57600080fd5b60008611151561318a57600080fd5b6000806000600960008e81526020019081526020016000209050600260048111156131b157fe5b8160010160009054906101000a900460ff1660048111156131ce57fe5b1415156131da57600080fd5b438160000154101515156131ed57600080fd5b6132838d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061362c565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff161415156132bf57600080fd5b6133108d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613858565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614151561334c57600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff1615156133ae57600080fd5b6133ba828e8c8e613a2e565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f6fc5b4f4f9e65bfdc4c45456373906876cee8832b605478e281902468875eaed8e6040518082815260200191505060405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561347c57600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b600080600083519050600060608281151561354957fe5b0614151561355657600080fd5b6000806000806000602094505b85851015613587576135758986613ecc565b92508284019350606085019450613563565b88805190602001209050808497509750505050505050915091565b60008183116135b157826135b3565b815b905092915050565b60008160010154836001015483600001548560000154010303905092915050565b60008214156135ea57613625565b60006135f786868661343f565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600260068111156136b257fe5b8d8d8d8d8d604051602001808b805190602001908083835b6020831015156136ef57805182526020820191506020810190506020830392506136ca565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b602083101515613742578051825260208201915060208101905060208303925061371d565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b6020831015156137fa57805182526020820191506020810190506020830392506137d5565b6001836020036101000a0380198251168184511680821785525050505050509050019a505050505050505050505060405160208183030381529060405280519060200120905061384a8185613ff6565b925050509695505050505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600160068111156138de57fe5b8c8c8c8c604051602001808a805190602001908083835b60208310151561391a57805182526020820191506020810190506020830392506138f5565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b60208310151561396d5780518252602082019150602081019050602083039250613948565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018781526020018681526020018581526020018481526020018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050613a218185613ff6565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806004015483111515613a8557600080fd5b8281600401819055508181600301819055505050505050565b6000806001028560030154148015613ab65750600084145b8015613ac25750600083145b15613ad05760019050613b10565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b6000806000806000806000613b2b61416f565b613b3361416f565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a81604001818152505089816060018181525050613b9d8f8d6135bb565b9250613ba98282613e38565b9450613bb585846135a2565b94508483039350613bc6858b614109565b809b508196505050613bd8848e614109565b809e508195505050828511151515613bec57fe5b828411151515613bf857fe5b898d858701010183141515613c0957fe5b84848e8c985098509850985050505050509650965096509692505050565b600060606040805190810160405280600381526020017f3230300000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a000000000000815250823060025460036006811115613cad57fe5b8c8c8c8c604051602001808a805190602001908083835b602083101515613ce95780518252602082019150602081019050602083039250613cc4565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b602083101515613d3c5780518252602082019150602081019050602083039250613d17565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050613e2b8185613ff6565b9250505095945050505050565b6000806000806000613e528760400151886060015161412e565b9350613e668660400151876060015161412e565b9250838310151515613e7757600080fd5b86604001518410151515613e8757fe5b85604001518310151515613e9757fe5b8383039150613eaa82886000015161412e565b9050613eba818860200151614109565b50809150508094505050505092915050565b6000806000806000858751111515613eeb576000945050505050613ff0565b858701519350602086018701519250604086018701519050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015613f9257600080fd5b505afa158015613fa6573d6000803e3d6000fd5b505050506040513d6020811015613fbc57600080fd5b810190808051906020019092919050505091506000821480613fde5750818411155b15613fe857600092505b829450505050505b92915050565b60006041825114151561400857600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff16101561403857601b810190505b601b8160ff16148061404d5750601c8160ff16145b151561405857600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156140b5573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156140fd57600080fd5b83935050505092915050565b60008082841161411e57600084819150614123565b828403835b915091509250929050565b600080828401905083811015614164577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff614166565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a7230582071d1eaabf4be13df00872ba991669b0688f67d23c8f2ffd300c5bc3c9142dd300029", - "bin-runtime": "608060405234801561001057600080fd5b5060043610610218576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610137578063b8378f75116100ca578063f20a440311610099578063f20a440314610e63578063f5c6a22914610ec5578063fadc554b14610f65578063fc0c546a1461109c578063fe49ba1c146110e657610218565b8063b8378f7514610ca4578063c203d51e14610cc2578063e5949b5d14610d5c578063ee4516d914610db357610218565b8063938bcd6711610106578063938bcd6714610a535780639cadb15914610acb5780639e67ca5f14610b76578063b7506d7014610c8257610218565b80637c4734f41461070657806382fd77951461077e578063838d6e051461093957806387234237146109d057610218565b80634845be76116101af57806363ea01431161017e57806363ea0143146105f6578063679b37631461066e57806371e759921461068c5780637709bc78146106aa57610218565b80634845be76146104f6578063524bef8a146105145780635d6e441b146105565780635e5fd7f31461057457610218565b8063224df42f116101eb578063224df42f1461042657806323aa81741461044457806324d73a931461048e5780633af973b1146104d857610218565b806303d9d2531461021d5780630a798f24146103225780630c80b923146103a45780630fcc0c281461041c575b600080fd5b6103206004803603608081101561023357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561029a57600080fd5b8201836020820111156102ac57600080fd5b803590602001918460018302840111640100000000831117156102ce57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611168565b005b61038e6004803603606081101561033857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611526565b6040518082815260200191505060405180910390f35b610406600480360360408110156103ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117cc565b6040518082815260200191505060405180910390f35b610424611892565b005b61042e611977565b6040518082815260200191505060405180910390f35b61044c61197d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104966119a3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104e06119c9565b6040518082815260200191505060405180910390f35b6104fe6119cf565b6040518082815260200191505060405180910390f35b6105406004803603602081101561052a57600080fd5b81019080803590602001909291905050506119d5565b6040518082815260200191505060405180910390f35b61055e6119ed565b6040518082815260200191505060405180910390f35b6105f4600480360360a081101561058a57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506119f3565b005b61066c6004803603608081101561060c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a07565b005b610676611e52565b6040518082815260200191505060405180910390f35b610694611e58565b6040518082815260200191505060405180910390f35b6106ec600480360360208110156106c057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e7c565b604051808215151515815260200191505060405180910390f35b6107686004803603604081101561071c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e8f565b6040518082815260200191505060405180910390f35b610937600480360361010081101561079557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561081a57600080fd5b82018360208201111561082c57600080fd5b8035906020019184600183028401116401000000008311171561084e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156108b157600080fd5b8201836020820111156108c357600080fd5b803590602001918460018302840111640100000000831117156108e557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506120d1565b005b6109a56004803603606081101561094f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122e7565b604051808381526020018260048111156109bb57fe5b60ff1681526020019250505060405180910390f35b6109d86123da565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a185780820151818401526020810190506109fd565b50505050905090810190601f168015610a455780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610ab560048036036040811015610a6957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612413565b6040518082815260200191505060405180910390f35b610b746004803603610120811015610ae257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506124f2565b005b610c80600480360360c0811015610b8c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610be757600080fd5b820183602082011115610bf957600080fd5b80359060200191846001830284011164010000000083111715610c1b57600080fd5b909192939192939080359060200190640100000000811115610c3c57600080fd5b820183602082011115610c4e57600080fd5b80359060200191846001830284011164010000000083111715610c7057600080fd5b9091929391929390505050612a26565b005b610c8a612e47565b604051808215151515815260200191505060405180910390f35b610cac612e5a565b6040518082815260200191505060405180910390f35b610d42600480360360a0811015610cd857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050612e60565b604051808215151515815260200191505060405180910390f35b610d8860048036036020811015610d7257600080fd5b8101908080359060200190929190505050612ee5565b60405180838152602001826004811115610d9e57fe5b60ff1681526020019250505060405180910390f35b610e1f60048036036060811015610dc957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f16565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610ec360048036036080811015610e7957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612feb565b005b610f4f600480360360c0811015610edb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050613015565b6040518082815260200191505060405180910390f35b61109a6004803603610100811015610f7c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561100157600080fd5b82018360208201111561101357600080fd5b8035906020019184600183028401116401000000008311171561103557600080fd5b90919293919293908035906020019064010000000081111561105657600080fd5b82018360208201111561106857600080fd5b8035906020019184600183028401116401000000008311171561108a57600080fd5b9091929391929390505050613151565b005b6110a461341a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b611152600480360360608110156110fc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061343f565b6040518082815260200191505060405180910390f35b6111728383612413565b841415151561118057600080fd5b6000600481111561118d57fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff1660048111156111bc57fe5b1415156111c857600080fd5b60008060008060006111d986613532565b80945081955050506111ec89888a61343f565b94506000600b600087815260200190815260200160002090508060010154925084816000015414151561121e57600080fd5b60008311151561122d57600080fd5b61123784846135a2565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a460008411156113ee576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156113a757600080fd5b505af11580156113bb573d6000803e3d6000fd5b505050506040513d60208110156113d157600080fd5b810190808051906020019092919050505015156113ed57600080fd5b5b6000821115611502576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156114bb57600080fd5b505af11580156114cf573d6000803e3d6000fd5b505050506040513d60208110156114e557600080fd5b8101908080519060200190929190505050151561150157600080fd5b5b81831015151561150e57fe5b83831015151561151a57fe5b50505050505050505050565b6000801515600860149054906101000a900460ff16151514151561154957600080fd5b81600354811015151561155b57600080fd5b600454811115151561156c57600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561162c57600080fd5b505afa158015611640573d6000803e3d6000fd5b505050506040513d602081101561165657600080fd5b810190808051906020019092919050505010151561167357600080fd5b600160076000828254019250508190555060075490506116938787611e8f565b91506000600a6000848152602001908152602001600020541415156116b757600080fd5b80600a6000848152602001908152602001600020819055506000600960008381526020019081526020016000209050600081600001541415156116f657fe5b6000600481111561170357fe5b8160010160009054906101000a900460ff16600481111561172057fe5b14151561172957fe5b85816000018190555060018160010160006101000a81548160ff0219169083600481111561175357fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b6000806117d98484612413565b9050600060096000838152602001908152602001600020905060008160020160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061188682826135bb565b94505050505092915050565b60001515600860149054906101000a900460ff1615151415156118b457600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561191057600080fd5b6001600860146101000a81548160ff0219169083151502179055507f6151930a846a85f5e64d2dd1cc5deeafb010c63eec4b600458158edd0e33f15d600860149054906101000a900460ff16604051808215151515815260200191505060405180910390a1565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b611a0085858585856135dc565b5050505050565b60001515600860149054906101000a900460ff161515141515611a2957600080fd5b8360016004811115611a3757fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115611a6657fe5b141515611a7257600080fd5b611a7c8483612413565b85141515611a8957600080fd5b600083111515611a9857600080fd5b6005548311151515611aa957600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050816000015488039450600085111515611b6557600080fd5b878511151515611b7457600080fd5b8785836000015401141515611b8557fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611c4357600080fd5b505afa158015611c57573d6000803e3d6000fd5b505050506040513d6020811015611c6d57600080fd5b81019080805190602001909291905050500111151515611c8c57600080fd5b8782600001819055508060000154826000015401935081600001548410151515611cb557600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611e0057600080fd5b505af1158015611e14573d6000803e3d6000fd5b505050506040513d6020811015611e2a57600080fd5b81019080805190602001909291905050501515611e4657600080fd5b50505050505050505050565b60075481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611ecc57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611f0857600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611f4357600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015612023578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090506120cb565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b87600160048111156120df57fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff16600481111561210e57fe5b14151561211a57600080fd5b6121248789612413565b8914151561213157600080fd5b600080600960008c8152602001908152602001600020905060028160010160006101000a81548160ff0219169083600481111561216a57fe5b021790555060018160020160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555043816000016000828254019250508190555060006121ee8c8a8a8a8a8a61362c565b90508073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614151561222a57600080fd5b6000881115612289576122408c8a8a8a8a613858565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561227c57600080fd5b61228882848a8c613a2e565b5b878a73ffffffffffffffffffffffffffffffffffffffff168d7f09d2f946e008c38931cd739dd20e35146deff8ab3134caee6d54fe50816a81b88c6040518082815260200191505060405180910390a4505050505050505050505050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff1690506000600481111561232757fe5b81600481111561233357fe5b1480156123405750600089115b801561234e57506007548911155b156123c4576003905061236289898961343f565b93506000600b600086815260200190815260200160002090506123868a898b61343f565b93506000600b60008681526020019081526020016000209050600082600101541480156123b7575060008160010154145b156123c157600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561245057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561248c57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156124c757600080fd5b60006124d38484611e8f565b9050600a60008281526020019081526020016000205491505092915050565b6124fc8885612413565b8914151561250957600080fd5b60006125158986611e8f565b90506000600960008c815260200190815260200160002090506002600481111561253b57fe5b8160010160009054906101000a900460ff16600481111561255857fe5b14151561256457600080fd5b43816000015410151561257657600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061260c828c8c8c613a9e565b151561261757600080fd5b61262381888888613a9e565b151561262e57600080fd5b61263c828c8c848b8b613b18565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a6000858152602001908152602001600020600090556127928d8d8a8d8d6135dc565b61279f8d898e89896135dc565b8c7f8db0e7d323ca765ce9ab550780131837e4942ccfea3be2b635ec1084c81f72628c8b8a896040518085815260200184815260200183815260200182815260200194505050505060405180910390a260008b1115612903576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156128bc57600080fd5b505af11580156128d0573d6000803e3d6000fd5b505050506040513d60208110156128e657600080fd5b8101908080519060200190929190505050151561290257600080fd5b5b6000871115612a17576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156129d057600080fd5b505af11580156129e4573d6000803e3d6000fd5b505050506040513d60208110156129fa57600080fd5b81019080805190602001909291905050501515612a1657600080fd5b5b50505050505050505050505050565b8760016004811115612a3457fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115612a6357fe5b141515612a6f57600080fd5b6000806000808a111515612a8257600080fd5b8843101515612a9057600080fd5b612ae18c8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613c27565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612b1a57600080fd5b612b6b8c8c8c8c8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613c27565b9050612b778b82612413565b8c141515612b8457600080fd5b6000600960008e8152602001908152602001600020905060008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000015482600001540195508581600101548e0111151515612c4757600080fd5b80600101548d018d11151515612c5c57600080fd5b81600101548d0394508c8511151515612c7457600080fd5b600085111515612c8357600080fd5b8c85836001015401141515612c9457fe5b8d73ffffffffffffffffffffffffffffffffffffffff168f7f98ed0357b86b313fa9f968de5c9d2bcf591432355b34aa1ab7e3e9e92f4284088f6040518082815260200191505060405180910390a38c82600101819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8f876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612db057600080fd5b505af1158015612dc4573d6000803e3d6000fd5b505050506040513d6020811015612dda57600080fd5b81019080805190602001909291905050501515612df657600080fd5b81600001548610151515612e0657fe5b80600001548610151515612e1657fe5b60008260040154141515612e2657fe5b60008160040154141515612e3657fe5b505050505050505050505050505050565b600860149054906101000a900460ff1681565b60035481565b600080612e6d8787612413565b9050600060096000838152602001908152602001600020905060008160020160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612ed781888888613a9e565b935050505095945050505050565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612f848c8c8c61343f565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b600060096000868152602001908152602001600020905061300e81858585613a2e565b5050505050565b6000806130228886612413565b9050600060096000838152602001908152602001600020905060008160020160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506130cd61416f565b6130d561416f565b836000015482600001818152505083600101548260200181815250508b8260400181815250508a82606001818152505082600001548160000181815250508260010154816020018181525050888160400181815250508781606001818152505061313f8282613e38565b96505050505050509695505050505050565b61315b8989612413565b8a14151561316857600080fd5b6000600102871415151561317b57600080fd5b60008611151561318a57600080fd5b6000806000600960008e81526020019081526020016000209050600260048111156131b157fe5b8160010160009054906101000a900460ff1660048111156131ce57fe5b1415156131da57600080fd5b438160000154101515156131ed57600080fd5b6132838d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061362c565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff161415156132bf57600080fd5b6133108d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613858565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614151561334c57600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff1615156133ae57600080fd5b6133ba828e8c8e613a2e565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f6fc5b4f4f9e65bfdc4c45456373906876cee8832b605478e281902468875eaed8e6040518082815260200191505060405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561347c57600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b600080600083519050600060608281151561354957fe5b0614151561355657600080fd5b6000806000806000602094505b85851015613587576135758986613ecc565b92508284019350606085019450613563565b88805190602001209050808497509750505050505050915091565b60008183116135b157826135b3565b815b905092915050565b60008160010154836001015483600001548560000154010303905092915050565b60008214156135ea57613625565b60006135f786868661343f565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600260068111156136b257fe5b8d8d8d8d8d604051602001808b805190602001908083835b6020831015156136ef57805182526020820191506020810190506020830392506136ca565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b602083101515613742578051825260208201915060208101905060208303925061371d565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b6020831015156137fa57805182526020820191506020810190506020830392506137d5565b6001836020036101000a0380198251168184511680821785525050505050509050019a505050505050505050505060405160208183030381529060405280519060200120905061384a8185613ff6565b925050509695505050505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600160068111156138de57fe5b8c8c8c8c604051602001808a805190602001908083835b60208310151561391a57805182526020820191506020810190506020830392506138f5565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b60208310151561396d5780518252602082019150602081019050602083039250613948565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018781526020018681526020018581526020018481526020018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050613a218185613ff6565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806004015483111515613a8557600080fd5b8281600401819055508181600301819055505050505050565b6000806001028560030154148015613ab65750600084145b8015613ac25750600083145b15613ad05760019050613b10565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b6000806000806000806000613b2b61416f565b613b3361416f565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a81604001818152505089816060018181525050613b9d8f8d6135bb565b9250613ba98282613e38565b9450613bb585846135a2565b94508483039350613bc6858b614109565b809b508196505050613bd8848e614109565b809e508195505050828511151515613bec57fe5b828411151515613bf857fe5b898d858701010183141515613c0957fe5b84848e8c985098509850985050505050509650965096509692505050565b600060606040805190810160405280600381526020017f3230300000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a000000000000815250823060025460036006811115613cad57fe5b8c8c8c8c604051602001808a805190602001908083835b602083101515613ce95780518252602082019150602081019050602083039250613cc4565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b602083101515613d3c5780518252602082019150602081019050602083039250613d17565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050613e2b8185613ff6565b9250505095945050505050565b6000806000806000613e528760400151886060015161412e565b9350613e668660400151876060015161412e565b9250838310151515613e7757600080fd5b86604001518410151515613e8757fe5b85604001518310151515613e9757fe5b8383039150613eaa82886000015161412e565b9050613eba818860200151614109565b50809150508094505050505092915050565b6000806000806000858751111515613eeb576000945050505050613ff0565b858701519350602086018701519250604086018701519050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015613f9257600080fd5b505afa158015613fa6573d6000803e3d6000fd5b505050506040513d6020811015613fbc57600080fd5b810190808051906020019092919050505091506000821480613fde5750818411155b15613fe857600092505b829450505050505b92915050565b60006041825114151561400857600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff16101561403857601b810190505b601b8160ff16148061404d5750601c8160ff16145b151561405857600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156140b5573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515156140fd57600080fd5b83935050505092915050565b60008082841161411e57600084819150614123565b828403835b915091509250929050565b600080828401905083811015614164577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff614166565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a7230582071d1eaabf4be13df00872ba991669b0688f67d23c8f2ffd300c5bc3c9142dd300029", - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"address\"},{\"name\":\"sender\",\"type\":\"address\"},{\"name\":\"locks\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"openChannel\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"}],\"name\":\"getChannelAvailableDepositPublic\",\"outputs\":[{\"name\":\"total_available_deposit\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"deprecate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_max\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"deprecation_executor\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"secret_registry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"chain_id\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token_network_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"participants_hash_to_channel_identifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_participant_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"},{\"name\":\"locked_amount\",\"type\":\"uint256\"},{\"name\":\"locksroot\",\"type\":\"bytes32\"}],\"name\":\"updateUnlockDataPublic\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"total_deposit\",\"type\":\"uint256\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"setTotalDeposit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_counter\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_SAFE_UINT256\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contract_address\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getParticipantsHash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"}],\"name\":\"closeChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"}],\"name\":\"getChannelInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"signature_prefix\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant1_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locksroot\",\"type\":\"bytes32\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"participant2_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locksroot\",\"type\":\"bytes32\"}],\"name\":\"settleChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"total_withdraw\",\"type\":\"uint256\"},{\"name\":\"expiration_block\",\"type\":\"uint256\"},{\"name\":\"participant_signature\",\"type\":\"bytes\"},{\"name\":\"partner_signature\",\"type\":\"bytes\"}],\"name\":\"setTotalWithdraw\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"safety_deprecation_switch\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_min\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"to_verify\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"},{\"name\":\"transferred_amount\",\"type\":\"uint256\"},{\"name\":\"locked_amount\",\"type\":\"uint256\"},{\"name\":\"locksroot\",\"type\":\"bytes32\"}],\"name\":\"verifyBalanceHashDataPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"channels\",\"outputs\":[{\"name\":\"settle_block_number\",\"type\":\"uint256\"},{\"name\":\"state\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelParticipantInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bool\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"}],\"name\":\"updateBalanceProofDataPublic\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant1_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"participant2_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locked_amount\",\"type\":\"uint256\"}],\"name\":\"getMaxPossibleReceivableAmountPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"}],\"name\":\"updateNonClosingBalanceProof\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"getUnlockIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_token_address\",\"type\":\"address\"},{\"name\":\"_secret_registry\",\"type\":\"address\"},{\"name\":\"_chain_id\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_min\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_max\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant1\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"participant2\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"ChannelOpened\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"total_deposit\",\"type\":\"uint256\"}],\"name\":\"ChannelNewDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"new_value\",\"type\":\"bool\"}],\"name\":\"DeprecationSwitch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"total_withdraw\",\"type\":\"uint256\"}],\"name\":\"ChannelWithdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"balance_hash\",\"type\":\"bytes32\"}],\"name\":\"ChannelClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"locksroot\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"unlocked_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"returned_tokens\",\"type\":\"uint256\"}],\"name\":\"ChannelUnlocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"balance_hash\",\"type\":\"bytes32\"}],\"name\":\"NonClosingBalanceProofUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant1_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant1_locksroot\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"participant2_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant2_locksroot\",\"type\":\"bytes32\"}],\"name\":\"ChannelSettled\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"closeChannel(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"closing_participant\":\"Channel participant who closes the channel.\",\"closing_signature\":\"Closing participant's signature of the balance proof data.\",\"non_closing_participant\":\"Channel partner of the `closing_participant`, who provided the balance proof.\",\"non_closing_signature\":\"Non-closing participant's signature of the balance proof data.\",\"nonce\":\"Strictly monotonic value used to order transfers.\"}},\"contractExists(address)\":{\"params\":{\"contract_address\":\"The address to check whether a contract is deployed or not\"},\"return\":\"True if a contract exists, false otherwise\"},\"getChannelIdentifier(address,address)\":{\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"},\"return\":\"Unique identifier for the channel. It can be 0 if channel does not exist.\"},\"getChannelInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Address of a channel participant.\",\"participant2\":\"Address of the other channel participant.\"},\"return\":\"Channel settle_block_number and state.\"},\"getChannelParticipantInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Address of the channel participant whose data will be returned.\",\"partner\":\"Address of the channel partner.\"},\"return\":\"Participant's deposit, withdrawn_amount, whether the participant has called `closeChannel` or not, balance_hash, nonce, locksroot, locked_amount.\"},\"getParticipantsHash(address,address)\":{\"details\":\"Get the hash of the participant addresses, ordered lexicographically.\",\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"}},\"getUnlockIdentifier(uint256,address,address)\":{\"details\":\"Get the hash of the channel identifier and the participant addresses (whose ordering matters). The hash might be useful for the receiver to look up the appropriate UnlockData to claim.\",\"params\":{\"channel_identifier\":\"Identifier for the channel which the UnlockData is about.\",\"receiver\":\"Receiver of the pending transfers that the UnlockData represents.\",\"sender\":\"Sender of the pending transfers that the UnlockData represents.\"}},\"openChannel(address,address,uint256)\":{\"params\":{\"participant1\":\"Ethereum address of a channel participant.\",\"participant2\":\"Ethereum address of the other channel participant.\",\"settle_timeout\":\"Number of blocks that need to be mined between a call to closeChannel and settleChannel.\"}},\"setTotalDeposit(uint256,address,uint256,address)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Channel participant whose deposit is being set.\",\"partner\":\"Channel partner address, needed to compute the total channel deposit.\",\"total_deposit\":\"The total amount of tokens that the participant will have as a deposit.\"}},\"setTotalWithdraw(uint256,address,uint256,uint256,bytes,bytes)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Channel participant, who will receive the withdrawn amount.\",\"participant_signature\":\"Participant's signature on the withdraw data.\",\"partner_signature\":\"Partner's signature on the withdraw data.\",\"total_withdraw\":\"Total amount of tokens that are marked as withdrawn from the channel during the channel lifecycle.\"}},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Channel participant.\",\"participant1_locked_amount\":\"Amount of tokens owed by `participant1` to `participant2`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant1_locksroot\":\"The latest known hash of the pending hash-time locks of `participant1`, used to validate the unlocked proofs. If no balance_hash has been submitted, locksroot is ignored.\",\"participant1_transferred_amount\":\"The latest known amount of tokens transferred from `participant1` to `participant2`.\",\"participant2\":\"Other channel participant.\",\"participant2_locked_amount\":\"Amount of tokens owed by `participant2` to `participant1`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant2_locksroot\":\"The latest known hash of the pending hash-time locks of `participant2`, used to validate the unlocked proofs. If no balance_hash has been submitted, locksroot is ignored.\",\"participant2_transferred_amount\":\"The latest known amount of tokens transferred from `participant2` to `participant1`.\"}},\"unlock(uint256,address,address,bytes)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"locks\":\"All pending locks concatenated in order of creation. that `sender` sent to `receiver`.\",\"receiver\":\"Address who will receive the claimable unlocked tokens.\",\"sender\":\"Address who sent the pending transfers and will receive the unclaimable unlocked tokens.\"}},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"closing_participant\":\"Channel participant who closed the channel.\",\"closing_signature\":\"Closing participant's signature of the balance proof data.\",\"non_closing_participant\":\"Channel participant who needs to update the balance proof.\",\"non_closing_signature\":\"Non-closing participant signature of the balance proof data.\",\"nonce\":\"Strictly monotonic value used to order transfers.\"}}}},\"userdoc\":{\"methods\":{\"closeChannel(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"notice\":\"Close the channel defined by the two participant addresses. Anybody can call this function on behalf of a participant (called the closing participant), providing a balance proof signed by both parties. Callable only once.\"},\"contractExists(address)\":{\"notice\":\"Check if a contract exists\"},\"getChannelIdentifier(address,address)\":{\"notice\":\"Returns the unique identifier for the channel given by the contract.\"},\"getChannelInfo(uint256,address,address)\":{\"notice\":\"The contract cannot really distinguish Settled and Removed states, especially when wrong participants are given as input. The contract does not remember the participants of the channel.\"},\"openChannel(address,address,uint256)\":{\"notice\":\"Opens a new channel between `participant1` and `participant2`. Can be called by anyone.\"},\"setTotalDeposit(uint256,address,uint256,address)\":{\"notice\":\"Sets the channel participant total deposit value. Can be called by anyone.\"},\"setTotalWithdraw(uint256,address,uint256,uint256,bytes,bytes)\":{\"notice\":\"Allows `participant` to withdraw tokens from the channel that he has with `partner`, without closing it. Can be called by anyone. Can only be called once per each signed withdraw message.\"},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"notice\":\"Settles the balance between the two parties. Note that arguments order counts: `participant1_transferred_amount + participant1_locked_amount` <= `participant2_transferred_amount + participant2_locked_amount`\"},\"unlock(uint256,address,address,bytes)\":{\"notice\":\"Unlocks all pending off-chain transfers from `sender` to `receiver` and sends the locked tokens corresponding to locks with secrets registered on-chain to the `receiver`. Locked tokens corresponding to locks where the secret was not revealed on-chain will return to the `sender`. Anyone can call unlock.\"},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"notice\":\"Called on a closed channel, the function allows the non-closing participant to provide the last balance proof, which modifies the closing participant's state. Can be called multiple times by anyone.\"}}}},\"settings\":{\"compilationTarget\":{\"data/source/test/TokenNetworkInternalsTest.sol\":\"TokenNetworkInternalStorageTest\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":.=.\",\":lib=data/source/lib\",\":raiden=data/source/raiden\",\":services=data/source/services\",\":test=data/source/test\"]},\"sources\":{\"data/source/lib/ECVerify.sol\":{\"keccak256\":\"0x8bb402baa478eb53252d77b63982e12685adda290cf4dfa1d8f510284f8df3e9\",\"urls\":[\"bzzr://474c3db1bb54bb831c32eb2ab67a0e870489994bd4d4b8a8fa24b54935211d43\"]},\"data/source/raiden/SecretRegistry.sol\":{\"keccak256\":\"0xb8078bc048ccdeb7c58026754f22fc378baf3b24090db0f17d10bda6cd4951b4\",\"urls\":[\"bzzr://f7a072330393a85a6a274ef526ac2ca0f8eb217bf5f48c18b3080be7ac3a7ede\"]},\"data/source/raiden/Token.sol\":{\"keccak256\":\"0x41b40819d7f6714550c742f48ce46daeb97255c08bc56e83bb9fde4fbe14c3b4\",\"urls\":[\"bzzr://a20e2bea336fb01584cf4dc80e77bb8db3c33666f77f840fd58559116849ae4b\"]},\"data/source/raiden/TokenNetwork.sol\":{\"keccak256\":\"0xe236e9c266564b1497d45cff4820b670e02cff86a07dba03310705e090620e66\",\"urls\":[\"bzzr://d629bfb011b3a81416e11a53816c3656f439ee2698b91cb015dade173e583a7c\"]},\"data/source/raiden/Utils.sol\":{\"keccak256\":\"0x602fd914e5644696d3c5d42e3a39fe6f16e7ddcc93f8864aa7e368a70cb56d0b\",\"urls\":[\"bzzr://b884810b9826074efb212a825d33409c35d9a159681690e821da3643052be3d1\"]},\"data/source/test/TokenNetworkInternalsTest.sol\":{\"keccak256\":\"0xb2788f5a8680109641c60e5d881883b0dd0a77c5314a7a6e8be7a3393b2537ab\",\"urls\":[\"bzzr://01583ff6d3db7e414d12a755f7e0a081c1b95048149afe6fc20d95b965d83b1a\"]}},\"version\":1}" + "bin": "60806040526000600860146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405160a080620045c4833981018060405260a08110156200004e57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050508484848484337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151515620000ec57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141515156200012957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156200016657600080fd5b6000861115156200017657600080fd5b6000851115156200018657600080fd5b84841115156200019557600080fd5b620001af88620003d9640100000000026401000000009004565b1515620001bb57600080fd5b620001d587620003d9640100000000026401000000009004565b1515620001e157600080fd5b600082111515620001f157600080fd5b6000811115156200020157600080fd5b8181101515156200021157600080fd5b876000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600281905550846003819055508360048190555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156200032d57600080fd5b505afa15801562000342573d6000803e3d6000fd5b505050506040513d60208110156200035957600080fd5b81019080805190602001909291905050501115156200037757600080fd5b82600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816005819055508060068190555050505050505050505050505050620003ec565b600080823b905060008111915050919050565b6141c880620003fc6000396000f3fe608060405234801561001057600080fd5b5060043610610218576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610137578063b8378f75116100ca578063f20a440311610099578063f20a440314610e63578063f5c6a22914610ec5578063fadc554b14610f65578063fc0c546a1461109c578063fe49ba1c146110e657610218565b8063b8378f7514610ca4578063c203d51e14610cc2578063e5949b5d14610d5c578063ee4516d914610db357610218565b8063938bcd6711610106578063938bcd6714610a535780639cadb15914610acb5780639e67ca5f14610b76578063b7506d7014610c8257610218565b80637c4734f41461070657806382fd77951461077e578063838d6e051461093957806387234237146109d057610218565b80634845be76116101af57806363ea01431161017e57806363ea0143146105f6578063679b37631461066e57806371e759921461068c5780637709bc78146106aa57610218565b80634845be76146104f6578063524bef8a146105145780635d6e441b146105565780635e5fd7f31461057457610218565b8063224df42f116101eb578063224df42f1461042657806323aa81741461044457806324d73a931461048e5780633af973b1146104d857610218565b806303d9d2531461021d5780630a798f24146103225780630c80b923146103a45780630fcc0c281461041c575b600080fd5b6103206004803603608081101561023357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561029a57600080fd5b8201836020820111156102ac57600080fd5b803590602001918460018302840111640100000000831117156102ce57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611168565b005b61038e6004803603606081101561033857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611526565b6040518082815260200191505060405180910390f35b610406600480360360408110156103ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117cc565b6040518082815260200191505060405180910390f35b610424611892565b005b61042e611977565b6040518082815260200191505060405180910390f35b61044c61197d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104966119a3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104e06119c9565b6040518082815260200191505060405180910390f35b6104fe6119cf565b6040518082815260200191505060405180910390f35b6105406004803603602081101561052a57600080fd5b81019080803590602001909291905050506119d5565b6040518082815260200191505060405180910390f35b61055e6119ed565b6040518082815260200191505060405180910390f35b6105f4600480360360a081101561058a57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506119f3565b005b61066c6004803603608081101561060c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a07565b005b610676611e52565b6040518082815260200191505060405180910390f35b610694611e58565b6040518082815260200191505060405180910390f35b6106ec600480360360208110156106c057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e7c565b604051808215151515815260200191505060405180910390f35b6107686004803603604081101561071c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e8f565b6040518082815260200191505060405180910390f35b610937600480360361010081101561079557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561081a57600080fd5b82018360208201111561082c57600080fd5b8035906020019184600183028401116401000000008311171561084e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156108b157600080fd5b8201836020820111156108c357600080fd5b803590602001918460018302840111640100000000831117156108e557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506120d1565b005b6109a56004803603606081101561094f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122e9565b604051808381526020018260048111156109bb57fe5b60ff1681526020019250505060405180910390f35b6109d86123dc565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a185780820151818401526020810190506109fd565b50505050905090810190601f168015610a455780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610ab560048036036040811015610a6957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612415565b6040518082815260200191505060405180910390f35b610b746004803603610120811015610ae257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506124f4565b005b610c80600480360360c0811015610b8c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610be757600080fd5b820183602082011115610bf957600080fd5b80359060200191846001830284011164010000000083111715610c1b57600080fd5b909192939192939080359060200190640100000000811115610c3c57600080fd5b820183602082011115610c4e57600080fd5b80359060200191846001830284011164010000000083111715610c7057600080fd5b9091929391929390505050612a28565b005b610c8a612e49565b604051808215151515815260200191505060405180910390f35b610cac612e5c565b6040518082815260200191505060405180910390f35b610d42600480360360a0811015610cd857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050612e62565b604051808215151515815260200191505060405180910390f35b610d8860048036036020811015610d7257600080fd5b8101908080359060200190929190505050612ee7565b60405180838152602001826004811115610d9e57fe5b60ff1681526020019250505060405180910390f35b610e1f60048036036060811015610dc957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f18565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610ec360048036036080811015610e7957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612fed565b005b610f4f600480360360c0811015610edb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050613017565b6040518082815260200191505060405180910390f35b61109a6004803603610100811015610f7c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561100157600080fd5b82018360208201111561101357600080fd5b8035906020019184600183028401116401000000008311171561103557600080fd5b90919293919293908035906020019064010000000081111561105657600080fd5b82018360208201111561106857600080fd5b8035906020019184600183028401116401000000008311171561108a57600080fd5b9091929391929390505050613153565b005b6110a461341e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b611152600480360360608110156110fc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613443565b6040518082815260200191505060405180910390f35b6111728383612415565b841415151561118057600080fd5b6000600481111561118d57fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff1660048111156111bc57fe5b1415156111c857600080fd5b60008060008060006111d986613536565b80945081955050506111ec89888a613443565b94506000600b600087815260200190815260200160002090508060010154925084816000015414151561121e57600080fd5b60008311151561122d57600080fd5b61123784846135a6565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a460008411156113ee576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156113a757600080fd5b505af11580156113bb573d6000803e3d6000fd5b505050506040513d60208110156113d157600080fd5b810190808051906020019092919050505015156113ed57600080fd5b5b6000821115611502576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156114bb57600080fd5b505af11580156114cf573d6000803e3d6000fd5b505050506040513d60208110156114e557600080fd5b8101908080519060200190929190505050151561150157600080fd5b5b81831015151561150e57fe5b83831015151561151a57fe5b50505050505050505050565b6000801515600860149054906101000a900460ff16151514151561154957600080fd5b81600354811015151561155b57600080fd5b600454811115151561156c57600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561162c57600080fd5b505afa158015611640573d6000803e3d6000fd5b505050506040513d602081101561165657600080fd5b810190808051906020019092919050505010151561167357600080fd5b600160076000828254019250508190555060075490506116938787611e8f565b91506000600a6000848152602001908152602001600020541415156116b757600080fd5b80600a6000848152602001908152602001600020819055506000600960008381526020019081526020016000209050600081600001541415156116f657fe5b6000600481111561170357fe5b8160010160009054906101000a900460ff16600481111561172057fe5b14151561172957fe5b85816000018190555060018160010160006101000a81548160ff0219169083600481111561175357fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b6000806117d98484612415565b9050600060096000838152602001908152602001600020905060008160020160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061188682826135bf565b94505050505092915050565b60001515600860149054906101000a900460ff1615151415156118b457600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561191057600080fd5b6001600860146101000a81548160ff0219169083151502179055507f6151930a846a85f5e64d2dd1cc5deeafb010c63eec4b600458158edd0e33f15d600860149054906101000a900460ff16604051808215151515815260200191505060405180910390a1565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b611a0085858585856135e0565b5050505050565b60001515600860149054906101000a900460ff161515141515611a2957600080fd5b8360016004811115611a3757fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115611a6657fe5b141515611a7257600080fd5b611a7c8483612415565b85141515611a8957600080fd5b600083111515611a9857600080fd5b6005548311151515611aa957600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050816000015488039450600085111515611b6557600080fd5b878511151515611b7457600080fd5b8785836000015401141515611b8557fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611c4357600080fd5b505afa158015611c57573d6000803e3d6000fd5b505050506040513d6020811015611c6d57600080fd5b81019080805190602001909291905050500111151515611c8c57600080fd5b8782600001819055508060000154826000015401935081600001548410151515611cb557600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611e0057600080fd5b505af1158015611e14573d6000803e3d6000fd5b505050506040513d6020811015611e2a57600080fd5b81019080805190602001909291905050501515611e4657600080fd5b50505050505050505050565b60075481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611ecc57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611f0857600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611f4357600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015612023578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090506120cb565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b87600160048111156120df57fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff16600481111561210e57fe5b14151561211a57600080fd5b6121248789612415565b8914151561213157600080fd5b600080600960008c8152602001908152602001600020905060028160010160006101000a81548160ff0219169083600481111561216a57fe5b021790555060018160020160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555043816000016000828254019250508190555060006121f060018d8b8b8b8b8b613630565b90508073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614151561222c57600080fd5b600088111561228b576122428c8a8a8a8a61385c565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561227e57600080fd5b61228a82848a8c613a32565b5b878a73ffffffffffffffffffffffffffffffffffffffff168d7f09d2f946e008c38931cd739dd20e35146deff8ab3134caee6d54fe50816a81b88c6040518082815260200191505060405180910390a4505050505050505050505050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff1690506000600481111561232957fe5b81600481111561233557fe5b1480156123425750600089115b801561235057506007548911155b156123c65760039050612364898989613443565b93506000600b600086815260200190815260200160002090506123888a898b613443565b93506000600b60008681526020019081526020016000209050600082600101541480156123b9575060008160010154145b156123c357600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561245257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561248e57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156124c957600080fd5b60006124d58484611e8f565b9050600a60008281526020019081526020016000205491505092915050565b6124fe8885612415565b8914151561250b57600080fd5b60006125178986611e8f565b90506000600960008c815260200190815260200160002090506002600481111561253d57fe5b8160010160009054906101000a900460ff16600481111561255a57fe5b14151561256657600080fd5b43816000015410151561257857600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061260e828c8c8c613aa2565b151561261957600080fd5b61262581888888613aa2565b151561263057600080fd5b61263e828c8c848b8b613b1c565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a6000858152602001908152602001600020600090556127948d8d8a8d8d6135e0565b6127a18d898e89896135e0565b8c7f8db0e7d323ca765ce9ab550780131837e4942ccfea3be2b635ec1084c81f72628c8b8a896040518085815260200184815260200183815260200182815260200194505050505060405180910390a260008b1115612905576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156128be57600080fd5b505af11580156128d2573d6000803e3d6000fd5b505050506040513d60208110156128e857600080fd5b8101908080519060200190929190505050151561290457600080fd5b5b6000871115612a19576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156129d257600080fd5b505af11580156129e6573d6000803e3d6000fd5b505050506040513d60208110156129fc57600080fd5b81019080805190602001909291905050501515612a1857600080fd5b5b50505050505050505050505050565b8760016004811115612a3657fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115612a6557fe5b141515612a7157600080fd5b6000806000808a111515612a8457600080fd5b8843101515612a9257600080fd5b612ae38c8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613c2b565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612b1c57600080fd5b612b6d8c8c8c8c8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613c2b565b9050612b798b82612415565b8c141515612b8657600080fd5b6000600960008e8152602001908152602001600020905060008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000015482600001540195508581600101548e0111151515612c4957600080fd5b80600101548d018d11151515612c5e57600080fd5b81600101548d0394508c8511151515612c7657600080fd5b600085111515612c8557600080fd5b8c85836001015401141515612c9657fe5b8d73ffffffffffffffffffffffffffffffffffffffff168f7f98ed0357b86b313fa9f968de5c9d2bcf591432355b34aa1ab7e3e9e92f4284088f6040518082815260200191505060405180910390a38c82600101819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8f876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612db257600080fd5b505af1158015612dc6573d6000803e3d6000fd5b505050506040513d6020811015612ddc57600080fd5b81019080805190602001909291905050501515612df857600080fd5b81600001548610151515612e0857fe5b80600001548610151515612e1857fe5b60008260040154141515612e2857fe5b60008160040154141515612e3857fe5b505050505050505050505050505050565b600860149054906101000a900460ff1681565b60035481565b600080612e6f8787612415565b9050600060096000838152602001908152602001600020905060008160020160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612ed981888888613aa2565b935050505095945050505050565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612f868c8c8c613443565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b600060096000868152602001908152602001600020905061301081858585613a32565b5050505050565b6000806130248886612415565b9050600060096000838152602001908152602001600020905060008160020160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506130cf614173565b6130d7614173565b836000015482600001818152505083600101548260200181815250508b8260400181815250508a8260600181815250508260000154816000018181525050826001015481602001818152505088816040018181525050878160600181815250506131418282613e3c565b96505050505050509695505050505050565b61315d8989612415565b8a14151561316a57600080fd5b6000600102871415151561317d57600080fd5b60008611151561318c57600080fd5b6000806000600960008e81526020019081526020016000209050600260048111156131b357fe5b8160010160009054906101000a900460ff1660048111156131d057fe5b1415156131dc57600080fd5b438160000154101515156131ef57600080fd5b61328760028e8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613630565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff161415156132c357600080fd5b6133148d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061385c565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614151561335057600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff1615156133b257600080fd5b6133be828e8c8e613a32565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f6fc5b4f4f9e65bfdc4c45456373906876cee8832b605478e281902468875eaed8e6040518082815260200191505060405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561348057600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b600080600083519050600060608281151561354d57fe5b0614151561355a57600080fd5b6000806000806000602094505b8585101561358b576135798986613ed0565b92508284019350606085019450613567565b88805190602001209050808497509750505050505050915091565b60008183116135b557826135b7565b815b905092915050565b60008160010154836001015483600001548560000154010303905092915050565b60008214156135ee57613629565b60006135fb868686613443565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002548d60068111156136b557fe5b8d8d8d8d8d604051602001808b805190602001908083835b6020831015156136f257805182526020820191506020810190506020830392506136cd565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b6020831015156137455780518252602082019150602081019050602083039250613720565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b6020831015156137fd57805182526020820191506020810190506020830392506137d8565b6001836020036101000a0380198251168184511680821785525050505050509050019a505050505050505050505060405160208183030381529060405280519060200120905061384d8185613ffa565b92505050979650505050505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600160068111156138e257fe5b8c8c8c8c604051602001808a805190602001908083835b60208310151561391e57805182526020820191506020810190506020830392506138f9565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b602083101515613971578051825260208201915060208101905060208303925061394c565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018781526020018681526020018581526020018481526020018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050613a258185613ffa565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806004015483111515613a8957600080fd5b8281600401819055508181600301819055505050505050565b6000806001028560030154148015613aba5750600084145b8015613ac65750600083145b15613ad45760019050613b14565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b6000806000806000806000613b2f614173565b613b37614173565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a81604001818152505089816060018181525050613ba18f8d6135bf565b9250613bad8282613e3c565b9450613bb985846135a6565b94508483039350613bca858b61410d565b809b508196505050613bdc848e61410d565b809e508195505050828511151515613bf057fe5b828411151515613bfc57fe5b898d858701010183141515613c0d57fe5b84848e8c985098509850985050505050509650965096509692505050565b600060606040805190810160405280600381526020017f3230300000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a000000000000815250823060025460036006811115613cb157fe5b8c8c8c8c604051602001808a805190602001908083835b602083101515613ced5780518252602082019150602081019050602083039250613cc8565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b602083101515613d405780518252602082019150602081019050602083039250613d1b565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050613e2f8185613ffa565b9250505095945050505050565b6000806000806000613e5687604001518860600151614132565b9350613e6a86604001518760600151614132565b9250838310151515613e7b57600080fd5b86604001518410151515613e8b57fe5b85604001518310151515613e9b57fe5b8383039150613eae828860000151614132565b9050613ebe81886020015161410d565b50809150508094505050505092915050565b6000806000806000858751111515613eef576000945050505050613ff4565b858701519350602086018701519250604086018701519050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015613f9657600080fd5b505afa158015613faa573d6000803e3d6000fd5b505050506040513d6020811015613fc057600080fd5b810190808051906020019092919050505091506000821480613fe25750818411155b15613fec57600092505b829450505050505b92915050565b60006041825114151561400c57600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff16101561403c57601b810190505b601b8160ff1614806140515750601c8160ff16145b151561405c57600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156140b9573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561410157600080fd5b83935050505092915050565b60008082841161412257600084819150614127565b828403835b915091509250929050565b600080828401905083811015614168577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61416a565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a72305820a8766915f4aa06726d9a9e3a08c9fb4546fcae62ef013671c5a07170290d4c330029", + "bin-runtime": "608060405234801561001057600080fd5b5060043610610218576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610137578063b8378f75116100ca578063f20a440311610099578063f20a440314610e63578063f5c6a22914610ec5578063fadc554b14610f65578063fc0c546a1461109c578063fe49ba1c146110e657610218565b8063b8378f7514610ca4578063c203d51e14610cc2578063e5949b5d14610d5c578063ee4516d914610db357610218565b8063938bcd6711610106578063938bcd6714610a535780639cadb15914610acb5780639e67ca5f14610b76578063b7506d7014610c8257610218565b80637c4734f41461070657806382fd77951461077e578063838d6e051461093957806387234237146109d057610218565b80634845be76116101af57806363ea01431161017e57806363ea0143146105f6578063679b37631461066e57806371e759921461068c5780637709bc78146106aa57610218565b80634845be76146104f6578063524bef8a146105145780635d6e441b146105565780635e5fd7f31461057457610218565b8063224df42f116101eb578063224df42f1461042657806323aa81741461044457806324d73a931461048e5780633af973b1146104d857610218565b806303d9d2531461021d5780630a798f24146103225780630c80b923146103a45780630fcc0c281461041c575b600080fd5b6103206004803603608081101561023357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561029a57600080fd5b8201836020820111156102ac57600080fd5b803590602001918460018302840111640100000000831117156102ce57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611168565b005b61038e6004803603606081101561033857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611526565b6040518082815260200191505060405180910390f35b610406600480360360408110156103ba57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117cc565b6040518082815260200191505060405180910390f35b610424611892565b005b61042e611977565b6040518082815260200191505060405180910390f35b61044c61197d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104966119a3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104e06119c9565b6040518082815260200191505060405180910390f35b6104fe6119cf565b6040518082815260200191505060405180910390f35b6105406004803603602081101561052a57600080fd5b81019080803590602001909291905050506119d5565b6040518082815260200191505060405180910390f35b61055e6119ed565b6040518082815260200191505060405180910390f35b6105f4600480360360a081101561058a57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506119f3565b005b61066c6004803603608081101561060c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a07565b005b610676611e52565b6040518082815260200191505060405180910390f35b610694611e58565b6040518082815260200191505060405180910390f35b6106ec600480360360208110156106c057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e7c565b604051808215151515815260200191505060405180910390f35b6107686004803603604081101561071c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e8f565b6040518082815260200191505060405180910390f35b610937600480360361010081101561079557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561081a57600080fd5b82018360208201111561082c57600080fd5b8035906020019184600183028401116401000000008311171561084e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156108b157600080fd5b8201836020820111156108c357600080fd5b803590602001918460018302840111640100000000831117156108e557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506120d1565b005b6109a56004803603606081101561094f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122e9565b604051808381526020018260048111156109bb57fe5b60ff1681526020019250505060405180910390f35b6109d86123dc565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a185780820151818401526020810190506109fd565b50505050905090810190601f168015610a455780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610ab560048036036040811015610a6957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612415565b6040518082815260200191505060405180910390f35b610b746004803603610120811015610ae257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506124f4565b005b610c80600480360360c0811015610b8c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610be757600080fd5b820183602082011115610bf957600080fd5b80359060200191846001830284011164010000000083111715610c1b57600080fd5b909192939192939080359060200190640100000000811115610c3c57600080fd5b820183602082011115610c4e57600080fd5b80359060200191846001830284011164010000000083111715610c7057600080fd5b9091929391929390505050612a28565b005b610c8a612e49565b604051808215151515815260200191505060405180910390f35b610cac612e5c565b6040518082815260200191505060405180910390f35b610d42600480360360a0811015610cd857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190505050612e62565b604051808215151515815260200191505060405180910390f35b610d8860048036036020811015610d7257600080fd5b8101908080359060200190929190505050612ee7565b60405180838152602001826004811115610d9e57fe5b60ff1681526020019250505060405180910390f35b610e1f60048036036060811015610dc957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f18565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610ec360048036036080811015610e7957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612fed565b005b610f4f600480360360c0811015610edb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050613017565b6040518082815260200191505060405180910390f35b61109a6004803603610100811015610f7c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561100157600080fd5b82018360208201111561101357600080fd5b8035906020019184600183028401116401000000008311171561103557600080fd5b90919293919293908035906020019064010000000081111561105657600080fd5b82018360208201111561106857600080fd5b8035906020019184600183028401116401000000008311171561108a57600080fd5b9091929391929390505050613153565b005b6110a461341e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b611152600480360360608110156110fc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613443565b6040518082815260200191505060405180910390f35b6111728383612415565b841415151561118057600080fd5b6000600481111561118d57fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff1660048111156111bc57fe5b1415156111c857600080fd5b60008060008060006111d986613536565b80945081955050506111ec89888a613443565b94506000600b600087815260200190815260200160002090508060010154925084816000015414151561121e57600080fd5b60008311151561122d57600080fd5b61123784846135a6565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a460008411156113ee576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156113a757600080fd5b505af11580156113bb573d6000803e3d6000fd5b505050506040513d60208110156113d157600080fd5b810190808051906020019092919050505015156113ed57600080fd5b5b6000821115611502576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156114bb57600080fd5b505af11580156114cf573d6000803e3d6000fd5b505050506040513d60208110156114e557600080fd5b8101908080519060200190929190505050151561150157600080fd5b5b81831015151561150e57fe5b83831015151561151a57fe5b50505050505050505050565b6000801515600860149054906101000a900460ff16151514151561154957600080fd5b81600354811015151561155b57600080fd5b600454811115151561156c57600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561162c57600080fd5b505afa158015611640573d6000803e3d6000fd5b505050506040513d602081101561165657600080fd5b810190808051906020019092919050505010151561167357600080fd5b600160076000828254019250508190555060075490506116938787611e8f565b91506000600a6000848152602001908152602001600020541415156116b757600080fd5b80600a6000848152602001908152602001600020819055506000600960008381526020019081526020016000209050600081600001541415156116f657fe5b6000600481111561170357fe5b8160010160009054906101000a900460ff16600481111561172057fe5b14151561172957fe5b85816000018190555060018160010160006101000a81548160ff0219169083600481111561175357fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b6000806117d98484612415565b9050600060096000838152602001908152602001600020905060008160020160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061188682826135bf565b94505050505092915050565b60001515600860149054906101000a900460ff1615151415156118b457600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561191057600080fd5b6001600860146101000a81548160ff0219169083151502179055507f6151930a846a85f5e64d2dd1cc5deeafb010c63eec4b600458158edd0e33f15d600860149054906101000a900460ff16604051808215151515815260200191505060405180910390a1565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b611a0085858585856135e0565b5050505050565b60001515600860149054906101000a900460ff161515141515611a2957600080fd5b8360016004811115611a3757fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115611a6657fe5b141515611a7257600080fd5b611a7c8483612415565b85141515611a8957600080fd5b600083111515611a9857600080fd5b6005548311151515611aa957600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050816000015488039450600085111515611b6557600080fd5b878511151515611b7457600080fd5b8785836000015401141515611b8557fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611c4357600080fd5b505afa158015611c57573d6000803e3d6000fd5b505050506040513d6020811015611c6d57600080fd5b81019080805190602001909291905050500111151515611c8c57600080fd5b8782600001819055508060000154826000015401935081600001548410151515611cb557600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611e0057600080fd5b505af1158015611e14573d6000803e3d6000fd5b505050506040513d6020811015611e2a57600080fd5b81019080805190602001909291905050501515611e4657600080fd5b50505050505050505050565b60075481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611ecc57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611f0857600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611f4357600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015612023578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090506120cb565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b87600160048111156120df57fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff16600481111561210e57fe5b14151561211a57600080fd5b6121248789612415565b8914151561213157600080fd5b600080600960008c8152602001908152602001600020905060028160010160006101000a81548160ff0219169083600481111561216a57fe5b021790555060018160020160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555043816000016000828254019250508190555060006121f060018d8b8b8b8b8b613630565b90508073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614151561222c57600080fd5b600088111561228b576122428c8a8a8a8a61385c565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561227e57600080fd5b61228a82848a8c613a32565b5b878a73ffffffffffffffffffffffffffffffffffffffff168d7f09d2f946e008c38931cd739dd20e35146deff8ab3134caee6d54fe50816a81b88c6040518082815260200191505060405180910390a4505050505050505050505050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff1690506000600481111561232957fe5b81600481111561233557fe5b1480156123425750600089115b801561235057506007548911155b156123c65760039050612364898989613443565b93506000600b600086815260200190815260200160002090506123888a898b613443565b93506000600b60008681526020019081526020016000209050600082600101541480156123b9575060008160010154145b156123c357600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561245257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561248e57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156124c957600080fd5b60006124d58484611e8f565b9050600a60008281526020019081526020016000205491505092915050565b6124fe8885612415565b8914151561250b57600080fd5b60006125178986611e8f565b90506000600960008c815260200190815260200160002090506002600481111561253d57fe5b8160010160009054906101000a900460ff16600481111561255a57fe5b14151561256657600080fd5b43816000015410151561257857600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061260e828c8c8c613aa2565b151561261957600080fd5b61262581888888613aa2565b151561263057600080fd5b61263e828c8c848b8b613b1c565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a6000858152602001908152602001600020600090556127948d8d8a8d8d6135e0565b6127a18d898e89896135e0565b8c7f8db0e7d323ca765ce9ab550780131837e4942ccfea3be2b635ec1084c81f72628c8b8a896040518085815260200184815260200183815260200182815260200194505050505060405180910390a260008b1115612905576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156128be57600080fd5b505af11580156128d2573d6000803e3d6000fd5b505050506040513d60208110156128e857600080fd5b8101908080519060200190929190505050151561290457600080fd5b5b6000871115612a19576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156129d257600080fd5b505af11580156129e6573d6000803e3d6000fd5b505050506040513d60208110156129fc57600080fd5b81019080805190602001909291905050501515612a1857600080fd5b5b50505050505050505050505050565b8760016004811115612a3657fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115612a6557fe5b141515612a7157600080fd5b6000806000808a111515612a8457600080fd5b8843101515612a9257600080fd5b612ae38c8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613c2b565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612b1c57600080fd5b612b6d8c8c8c8c8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613c2b565b9050612b798b82612415565b8c141515612b8657600080fd5b6000600960008e8152602001908152602001600020905060008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000015482600001540195508581600101548e0111151515612c4957600080fd5b80600101548d018d11151515612c5e57600080fd5b81600101548d0394508c8511151515612c7657600080fd5b600085111515612c8557600080fd5b8c85836001015401141515612c9657fe5b8d73ffffffffffffffffffffffffffffffffffffffff168f7f98ed0357b86b313fa9f968de5c9d2bcf591432355b34aa1ab7e3e9e92f4284088f6040518082815260200191505060405180910390a38c82600101819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8f876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612db257600080fd5b505af1158015612dc6573d6000803e3d6000fd5b505050506040513d6020811015612ddc57600080fd5b81019080805190602001909291905050501515612df857600080fd5b81600001548610151515612e0857fe5b80600001548610151515612e1857fe5b60008260040154141515612e2857fe5b60008160040154141515612e3857fe5b505050505050505050505050505050565b600860149054906101000a900460ff1681565b60035481565b600080612e6f8787612415565b9050600060096000838152602001908152602001600020905060008160020160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612ed981888888613aa2565b935050505095945050505050565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612f868c8c8c613443565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b600060096000868152602001908152602001600020905061301081858585613a32565b5050505050565b6000806130248886612415565b9050600060096000838152602001908152602001600020905060008160020160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506130cf614173565b6130d7614173565b836000015482600001818152505083600101548260200181815250508b8260400181815250508a8260600181815250508260000154816000018181525050826001015481602001818152505088816040018181525050878160600181815250506131418282613e3c565b96505050505050509695505050505050565b61315d8989612415565b8a14151561316a57600080fd5b6000600102871415151561317d57600080fd5b60008611151561318c57600080fd5b6000806000600960008e81526020019081526020016000209050600260048111156131b357fe5b8160010160009054906101000a900460ff1660048111156131d057fe5b1415156131dc57600080fd5b438160000154101515156131ef57600080fd5b61328760028e8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613630565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff161415156132c357600080fd5b6133148d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061385c565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614151561335057600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff1615156133b257600080fd5b6133be828e8c8e613a32565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f6fc5b4f4f9e65bfdc4c45456373906876cee8832b605478e281902468875eaed8e6040518082815260200191505060405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561348057600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b600080600083519050600060608281151561354d57fe5b0614151561355a57600080fd5b6000806000806000602094505b8585101561358b576135798986613ed0565b92508284019350606085019450613567565b88805190602001209050808497509750505050505050915091565b60008183116135b557826135b7565b815b905092915050565b60008160010154836001015483600001548560000154010303905092915050565b60008214156135ee57613629565b60006135fb868686613443565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002548d60068111156136b557fe5b8d8d8d8d8d604051602001808b805190602001908083835b6020831015156136f257805182526020820191506020810190506020830392506136cd565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b6020831015156137455780518252602082019150602081019050602083039250613720565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b6020831015156137fd57805182526020820191506020810190506020830392506137d8565b6001836020036101000a0380198251168184511680821785525050505050509050019a505050505050505050505060405160208183030381529060405280519060200120905061384d8185613ffa565b92505050979650505050505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600160068111156138e257fe5b8c8c8c8c604051602001808a805190602001908083835b60208310151561391e57805182526020820191506020810190506020830392506138f9565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b602083101515613971578051825260208201915060208101905060208303925061394c565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018781526020018681526020018581526020018481526020018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050613a258185613ffa565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806004015483111515613a8957600080fd5b8281600401819055508181600301819055505050505050565b6000806001028560030154148015613aba5750600084145b8015613ac65750600083145b15613ad45760019050613b14565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b6000806000806000806000613b2f614173565b613b37614173565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a81604001818152505089816060018181525050613ba18f8d6135bf565b9250613bad8282613e3c565b9450613bb985846135a6565b94508483039350613bca858b61410d565b809b508196505050613bdc848e61410d565b809e508195505050828511151515613bf057fe5b828411151515613bfc57fe5b898d858701010183141515613c0d57fe5b84848e8c985098509850985050505050509650965096509692505050565b600060606040805190810160405280600381526020017f3230300000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a000000000000815250823060025460036006811115613cb157fe5b8c8c8c8c604051602001808a805190602001908083835b602083101515613ced5780518252602082019150602081019050602083039250613cc8565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b602083101515613d405780518252602082019150602081019050602083039250613d1b565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050613e2f8185613ffa565b9250505095945050505050565b6000806000806000613e5687604001518860600151614132565b9350613e6a86604001518760600151614132565b9250838310151515613e7b57600080fd5b86604001518410151515613e8b57fe5b85604001518310151515613e9b57fe5b8383039150613eae828860000151614132565b9050613ebe81886020015161410d565b50809150508094505050505092915050565b6000806000806000858751111515613eef576000945050505050613ff4565b858701519350602086018701519250604086018701519050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015613f9657600080fd5b505afa158015613faa573d6000803e3d6000fd5b505050506040513d6020811015613fc057600080fd5b810190808051906020019092919050505091506000821480613fe25750818411155b15613fec57600092505b829450505050505b92915050565b60006041825114151561400c57600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff16101561403c57601b810190505b601b8160ff1614806140515750601c8160ff16145b151561405c57600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156140b9573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561410157600080fd5b83935050505092915050565b60008082841161412257600084819150614127565b828403835b915091509250929050565b600080828401905083811015614168577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61416a565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a72305820a8766915f4aa06726d9a9e3a08c9fb4546fcae62ef013671c5a07170290d4c330029", + "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"address\"},{\"name\":\"sender\",\"type\":\"address\"},{\"name\":\"locks\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"openChannel\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"}],\"name\":\"getChannelAvailableDepositPublic\",\"outputs\":[{\"name\":\"total_available_deposit\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"deprecate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_max\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"deprecation_executor\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"secret_registry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"chain_id\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token_network_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"participants_hash_to_channel_identifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_participant_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"},{\"name\":\"locked_amount\",\"type\":\"uint256\"},{\"name\":\"locksroot\",\"type\":\"bytes32\"}],\"name\":\"updateUnlockDataPublic\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"total_deposit\",\"type\":\"uint256\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"setTotalDeposit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_counter\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_SAFE_UINT256\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contract_address\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getParticipantsHash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"}],\"name\":\"closeChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"}],\"name\":\"getChannelInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"signature_prefix\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant1_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locksroot\",\"type\":\"bytes32\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"participant2_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locksroot\",\"type\":\"bytes32\"}],\"name\":\"settleChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"total_withdraw\",\"type\":\"uint256\"},{\"name\":\"expiration_block\",\"type\":\"uint256\"},{\"name\":\"participant_signature\",\"type\":\"bytes\"},{\"name\":\"partner_signature\",\"type\":\"bytes\"}],\"name\":\"setTotalWithdraw\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"safety_deprecation_switch\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_min\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"to_verify\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"},{\"name\":\"transferred_amount\",\"type\":\"uint256\"},{\"name\":\"locked_amount\",\"type\":\"uint256\"},{\"name\":\"locksroot\",\"type\":\"bytes32\"}],\"name\":\"verifyBalanceHashDataPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"channels\",\"outputs\":[{\"name\":\"settle_block_number\",\"type\":\"uint256\"},{\"name\":\"state\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelParticipantInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bool\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"}],\"name\":\"updateBalanceProofDataPublic\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant1_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"participant2_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locked_amount\",\"type\":\"uint256\"}],\"name\":\"getMaxPossibleReceivableAmountPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"}],\"name\":\"updateNonClosingBalanceProof\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"getUnlockIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_token_address\",\"type\":\"address\"},{\"name\":\"_secret_registry\",\"type\":\"address\"},{\"name\":\"_chain_id\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_min\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_max\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant1\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"participant2\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"ChannelOpened\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"total_deposit\",\"type\":\"uint256\"}],\"name\":\"ChannelNewDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"new_value\",\"type\":\"bool\"}],\"name\":\"DeprecationSwitch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"total_withdraw\",\"type\":\"uint256\"}],\"name\":\"ChannelWithdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"balance_hash\",\"type\":\"bytes32\"}],\"name\":\"ChannelClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"locksroot\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"unlocked_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"returned_tokens\",\"type\":\"uint256\"}],\"name\":\"ChannelUnlocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"balance_hash\",\"type\":\"bytes32\"}],\"name\":\"NonClosingBalanceProofUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant1_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant1_locksroot\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"participant2_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant2_locksroot\",\"type\":\"bytes32\"}],\"name\":\"ChannelSettled\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"closeChannel(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"closing_participant\":\"Channel participant who closes the channel.\",\"closing_signature\":\"Closing participant's signature of the balance proof data.\",\"non_closing_participant\":\"Channel partner of the `closing_participant`, who provided the balance proof.\",\"non_closing_signature\":\"Non-closing participant's signature of the balance proof data.\",\"nonce\":\"Strictly monotonic value used to order transfers.\"}},\"contractExists(address)\":{\"params\":{\"contract_address\":\"The address to check whether a contract is deployed or not\"},\"return\":\"True if a contract exists, false otherwise\"},\"getChannelIdentifier(address,address)\":{\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"},\"return\":\"Unique identifier for the channel. It can be 0 if channel does not exist.\"},\"getChannelInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Address of a channel participant.\",\"participant2\":\"Address of the other channel participant.\"},\"return\":\"Channel settle_block_number and state.\"},\"getChannelParticipantInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Address of the channel participant whose data will be returned.\",\"partner\":\"Address of the channel partner.\"},\"return\":\"Participant's deposit, withdrawn_amount, whether the participant has called `closeChannel` or not, balance_hash, nonce, locksroot, locked_amount.\"},\"getParticipantsHash(address,address)\":{\"details\":\"Get the hash of the participant addresses, ordered lexicographically.\",\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"}},\"getUnlockIdentifier(uint256,address,address)\":{\"details\":\"Get the hash of the channel identifier and the participant addresses (whose ordering matters). The hash might be useful for the receiver to look up the appropriate UnlockData to claim.\",\"params\":{\"channel_identifier\":\"Identifier for the channel which the UnlockData is about.\",\"receiver\":\"Receiver of the pending transfers that the UnlockData represents.\",\"sender\":\"Sender of the pending transfers that the UnlockData represents.\"}},\"openChannel(address,address,uint256)\":{\"params\":{\"participant1\":\"Ethereum address of a channel participant.\",\"participant2\":\"Ethereum address of the other channel participant.\",\"settle_timeout\":\"Number of blocks that need to be mined between a call to closeChannel and settleChannel.\"}},\"setTotalDeposit(uint256,address,uint256,address)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Channel participant whose deposit is being set.\",\"partner\":\"Channel partner address, needed to compute the total channel deposit.\",\"total_deposit\":\"The total amount of tokens that the participant will have as a deposit.\"}},\"setTotalWithdraw(uint256,address,uint256,uint256,bytes,bytes)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Channel participant, who will receive the withdrawn amount.\",\"participant_signature\":\"Participant's signature on the withdraw data.\",\"partner_signature\":\"Partner's signature on the withdraw data.\",\"total_withdraw\":\"Total amount of tokens that are marked as withdrawn from the channel during the channel lifecycle.\"}},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Channel participant.\",\"participant1_locked_amount\":\"Amount of tokens owed by `participant1` to `participant2`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant1_locksroot\":\"The latest known hash of the pending hash-time locks of `participant1`, used to validate the unlocked proofs. If no balance_hash has been submitted, locksroot is ignored.\",\"participant1_transferred_amount\":\"The latest known amount of tokens transferred from `participant1` to `participant2`.\",\"participant2\":\"Other channel participant.\",\"participant2_locked_amount\":\"Amount of tokens owed by `participant2` to `participant1`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant2_locksroot\":\"The latest known hash of the pending hash-time locks of `participant2`, used to validate the unlocked proofs. If no balance_hash has been submitted, locksroot is ignored.\",\"participant2_transferred_amount\":\"The latest known amount of tokens transferred from `participant2` to `participant1`.\"}},\"unlock(uint256,address,address,bytes)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"locks\":\"All pending locks concatenated in order of creation. that `sender` sent to `receiver`.\",\"receiver\":\"Address who will receive the claimable unlocked tokens.\",\"sender\":\"Address who sent the pending transfers and will receive the unclaimable unlocked tokens.\"}},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"closing_participant\":\"Channel participant who closed the channel.\",\"closing_signature\":\"Closing participant's signature of the balance proof data.\",\"non_closing_participant\":\"Channel participant who needs to update the balance proof.\",\"non_closing_signature\":\"Non-closing participant signature of the balance proof data.\",\"nonce\":\"Strictly monotonic value used to order transfers.\"}}}},\"userdoc\":{\"methods\":{\"closeChannel(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"notice\":\"Close the channel defined by the two participant addresses. Anybody can call this function on behalf of a participant (called the closing participant), providing a balance proof signed by both parties. Callable only once.\"},\"contractExists(address)\":{\"notice\":\"Check if a contract exists\"},\"getChannelIdentifier(address,address)\":{\"notice\":\"Returns the unique identifier for the channel given by the contract.\"},\"getChannelInfo(uint256,address,address)\":{\"notice\":\"The contract cannot really distinguish Settled and Removed states, especially when wrong participants are given as input. The contract does not remember the participants of the channel.\"},\"openChannel(address,address,uint256)\":{\"notice\":\"Opens a new channel between `participant1` and `participant2`. Can be called by anyone.\"},\"setTotalDeposit(uint256,address,uint256,address)\":{\"notice\":\"Sets the channel participant total deposit value. Can be called by anyone.\"},\"setTotalWithdraw(uint256,address,uint256,uint256,bytes,bytes)\":{\"notice\":\"Allows `participant` to withdraw tokens from the channel that he has with `partner`, without closing it. Can be called by anyone. Can only be called once per each signed withdraw message.\"},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"notice\":\"Settles the balance between the two parties. Note that arguments order counts: `participant1_transferred_amount + participant1_locked_amount` <= `participant2_transferred_amount + participant2_locked_amount`\"},\"unlock(uint256,address,address,bytes)\":{\"notice\":\"Unlocks all pending off-chain transfers from `sender` to `receiver` and sends the locked tokens corresponding to locks with secrets registered on-chain to the `receiver`. Locked tokens corresponding to locks where the secret was not revealed on-chain will return to the `sender`. Anyone can call unlock.\"},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"notice\":\"Called on a closed channel, the function allows the non-closing participant to provide the last balance proof, which modifies the closing participant's state. Can be called multiple times by anyone.\"}}}},\"settings\":{\"compilationTarget\":{\"data/source/test/TokenNetworkInternalsTest.sol\":\"TokenNetworkInternalStorageTest\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":.=.\",\":lib=data/source/lib\",\":raiden=data/source/raiden\",\":services=data/source/services\",\":test=data/source/test\"]},\"sources\":{\"data/source/lib/ECVerify.sol\":{\"keccak256\":\"0x8bb402baa478eb53252d77b63982e12685adda290cf4dfa1d8f510284f8df3e9\",\"urls\":[\"bzzr://474c3db1bb54bb831c32eb2ab67a0e870489994bd4d4b8a8fa24b54935211d43\"]},\"data/source/raiden/SecretRegistry.sol\":{\"keccak256\":\"0xb8078bc048ccdeb7c58026754f22fc378baf3b24090db0f17d10bda6cd4951b4\",\"urls\":[\"bzzr://f7a072330393a85a6a274ef526ac2ca0f8eb217bf5f48c18b3080be7ac3a7ede\"]},\"data/source/raiden/Token.sol\":{\"keccak256\":\"0x41b40819d7f6714550c742f48ce46daeb97255c08bc56e83bb9fde4fbe14c3b4\",\"urls\":[\"bzzr://a20e2bea336fb01584cf4dc80e77bb8db3c33666f77f840fd58559116849ae4b\"]},\"data/source/raiden/TokenNetwork.sol\":{\"keccak256\":\"0x8a0471fe654a6eabe757133f5c6b3b3a8d19acce975625d097192cc775d94bbe\",\"urls\":[\"bzzr://7c9b05aac5ab23979b7863a4b15421d28ac2b515b673c0b0d296c580b60cde86\"]},\"data/source/raiden/Utils.sol\":{\"keccak256\":\"0x602fd914e5644696d3c5d42e3a39fe6f16e7ddcc93f8864aa7e368a70cb56d0b\",\"urls\":[\"bzzr://b884810b9826074efb212a825d33409c35d9a159681690e821da3643052be3d1\"]},\"data/source/test/TokenNetworkInternalsTest.sol\":{\"keccak256\":\"0x8e81d3c0a95409085ede2f3bc74986a0348cfdb0ff47f7e18589397bd5960085\",\"urls\":[\"bzzr://2421f40e5bdc2d79549dde21fa8291d3b7c2510806f15e1183cdd79894c5341a\"]}},\"version\":1}" }, "TokenNetworkRegistry": { "abi": [ @@ -5232,9 +5232,9 @@ "type": "event" } ], - "bin": "6080604052600060065534801561001557600080fd5b5060405160a080614928833981018060405260a081101561003557600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505060008411151561007d57600080fd5b60008311151561008c57600080fd5b60008211151561009b57600080fd5b82821115156100a957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141515156100e557600080fd5b6100fd856101be640100000000026401000000009004565b151561010857600080fd5b60008111151561011757600080fd5b846000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360018190555082600281905550816003819055508060048190555033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050506101d1565b600080823b905060008111915050919050565b614748806101e06000396000f3fe608060405234801561001057600080fd5b50600436106100bb576000357c010000000000000000000000000000000000000000000000000000000090048063b0228f1e11610083578063b0228f1e14610226578063b61c408314610244578063b8378f7514610262578063cc2799c714610280578063d0ad4bec14610318576100bb565b80630fabd9e7146100c0578063224df42f1461014457806323aa8174146101625780633af973b1146101ac5780637709bc78146101ca575b600080fd5b610102600480360360208110156100d657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610362565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61014c610395565b6040518082815260200191505060405180910390f35b61016a61039b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101b46103c1565b6040518082815260200191505060405180910390f35b61020c600480360360208110156101e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103c7565b604051808215151515815260200191505060405180910390f35b61022e6103da565b6040518082815260200191505060405180910390f35b61024c6103e0565b6040518082815260200191505060405180910390f35b61026a6103e6565b6040518082815260200191505060405180910390f35b6102d66004803603606081101561029657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506103ec565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103206106c9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60076020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015481565b600080823b905060008111915050919050565b60045481565b60065481565b60025481565b600060045460065410151561040057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561049a57600080fd5b6001600654016006819055506000846000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600154600254600354600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168989604051610505906106ee565b808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200198505050505050505050604051809103906000f0801580156105e0573d6000803e3d6000fd5b50905080915081600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ff11a7558a113d9627989c5edf26cbd19143b7375248e621c8e30ac9e0847dc3f60405160405180910390a3819150509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b614021806106fc8339019056fe60806040526000600860146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b50604051610100806200402183398101806040526101008110156200005057600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151515620000e457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141515156200012157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156200015e57600080fd5b6000861115156200016e57600080fd5b6000851115156200017e57600080fd5b84841115156200018d57600080fd5b620001a788620003cc640100000000026401000000009004565b1515620001b357600080fd5b620001cd87620003cc640100000000026401000000009004565b1515620001d957600080fd5b600082111515620001e957600080fd5b600081111515620001f957600080fd5b8181101515156200020957600080fd5b876000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600281905550846003819055508360048190555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156200032557600080fd5b505afa1580156200033a573d6000803e3d6000fd5b505050506040513d60208110156200035157600080fd5b81019080805190602001909291905050501115156200036f57600080fd5b82600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600581905550806006819055505050505050505050620003df565b600080823b905060008111915050919050565b613c3280620003ef6000396000f3fe608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610116578063b7506d70116100b4578063ee4516d91161008e578063ee4516d914610be8578063fadc554b14610c98578063fc0c546a14610dcf578063fe49ba1c14610e19576101e1565b8063b7506d7014610b51578063b8378f7514610b73578063e5949b5d14610b91576101e1565b806387234237116100f0578063872342371461089f578063938bcd67146109225780639cadb1591461099a5780639e67ca5f14610a45576101e1565b80637c4734f4146105d557806382fd77951461064d578063838d6e0514610808576101e1565b80634845be761161018357806363ea01431161015d57806363ea0143146104c5578063679b37631461053d57806371e759921461055b5780637709bc7814610579576101e1565b80634845be7614610447578063524bef8a146104655780635d6e441b146104a7576101e1565b8063224df42f116101bf578063224df42f1461037757806323aa81741461039557806324d73a93146103df5780633af973b114610429576101e1565b806303d9d253146101e65780630a798f24146102eb5780630fcc0c281461036d575b600080fd5b6102e9600480360360808110156101fc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561026357600080fd5b82018360208201111561027557600080fd5b8035906020019184600183028401116401000000008311171561029757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610e9b565b005b6103576004803603606081101561030157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611259565b6040518082815260200191505060405180910390f35b6103756114ff565b005b61037f6115e4565b6040518082815260200191505060405180910390f35b61039d6115ea565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e7611610565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610431611636565b6040518082815260200191505060405180910390f35b61044f61163c565b6040518082815260200191505060405180910390f35b6104916004803603602081101561047b57600080fd5b8101908080359060200190929190505050611642565b6040518082815260200191505060405180910390f35b6104af61165a565b6040518082815260200191505060405180910390f35b61053b600480360360808110156104db57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611660565b005b610545611aab565b6040518082815260200191505060405180910390f35b610563611ab1565b6040518082815260200191505060405180910390f35b6105bb6004803603602081101561058f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ad5565b604051808215151515815260200191505060405180910390f35b610637600480360360408110156105eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ae8565b6040518082815260200191505060405180910390f35b610806600480360361010081101561066457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156106e957600080fd5b8201836020820111156106fb57600080fd5b8035906020019184600183028401116401000000008311171561071d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561078057600080fd5b82018360208201111561079257600080fd5b803590602001918460018302840111640100000000831117156107b457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611d2a565b005b6108746004803603606081101561081e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f40565b6040518083815260200182600481111561088a57fe5b60ff1681526020019250505060405180910390f35b6108a7612033565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108e75780820151818401526020810190506108cc565b50505050905090810190601f1680156109145780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6109846004803603604081101561093857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061206c565b6040518082815260200191505060405180910390f35b610a4360048036036101208110156109b157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919050505061214b565b005b610b4f600480360360c0811015610a5b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610ab657600080fd5b820183602082011115610ac857600080fd5b80359060200191846001830284011164010000000083111715610aea57600080fd5b909192939192939080359060200190640100000000811115610b0b57600080fd5b820183602082011115610b1d57600080fd5b80359060200191846001830284011164010000000083111715610b3f57600080fd5b909192939192939050505061267f565b005b610b59612aa0565b604051808215151515815260200191505060405180910390f35b610b7b612ab3565b6040518082815260200191505060405180910390f35b610bbd60048036036020811015610ba757600080fd5b8101908080359060200190929190505050612ab9565b60405180838152602001826004811115610bd357fe5b60ff1681526020019250505060405180910390f35b610c5460048036036060811015610bfe57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612aea565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610dcd6004803603610100811015610caf57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610d3457600080fd5b820183602082011115610d4657600080fd5b80359060200191846001830284011164010000000083111715610d6857600080fd5b909192939192939080359060200190640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846001830284011164010000000083111715610dbd57600080fd5b9091929391929390505050612bbf565b005b610dd7612e88565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610e8560048036036060811015610e2f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ead565b6040518082815260200191505060405180910390f35b610ea5838361206c565b8414151515610eb357600080fd5b60006004811115610ec057fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff166004811115610eef57fe5b141515610efb57600080fd5b6000806000806000610f0c86612fa0565b8094508195505050610f1f89888a612ead565b94506000600b6000878152602001908152602001600020905080600101549250848160000154141515610f5157600080fd5b600083111515610f6057600080fd5b610f6a8484613010565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a46000841115611121576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156110da57600080fd5b505af11580156110ee573d6000803e3d6000fd5b505050506040513d602081101561110457600080fd5b8101908080519060200190929190505050151561112057600080fd5b5b6000821115611235576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156111ee57600080fd5b505af1158015611202573d6000803e3d6000fd5b505050506040513d602081101561121857600080fd5b8101908080519060200190929190505050151561123457600080fd5b5b81831015151561124157fe5b83831015151561124d57fe5b50505050505050505050565b6000801515600860149054906101000a900460ff16151514151561127c57600080fd5b81600354811015151561128e57600080fd5b600454811115151561129f57600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561135f57600080fd5b505afa158015611373573d6000803e3d6000fd5b505050506040513d602081101561138957600080fd5b81019080805190602001909291905050501015156113a657600080fd5b600160076000828254019250508190555060075490506113c68787611ae8565b91506000600a6000848152602001908152602001600020541415156113ea57600080fd5b80600a60008481526020019081526020016000208190555060006009600083815260200190815260200160002090506000816000015414151561142957fe5b6000600481111561143657fe5b8160010160009054906101000a900460ff16600481111561145357fe5b14151561145c57fe5b85816000018190555060018160010160006101000a81548160ff0219169083600481111561148657fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b60001515600860149054906101000a900460ff16151514151561152157600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561157d57600080fd5b6001600860146101000a81548160ff0219169083151502179055507f6151930a846a85f5e64d2dd1cc5deeafb010c63eec4b600458158edd0e33f15d600860149054906101000a900460ff16604051808215151515815260200191505060405180910390a1565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b60001515600860149054906101000a900460ff16151514151561168257600080fd5b836001600481111561169057fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff1660048111156116bf57fe5b1415156116cb57600080fd5b6116d5848361206c565b851415156116e257600080fd5b6000831115156116f157600080fd5b600554831115151561170257600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508160000154880394506000851115156117be57600080fd5b8785111515156117cd57600080fd5b87858360000154011415156117de57fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561189c57600080fd5b505afa1580156118b0573d6000803e3d6000fd5b505050506040513d60208110156118c657600080fd5b810190808051906020019092919050505001111515156118e557600080fd5b878260000181905550806000015482600001540193508160000154841015151561190e57600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611a5957600080fd5b505af1158015611a6d573d6000803e3d6000fd5b505050506040513d6020811015611a8357600080fd5b81019080805190602001909291905050501515611a9f57600080fd5b50505050505050505050565b60075481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611b2557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611b6157600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611b9c57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015611c7c578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050611d24565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b8760016004811115611d3857fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115611d6757fe5b141515611d7357600080fd5b611d7d878961206c565b89141515611d8a57600080fd5b600080600960008c8152602001908152602001600020905060028160010160006101000a81548160ff02191690836004811115611dc357fe5b021790555060018160020160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055504381600001600082825401925050819055506000611e478c8a8a8a8a8a613029565b90508073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16141515611e8357600080fd5b6000881115611ee257611e998c8a8a8a8a613255565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515611ed557600080fd5b611ee182848a8c61342b565b5b878a73ffffffffffffffffffffffffffffffffffffffff168d7f09d2f946e008c38931cd739dd20e35146deff8ab3134caee6d54fe50816a81b88c6040518082815260200191505060405180910390a4505050505050505050505050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff16905060006004811115611f8057fe5b816004811115611f8c57fe5b148015611f995750600089115b8015611fa757506007548911155b1561201d5760039050611fbb898989612ead565b93506000600b60008681526020019081526020016000209050611fdf8a898b612ead565b93506000600b6000868152602001908152602001600020905060008260010154148015612010575060008160010154145b1561201a57600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156120a957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156120e557600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561212057600080fd5b600061212c8484611ae8565b9050600a60008281526020019081526020016000205491505092915050565b612155888561206c565b8914151561216257600080fd5b600061216e8986611ae8565b90506000600960008c815260200190815260200160002090506002600481111561219457fe5b8160010160009054906101000a900460ff1660048111156121b157fe5b1415156121bd57600080fd5b4381600001541015156121cf57600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612265828c8c8c61349b565b151561227057600080fd5b61227c8188888861349b565b151561228757600080fd5b612295828c8c848b8b613515565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a6000858152602001908152602001600020600090556123eb8d8d8a8d8d613624565b6123f88d898e8989613624565b8c7f8db0e7d323ca765ce9ab550780131837e4942ccfea3be2b635ec1084c81f72628c8b8a896040518085815260200184815260200183815260200182815260200194505050505060405180910390a260008b111561255c576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561251557600080fd5b505af1158015612529573d6000803e3d6000fd5b505050506040513d602081101561253f57600080fd5b8101908080519060200190929190505050151561255b57600080fd5b5b6000871115612670576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561262957600080fd5b505af115801561263d573d6000803e3d6000fd5b505050506040513d602081101561265357600080fd5b8101908080519060200190929190505050151561266f57600080fd5b5b50505050505050505050505050565b876001600481111561268d57fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff1660048111156126bc57fe5b1415156126c857600080fd5b6000806000808a1115156126db57600080fd5b88431015156126e957600080fd5b61273a8c8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613674565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561277357600080fd5b6127c48c8c8c8c8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613674565b90506127d08b8261206c565b8c1415156127dd57600080fd5b6000600960008e8152602001908152602001600020905060008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000015482600001540195508581600101548e01111515156128a057600080fd5b80600101548d018d111515156128b557600080fd5b81600101548d0394508c85111515156128cd57600080fd5b6000851115156128dc57600080fd5b8c858360010154011415156128ed57fe5b8d73ffffffffffffffffffffffffffffffffffffffff168f7f98ed0357b86b313fa9f968de5c9d2bcf591432355b34aa1ab7e3e9e92f4284088f6040518082815260200191505060405180910390a38c82600101819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8f876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612a0957600080fd5b505af1158015612a1d573d6000803e3d6000fd5b505050506040513d6020811015612a3357600080fd5b81019080805190602001909291905050501515612a4f57600080fd5b81600001548610151515612a5f57fe5b80600001548610151515612a6f57fe5b60008260040154141515612a7f57fe5b60008160040154141515612a8f57fe5b505050505050505050505050505050565b600860149054906101000a900460ff1681565b60035481565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612b588c8c8c612ead565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b612bc9898961206c565b8a141515612bd657600080fd5b60006001028714151515612be957600080fd5b600086111515612bf857600080fd5b6000806000600960008e8152602001908152602001600020905060026004811115612c1f57fe5b8160010160009054906101000a900460ff166004811115612c3c57fe5b141515612c4857600080fd5b43816000015410151515612c5b57600080fd5b612cf18d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613029565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612d2d57600080fd5b612d7e8d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613255565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16141515612dba57600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff161515612e1c57600080fd5b612e28828e8c8e61342b565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f6fc5b4f4f9e65bfdc4c45456373906876cee8832b605478e281902468875eaed8e6040518082815260200191505060405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515612eea57600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b6000806000835190506000606082811515612fb757fe5b06141515612fc457600080fd5b6000806000806000602094505b85851015612ff557612fe38986613885565b92508284019350606085019450612fd1565b88805190602001209050808497509750505050505050915091565b600081831161301f5782613021565b815b905092915050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600260068111156130af57fe5b8d8d8d8d8d604051602001808b805190602001908083835b6020831015156130ec57805182526020820191506020810190506020830392506130c7565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b60208310151561313f578051825260208201915060208101905060208303925061311a565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b6020831015156131f757805182526020820191506020810190506020830392506131d2565b6001836020036101000a0380198251168184511680821785525050505050509050019a505050505050505050505060405160208183030381529060405280519060200120905061324781856139af565b925050509695505050505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600160068111156132db57fe5b8c8c8c8c604051602001808a805190602001908083835b60208310151561331757805182526020820191506020810190506020830392506132f2565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b60208310151561336a5780518252602082019150602081019050602083039250613345565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401878152602001868152602001858152602001848152602001838152602001828152602001995050505050505050505060405160208183030381529060405280519060200120905061341e81856139af565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600401548311151561348257600080fd5b8281600401819055508181600301819055505050505050565b60008060010285600301541480156134b35750600084145b80156134bf5750600083145b156134cd576001905061350d565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b6000806000806000806000613528613bdd565b613530613bdd565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a8160400181815250508981606001818152505061359a8f8d613ac2565b92506135a68282613ae3565b94506135b28584613010565b945084830393506135c3858b613b77565b809b5081965050506135d5848e613b77565b809e5081955050508285111515156135e957fe5b8284111515156135f557fe5b898d85870101018314151561360657fe5b84848e8c985098509850985050505050509650965096509692505050565b60008214156136325761366d565b600061363f868686612ead565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3230300000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600360068111156136fa57fe5b8c8c8c8c604051602001808a805190602001908083835b6020831015156137365780518252602082019150602081019050602083039250613711565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156137895780518252602082019150602081019050602083039250613764565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401838152602001828152602001995050505050505050505060405160208183030381529060405280519060200120905061387881856139af565b9250505095945050505050565b60008060008060008587511115156138a45760009450505050506139a9565b858701519350602086018701519250604086018701519050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561394b57600080fd5b505afa15801561395f573d6000803e3d6000fd5b505050506040513d602081101561397557600080fd5b8101908080519060200190929190505050915060008214806139975750818411155b156139a157600092505b829450505050505b92915050565b6000604182511415156139c157600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff1610156139f157601b810190505b601b8160ff161480613a065750601c8160ff16145b1515613a1157600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613a6e573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613ab657600080fd5b83935050505092915050565b60008160010154836001015483600001548560000154010303905092915050565b6000806000806000613afd87604001518860600151613b9c565b9350613b1186604001518760600151613b9c565b9250838310151515613b2257600080fd5b86604001518410151515613b3257fe5b85604001518310151515613b4257fe5b8383039150613b55828860000151613b9c565b9050613b65818860200151613b77565b50809150508094505050505092915050565b600080828411613b8c57600084819150613b91565b828403835b915091509250929050565b600080828401905083811015613bd2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613bd4565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a723058206bb6affb65a164571332eec843aad01588b035149b814ef684881f0f9fcf53680029a165627a7a723058205c02994727117fa2659804cfe49279806455fac0d2cb44cf92871032fb04cbf90029", - "bin-runtime": "608060405234801561001057600080fd5b50600436106100bb576000357c010000000000000000000000000000000000000000000000000000000090048063b0228f1e11610083578063b0228f1e14610226578063b61c408314610244578063b8378f7514610262578063cc2799c714610280578063d0ad4bec14610318576100bb565b80630fabd9e7146100c0578063224df42f1461014457806323aa8174146101625780633af973b1146101ac5780637709bc78146101ca575b600080fd5b610102600480360360208110156100d657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610362565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61014c610395565b6040518082815260200191505060405180910390f35b61016a61039b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101b46103c1565b6040518082815260200191505060405180910390f35b61020c600480360360208110156101e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103c7565b604051808215151515815260200191505060405180910390f35b61022e6103da565b6040518082815260200191505060405180910390f35b61024c6103e0565b6040518082815260200191505060405180910390f35b61026a6103e6565b6040518082815260200191505060405180910390f35b6102d66004803603606081101561029657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506103ec565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103206106c9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60076020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015481565b600080823b905060008111915050919050565b60045481565b60065481565b60025481565b600060045460065410151561040057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561049a57600080fd5b6001600654016006819055506000846000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600154600254600354600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168989604051610505906106ee565b808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200198505050505050505050604051809103906000f0801580156105e0573d6000803e3d6000fd5b50905080915081600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ff11a7558a113d9627989c5edf26cbd19143b7375248e621c8e30ac9e0847dc3f60405160405180910390a3819150509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b614021806106fc8339019056fe60806040526000600860146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b50604051610100806200402183398101806040526101008110156200005057600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151515620000e457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141515156200012157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156200015e57600080fd5b6000861115156200016e57600080fd5b6000851115156200017e57600080fd5b84841115156200018d57600080fd5b620001a788620003cc640100000000026401000000009004565b1515620001b357600080fd5b620001cd87620003cc640100000000026401000000009004565b1515620001d957600080fd5b600082111515620001e957600080fd5b600081111515620001f957600080fd5b8181101515156200020957600080fd5b876000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600281905550846003819055508360048190555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156200032557600080fd5b505afa1580156200033a573d6000803e3d6000fd5b505050506040513d60208110156200035157600080fd5b81019080805190602001909291905050501115156200036f57600080fd5b82600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600581905550806006819055505050505050505050620003df565b600080823b905060008111915050919050565b613c3280620003ef6000396000f3fe608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610116578063b7506d70116100b4578063ee4516d91161008e578063ee4516d914610be8578063fadc554b14610c98578063fc0c546a14610dcf578063fe49ba1c14610e19576101e1565b8063b7506d7014610b51578063b8378f7514610b73578063e5949b5d14610b91576101e1565b806387234237116100f0578063872342371461089f578063938bcd67146109225780639cadb1591461099a5780639e67ca5f14610a45576101e1565b80637c4734f4146105d557806382fd77951461064d578063838d6e0514610808576101e1565b80634845be761161018357806363ea01431161015d57806363ea0143146104c5578063679b37631461053d57806371e759921461055b5780637709bc7814610579576101e1565b80634845be7614610447578063524bef8a146104655780635d6e441b146104a7576101e1565b8063224df42f116101bf578063224df42f1461037757806323aa81741461039557806324d73a93146103df5780633af973b114610429576101e1565b806303d9d253146101e65780630a798f24146102eb5780630fcc0c281461036d575b600080fd5b6102e9600480360360808110156101fc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561026357600080fd5b82018360208201111561027557600080fd5b8035906020019184600183028401116401000000008311171561029757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610e9b565b005b6103576004803603606081101561030157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611259565b6040518082815260200191505060405180910390f35b6103756114ff565b005b61037f6115e4565b6040518082815260200191505060405180910390f35b61039d6115ea565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e7611610565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610431611636565b6040518082815260200191505060405180910390f35b61044f61163c565b6040518082815260200191505060405180910390f35b6104916004803603602081101561047b57600080fd5b8101908080359060200190929190505050611642565b6040518082815260200191505060405180910390f35b6104af61165a565b6040518082815260200191505060405180910390f35b61053b600480360360808110156104db57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611660565b005b610545611aab565b6040518082815260200191505060405180910390f35b610563611ab1565b6040518082815260200191505060405180910390f35b6105bb6004803603602081101561058f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ad5565b604051808215151515815260200191505060405180910390f35b610637600480360360408110156105eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ae8565b6040518082815260200191505060405180910390f35b610806600480360361010081101561066457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156106e957600080fd5b8201836020820111156106fb57600080fd5b8035906020019184600183028401116401000000008311171561071d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561078057600080fd5b82018360208201111561079257600080fd5b803590602001918460018302840111640100000000831117156107b457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611d2a565b005b6108746004803603606081101561081e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f40565b6040518083815260200182600481111561088a57fe5b60ff1681526020019250505060405180910390f35b6108a7612033565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108e75780820151818401526020810190506108cc565b50505050905090810190601f1680156109145780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6109846004803603604081101561093857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061206c565b6040518082815260200191505060405180910390f35b610a4360048036036101208110156109b157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919050505061214b565b005b610b4f600480360360c0811015610a5b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610ab657600080fd5b820183602082011115610ac857600080fd5b80359060200191846001830284011164010000000083111715610aea57600080fd5b909192939192939080359060200190640100000000811115610b0b57600080fd5b820183602082011115610b1d57600080fd5b80359060200191846001830284011164010000000083111715610b3f57600080fd5b909192939192939050505061267f565b005b610b59612aa0565b604051808215151515815260200191505060405180910390f35b610b7b612ab3565b6040518082815260200191505060405180910390f35b610bbd60048036036020811015610ba757600080fd5b8101908080359060200190929190505050612ab9565b60405180838152602001826004811115610bd357fe5b60ff1681526020019250505060405180910390f35b610c5460048036036060811015610bfe57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612aea565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610dcd6004803603610100811015610caf57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610d3457600080fd5b820183602082011115610d4657600080fd5b80359060200191846001830284011164010000000083111715610d6857600080fd5b909192939192939080359060200190640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846001830284011164010000000083111715610dbd57600080fd5b9091929391929390505050612bbf565b005b610dd7612e88565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610e8560048036036060811015610e2f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ead565b6040518082815260200191505060405180910390f35b610ea5838361206c565b8414151515610eb357600080fd5b60006004811115610ec057fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff166004811115610eef57fe5b141515610efb57600080fd5b6000806000806000610f0c86612fa0565b8094508195505050610f1f89888a612ead565b94506000600b6000878152602001908152602001600020905080600101549250848160000154141515610f5157600080fd5b600083111515610f6057600080fd5b610f6a8484613010565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a46000841115611121576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156110da57600080fd5b505af11580156110ee573d6000803e3d6000fd5b505050506040513d602081101561110457600080fd5b8101908080519060200190929190505050151561112057600080fd5b5b6000821115611235576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156111ee57600080fd5b505af1158015611202573d6000803e3d6000fd5b505050506040513d602081101561121857600080fd5b8101908080519060200190929190505050151561123457600080fd5b5b81831015151561124157fe5b83831015151561124d57fe5b50505050505050505050565b6000801515600860149054906101000a900460ff16151514151561127c57600080fd5b81600354811015151561128e57600080fd5b600454811115151561129f57600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561135f57600080fd5b505afa158015611373573d6000803e3d6000fd5b505050506040513d602081101561138957600080fd5b81019080805190602001909291905050501015156113a657600080fd5b600160076000828254019250508190555060075490506113c68787611ae8565b91506000600a6000848152602001908152602001600020541415156113ea57600080fd5b80600a60008481526020019081526020016000208190555060006009600083815260200190815260200160002090506000816000015414151561142957fe5b6000600481111561143657fe5b8160010160009054906101000a900460ff16600481111561145357fe5b14151561145c57fe5b85816000018190555060018160010160006101000a81548160ff0219169083600481111561148657fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b60001515600860149054906101000a900460ff16151514151561152157600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561157d57600080fd5b6001600860146101000a81548160ff0219169083151502179055507f6151930a846a85f5e64d2dd1cc5deeafb010c63eec4b600458158edd0e33f15d600860149054906101000a900460ff16604051808215151515815260200191505060405180910390a1565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b60001515600860149054906101000a900460ff16151514151561168257600080fd5b836001600481111561169057fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff1660048111156116bf57fe5b1415156116cb57600080fd5b6116d5848361206c565b851415156116e257600080fd5b6000831115156116f157600080fd5b600554831115151561170257600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508160000154880394506000851115156117be57600080fd5b8785111515156117cd57600080fd5b87858360000154011415156117de57fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561189c57600080fd5b505afa1580156118b0573d6000803e3d6000fd5b505050506040513d60208110156118c657600080fd5b810190808051906020019092919050505001111515156118e557600080fd5b878260000181905550806000015482600001540193508160000154841015151561190e57600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611a5957600080fd5b505af1158015611a6d573d6000803e3d6000fd5b505050506040513d6020811015611a8357600080fd5b81019080805190602001909291905050501515611a9f57600080fd5b50505050505050505050565b60075481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611b2557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611b6157600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611b9c57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015611c7c578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050611d24565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b8760016004811115611d3857fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115611d6757fe5b141515611d7357600080fd5b611d7d878961206c565b89141515611d8a57600080fd5b600080600960008c8152602001908152602001600020905060028160010160006101000a81548160ff02191690836004811115611dc357fe5b021790555060018160020160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055504381600001600082825401925050819055506000611e478c8a8a8a8a8a613029565b90508073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16141515611e8357600080fd5b6000881115611ee257611e998c8a8a8a8a613255565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515611ed557600080fd5b611ee182848a8c61342b565b5b878a73ffffffffffffffffffffffffffffffffffffffff168d7f09d2f946e008c38931cd739dd20e35146deff8ab3134caee6d54fe50816a81b88c6040518082815260200191505060405180910390a4505050505050505050505050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff16905060006004811115611f8057fe5b816004811115611f8c57fe5b148015611f995750600089115b8015611fa757506007548911155b1561201d5760039050611fbb898989612ead565b93506000600b60008681526020019081526020016000209050611fdf8a898b612ead565b93506000600b6000868152602001908152602001600020905060008260010154148015612010575060008160010154145b1561201a57600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156120a957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156120e557600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561212057600080fd5b600061212c8484611ae8565b9050600a60008281526020019081526020016000205491505092915050565b612155888561206c565b8914151561216257600080fd5b600061216e8986611ae8565b90506000600960008c815260200190815260200160002090506002600481111561219457fe5b8160010160009054906101000a900460ff1660048111156121b157fe5b1415156121bd57600080fd5b4381600001541015156121cf57600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612265828c8c8c61349b565b151561227057600080fd5b61227c8188888861349b565b151561228757600080fd5b612295828c8c848b8b613515565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a6000858152602001908152602001600020600090556123eb8d8d8a8d8d613624565b6123f88d898e8989613624565b8c7f8db0e7d323ca765ce9ab550780131837e4942ccfea3be2b635ec1084c81f72628c8b8a896040518085815260200184815260200183815260200182815260200194505050505060405180910390a260008b111561255c576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561251557600080fd5b505af1158015612529573d6000803e3d6000fd5b505050506040513d602081101561253f57600080fd5b8101908080519060200190929190505050151561255b57600080fd5b5b6000871115612670576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561262957600080fd5b505af115801561263d573d6000803e3d6000fd5b505050506040513d602081101561265357600080fd5b8101908080519060200190929190505050151561266f57600080fd5b5b50505050505050505050505050565b876001600481111561268d57fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff1660048111156126bc57fe5b1415156126c857600080fd5b6000806000808a1115156126db57600080fd5b88431015156126e957600080fd5b61273a8c8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613674565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561277357600080fd5b6127c48c8c8c8c8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613674565b90506127d08b8261206c565b8c1415156127dd57600080fd5b6000600960008e8152602001908152602001600020905060008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000015482600001540195508581600101548e01111515156128a057600080fd5b80600101548d018d111515156128b557600080fd5b81600101548d0394508c85111515156128cd57600080fd5b6000851115156128dc57600080fd5b8c858360010154011415156128ed57fe5b8d73ffffffffffffffffffffffffffffffffffffffff168f7f98ed0357b86b313fa9f968de5c9d2bcf591432355b34aa1ab7e3e9e92f4284088f6040518082815260200191505060405180910390a38c82600101819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8f876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612a0957600080fd5b505af1158015612a1d573d6000803e3d6000fd5b505050506040513d6020811015612a3357600080fd5b81019080805190602001909291905050501515612a4f57600080fd5b81600001548610151515612a5f57fe5b80600001548610151515612a6f57fe5b60008260040154141515612a7f57fe5b60008160040154141515612a8f57fe5b505050505050505050505050505050565b600860149054906101000a900460ff1681565b60035481565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612b588c8c8c612ead565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b612bc9898961206c565b8a141515612bd657600080fd5b60006001028714151515612be957600080fd5b600086111515612bf857600080fd5b6000806000600960008e8152602001908152602001600020905060026004811115612c1f57fe5b8160010160009054906101000a900460ff166004811115612c3c57fe5b141515612c4857600080fd5b43816000015410151515612c5b57600080fd5b612cf18d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613029565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612d2d57600080fd5b612d7e8d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613255565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16141515612dba57600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff161515612e1c57600080fd5b612e28828e8c8e61342b565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f6fc5b4f4f9e65bfdc4c45456373906876cee8832b605478e281902468875eaed8e6040518082815260200191505060405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515612eea57600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b6000806000835190506000606082811515612fb757fe5b06141515612fc457600080fd5b6000806000806000602094505b85851015612ff557612fe38986613885565b92508284019350606085019450612fd1565b88805190602001209050808497509750505050505050915091565b600081831161301f5782613021565b815b905092915050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600260068111156130af57fe5b8d8d8d8d8d604051602001808b805190602001908083835b6020831015156130ec57805182526020820191506020810190506020830392506130c7565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b60208310151561313f578051825260208201915060208101905060208303925061311a565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b6020831015156131f757805182526020820191506020810190506020830392506131d2565b6001836020036101000a0380198251168184511680821785525050505050509050019a505050505050505050505060405160208183030381529060405280519060200120905061324781856139af565b925050509695505050505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600160068111156132db57fe5b8c8c8c8c604051602001808a805190602001908083835b60208310151561331757805182526020820191506020810190506020830392506132f2565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b60208310151561336a5780518252602082019150602081019050602083039250613345565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401878152602001868152602001858152602001848152602001838152602001828152602001995050505050505050505060405160208183030381529060405280519060200120905061341e81856139af565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600401548311151561348257600080fd5b8281600401819055508181600301819055505050505050565b60008060010285600301541480156134b35750600084145b80156134bf5750600083145b156134cd576001905061350d565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b6000806000806000806000613528613bdd565b613530613bdd565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a8160400181815250508981606001818152505061359a8f8d613ac2565b92506135a68282613ae3565b94506135b28584613010565b945084830393506135c3858b613b77565b809b5081965050506135d5848e613b77565b809e5081955050508285111515156135e957fe5b8284111515156135f557fe5b898d85870101018314151561360657fe5b84848e8c985098509850985050505050509650965096509692505050565b60008214156136325761366d565b600061363f868686612ead565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3230300000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600360068111156136fa57fe5b8c8c8c8c604051602001808a805190602001908083835b6020831015156137365780518252602082019150602081019050602083039250613711565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156137895780518252602082019150602081019050602083039250613764565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401838152602001828152602001995050505050505050505060405160208183030381529060405280519060200120905061387881856139af565b9250505095945050505050565b60008060008060008587511115156138a45760009450505050506139a9565b858701519350602086018701519250604086018701519050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561394b57600080fd5b505afa15801561395f573d6000803e3d6000fd5b505050506040513d602081101561397557600080fd5b8101908080519060200190929190505050915060008214806139975750818411155b156139a157600092505b829450505050505b92915050565b6000604182511415156139c157600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff1610156139f157601b810190505b601b8160ff161480613a065750601c8160ff16145b1515613a1157600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613a6e573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613ab657600080fd5b83935050505092915050565b60008160010154836001015483600001548560000154010303905092915050565b6000806000806000613afd87604001518860600151613b9c565b9350613b1186604001518760600151613b9c565b9250838310151515613b2257600080fd5b86604001518410151515613b3257fe5b85604001518310151515613b4257fe5b8383039150613b55828860000151613b9c565b9050613b65818860200151613b77565b50809150508094505050505092915050565b600080828411613b8c57600084819150613b91565b828403835b915091509250929050565b600080828401905083811015613bd2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613bd4565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a723058206bb6affb65a164571332eec843aad01588b035149b814ef684881f0f9fcf53680029a165627a7a723058205c02994727117fa2659804cfe49279806455fac0d2cb44cf92871032fb04cbf90029", - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"token_to_token_networks\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_max\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"deprecation_executor\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"chain_id\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contract_address\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"max_token_networks\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token_network_created\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_min\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_token_address\",\"type\":\"address\"},{\"name\":\"_channel_participant_deposit_limit\",\"type\":\"uint256\"},{\"name\":\"_token_network_deposit_limit\",\"type\":\"uint256\"}],\"name\":\"createERC20TokenNetwork\",\"outputs\":[{\"name\":\"token_network_address\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"secret_registry_address\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_secret_registry_address\",\"type\":\"address\"},{\"name\":\"_chain_id\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_min\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_max\",\"type\":\"uint256\"},{\"name\":\"_max_token_networks\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"token_address\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"token_network_address\",\"type\":\"address\"}],\"name\":\"TokenNetworkCreated\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"constructor\":{\"params\":{\"_chain_id\":\"EIP-155 Chain-ID of the chain where this contract is deployed.\",\"_max_token_networks\":\"the number of tokens that can be registered. MAX_UINT256 means no limits.\",\"_secret_registry_address\":\"The address of SecretRegistry that's used by all TokenNetworks created by this contract.\",\"_settlement_timeout_max\":\"The longest settlement period (in number of blocks) that can be chosen at the channel opening.\",\"_settlement_timeout_min\":\"The shortest settlement period (in number of blocks) that can be chosen at the channel opening.\"}},\"contractExists(address)\":{\"params\":{\"contract_address\":\"The address to check whether a contract is deployed or not\"},\"return\":\"True if a contract exists, false otherwise\"},\"createERC20TokenNetwork(address,uint256,uint256)\":{\"params\":{\"_token_address\":\"Ethereum address of an already deployed token, to be used in the new TokenNetwork contract.\"}}},\"title\":\"TokenNetworkRegistry\"},\"userdoc\":{\"methods\":{\"contractExists(address)\":{\"notice\":\"Check if a contract exists\"},\"createERC20TokenNetwork(address,uint256,uint256)\":{\"notice\":\"Deploy a new TokenNetwork contract for the Token deployed at `_token_address`.\"}},\"notice\":\"The TokenNetwork Registry deploys new TokenNetwork contracts for the Raiden Network protocol.\"}},\"settings\":{\"compilationTarget\":{\"data/source/raiden/TokenNetworkRegistry.sol\":\"TokenNetworkRegistry\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":.=.\",\":lib=data/source/lib\",\":raiden=data/source/raiden\",\":services=data/source/services\",\":test=data/source/test\"]},\"sources\":{\"data/source/lib/ECVerify.sol\":{\"keccak256\":\"0x8bb402baa478eb53252d77b63982e12685adda290cf4dfa1d8f510284f8df3e9\",\"urls\":[\"bzzr://474c3db1bb54bb831c32eb2ab67a0e870489994bd4d4b8a8fa24b54935211d43\"]},\"data/source/raiden/SecretRegistry.sol\":{\"keccak256\":\"0xb8078bc048ccdeb7c58026754f22fc378baf3b24090db0f17d10bda6cd4951b4\",\"urls\":[\"bzzr://f7a072330393a85a6a274ef526ac2ca0f8eb217bf5f48c18b3080be7ac3a7ede\"]},\"data/source/raiden/Token.sol\":{\"keccak256\":\"0x41b40819d7f6714550c742f48ce46daeb97255c08bc56e83bb9fde4fbe14c3b4\",\"urls\":[\"bzzr://a20e2bea336fb01584cf4dc80e77bb8db3c33666f77f840fd58559116849ae4b\"]},\"data/source/raiden/TokenNetwork.sol\":{\"keccak256\":\"0xe236e9c266564b1497d45cff4820b670e02cff86a07dba03310705e090620e66\",\"urls\":[\"bzzr://d629bfb011b3a81416e11a53816c3656f439ee2698b91cb015dade173e583a7c\"]},\"data/source/raiden/TokenNetworkRegistry.sol\":{\"keccak256\":\"0x33926a522c34bbeceb6d498c82cc1cf8415404b7348fbe40d16448ea96bc5535\",\"urls\":[\"bzzr://c668bf0336068e6e836dad2ec1c99f6d142ff1bcd4f04ef99fd59abd2e971c8e\"]},\"data/source/raiden/Utils.sol\":{\"keccak256\":\"0x602fd914e5644696d3c5d42e3a39fe6f16e7ddcc93f8864aa7e368a70cb56d0b\",\"urls\":[\"bzzr://b884810b9826074efb212a825d33409c35d9a159681690e821da3643052be3d1\"]}},\"version\":1}" + "bin": "6080604052600060065534801561001557600080fd5b5060405160a08061492c833981018060405260a081101561003557600080fd5b81019080805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505060008411151561007d57600080fd5b60008311151561008c57600080fd5b60008211151561009b57600080fd5b82821115156100a957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141515156100e557600080fd5b6100fd856101be640100000000026401000000009004565b151561010857600080fd5b60008111151561011757600080fd5b846000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508360018190555082600281905550816003819055508060048190555033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050506101d1565b600080823b905060008111915050919050565b61474c806101e06000396000f3fe608060405234801561001057600080fd5b50600436106100bb576000357c010000000000000000000000000000000000000000000000000000000090048063b0228f1e11610083578063b0228f1e14610226578063b61c408314610244578063b8378f7514610262578063cc2799c714610280578063d0ad4bec14610318576100bb565b80630fabd9e7146100c0578063224df42f1461014457806323aa8174146101625780633af973b1146101ac5780637709bc78146101ca575b600080fd5b610102600480360360208110156100d657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610362565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61014c610395565b6040518082815260200191505060405180910390f35b61016a61039b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101b46103c1565b6040518082815260200191505060405180910390f35b61020c600480360360208110156101e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103c7565b604051808215151515815260200191505060405180910390f35b61022e6103da565b6040518082815260200191505060405180910390f35b61024c6103e0565b6040518082815260200191505060405180910390f35b61026a6103e6565b6040518082815260200191505060405180910390f35b6102d66004803603606081101561029657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506103ec565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103206106c9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60076020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015481565b600080823b905060008111915050919050565b60045481565b60065481565b60025481565b600060045460065410151561040057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561049a57600080fd5b6001600654016006819055506000846000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600154600254600354600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168989604051610505906106ee565b808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200198505050505050505050604051809103906000f0801580156105e0573d6000803e3d6000fd5b50905080915081600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ff11a7558a113d9627989c5edf26cbd19143b7375248e621c8e30ac9e0847dc3f60405160405180910390a3819150509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b614025806106fc8339019056fe60806040526000600860146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b50604051610100806200402583398101806040526101008110156200005057600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151515620000e457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141515156200012157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156200015e57600080fd5b6000861115156200016e57600080fd5b6000851115156200017e57600080fd5b84841115156200018d57600080fd5b620001a788620003cc640100000000026401000000009004565b1515620001b357600080fd5b620001cd87620003cc640100000000026401000000009004565b1515620001d957600080fd5b600082111515620001e957600080fd5b600081111515620001f957600080fd5b8181101515156200020957600080fd5b876000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600281905550846003819055508360048190555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156200032557600080fd5b505afa1580156200033a573d6000803e3d6000fd5b505050506040513d60208110156200035157600080fd5b81019080805190602001909291905050501115156200036f57600080fd5b82600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600581905550806006819055505050505050505050620003df565b600080823b905060008111915050919050565b613c3680620003ef6000396000f3fe608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610116578063b7506d70116100b4578063ee4516d91161008e578063ee4516d914610be8578063fadc554b14610c98578063fc0c546a14610dcf578063fe49ba1c14610e19576101e1565b8063b7506d7014610b51578063b8378f7514610b73578063e5949b5d14610b91576101e1565b806387234237116100f0578063872342371461089f578063938bcd67146109225780639cadb1591461099a5780639e67ca5f14610a45576101e1565b80637c4734f4146105d557806382fd77951461064d578063838d6e0514610808576101e1565b80634845be761161018357806363ea01431161015d57806363ea0143146104c5578063679b37631461053d57806371e759921461055b5780637709bc7814610579576101e1565b80634845be7614610447578063524bef8a146104655780635d6e441b146104a7576101e1565b8063224df42f116101bf578063224df42f1461037757806323aa81741461039557806324d73a93146103df5780633af973b114610429576101e1565b806303d9d253146101e65780630a798f24146102eb5780630fcc0c281461036d575b600080fd5b6102e9600480360360808110156101fc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561026357600080fd5b82018360208201111561027557600080fd5b8035906020019184600183028401116401000000008311171561029757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610e9b565b005b6103576004803603606081101561030157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611259565b6040518082815260200191505060405180910390f35b6103756114ff565b005b61037f6115e4565b6040518082815260200191505060405180910390f35b61039d6115ea565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e7611610565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610431611636565b6040518082815260200191505060405180910390f35b61044f61163c565b6040518082815260200191505060405180910390f35b6104916004803603602081101561047b57600080fd5b8101908080359060200190929190505050611642565b6040518082815260200191505060405180910390f35b6104af61165a565b6040518082815260200191505060405180910390f35b61053b600480360360808110156104db57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611660565b005b610545611aab565b6040518082815260200191505060405180910390f35b610563611ab1565b6040518082815260200191505060405180910390f35b6105bb6004803603602081101561058f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ad5565b604051808215151515815260200191505060405180910390f35b610637600480360360408110156105eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ae8565b6040518082815260200191505060405180910390f35b610806600480360361010081101561066457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156106e957600080fd5b8201836020820111156106fb57600080fd5b8035906020019184600183028401116401000000008311171561071d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561078057600080fd5b82018360208201111561079257600080fd5b803590602001918460018302840111640100000000831117156107b457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611d2a565b005b6108746004803603606081101561081e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f42565b6040518083815260200182600481111561088a57fe5b60ff1681526020019250505060405180910390f35b6108a7612035565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108e75780820151818401526020810190506108cc565b50505050905090810190601f1680156109145780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6109846004803603604081101561093857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061206e565b6040518082815260200191505060405180910390f35b610a4360048036036101208110156109b157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919050505061214d565b005b610b4f600480360360c0811015610a5b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610ab657600080fd5b820183602082011115610ac857600080fd5b80359060200191846001830284011164010000000083111715610aea57600080fd5b909192939192939080359060200190640100000000811115610b0b57600080fd5b820183602082011115610b1d57600080fd5b80359060200191846001830284011164010000000083111715610b3f57600080fd5b9091929391929390505050612681565b005b610b59612aa2565b604051808215151515815260200191505060405180910390f35b610b7b612ab5565b6040518082815260200191505060405180910390f35b610bbd60048036036020811015610ba757600080fd5b8101908080359060200190929190505050612abb565b60405180838152602001826004811115610bd357fe5b60ff1681526020019250505060405180910390f35b610c5460048036036060811015610bfe57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612aec565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610dcd6004803603610100811015610caf57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610d3457600080fd5b820183602082011115610d4657600080fd5b80359060200191846001830284011164010000000083111715610d6857600080fd5b909192939192939080359060200190640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846001830284011164010000000083111715610dbd57600080fd5b9091929391929390505050612bc1565b005b610dd7612e8c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610e8560048036036060811015610e2f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612eb1565b6040518082815260200191505060405180910390f35b610ea5838361206e565b8414151515610eb357600080fd5b60006004811115610ec057fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff166004811115610eef57fe5b141515610efb57600080fd5b6000806000806000610f0c86612fa4565b8094508195505050610f1f89888a612eb1565b94506000600b6000878152602001908152602001600020905080600101549250848160000154141515610f5157600080fd5b600083111515610f6057600080fd5b610f6a8484613014565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a46000841115611121576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156110da57600080fd5b505af11580156110ee573d6000803e3d6000fd5b505050506040513d602081101561110457600080fd5b8101908080519060200190929190505050151561112057600080fd5b5b6000821115611235576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156111ee57600080fd5b505af1158015611202573d6000803e3d6000fd5b505050506040513d602081101561121857600080fd5b8101908080519060200190929190505050151561123457600080fd5b5b81831015151561124157fe5b83831015151561124d57fe5b50505050505050505050565b6000801515600860149054906101000a900460ff16151514151561127c57600080fd5b81600354811015151561128e57600080fd5b600454811115151561129f57600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561135f57600080fd5b505afa158015611373573d6000803e3d6000fd5b505050506040513d602081101561138957600080fd5b81019080805190602001909291905050501015156113a657600080fd5b600160076000828254019250508190555060075490506113c68787611ae8565b91506000600a6000848152602001908152602001600020541415156113ea57600080fd5b80600a60008481526020019081526020016000208190555060006009600083815260200190815260200160002090506000816000015414151561142957fe5b6000600481111561143657fe5b8160010160009054906101000a900460ff16600481111561145357fe5b14151561145c57fe5b85816000018190555060018160010160006101000a81548160ff0219169083600481111561148657fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b60001515600860149054906101000a900460ff16151514151561152157600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561157d57600080fd5b6001600860146101000a81548160ff0219169083151502179055507f6151930a846a85f5e64d2dd1cc5deeafb010c63eec4b600458158edd0e33f15d600860149054906101000a900460ff16604051808215151515815260200191505060405180910390a1565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b60001515600860149054906101000a900460ff16151514151561168257600080fd5b836001600481111561169057fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff1660048111156116bf57fe5b1415156116cb57600080fd5b6116d5848361206e565b851415156116e257600080fd5b6000831115156116f157600080fd5b600554831115151561170257600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508160000154880394506000851115156117be57600080fd5b8785111515156117cd57600080fd5b87858360000154011415156117de57fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561189c57600080fd5b505afa1580156118b0573d6000803e3d6000fd5b505050506040513d60208110156118c657600080fd5b810190808051906020019092919050505001111515156118e557600080fd5b878260000181905550806000015482600001540193508160000154841015151561190e57600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611a5957600080fd5b505af1158015611a6d573d6000803e3d6000fd5b505050506040513d6020811015611a8357600080fd5b81019080805190602001909291905050501515611a9f57600080fd5b50505050505050505050565b60075481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611b2557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611b6157600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611b9c57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015611c7c578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050611d24565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b8760016004811115611d3857fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115611d6757fe5b141515611d7357600080fd5b611d7d878961206e565b89141515611d8a57600080fd5b600080600960008c8152602001908152602001600020905060028160010160006101000a81548160ff02191690836004811115611dc357fe5b021790555060018160020160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055504381600001600082825401925050819055506000611e4960018d8b8b8b8b8b61302d565b90508073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16141515611e8557600080fd5b6000881115611ee457611e9b8c8a8a8a8a613259565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515611ed757600080fd5b611ee382848a8c61342f565b5b878a73ffffffffffffffffffffffffffffffffffffffff168d7f09d2f946e008c38931cd739dd20e35146deff8ab3134caee6d54fe50816a81b88c6040518082815260200191505060405180910390a4505050505050505050505050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff16905060006004811115611f8257fe5b816004811115611f8e57fe5b148015611f9b5750600089115b8015611fa957506007548911155b1561201f5760039050611fbd898989612eb1565b93506000600b60008681526020019081526020016000209050611fe18a898b612eb1565b93506000600b6000868152602001908152602001600020905060008260010154148015612012575060008160010154145b1561201c57600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156120ab57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156120e757600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561212257600080fd5b600061212e8484611ae8565b9050600a60008281526020019081526020016000205491505092915050565b612157888561206e565b8914151561216457600080fd5b60006121708986611ae8565b90506000600960008c815260200190815260200160002090506002600481111561219657fe5b8160010160009054906101000a900460ff1660048111156121b357fe5b1415156121bf57600080fd5b4381600001541015156121d157600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612267828c8c8c61349f565b151561227257600080fd5b61227e8188888861349f565b151561228957600080fd5b612297828c8c848b8b613519565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a6000858152602001908152602001600020600090556123ed8d8d8a8d8d613628565b6123fa8d898e8989613628565b8c7f8db0e7d323ca765ce9ab550780131837e4942ccfea3be2b635ec1084c81f72628c8b8a896040518085815260200184815260200183815260200182815260200194505050505060405180910390a260008b111561255e576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561251757600080fd5b505af115801561252b573d6000803e3d6000fd5b505050506040513d602081101561254157600080fd5b8101908080519060200190929190505050151561255d57600080fd5b5b6000871115612672576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561262b57600080fd5b505af115801561263f573d6000803e3d6000fd5b505050506040513d602081101561265557600080fd5b8101908080519060200190929190505050151561267157600080fd5b5b50505050505050505050505050565b876001600481111561268f57fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff1660048111156126be57fe5b1415156126ca57600080fd5b6000806000808a1115156126dd57600080fd5b88431015156126eb57600080fd5b61273c8c8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613678565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561277557600080fd5b6127c68c8c8c8c8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613678565b90506127d28b8261206e565b8c1415156127df57600080fd5b6000600960008e8152602001908152602001600020905060008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000015482600001540195508581600101548e01111515156128a257600080fd5b80600101548d018d111515156128b757600080fd5b81600101548d0394508c85111515156128cf57600080fd5b6000851115156128de57600080fd5b8c858360010154011415156128ef57fe5b8d73ffffffffffffffffffffffffffffffffffffffff168f7f98ed0357b86b313fa9f968de5c9d2bcf591432355b34aa1ab7e3e9e92f4284088f6040518082815260200191505060405180910390a38c82600101819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8f876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612a0b57600080fd5b505af1158015612a1f573d6000803e3d6000fd5b505050506040513d6020811015612a3557600080fd5b81019080805190602001909291905050501515612a5157600080fd5b81600001548610151515612a6157fe5b80600001548610151515612a7157fe5b60008260040154141515612a8157fe5b60008160040154141515612a9157fe5b505050505050505050505050505050565b600860149054906101000a900460ff1681565b60035481565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612b5a8c8c8c612eb1565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b612bcb898961206e565b8a141515612bd857600080fd5b60006001028714151515612beb57600080fd5b600086111515612bfa57600080fd5b6000806000600960008e8152602001908152602001600020905060026004811115612c2157fe5b8160010160009054906101000a900460ff166004811115612c3e57fe5b141515612c4a57600080fd5b43816000015410151515612c5d57600080fd5b612cf560028e8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061302d565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612d3157600080fd5b612d828d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613259565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16141515612dbe57600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff161515612e2057600080fd5b612e2c828e8c8e61342f565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f6fc5b4f4f9e65bfdc4c45456373906876cee8832b605478e281902468875eaed8e6040518082815260200191505060405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515612eee57600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b6000806000835190506000606082811515612fbb57fe5b06141515612fc857600080fd5b6000806000806000602094505b85851015612ff957612fe78986613889565b92508284019350606085019450612fd5565b88805190602001209050808497509750505050505050915091565b60008183116130235782613025565b815b905092915050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002548d60068111156130b257fe5b8d8d8d8d8d604051602001808b805190602001908083835b6020831015156130ef57805182526020820191506020810190506020830392506130ca565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b602083101515613142578051825260208201915060208101905060208303925061311d565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b6020831015156131fa57805182526020820191506020810190506020830392506131d5565b6001836020036101000a0380198251168184511680821785525050505050509050019a505050505050505050505060405160208183030381529060405280519060200120905061324a81856139b3565b92505050979650505050505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600160068111156132df57fe5b8c8c8c8c604051602001808a805190602001908083835b60208310151561331b57805182526020820191506020810190506020830392506132f6565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b60208310151561336e5780518252602082019150602081019050602083039250613349565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401878152602001868152602001858152602001848152602001838152602001828152602001995050505050505050505060405160208183030381529060405280519060200120905061342281856139b3565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600401548311151561348657600080fd5b8281600401819055508181600301819055505050505050565b60008060010285600301541480156134b75750600084145b80156134c35750600083145b156134d15760019050613511565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b600080600080600080600061352c613be1565b613534613be1565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a8160400181815250508981606001818152505061359e8f8d613ac6565b92506135aa8282613ae7565b94506135b68584613014565b945084830393506135c7858b613b7b565b809b5081965050506135d9848e613b7b565b809e5081955050508285111515156135ed57fe5b8284111515156135f957fe5b898d85870101018314151561360a57fe5b84848e8c985098509850985050505050509650965096509692505050565b600082141561363657613671565b6000613643868686612eb1565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3230300000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600360068111156136fe57fe5b8c8c8c8c604051602001808a805190602001908083835b60208310151561373a5780518252602082019150602081019050602083039250613715565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b60208310151561378d5780518252602082019150602081019050602083039250613768565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401838152602001828152602001995050505050505050505060405160208183030381529060405280519060200120905061387c81856139b3565b9250505095945050505050565b60008060008060008587511115156138a85760009450505050506139ad565b858701519350602086018701519250604086018701519050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561394f57600080fd5b505afa158015613963573d6000803e3d6000fd5b505050506040513d602081101561397957600080fd5b81019080805190602001909291905050509150600082148061399b5750818411155b156139a557600092505b829450505050505b92915050565b6000604182511415156139c557600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff1610156139f557601b810190505b601b8160ff161480613a0a5750601c8160ff16145b1515613a1557600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613a72573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613aba57600080fd5b83935050505092915050565b60008160010154836001015483600001548560000154010303905092915050565b6000806000806000613b0187604001518860600151613ba0565b9350613b1586604001518760600151613ba0565b9250838310151515613b2657600080fd5b86604001518410151515613b3657fe5b85604001518310151515613b4657fe5b8383039150613b59828860000151613ba0565b9050613b69818860200151613b7b565b50809150508094505050505092915050565b600080828411613b9057600084819150613b95565b828403835b915091509250929050565b600080828401905083811015613bd6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613bd8565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a72305820be5f6f7a51993db83ccc503856b6b85822c059c1d4571692e505e2c566ae41ce0029a165627a7a72305820614c6a8b6d28a77770f1eb705bc7c6c0b1f03ef2dbd131f334e689a87de9f94a0029", + "bin-runtime": "608060405234801561001057600080fd5b50600436106100bb576000357c010000000000000000000000000000000000000000000000000000000090048063b0228f1e11610083578063b0228f1e14610226578063b61c408314610244578063b8378f7514610262578063cc2799c714610280578063d0ad4bec14610318576100bb565b80630fabd9e7146100c0578063224df42f1461014457806323aa8174146101625780633af973b1146101ac5780637709bc78146101ca575b600080fd5b610102600480360360208110156100d657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610362565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61014c610395565b6040518082815260200191505060405180910390f35b61016a61039b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6101b46103c1565b6040518082815260200191505060405180910390f35b61020c600480360360208110156101e057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506103c7565b604051808215151515815260200191505060405180910390f35b61022e6103da565b6040518082815260200191505060405180910390f35b61024c6103e0565b6040518082815260200191505060405180910390f35b61026a6103e6565b6040518082815260200191505060405180910390f35b6102d66004803603606081101561029657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291905050506103ec565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103206106c9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60076020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60015481565b600080823b905060008111915050919050565b60045481565b60065481565b60025481565b600060045460065410151561040057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151561049a57600080fd5b6001600654016006819055506000846000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600154600254600354600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168989604051610505906106ee565b808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200198505050505050505050604051809103906000f0801580156105e0573d6000803e3d6000fd5b50905080915081600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167ff11a7558a113d9627989c5edf26cbd19143b7375248e621c8e30ac9e0847dc3f60405160405180910390a3819150509392505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b614025806106fc8339019056fe60806040526000600860146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b50604051610100806200402583398101806040526101008110156200005057600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151515620000e457600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141515156200012157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156200015e57600080fd5b6000861115156200016e57600080fd5b6000851115156200017e57600080fd5b84841115156200018d57600080fd5b620001a788620003cc640100000000026401000000009004565b1515620001b357600080fd5b620001cd87620003cc640100000000026401000000009004565b1515620001d957600080fd5b600082111515620001e957600080fd5b600081111515620001f957600080fd5b8181101515156200020957600080fd5b876000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600281905550846003819055508360048190555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156200032557600080fd5b505afa1580156200033a573d6000803e3d6000fd5b505050506040513d60208110156200035157600080fd5b81019080805190602001909291905050501115156200036f57600080fd5b82600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600581905550806006819055505050505050505050620003df565b600080823b905060008111915050919050565b613c3680620003ef6000396000f3fe608060405234801561001057600080fd5b50600436106101e1576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610116578063b7506d70116100b4578063ee4516d91161008e578063ee4516d914610be8578063fadc554b14610c98578063fc0c546a14610dcf578063fe49ba1c14610e19576101e1565b8063b7506d7014610b51578063b8378f7514610b73578063e5949b5d14610b91576101e1565b806387234237116100f0578063872342371461089f578063938bcd67146109225780639cadb1591461099a5780639e67ca5f14610a45576101e1565b80637c4734f4146105d557806382fd77951461064d578063838d6e0514610808576101e1565b80634845be761161018357806363ea01431161015d57806363ea0143146104c5578063679b37631461053d57806371e759921461055b5780637709bc7814610579576101e1565b80634845be7614610447578063524bef8a146104655780635d6e441b146104a7576101e1565b8063224df42f116101bf578063224df42f1461037757806323aa81741461039557806324d73a93146103df5780633af973b114610429576101e1565b806303d9d253146101e65780630a798f24146102eb5780630fcc0c281461036d575b600080fd5b6102e9600480360360808110156101fc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561026357600080fd5b82018360208201111561027557600080fd5b8035906020019184600183028401116401000000008311171561029757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050610e9b565b005b6103576004803603606081101561030157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611259565b6040518082815260200191505060405180910390f35b6103756114ff565b005b61037f6115e4565b6040518082815260200191505060405180910390f35b61039d6115ea565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e7611610565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610431611636565b6040518082815260200191505060405180910390f35b61044f61163c565b6040518082815260200191505060405180910390f35b6104916004803603602081101561047b57600080fd5b8101908080359060200190929190505050611642565b6040518082815260200191505060405180910390f35b6104af61165a565b6040518082815260200191505060405180910390f35b61053b600480360360808110156104db57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611660565b005b610545611aab565b6040518082815260200191505060405180910390f35b610563611ab1565b6040518082815260200191505060405180910390f35b6105bb6004803603602081101561058f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ad5565b604051808215151515815260200191505060405180910390f35b610637600480360360408110156105eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ae8565b6040518082815260200191505060405180910390f35b610806600480360361010081101561066457600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156106e957600080fd5b8201836020820111156106fb57600080fd5b8035906020019184600183028401116401000000008311171561071d57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561078057600080fd5b82018360208201111561079257600080fd5b803590602001918460018302840111640100000000831117156107b457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611d2a565b005b6108746004803603606081101561081e57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f42565b6040518083815260200182600481111561088a57fe5b60ff1681526020019250505060405180910390f35b6108a7612035565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156108e75780820151818401526020810190506108cc565b50505050905090810190601f1680156109145780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6109846004803603604081101561093857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061206e565b6040518082815260200191505060405180910390f35b610a4360048036036101208110156109b157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919050505061214d565b005b610b4f600480360360c0811015610a5b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610ab657600080fd5b820183602082011115610ac857600080fd5b80359060200191846001830284011164010000000083111715610aea57600080fd5b909192939192939080359060200190640100000000811115610b0b57600080fd5b820183602082011115610b1d57600080fd5b80359060200191846001830284011164010000000083111715610b3f57600080fd5b9091929391929390505050612681565b005b610b59612aa2565b604051808215151515815260200191505060405180910390f35b610b7b612ab5565b6040518082815260200191505060405180910390f35b610bbd60048036036020811015610ba757600080fd5b8101908080359060200190929190505050612abb565b60405180838152602001826004811115610bd357fe5b60ff1681526020019250505060405180910390f35b610c5460048036036060811015610bfe57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612aec565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b610dcd6004803603610100811015610caf57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610d3457600080fd5b820183602082011115610d4657600080fd5b80359060200191846001830284011164010000000083111715610d6857600080fd5b909192939192939080359060200190640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846001830284011164010000000083111715610dbd57600080fd5b9091929391929390505050612bc1565b005b610dd7612e8c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610e8560048036036060811015610e2f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612eb1565b6040518082815260200191505060405180910390f35b610ea5838361206e565b8414151515610eb357600080fd5b60006004811115610ec057fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff166004811115610eef57fe5b141515610efb57600080fd5b6000806000806000610f0c86612fa4565b8094508195505050610f1f89888a612eb1565b94506000600b6000878152602001908152602001600020905080600101549250848160000154141515610f5157600080fd5b600083111515610f6057600080fd5b610f6a8484613014565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a46000841115611121576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156110da57600080fd5b505af11580156110ee573d6000803e3d6000fd5b505050506040513d602081101561110457600080fd5b8101908080519060200190929190505050151561112057600080fd5b5b6000821115611235576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156111ee57600080fd5b505af1158015611202573d6000803e3d6000fd5b505050506040513d602081101561121857600080fd5b8101908080519060200190929190505050151561123457600080fd5b5b81831015151561124157fe5b83831015151561124d57fe5b50505050505050505050565b6000801515600860149054906101000a900460ff16151514151561127c57600080fd5b81600354811015151561128e57600080fd5b600454811115151561129f57600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561135f57600080fd5b505afa158015611373573d6000803e3d6000fd5b505050506040513d602081101561138957600080fd5b81019080805190602001909291905050501015156113a657600080fd5b600160076000828254019250508190555060075490506113c68787611ae8565b91506000600a6000848152602001908152602001600020541415156113ea57600080fd5b80600a60008481526020019081526020016000208190555060006009600083815260200190815260200160002090506000816000015414151561142957fe5b6000600481111561143657fe5b8160010160009054906101000a900460ff16600481111561145357fe5b14151561145c57fe5b85816000018190555060018160010160006101000a81548160ff0219169083600481111561148657fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b60001515600860149054906101000a900460ff16151514151561152157600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561157d57600080fd5b6001600860146101000a81548160ff0219169083151502179055507f6151930a846a85f5e64d2dd1cc5deeafb010c63eec4b600458158edd0e33f15d600860149054906101000a900460ff16604051808215151515815260200191505060405180910390a1565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b60001515600860149054906101000a900460ff16151514151561168257600080fd5b836001600481111561169057fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff1660048111156116bf57fe5b1415156116cb57600080fd5b6116d5848361206e565b851415156116e257600080fd5b6000831115156116f157600080fd5b600554831115151561170257600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508160000154880394506000851115156117be57600080fd5b8785111515156117cd57600080fd5b87858360000154011415156117de57fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561189c57600080fd5b505afa1580156118b0573d6000803e3d6000fd5b505050506040513d60208110156118c657600080fd5b810190808051906020019092919050505001111515156118e557600080fd5b878260000181905550806000015482600001540193508160000154841015151561190e57600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611a5957600080fd5b505af1158015611a6d573d6000803e3d6000fd5b505050506040513d6020811015611a8357600080fd5b81019080805190602001909291905050501515611a9f57600080fd5b50505050505050505050565b60075481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611b2557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611b6157600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611b9c57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015611c7c578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140192505050604051602081830303815290604052805190602001209050611d24565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b8760016004811115611d3857fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115611d6757fe5b141515611d7357600080fd5b611d7d878961206e565b89141515611d8a57600080fd5b600080600960008c8152602001908152602001600020905060028160010160006101000a81548160ff02191690836004811115611dc357fe5b021790555060018160020160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff0219169083151502179055504381600001600082825401925050819055506000611e4960018d8b8b8b8b8b61302d565b90508073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16141515611e8557600080fd5b6000881115611ee457611e9b8c8a8a8a8a613259565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515611ed757600080fd5b611ee382848a8c61342f565b5b878a73ffffffffffffffffffffffffffffffffffffffff168d7f09d2f946e008c38931cd739dd20e35146deff8ab3134caee6d54fe50816a81b88c6040518082815260200191505060405180910390a4505050505050505050505050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff16905060006004811115611f8257fe5b816004811115611f8e57fe5b148015611f9b5750600089115b8015611fa957506007548911155b1561201f5760039050611fbd898989612eb1565b93506000600b60008681526020019081526020016000209050611fe18a898b612eb1565b93506000600b6000868152602001908152602001600020905060008260010154148015612012575060008160010154145b1561201c57600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156120ab57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156120e757600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561212257600080fd5b600061212e8484611ae8565b9050600a60008281526020019081526020016000205491505092915050565b612157888561206e565b8914151561216457600080fd5b60006121708986611ae8565b90506000600960008c815260200190815260200160002090506002600481111561219657fe5b8160010160009054906101000a900460ff1660048111156121b357fe5b1415156121bf57600080fd5b4381600001541015156121d157600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612267828c8c8c61349f565b151561227257600080fd5b61227e8188888861349f565b151561228957600080fd5b612297828c8c848b8b613519565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a6000858152602001908152602001600020600090556123ed8d8d8a8d8d613628565b6123fa8d898e8989613628565b8c7f8db0e7d323ca765ce9ab550780131837e4942ccfea3be2b635ec1084c81f72628c8b8a896040518085815260200184815260200183815260200182815260200194505050505060405180910390a260008b111561255e576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561251757600080fd5b505af115801561252b573d6000803e3d6000fd5b505050506040513d602081101561254157600080fd5b8101908080519060200190929190505050151561255d57600080fd5b5b6000871115612672576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561262b57600080fd5b505af115801561263f573d6000803e3d6000fd5b505050506040513d602081101561265557600080fd5b8101908080519060200190929190505050151561267157600080fd5b5b50505050505050505050505050565b876001600481111561268f57fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff1660048111156126be57fe5b1415156126ca57600080fd5b6000806000808a1115156126dd57600080fd5b88431015156126eb57600080fd5b61273c8c8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613678565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561277557600080fd5b6127c68c8c8c8c8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613678565b90506127d28b8261206e565b8c1415156127df57600080fd5b6000600960008e8152602001908152602001600020905060008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000015482600001540195508581600101548e01111515156128a257600080fd5b80600101548d018d111515156128b757600080fd5b81600101548d0394508c85111515156128cf57600080fd5b6000851115156128de57600080fd5b8c858360010154011415156128ef57fe5b8d73ffffffffffffffffffffffffffffffffffffffff168f7f98ed0357b86b313fa9f968de5c9d2bcf591432355b34aa1ab7e3e9e92f4284088f6040518082815260200191505060405180910390a38c82600101819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8f876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612a0b57600080fd5b505af1158015612a1f573d6000803e3d6000fd5b505050506040513d6020811015612a3557600080fd5b81019080805190602001909291905050501515612a5157600080fd5b81600001548610151515612a6157fe5b80600001548610151515612a7157fe5b60008260040154141515612a8157fe5b60008160040154141515612a9157fe5b505050505050505050505050505050565b600860149054906101000a900460ff1681565b60035481565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612b5a8c8c8c612eb1565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b612bcb898961206e565b8a141515612bd857600080fd5b60006001028714151515612beb57600080fd5b600086111515612bfa57600080fd5b6000806000600960008e8152602001908152602001600020905060026004811115612c2157fe5b8160010160009054906101000a900460ff166004811115612c3e57fe5b141515612c4a57600080fd5b43816000015410151515612c5d57600080fd5b612cf560028e8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061302d565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612d3157600080fd5b612d828d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613259565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff16141515612dbe57600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff161515612e2057600080fd5b612e2c828e8c8e61342f565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f6fc5b4f4f9e65bfdc4c45456373906876cee8832b605478e281902468875eaed8e6040518082815260200191505060405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515612eee57600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b6000806000835190506000606082811515612fbb57fe5b06141515612fc857600080fd5b6000806000806000602094505b85851015612ff957612fe78986613889565b92508284019350606085019450612fd5565b88805190602001209050808497509750505050505050915091565b60008183116130235782613025565b815b905092915050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002548d60068111156130b257fe5b8d8d8d8d8d604051602001808b805190602001908083835b6020831015156130ef57805182526020820191506020810190506020830392506130ca565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b602083101515613142578051825260208201915060208101905060208303925061311d565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b6020831015156131fa57805182526020820191506020810190506020830392506131d5565b6001836020036101000a0380198251168184511680821785525050505050509050019a505050505050505050505060405160208183030381529060405280519060200120905061324a81856139b3565b92505050979650505050505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600160068111156132df57fe5b8c8c8c8c604051602001808a805190602001908083835b60208310151561331b57805182526020820191506020810190506020830392506132f6565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b60208310151561336e5780518252602082019150602081019050602083039250613349565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401878152602001868152602001858152602001848152602001838152602001828152602001995050505050505050505060405160208183030381529060405280519060200120905061342281856139b3565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600401548311151561348657600080fd5b8281600401819055508181600301819055505050505050565b60008060010285600301541480156134b75750600084145b80156134c35750600083145b156134d15760019050613511565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b600080600080600080600061352c613be1565b613534613be1565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a8160400181815250508981606001818152505061359e8f8d613ac6565b92506135aa8282613ae7565b94506135b68584613014565b945084830393506135c7858b613b7b565b809b5081965050506135d9848e613b7b565b809e5081955050508285111515156135ed57fe5b8284111515156135f957fe5b898d85870101018314151561360a57fe5b84848e8c985098509850985050505050509650965096509692505050565b600082141561363657613671565b6000613643868686612eb1565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3230300000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a0000000000008152508230600254600360068111156136fe57fe5b8c8c8c8c604051602001808a805190602001908083835b60208310151561373a5780518252602082019150602081019050602083039250613715565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b60208310151561378d5780518252602082019150602081019050602083039250613768565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401838152602001828152602001995050505050505050505060405160208183030381529060405280519060200120905061387c81856139b3565b9250505095945050505050565b60008060008060008587511115156138a85760009450505050506139ad565b858701519350602086018701519250604086018701519050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561394f57600080fd5b505afa158015613963573d6000803e3d6000fd5b505050506040513d602081101561397957600080fd5b81019080805190602001909291905050509150600082148061399b5750818411155b156139a557600092505b829450505050505b92915050565b6000604182511415156139c557600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff1610156139f557601b810190505b601b8160ff161480613a0a5750601c8160ff16145b1515613a1557600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613a72573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613aba57600080fd5b83935050505092915050565b60008160010154836001015483600001548560000154010303905092915050565b6000806000806000613b0187604001518860600151613ba0565b9350613b1586604001518760600151613ba0565b9250838310151515613b2657600080fd5b86604001518410151515613b3657fe5b85604001518310151515613b4657fe5b8383039150613b59828860000151613ba0565b9050613b69818860200151613b7b565b50809150508094505050505092915050565b600080828411613b9057600084819150613b95565b828403835b915091509250929050565b600080828401905083811015613bd6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff613bd8565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a72305820be5f6f7a51993db83ccc503856b6b85822c059c1d4571692e505e2c566ae41ce0029a165627a7a72305820614c6a8b6d28a77770f1eb705bc7c6c0b1f03ef2dbd131f334e689a87de9f94a0029", + "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"token_to_token_networks\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_max\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"deprecation_executor\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"chain_id\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contract_address\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"max_token_networks\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token_network_created\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_min\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_token_address\",\"type\":\"address\"},{\"name\":\"_channel_participant_deposit_limit\",\"type\":\"uint256\"},{\"name\":\"_token_network_deposit_limit\",\"type\":\"uint256\"}],\"name\":\"createERC20TokenNetwork\",\"outputs\":[{\"name\":\"token_network_address\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"secret_registry_address\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_secret_registry_address\",\"type\":\"address\"},{\"name\":\"_chain_id\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_min\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_max\",\"type\":\"uint256\"},{\"name\":\"_max_token_networks\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"token_address\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"token_network_address\",\"type\":\"address\"}],\"name\":\"TokenNetworkCreated\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"constructor\":{\"params\":{\"_chain_id\":\"EIP-155 Chain-ID of the chain where this contract is deployed.\",\"_max_token_networks\":\"the number of tokens that can be registered. MAX_UINT256 means no limits.\",\"_secret_registry_address\":\"The address of SecretRegistry that's used by all TokenNetworks created by this contract.\",\"_settlement_timeout_max\":\"The longest settlement period (in number of blocks) that can be chosen at the channel opening.\",\"_settlement_timeout_min\":\"The shortest settlement period (in number of blocks) that can be chosen at the channel opening.\"}},\"contractExists(address)\":{\"params\":{\"contract_address\":\"The address to check whether a contract is deployed or not\"},\"return\":\"True if a contract exists, false otherwise\"},\"createERC20TokenNetwork(address,uint256,uint256)\":{\"params\":{\"_token_address\":\"Ethereum address of an already deployed token, to be used in the new TokenNetwork contract.\"}}},\"title\":\"TokenNetworkRegistry\"},\"userdoc\":{\"methods\":{\"contractExists(address)\":{\"notice\":\"Check if a contract exists\"},\"createERC20TokenNetwork(address,uint256,uint256)\":{\"notice\":\"Deploy a new TokenNetwork contract for the Token deployed at `_token_address`.\"}},\"notice\":\"The TokenNetwork Registry deploys new TokenNetwork contracts for the Raiden Network protocol.\"}},\"settings\":{\"compilationTarget\":{\"data/source/raiden/TokenNetworkRegistry.sol\":\"TokenNetworkRegistry\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":.=.\",\":lib=data/source/lib\",\":raiden=data/source/raiden\",\":services=data/source/services\",\":test=data/source/test\"]},\"sources\":{\"data/source/lib/ECVerify.sol\":{\"keccak256\":\"0x8bb402baa478eb53252d77b63982e12685adda290cf4dfa1d8f510284f8df3e9\",\"urls\":[\"bzzr://474c3db1bb54bb831c32eb2ab67a0e870489994bd4d4b8a8fa24b54935211d43\"]},\"data/source/raiden/SecretRegistry.sol\":{\"keccak256\":\"0xb8078bc048ccdeb7c58026754f22fc378baf3b24090db0f17d10bda6cd4951b4\",\"urls\":[\"bzzr://f7a072330393a85a6a274ef526ac2ca0f8eb217bf5f48c18b3080be7ac3a7ede\"]},\"data/source/raiden/Token.sol\":{\"keccak256\":\"0x41b40819d7f6714550c742f48ce46daeb97255c08bc56e83bb9fde4fbe14c3b4\",\"urls\":[\"bzzr://a20e2bea336fb01584cf4dc80e77bb8db3c33666f77f840fd58559116849ae4b\"]},\"data/source/raiden/TokenNetwork.sol\":{\"keccak256\":\"0x8a0471fe654a6eabe757133f5c6b3b3a8d19acce975625d097192cc775d94bbe\",\"urls\":[\"bzzr://7c9b05aac5ab23979b7863a4b15421d28ac2b515b673c0b0d296c580b60cde86\"]},\"data/source/raiden/TokenNetworkRegistry.sol\":{\"keccak256\":\"0x33926a522c34bbeceb6d498c82cc1cf8415404b7348fbe40d16448ea96bc5535\",\"urls\":[\"bzzr://c668bf0336068e6e836dad2ec1c99f6d142ff1bcd4f04ef99fd59abd2e971c8e\"]},\"data/source/raiden/Utils.sol\":{\"keccak256\":\"0x602fd914e5644696d3c5d42e3a39fe6f16e7ddcc93f8864aa7e368a70cb56d0b\",\"urls\":[\"bzzr://b884810b9826074efb212a825d33409c35d9a159681690e821da3643052be3d1\"]}},\"version\":1}" }, "TokenNetworkSignatureTest": { "abi": [ @@ -5377,45 +5377,6 @@ "stateMutability": "view", "type": "function" }, - { - "constant": true, - "inputs": [ - { - "name": "channel_identifier", - "type": "uint256" - }, - { - "name": "balance_hash", - "type": "bytes32" - }, - { - "name": "nonce", - "type": "uint256" - }, - { - "name": "additional_hash", - "type": "bytes32" - }, - { - "name": "closing_signature", - "type": "bytes" - }, - { - "name": "non_closing_signature", - "type": "bytes" - } - ], - "name": "recoverAddressFromBalanceProofCounterSignaturePublic", - "outputs": [ - { - "name": "signature_address", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, { "constant": true, "inputs": [], @@ -5695,6 +5656,49 @@ "stateMutability": "view", "type": "function" }, + { + "constant": true, + "inputs": [ + { + "name": "message_type_id", + "type": "uint8" + }, + { + "name": "channel_identifier", + "type": "uint256" + }, + { + "name": "balance_hash", + "type": "bytes32" + }, + { + "name": "nonce", + "type": "uint256" + }, + { + "name": "additional_hash", + "type": "bytes32" + }, + { + "name": "closing_signature", + "type": "bytes" + }, + { + "name": "non_closing_signature", + "type": "bytes" + } + ], + "name": "recoverAddressFromBalanceProofCounterSignaturePublic", + "outputs": [ + { + "name": "signature_address", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, { "constant": true, "inputs": [ @@ -6217,9 +6221,9 @@ "type": "event" } ], - "bin": "60806040526000600860146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405160a080620044b5833981018060405260a08110156200004e57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050508484848484337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151515620000ec57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141515156200012957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156200016657600080fd5b6000861115156200017657600080fd5b6000851115156200018657600080fd5b84841115156200019557600080fd5b620001af88620003d9640100000000026401000000009004565b1515620001bb57600080fd5b620001d587620003d9640100000000026401000000009004565b1515620001e157600080fd5b600082111515620001f157600080fd5b6000811115156200020157600080fd5b8181101515156200021157600080fd5b876000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600281905550846003819055508360048190555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156200032d57600080fd5b505afa15801562000342573d6000803e3d6000fd5b505050506040513d60208110156200035957600080fd5b81019080805190602001909291905050501115156200037757600080fd5b82600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816005819055508060068190555050505050505050505050505050620003ec565b600080823b905060008111915050919050565b6140b980620003fc6000396000f3fe608060405234801561001057600080fd5b5060043610610202576000357c01000000000000000000000000000000000000000000000000000000009004806371e759921161012c5780639e67ca5f116100bf578063ee4516d91161008e578063ee4516d91461101f578063fadc554b146110cf578063fc0c546a14611206578063fe49ba1c1461125057610202565b80639e67ca5f14610e7c578063b7506d7014610f88578063b8378f7514610faa578063e5949b5d14610fc857610202565b8063838d6e05116100fb578063838d6e0514610c3f5780638723423714610cd6578063938bcd6714610d595780639cadb15914610dd157610202565b806371e75992146109925780637709bc78146109b05780637c4734f414610a0c57806382fd779514610a8457610202565b806327c1a135116101a45780635d6e441b116101735780635d6e441b146107a557806363ea0143146107c357806365c9a8ff1461083b578063679b37631461097457610202565b806327c1a1351461056d5780633af973b1146107275780634845be7614610745578063524bef8a1461076357610202565b80630fcc0c28116101e05780630fcc0c28146104b1578063224df42f146104bb57806323aa8174146104d957806324d73a931461052357610202565b806303d9d25314610207578063058686871461030c5780630a798f241461042f575b600080fd5b61030a6004803603608081101561021d57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561028457600080fd5b82018360208201111561029657600080fd5b803590602001918460018302840111640100000000831117156102b857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506112d2565b005b6103ed600480360360a081101561032257600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561036757600080fd5b82018360208201111561037957600080fd5b8035906020019184600183028401116401000000008311171561039b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611690565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61049b6004803603606081101561044557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116aa565b6040518082815260200191505060405180910390f35b6104b9611950565b005b6104c3611a35565b6040518082815260200191505060405180910390f35b6104e1611a3b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61052b611a61565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106e5600480360360c081101561058357600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156105c857600080fd5b8201836020820111156105da57600080fd5b803590602001918460018302840111640100000000831117156105fc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561065f57600080fd5b82018360208201111561067157600080fd5b8035906020019184600183028401116401000000008311171561069357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611a87565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61072f611aa3565b6040518082815260200191505060405180910390f35b61074d611aa9565b6040518082815260200191505060405180910390f35b61078f6004803603602081101561077957600080fd5b8101908080359060200190929190505050611aaf565b6040518082815260200191505060405180910390f35b6107ad611ac7565b6040518082815260200191505060405180910390f35b610839600480360360808110156107d957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611acd565b005b610932600480360360a081101561085157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001906401000000008111156108ac57600080fd5b8201836020820111156108be57600080fd5b803590602001918460018302840111640100000000831117156108e057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611f18565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61097c611f32565b6040518082815260200191505060405180910390f35b61099a611f38565b6040518082815260200191505060405180910390f35b6109f2600480360360208110156109c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f5c565b604051808215151515815260200191505060405180910390f35b610a6e60048036036040811015610a2257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f6f565b6040518082815260200191505060405180910390f35b610c3d6004803603610100811015610a9b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610b2057600080fd5b820183602082011115610b3257600080fd5b80359060200191846001830284011164010000000083111715610b5457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610bb757600080fd5b820183602082011115610bc957600080fd5b80359060200191846001830284011164010000000083111715610beb57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506121b1565b005b610cab60048036036060811015610c5557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123c7565b60405180838152602001826004811115610cc157fe5b60ff1681526020019250505060405180910390f35b610cde6124ba565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610d1e578082015181840152602081019050610d03565b50505050905090810190601f168015610d4b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610dbb60048036036040811015610d6f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124f3565b6040518082815260200191505060405180910390f35b610e7a6004803603610120811015610de857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506125d2565b005b610f86600480360360c0811015610e9257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610eed57600080fd5b820183602082011115610eff57600080fd5b80359060200191846001830284011164010000000083111715610f2157600080fd5b909192939192939080359060200190640100000000811115610f4257600080fd5b820183602082011115610f5457600080fd5b80359060200191846001830284011164010000000083111715610f7657600080fd5b9091929391929390505050612b06565b005b610f90612f27565b604051808215151515815260200191505060405180910390f35b610fb2612f3a565b6040518082815260200191505060405180910390f35b610ff460048036036020811015610fde57600080fd5b8101908080359060200190929190505050612f40565b6040518083815260200182600481111561100a57fe5b60ff1681526020019250505060405180910390f35b61108b6004803603606081101561103557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f71565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b61120460048036036101008110156110e657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561116b57600080fd5b82018360208201111561117d57600080fd5b8035906020019184600183028401116401000000008311171561119f57600080fd5b9091929391929390803590602001906401000000008111156111c057600080fd5b8201836020820111156111d257600080fd5b803590602001918460018302840111640100000000831117156111f457600080fd5b9091929391929390505050613046565b005b61120e61330f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6112bc6004803603606081101561126657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613334565b6040518082815260200191505060405180910390f35b6112dc83836124f3565b84141515156112ea57600080fd5b600060048111156112f757fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff16600481111561132657fe5b14151561133257600080fd5b600080600080600061134386613427565b809450819550505061135689888a613334565b94506000600b600087815260200190815260200160002090508060010154925084816000015414151561138857600080fd5b60008311151561139757600080fd5b6113a18484613497565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a46000841115611558576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561151157600080fd5b505af1158015611525573d6000803e3d6000fd5b505050506040513d602081101561153b57600080fd5b8101908080519060200190929190505050151561155757600080fd5b5b600082111561166c576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561162557600080fd5b505af1158015611639573d6000803e3d6000fd5b505050506040513d602081101561164f57600080fd5b8101908080519060200190929190505050151561166b57600080fd5b5b81831015151561167857fe5b83831015151561168457fe5b50505050505050505050565b600061169f86868686866134b0565b905095945050505050565b6000801515600860149054906101000a900460ff1615151415156116cd57600080fd5b8160035481101515156116df57600080fd5b60045481111515156116f057600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156117b057600080fd5b505afa1580156117c4573d6000803e3d6000fd5b505050506040513d60208110156117da57600080fd5b81019080805190602001909291905050501015156117f757600080fd5b600160076000828254019250508190555060075490506118178787611f6f565b91506000600a60008481526020019081526020016000205414151561183b57600080fd5b80600a60008481526020019081526020016000208190555060006009600083815260200190815260200160002090506000816000015414151561187a57fe5b6000600481111561188757fe5b8160010160009054906101000a900460ff1660048111156118a457fe5b1415156118ad57fe5b85816000018190555060018160010160006101000a81548160ff021916908360048111156118d757fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b60001515600860149054906101000a900460ff16151514151561197257600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156119ce57600080fd5b6001600860146101000a81548160ff0219169083151502179055507f6151930a846a85f5e64d2dd1cc5deeafb010c63eec4b600458158edd0e33f15d600860149054906101000a900460ff16604051808215151515815260200191505060405180910390a1565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611a97878787878787613686565b90509695505050505050565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b60001515600860149054906101000a900460ff161515141515611aef57600080fd5b8360016004811115611afd57fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115611b2c57fe5b141515611b3857600080fd5b611b4284836124f3565b85141515611b4f57600080fd5b600083111515611b5e57600080fd5b6005548311151515611b6f57600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050816000015488039450600085111515611c2b57600080fd5b878511151515611c3a57600080fd5b8785836000015401141515611c4b57fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d0957600080fd5b505afa158015611d1d573d6000803e3d6000fd5b505050506040513d6020811015611d3357600080fd5b81019080805190602001909291905050500111151515611d5257600080fd5b8782600001819055508060000154826000015401935081600001548410151515611d7b57600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611ec657600080fd5b505af1158015611eda573d6000803e3d6000fd5b505050506040513d6020811015611ef057600080fd5b81019080805190602001909291905050501515611f0c57600080fd5b50505050505050505050565b6000611f2786868686866138b2565b905095945050505050565b60075481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611fac57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611fe857600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561202357600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015612103578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090506121ab565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b87600160048111156121bf57fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff1660048111156121ee57fe5b1415156121fa57600080fd5b61220487896124f3565b8914151561221157600080fd5b600080600960008c8152602001908152602001600020905060028160010160006101000a81548160ff0219169083600481111561224a57fe5b021790555060018160020160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555043816000016000828254019250508190555060006122ce8c8a8a8a8a8a613686565b90508073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614151561230a57600080fd5b6000881115612369576123208c8a8a8a8a6134b0565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561235c57600080fd5b61236882848a8c613ac3565b5b878a73ffffffffffffffffffffffffffffffffffffffff168d7f09d2f946e008c38931cd739dd20e35146deff8ab3134caee6d54fe50816a81b88c6040518082815260200191505060405180910390a4505050505050505050505050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff1690506000600481111561240757fe5b81600481111561241357fe5b1480156124205750600089115b801561242e57506007548911155b156124a45760039050612442898989613334565b93506000600b600086815260200190815260200160002090506124668a898b613334565b93506000600b6000868152602001908152602001600020905060008260010154148015612497575060008160010154145b156124a157600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561253057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561256c57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156125a757600080fd5b60006125b38484611f6f565b9050600a60008281526020019081526020016000205491505092915050565b6125dc88856124f3565b891415156125e957600080fd5b60006125f58986611f6f565b90506000600960008c815260200190815260200160002090506002600481111561261b57fe5b8160010160009054906101000a900460ff16600481111561263857fe5b14151561264457600080fd5b43816000015410151561265657600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506126ec828c8c8c613b33565b15156126f757600080fd5b61270381888888613b33565b151561270e57600080fd5b61271c828c8c848b8b613bad565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a6000858152602001908152602001600020600090556128728d8d8a8d8d613cbc565b61287f8d898e8989613cbc565b8c7f8db0e7d323ca765ce9ab550780131837e4942ccfea3be2b635ec1084c81f72628c8b8a896040518085815260200184815260200183815260200182815260200194505050505060405180910390a260008b11156129e3576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561299c57600080fd5b505af11580156129b0573d6000803e3d6000fd5b505050506040513d60208110156129c657600080fd5b810190808051906020019092919050505015156129e257600080fd5b5b6000871115612af7576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612ab057600080fd5b505af1158015612ac4573d6000803e3d6000fd5b505050506040513d6020811015612ada57600080fd5b81019080805190602001909291905050501515612af657600080fd5b5b50505050505050505050505050565b8760016004811115612b1457fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115612b4357fe5b141515612b4f57600080fd5b6000806000808a111515612b6257600080fd5b8843101515612b7057600080fd5b612bc18c8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506138b2565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612bfa57600080fd5b612c4b8c8c8c8c8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506138b2565b9050612c578b826124f3565b8c141515612c6457600080fd5b6000600960008e8152602001908152602001600020905060008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000015482600001540195508581600101548e0111151515612d2757600080fd5b80600101548d018d11151515612d3c57600080fd5b81600101548d0394508c8511151515612d5457600080fd5b600085111515612d6357600080fd5b8c85836001015401141515612d7457fe5b8d73ffffffffffffffffffffffffffffffffffffffff168f7f98ed0357b86b313fa9f968de5c9d2bcf591432355b34aa1ab7e3e9e92f4284088f6040518082815260200191505060405180910390a38c82600101819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8f876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612e9057600080fd5b505af1158015612ea4573d6000803e3d6000fd5b505050506040513d6020811015612eba57600080fd5b81019080805190602001909291905050501515612ed657600080fd5b81600001548610151515612ee657fe5b80600001548610151515612ef657fe5b60008260040154141515612f0657fe5b60008160040154141515612f1657fe5b505050505050505050505050505050565b600860149054906101000a900460ff1681565b60035481565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612fdf8c8c8c613334565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b61305089896124f3565b8a14151561305d57600080fd5b6000600102871415151561307057600080fd5b60008611151561307f57600080fd5b6000806000600960008e81526020019081526020016000209050600260048111156130a657fe5b8160010160009054906101000a900460ff1660048111156130c357fe5b1415156130cf57600080fd5b438160000154101515156130e257600080fd5b6131788d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613686565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff161415156131b457600080fd5b6132058d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506134b0565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614151561324157600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff1615156132a357600080fd5b6132af828e8c8e613ac3565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f6fc5b4f4f9e65bfdc4c45456373906876cee8832b605478e281902468875eaed8e6040518082815260200191505060405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561337157600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b600080600083519050600060608281151561343e57fe5b0614151561344b57600080fd5b6000806000806000602094505b8585101561347c5761346a8986613d0c565b92508284019350606085019450613458565b88805190602001209050808497509750505050505050915091565b60008183116134a657826134a8565b815b905092915050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546001600681111561353657fe5b8c8c8c8c604051602001808a805190602001908083835b602083101515613572578051825260208201915060208101905060208303925061354d565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156135c557805182526020820191506020810190506020830392506135a0565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140187815260200186815260200185815260200184815260200183815260200182815260200199505050505050505050506040516020818303038152906040528051906020012090506136798185613e36565b9250505095945050505050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546002600681111561370c57fe5b8d8d8d8d8d604051602001808b805190602001908083835b6020831015156137495780518252602082019150602081019050602083039250613724565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b60208310151561379c5780518252602082019150602081019050602083039250613777565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b602083101515613854578051825260208201915060208101905060208303925061382f565b6001836020036101000a0380198251168184511680821785525050505050509050019a50505050505050505050506040516020818303038152906040528051906020012090506138a48185613e36565b925050509695505050505050565b600060606040805190810160405280600381526020017f3230300000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546003600681111561393857fe5b8c8c8c8c604051602001808a805190602001908083835b602083101515613974578051825260208201915060208101905060208303925061394f565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156139c757805182526020820191506020810190506020830392506139a2565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050613ab68185613e36565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806004015483111515613b1a57600080fd5b8281600401819055508181600301819055505050505050565b6000806001028560030154148015613b4b5750600084145b8015613b575750600083145b15613b655760019050613ba5565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b6000806000806000806000613bc0614064565b613bc8614064565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a81604001818152505089816060018181525050613c328f8d613f49565b9250613c3e8282613f6a565b9450613c4a8584613497565b94508483039350613c5b858b613ffe565b809b508196505050613c6d848e613ffe565b809e508195505050828511151515613c8157fe5b828411151515613c8d57fe5b898d858701010183141515613c9e57fe5b84848e8c985098509850985050505050509650965096509692505050565b6000821415613cca57613d05565b6000613cd7868686613334565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b6000806000806000858751111515613d2b576000945050505050613e30565b858701519350602086018701519250604086018701519050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015613dd257600080fd5b505afa158015613de6573d6000803e3d6000fd5b505050506040513d6020811015613dfc57600080fd5b810190808051906020019092919050505091506000821480613e1e5750818411155b15613e2857600092505b829450505050505b92915050565b600060418251141515613e4857600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff161015613e7857601b810190505b601b8160ff161480613e8d5750601c8160ff16145b1515613e9857600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613ef5573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613f3d57600080fd5b83935050505092915050565b60008160010154836001015483600001548560000154010303905092915050565b6000806000806000613f8487604001518860600151614023565b9350613f9886604001518760600151614023565b9250838310151515613fa957600080fd5b86604001518410151515613fb957fe5b85604001518310151515613fc957fe5b8383039150613fdc828860000151614023565b9050613fec818860200151613ffe565b50809150508094505050505092915050565b60008082841161401357600084819150614018565b828403835b915091509250929050565b600080828401905083811015614059577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61405b565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a72305820b75d8456e58b800c5edb44adbaa8fe09819e5d635ffc07f78b10f71acb04fe700029", - "bin-runtime": "608060405234801561001057600080fd5b5060043610610202576000357c01000000000000000000000000000000000000000000000000000000009004806371e759921161012c5780639e67ca5f116100bf578063ee4516d91161008e578063ee4516d91461101f578063fadc554b146110cf578063fc0c546a14611206578063fe49ba1c1461125057610202565b80639e67ca5f14610e7c578063b7506d7014610f88578063b8378f7514610faa578063e5949b5d14610fc857610202565b8063838d6e05116100fb578063838d6e0514610c3f5780638723423714610cd6578063938bcd6714610d595780639cadb15914610dd157610202565b806371e75992146109925780637709bc78146109b05780637c4734f414610a0c57806382fd779514610a8457610202565b806327c1a135116101a45780635d6e441b116101735780635d6e441b146107a557806363ea0143146107c357806365c9a8ff1461083b578063679b37631461097457610202565b806327c1a1351461056d5780633af973b1146107275780634845be7614610745578063524bef8a1461076357610202565b80630fcc0c28116101e05780630fcc0c28146104b1578063224df42f146104bb57806323aa8174146104d957806324d73a931461052357610202565b806303d9d25314610207578063058686871461030c5780630a798f241461042f575b600080fd5b61030a6004803603608081101561021d57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561028457600080fd5b82018360208201111561029657600080fd5b803590602001918460018302840111640100000000831117156102b857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506112d2565b005b6103ed600480360360a081101561032257600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561036757600080fd5b82018360208201111561037957600080fd5b8035906020019184600183028401116401000000008311171561039b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611690565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61049b6004803603606081101561044557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116aa565b6040518082815260200191505060405180910390f35b6104b9611950565b005b6104c3611a35565b6040518082815260200191505060405180910390f35b6104e1611a3b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61052b611a61565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6106e5600480360360c081101561058357600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156105c857600080fd5b8201836020820111156105da57600080fd5b803590602001918460018302840111640100000000831117156105fc57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561065f57600080fd5b82018360208201111561067157600080fd5b8035906020019184600183028401116401000000008311171561069357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611a87565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61072f611aa3565b6040518082815260200191505060405180910390f35b61074d611aa9565b6040518082815260200191505060405180910390f35b61078f6004803603602081101561077957600080fd5b8101908080359060200190929190505050611aaf565b6040518082815260200191505060405180910390f35b6107ad611ac7565b6040518082815260200191505060405180910390f35b610839600480360360808110156107d957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611acd565b005b610932600480360360a081101561085157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001906401000000008111156108ac57600080fd5b8201836020820111156108be57600080fd5b803590602001918460018302840111640100000000831117156108e057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611f18565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61097c611f32565b6040518082815260200191505060405180910390f35b61099a611f38565b6040518082815260200191505060405180910390f35b6109f2600480360360208110156109c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f5c565b604051808215151515815260200191505060405180910390f35b610a6e60048036036040811015610a2257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f6f565b6040518082815260200191505060405180910390f35b610c3d6004803603610100811015610a9b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610b2057600080fd5b820183602082011115610b3257600080fd5b80359060200191846001830284011164010000000083111715610b5457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610bb757600080fd5b820183602082011115610bc957600080fd5b80359060200191846001830284011164010000000083111715610beb57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506121b1565b005b610cab60048036036060811015610c5557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123c7565b60405180838152602001826004811115610cc157fe5b60ff1681526020019250505060405180910390f35b610cde6124ba565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610d1e578082015181840152602081019050610d03565b50505050905090810190601f168015610d4b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610dbb60048036036040811015610d6f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124f3565b6040518082815260200191505060405180910390f35b610e7a6004803603610120811015610de857600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506125d2565b005b610f86600480360360c0811015610e9257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610eed57600080fd5b820183602082011115610eff57600080fd5b80359060200191846001830284011164010000000083111715610f2157600080fd5b909192939192939080359060200190640100000000811115610f4257600080fd5b820183602082011115610f5457600080fd5b80359060200191846001830284011164010000000083111715610f7657600080fd5b9091929391929390505050612b06565b005b610f90612f27565b604051808215151515815260200191505060405180910390f35b610fb2612f3a565b6040518082815260200191505060405180910390f35b610ff460048036036020811015610fde57600080fd5b8101908080359060200190929190505050612f40565b6040518083815260200182600481111561100a57fe5b60ff1681526020019250505060405180910390f35b61108b6004803603606081101561103557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f71565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b61120460048036036101008110156110e657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561116b57600080fd5b82018360208201111561117d57600080fd5b8035906020019184600183028401116401000000008311171561119f57600080fd5b9091929391929390803590602001906401000000008111156111c057600080fd5b8201836020820111156111d257600080fd5b803590602001918460018302840111640100000000831117156111f457600080fd5b9091929391929390505050613046565b005b61120e61330f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6112bc6004803603606081101561126657600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613334565b6040518082815260200191505060405180910390f35b6112dc83836124f3565b84141515156112ea57600080fd5b600060048111156112f757fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff16600481111561132657fe5b14151561133257600080fd5b600080600080600061134386613427565b809450819550505061135689888a613334565b94506000600b600087815260200190815260200160002090508060010154925084816000015414151561138857600080fd5b60008311151561139757600080fd5b6113a18484613497565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a46000841115611558576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561151157600080fd5b505af1158015611525573d6000803e3d6000fd5b505050506040513d602081101561153b57600080fd5b8101908080519060200190929190505050151561155757600080fd5b5b600082111561166c576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561162557600080fd5b505af1158015611639573d6000803e3d6000fd5b505050506040513d602081101561164f57600080fd5b8101908080519060200190929190505050151561166b57600080fd5b5b81831015151561167857fe5b83831015151561168457fe5b50505050505050505050565b600061169f86868686866134b0565b905095945050505050565b6000801515600860149054906101000a900460ff1615151415156116cd57600080fd5b8160035481101515156116df57600080fd5b60045481111515156116f057600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156117b057600080fd5b505afa1580156117c4573d6000803e3d6000fd5b505050506040513d60208110156117da57600080fd5b81019080805190602001909291905050501015156117f757600080fd5b600160076000828254019250508190555060075490506118178787611f6f565b91506000600a60008481526020019081526020016000205414151561183b57600080fd5b80600a60008481526020019081526020016000208190555060006009600083815260200190815260200160002090506000816000015414151561187a57fe5b6000600481111561188757fe5b8160010160009054906101000a900460ff1660048111156118a457fe5b1415156118ad57fe5b85816000018190555060018160010160006101000a81548160ff021916908360048111156118d757fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b60001515600860149054906101000a900460ff16151514151561197257600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156119ce57600080fd5b6001600860146101000a81548160ff0219169083151502179055507f6151930a846a85f5e64d2dd1cc5deeafb010c63eec4b600458158edd0e33f15d600860149054906101000a900460ff16604051808215151515815260200191505060405180910390a1565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611a97878787878787613686565b90509695505050505050565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b60001515600860149054906101000a900460ff161515141515611aef57600080fd5b8360016004811115611afd57fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115611b2c57fe5b141515611b3857600080fd5b611b4284836124f3565b85141515611b4f57600080fd5b600083111515611b5e57600080fd5b6005548311151515611b6f57600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050816000015488039450600085111515611c2b57600080fd5b878511151515611c3a57600080fd5b8785836000015401141515611c4b57fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d0957600080fd5b505afa158015611d1d573d6000803e3d6000fd5b505050506040513d6020811015611d3357600080fd5b81019080805190602001909291905050500111151515611d5257600080fd5b8782600001819055508060000154826000015401935081600001548410151515611d7b57600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611ec657600080fd5b505af1158015611eda573d6000803e3d6000fd5b505050506040513d6020811015611ef057600080fd5b81019080805190602001909291905050501515611f0c57600080fd5b50505050505050505050565b6000611f2786868686866138b2565b905095945050505050565b60075481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611fac57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611fe857600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561202357600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015612103578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090506121ab565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b87600160048111156121bf57fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff1660048111156121ee57fe5b1415156121fa57600080fd5b61220487896124f3565b8914151561221157600080fd5b600080600960008c8152602001908152602001600020905060028160010160006101000a81548160ff0219169083600481111561224a57fe5b021790555060018160020160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555043816000016000828254019250508190555060006122ce8c8a8a8a8a8a613686565b90508073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614151561230a57600080fd5b6000881115612369576123208c8a8a8a8a6134b0565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561235c57600080fd5b61236882848a8c613ac3565b5b878a73ffffffffffffffffffffffffffffffffffffffff168d7f09d2f946e008c38931cd739dd20e35146deff8ab3134caee6d54fe50816a81b88c6040518082815260200191505060405180910390a4505050505050505050505050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff1690506000600481111561240757fe5b81600481111561241357fe5b1480156124205750600089115b801561242e57506007548911155b156124a45760039050612442898989613334565b93506000600b600086815260200190815260200160002090506124668a898b613334565b93506000600b6000868152602001908152602001600020905060008260010154148015612497575060008160010154145b156124a157600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561253057600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561256c57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156125a757600080fd5b60006125b38484611f6f565b9050600a60008281526020019081526020016000205491505092915050565b6125dc88856124f3565b891415156125e957600080fd5b60006125f58986611f6f565b90506000600960008c815260200190815260200160002090506002600481111561261b57fe5b8160010160009054906101000a900460ff16600481111561263857fe5b14151561264457600080fd5b43816000015410151561265657600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506126ec828c8c8c613b33565b15156126f757600080fd5b61270381888888613b33565b151561270e57600080fd5b61271c828c8c848b8b613bad565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a6000858152602001908152602001600020600090556128728d8d8a8d8d613cbc565b61287f8d898e8989613cbc565b8c7f8db0e7d323ca765ce9ab550780131837e4942ccfea3be2b635ec1084c81f72628c8b8a896040518085815260200184815260200183815260200182815260200194505050505060405180910390a260008b11156129e3576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561299c57600080fd5b505af11580156129b0573d6000803e3d6000fd5b505050506040513d60208110156129c657600080fd5b810190808051906020019092919050505015156129e257600080fd5b5b6000871115612af7576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612ab057600080fd5b505af1158015612ac4573d6000803e3d6000fd5b505050506040513d6020811015612ada57600080fd5b81019080805190602001909291905050501515612af657600080fd5b5b50505050505050505050505050565b8760016004811115612b1457fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115612b4357fe5b141515612b4f57600080fd5b6000806000808a111515612b6257600080fd5b8843101515612b7057600080fd5b612bc18c8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506138b2565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612bfa57600080fd5b612c4b8c8c8c8c8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506138b2565b9050612c578b826124f3565b8c141515612c6457600080fd5b6000600960008e8152602001908152602001600020905060008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000015482600001540195508581600101548e0111151515612d2757600080fd5b80600101548d018d11151515612d3c57600080fd5b81600101548d0394508c8511151515612d5457600080fd5b600085111515612d6357600080fd5b8c85836001015401141515612d7457fe5b8d73ffffffffffffffffffffffffffffffffffffffff168f7f98ed0357b86b313fa9f968de5c9d2bcf591432355b34aa1ab7e3e9e92f4284088f6040518082815260200191505060405180910390a38c82600101819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8f876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612e9057600080fd5b505af1158015612ea4573d6000803e3d6000fd5b505050506040513d6020811015612eba57600080fd5b81019080805190602001909291905050501515612ed657600080fd5b81600001548610151515612ee657fe5b80600001548610151515612ef657fe5b60008260040154141515612f0657fe5b60008160040154141515612f1657fe5b505050505050505050505050505050565b600860149054906101000a900460ff1681565b60035481565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612fdf8c8c8c613334565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b61305089896124f3565b8a14151561305d57600080fd5b6000600102871415151561307057600080fd5b60008611151561307f57600080fd5b6000806000600960008e81526020019081526020016000209050600260048111156130a657fe5b8160010160009054906101000a900460ff1660048111156130c357fe5b1415156130cf57600080fd5b438160000154101515156130e257600080fd5b6131788d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613686565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff161415156131b457600080fd5b6132058d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506134b0565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614151561324157600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff1615156132a357600080fd5b6132af828e8c8e613ac3565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f6fc5b4f4f9e65bfdc4c45456373906876cee8832b605478e281902468875eaed8e6040518082815260200191505060405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561337157600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b600080600083519050600060608281151561343e57fe5b0614151561344b57600080fd5b6000806000806000602094505b8585101561347c5761346a8986613d0c565b92508284019350606085019450613458565b88805190602001209050808497509750505050505050915091565b60008183116134a657826134a8565b815b905092915050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546001600681111561353657fe5b8c8c8c8c604051602001808a805190602001908083835b602083101515613572578051825260208201915060208101905060208303925061354d565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156135c557805182526020820191506020810190506020830392506135a0565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140187815260200186815260200185815260200184815260200183815260200182815260200199505050505050505050506040516020818303038152906040528051906020012090506136798185613e36565b9250505095945050505050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546002600681111561370c57fe5b8d8d8d8d8d604051602001808b805190602001908083835b6020831015156137495780518252602082019150602081019050602083039250613724565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b60208310151561379c5780518252602082019150602081019050602083039250613777565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b602083101515613854578051825260208201915060208101905060208303925061382f565b6001836020036101000a0380198251168184511680821785525050505050509050019a50505050505050505050506040516020818303038152906040528051906020012090506138a48185613e36565b925050509695505050505050565b600060606040805190810160405280600381526020017f3230300000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546003600681111561393857fe5b8c8c8c8c604051602001808a805190602001908083835b602083101515613974578051825260208201915060208101905060208303925061394f565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156139c757805182526020820191506020810190506020830392506139a2565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050613ab68185613e36565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806004015483111515613b1a57600080fd5b8281600401819055508181600301819055505050505050565b6000806001028560030154148015613b4b5750600084145b8015613b575750600083145b15613b655760019050613ba5565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b6000806000806000806000613bc0614064565b613bc8614064565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a81604001818152505089816060018181525050613c328f8d613f49565b9250613c3e8282613f6a565b9450613c4a8584613497565b94508483039350613c5b858b613ffe565b809b508196505050613c6d848e613ffe565b809e508195505050828511151515613c8157fe5b828411151515613c8d57fe5b898d858701010183141515613c9e57fe5b84848e8c985098509850985050505050509650965096509692505050565b6000821415613cca57613d05565b6000613cd7868686613334565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b6000806000806000858751111515613d2b576000945050505050613e30565b858701519350602086018701519250604086018701519050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015613dd257600080fd5b505afa158015613de6573d6000803e3d6000fd5b505050506040513d6020811015613dfc57600080fd5b810190808051906020019092919050505091506000821480613e1e5750818411155b15613e2857600092505b829450505050505b92915050565b600060418251141515613e4857600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff161015613e7857601b810190505b601b8160ff161480613e8d5750601c8160ff16145b1515613e9857600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613ef5573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613f3d57600080fd5b83935050505092915050565b60008160010154836001015483600001548560000154010303905092915050565b6000806000806000613f8487604001518860600151614023565b9350613f9886604001518760600151614023565b9250838310151515613fa957600080fd5b86604001518410151515613fb957fe5b85604001518310151515613fc957fe5b8383039150613fdc828860000151614023565b9050613fec818860200151613ffe565b50809150508094505050505092915050565b60008082841161401357600084819150614018565b828403835b915091509250929050565b600080828401905083811015614059577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61405b565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a72305820b75d8456e58b800c5edb44adbaa8fe09819e5d635ffc07f78b10f71acb04fe700029", - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"address\"},{\"name\":\"sender\",\"type\":\"address\"},{\"name\":\"locks\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"recoverAddressFromBalanceProofPublic\",\"outputs\":[{\"name\":\"signature_address\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"openChannel\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"deprecate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_max\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"deprecation_executor\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"secret_registry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"}],\"name\":\"recoverAddressFromBalanceProofCounterSignaturePublic\",\"outputs\":[{\"name\":\"signature_address\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"chain_id\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token_network_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"participants_hash_to_channel_identifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_participant_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"total_deposit\",\"type\":\"uint256\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"setTotalDeposit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"total_withdraw\",\"type\":\"uint256\"},{\"name\":\"expiration_block\",\"type\":\"uint256\"},{\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"recoverAddressFromWithdrawMessagePublic\",\"outputs\":[{\"name\":\"signature_address\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_counter\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_SAFE_UINT256\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contract_address\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getParticipantsHash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"}],\"name\":\"closeChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"}],\"name\":\"getChannelInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"signature_prefix\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant1_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locksroot\",\"type\":\"bytes32\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"participant2_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locksroot\",\"type\":\"bytes32\"}],\"name\":\"settleChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"total_withdraw\",\"type\":\"uint256\"},{\"name\":\"expiration_block\",\"type\":\"uint256\"},{\"name\":\"participant_signature\",\"type\":\"bytes\"},{\"name\":\"partner_signature\",\"type\":\"bytes\"}],\"name\":\"setTotalWithdraw\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"safety_deprecation_switch\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_min\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"channels\",\"outputs\":[{\"name\":\"settle_block_number\",\"type\":\"uint256\"},{\"name\":\"state\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelParticipantInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bool\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"}],\"name\":\"updateNonClosingBalanceProof\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"getUnlockIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_token_address\",\"type\":\"address\"},{\"name\":\"_secret_registry\",\"type\":\"address\"},{\"name\":\"_chain_id\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_min\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_max\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant1\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"participant2\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"ChannelOpened\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"total_deposit\",\"type\":\"uint256\"}],\"name\":\"ChannelNewDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"new_value\",\"type\":\"bool\"}],\"name\":\"DeprecationSwitch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"total_withdraw\",\"type\":\"uint256\"}],\"name\":\"ChannelWithdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"balance_hash\",\"type\":\"bytes32\"}],\"name\":\"ChannelClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"locksroot\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"unlocked_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"returned_tokens\",\"type\":\"uint256\"}],\"name\":\"ChannelUnlocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"balance_hash\",\"type\":\"bytes32\"}],\"name\":\"NonClosingBalanceProofUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant1_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant1_locksroot\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"participant2_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant2_locksroot\",\"type\":\"bytes32\"}],\"name\":\"ChannelSettled\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"closeChannel(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"closing_participant\":\"Channel participant who closes the channel.\",\"closing_signature\":\"Closing participant's signature of the balance proof data.\",\"non_closing_participant\":\"Channel partner of the `closing_participant`, who provided the balance proof.\",\"non_closing_signature\":\"Non-closing participant's signature of the balance proof data.\",\"nonce\":\"Strictly monotonic value used to order transfers.\"}},\"contractExists(address)\":{\"params\":{\"contract_address\":\"The address to check whether a contract is deployed or not\"},\"return\":\"True if a contract exists, false otherwise\"},\"getChannelIdentifier(address,address)\":{\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"},\"return\":\"Unique identifier for the channel. It can be 0 if channel does not exist.\"},\"getChannelInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Address of a channel participant.\",\"participant2\":\"Address of the other channel participant.\"},\"return\":\"Channel settle_block_number and state.\"},\"getChannelParticipantInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Address of the channel participant whose data will be returned.\",\"partner\":\"Address of the channel partner.\"},\"return\":\"Participant's deposit, withdrawn_amount, whether the participant has called `closeChannel` or not, balance_hash, nonce, locksroot, locked_amount.\"},\"getParticipantsHash(address,address)\":{\"details\":\"Get the hash of the participant addresses, ordered lexicographically.\",\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"}},\"getUnlockIdentifier(uint256,address,address)\":{\"details\":\"Get the hash of the channel identifier and the participant addresses (whose ordering matters). The hash might be useful for the receiver to look up the appropriate UnlockData to claim.\",\"params\":{\"channel_identifier\":\"Identifier for the channel which the UnlockData is about.\",\"receiver\":\"Receiver of the pending transfers that the UnlockData represents.\",\"sender\":\"Sender of the pending transfers that the UnlockData represents.\"}},\"openChannel(address,address,uint256)\":{\"params\":{\"participant1\":\"Ethereum address of a channel participant.\",\"participant2\":\"Ethereum address of the other channel participant.\",\"settle_timeout\":\"Number of blocks that need to be mined between a call to closeChannel and settleChannel.\"}},\"setTotalDeposit(uint256,address,uint256,address)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Channel participant whose deposit is being set.\",\"partner\":\"Channel partner address, needed to compute the total channel deposit.\",\"total_deposit\":\"The total amount of tokens that the participant will have as a deposit.\"}},\"setTotalWithdraw(uint256,address,uint256,uint256,bytes,bytes)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Channel participant, who will receive the withdrawn amount.\",\"participant_signature\":\"Participant's signature on the withdraw data.\",\"partner_signature\":\"Partner's signature on the withdraw data.\",\"total_withdraw\":\"Total amount of tokens that are marked as withdrawn from the channel during the channel lifecycle.\"}},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Channel participant.\",\"participant1_locked_amount\":\"Amount of tokens owed by `participant1` to `participant2`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant1_locksroot\":\"The latest known hash of the pending hash-time locks of `participant1`, used to validate the unlocked proofs. If no balance_hash has been submitted, locksroot is ignored.\",\"participant1_transferred_amount\":\"The latest known amount of tokens transferred from `participant1` to `participant2`.\",\"participant2\":\"Other channel participant.\",\"participant2_locked_amount\":\"Amount of tokens owed by `participant2` to `participant1`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant2_locksroot\":\"The latest known hash of the pending hash-time locks of `participant2`, used to validate the unlocked proofs. If no balance_hash has been submitted, locksroot is ignored.\",\"participant2_transferred_amount\":\"The latest known amount of tokens transferred from `participant2` to `participant1`.\"}},\"unlock(uint256,address,address,bytes)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"locks\":\"All pending locks concatenated in order of creation. that `sender` sent to `receiver`.\",\"receiver\":\"Address who will receive the claimable unlocked tokens.\",\"sender\":\"Address who sent the pending transfers and will receive the unclaimable unlocked tokens.\"}},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"closing_participant\":\"Channel participant who closed the channel.\",\"closing_signature\":\"Closing participant's signature of the balance proof data.\",\"non_closing_participant\":\"Channel participant who needs to update the balance proof.\",\"non_closing_signature\":\"Non-closing participant signature of the balance proof data.\",\"nonce\":\"Strictly monotonic value used to order transfers.\"}}}},\"userdoc\":{\"methods\":{\"closeChannel(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"notice\":\"Close the channel defined by the two participant addresses. Anybody can call this function on behalf of a participant (called the closing participant), providing a balance proof signed by both parties. Callable only once.\"},\"contractExists(address)\":{\"notice\":\"Check if a contract exists\"},\"getChannelIdentifier(address,address)\":{\"notice\":\"Returns the unique identifier for the channel given by the contract.\"},\"getChannelInfo(uint256,address,address)\":{\"notice\":\"The contract cannot really distinguish Settled and Removed states, especially when wrong participants are given as input. The contract does not remember the participants of the channel.\"},\"openChannel(address,address,uint256)\":{\"notice\":\"Opens a new channel between `participant1` and `participant2`. Can be called by anyone.\"},\"setTotalDeposit(uint256,address,uint256,address)\":{\"notice\":\"Sets the channel participant total deposit value. Can be called by anyone.\"},\"setTotalWithdraw(uint256,address,uint256,uint256,bytes,bytes)\":{\"notice\":\"Allows `participant` to withdraw tokens from the channel that he has with `partner`, without closing it. Can be called by anyone. Can only be called once per each signed withdraw message.\"},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"notice\":\"Settles the balance between the two parties. Note that arguments order counts: `participant1_transferred_amount + participant1_locked_amount` <= `participant2_transferred_amount + participant2_locked_amount`\"},\"unlock(uint256,address,address,bytes)\":{\"notice\":\"Unlocks all pending off-chain transfers from `sender` to `receiver` and sends the locked tokens corresponding to locks with secrets registered on-chain to the `receiver`. Locked tokens corresponding to locks where the secret was not revealed on-chain will return to the `sender`. Anyone can call unlock.\"},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"notice\":\"Called on a closed channel, the function allows the non-closing participant to provide the last balance proof, which modifies the closing participant's state. Can be called multiple times by anyone.\"}}}},\"settings\":{\"compilationTarget\":{\"data/source/test/TokenNetworkInternalsTest.sol\":\"TokenNetworkSignatureTest\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":.=.\",\":lib=data/source/lib\",\":raiden=data/source/raiden\",\":services=data/source/services\",\":test=data/source/test\"]},\"sources\":{\"data/source/lib/ECVerify.sol\":{\"keccak256\":\"0x8bb402baa478eb53252d77b63982e12685adda290cf4dfa1d8f510284f8df3e9\",\"urls\":[\"bzzr://474c3db1bb54bb831c32eb2ab67a0e870489994bd4d4b8a8fa24b54935211d43\"]},\"data/source/raiden/SecretRegistry.sol\":{\"keccak256\":\"0xb8078bc048ccdeb7c58026754f22fc378baf3b24090db0f17d10bda6cd4951b4\",\"urls\":[\"bzzr://f7a072330393a85a6a274ef526ac2ca0f8eb217bf5f48c18b3080be7ac3a7ede\"]},\"data/source/raiden/Token.sol\":{\"keccak256\":\"0x41b40819d7f6714550c742f48ce46daeb97255c08bc56e83bb9fde4fbe14c3b4\",\"urls\":[\"bzzr://a20e2bea336fb01584cf4dc80e77bb8db3c33666f77f840fd58559116849ae4b\"]},\"data/source/raiden/TokenNetwork.sol\":{\"keccak256\":\"0xe236e9c266564b1497d45cff4820b670e02cff86a07dba03310705e090620e66\",\"urls\":[\"bzzr://d629bfb011b3a81416e11a53816c3656f439ee2698b91cb015dade173e583a7c\"]},\"data/source/raiden/Utils.sol\":{\"keccak256\":\"0x602fd914e5644696d3c5d42e3a39fe6f16e7ddcc93f8864aa7e368a70cb56d0b\",\"urls\":[\"bzzr://b884810b9826074efb212a825d33409c35d9a159681690e821da3643052be3d1\"]},\"data/source/test/TokenNetworkInternalsTest.sol\":{\"keccak256\":\"0xb2788f5a8680109641c60e5d881883b0dd0a77c5314a7a6e8be7a3393b2537ab\",\"urls\":[\"bzzr://01583ff6d3db7e414d12a755f7e0a081c1b95048149afe6fc20d95b965d83b1a\"]}},\"version\":1}" + "bin": "60806040526000600860146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405160a080620044c8833981018060405260a08110156200004e57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050508484848484337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151515620000ec57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141515156200012957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156200016657600080fd5b6000861115156200017657600080fd5b6000851115156200018657600080fd5b84841115156200019557600080fd5b620001af88620003d9640100000000026401000000009004565b1515620001bb57600080fd5b620001d587620003d9640100000000026401000000009004565b1515620001e157600080fd5b600082111515620001f157600080fd5b6000811115156200020157600080fd5b8181101515156200021157600080fd5b876000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600281905550846003819055508360048190555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156200032d57600080fd5b505afa15801562000342573d6000803e3d6000fd5b505050506040513d60208110156200035957600080fd5b81019080805190602001909291905050501115156200037757600080fd5b82600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816005819055508060068190555050505050505050505050505050620003ec565b600080823b905060008111915050919050565b6140cc80620003fc6000396000f3fe608060405234801561001057600080fd5b5060043610610202576000357c0100000000000000000000000000000000000000000000000000000000900480637709bc781161012c5780639e67ca5f116100bf578063ee4516d91161008e578063ee4516d91461102c578063fadc554b146110dc578063fc0c546a14611213578063fe49ba1c1461125d57610202565b80639e67ca5f14610e89578063b7506d7014610f95578063b8378f7514610fb7578063e5949b5d14610fd557610202565b806387234237116100fb5780638723423714610b1c5780638c81cd9a14610b9f578063938bcd6714610d665780639cadb15914610dde57610202565b80637709bc78146107f65780637c4734f41461085257806382fd7795146108ca578063838d6e0514610a8557610202565b80633af973b1116101a457806363ea01431161017357806363ea01431461060957806365c9a8ff14610681578063679b3763146107ba57806371e75992146107d857610202565b80633af973b11461056d5780634845be761461058b578063524bef8a146105a95780635d6e441b146105eb57610202565b80630fcc0c28116101e05780630fcc0c28146104b1578063224df42f146104bb57806323aa8174146104d957806324d73a931461052357610202565b806303d9d25314610207578063058686871461030c5780630a798f241461042f575b600080fd5b61030a6004803603608081101561021d57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561028457600080fd5b82018360208201111561029657600080fd5b803590602001918460018302840111640100000000831117156102b857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506112df565b005b6103ed600480360360a081101561032257600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561036757600080fd5b82018360208201111561037957600080fd5b8035906020019184600183028401116401000000008311171561039b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061169d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61049b6004803603606081101561044557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116b7565b6040518082815260200191505060405180910390f35b6104b961195d565b005b6104c3611a42565b6040518082815260200191505060405180910390f35b6104e1611a48565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61052b611a6e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610575611a94565b6040518082815260200191505060405180910390f35b610593611a9a565b6040518082815260200191505060405180910390f35b6105d5600480360360208110156105bf57600080fd5b8101908080359060200190929190505050611aa0565b6040518082815260200191505060405180910390f35b6105f3611ab8565b6040518082815260200191505060405180910390f35b61067f6004803603608081101561061f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611abe565b005b610778600480360360a081101561069757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001906401000000008111156106f257600080fd5b82018360208201111561070457600080fd5b8035906020019184600183028401116401000000008311171561072657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611f09565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107c2611f23565b6040518082815260200191505060405180910390f35b6107e0611f29565b6040518082815260200191505060405180910390f35b6108386004803603602081101561080c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f4d565b604051808215151515815260200191505060405180910390f35b6108b46004803603604081101561086857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f60565b6040518082815260200191505060405180910390f35b610a8360048036036101008110156108e157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561096657600080fd5b82018360208201111561097857600080fd5b8035906020019184600183028401116401000000008311171561099a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156109fd57600080fd5b820183602082011115610a0f57600080fd5b80359060200191846001830284011164010000000083111715610a3157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506121a2565b005b610af160048036036060811015610a9b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123ba565b60405180838152602001826004811115610b0757fe5b60ff1681526020019250505060405180910390f35b610b246124ad565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b64578082015181840152602081019050610b49565b50505050905090810190601f168015610b915780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610d24600480360360e0811015610bb557600080fd5b81019080803560ff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610c0757600080fd5b820183602082011115610c1957600080fd5b80359060200191846001830284011164010000000083111715610c3b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610c9e57600080fd5b820183602082011115610cb057600080fd5b80359060200191846001830284011164010000000083111715610cd257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506124e6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610dc860048036036040811015610d7c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612504565b6040518082815260200191505060405180910390f35b610e876004803603610120811015610df557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506125e3565b005b610f93600480360360c0811015610e9f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610efa57600080fd5b820183602082011115610f0c57600080fd5b80359060200191846001830284011164010000000083111715610f2e57600080fd5b909192939192939080359060200190640100000000811115610f4f57600080fd5b820183602082011115610f6157600080fd5b80359060200191846001830284011164010000000083111715610f8357600080fd5b9091929391929390505050612b17565b005b610f9d612f38565b604051808215151515815260200191505060405180910390f35b610fbf612f4b565b6040518082815260200191505060405180910390f35b61100160048036036020811015610feb57600080fd5b8101908080359060200190929190505050612f51565b6040518083815260200182600481111561101757fe5b60ff1681526020019250505060405180910390f35b6110986004803603606081101561104257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f82565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b61121160048036036101008110156110f357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561117857600080fd5b82018360208201111561118a57600080fd5b803590602001918460018302840111640100000000831117156111ac57600080fd5b9091929391929390803590602001906401000000008111156111cd57600080fd5b8201836020820111156111df57600080fd5b8035906020019184600183028401116401000000008311171561120157600080fd5b9091929391929390505050613057565b005b61121b613322565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6112c96004803603606081101561127357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613347565b6040518082815260200191505060405180910390f35b6112e98383612504565b84141515156112f757600080fd5b6000600481111561130457fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff16600481111561133357fe5b14151561133f57600080fd5b60008060008060006113508661343a565b809450819550505061136389888a613347565b94506000600b600087815260200190815260200160002090508060010154925084816000015414151561139557600080fd5b6000831115156113a457600080fd5b6113ae84846134aa565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a46000841115611565576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561151e57600080fd5b505af1158015611532573d6000803e3d6000fd5b505050506040513d602081101561154857600080fd5b8101908080519060200190929190505050151561156457600080fd5b5b6000821115611679576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561163257600080fd5b505af1158015611646573d6000803e3d6000fd5b505050506040513d602081101561165c57600080fd5b8101908080519060200190929190505050151561167857600080fd5b5b81831015151561168557fe5b83831015151561169157fe5b50505050505050505050565b60006116ac86868686866134c3565b905095945050505050565b6000801515600860149054906101000a900460ff1615151415156116da57600080fd5b8160035481101515156116ec57600080fd5b60045481111515156116fd57600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156117bd57600080fd5b505afa1580156117d1573d6000803e3d6000fd5b505050506040513d60208110156117e757600080fd5b810190808051906020019092919050505010151561180457600080fd5b600160076000828254019250508190555060075490506118248787611f60565b91506000600a60008481526020019081526020016000205414151561184857600080fd5b80600a60008481526020019081526020016000208190555060006009600083815260200190815260200160002090506000816000015414151561188757fe5b6000600481111561189457fe5b8160010160009054906101000a900460ff1660048111156118b157fe5b1415156118ba57fe5b85816000018190555060018160010160006101000a81548160ff021916908360048111156118e457fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b60001515600860149054906101000a900460ff16151514151561197f57600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156119db57600080fd5b6001600860146101000a81548160ff0219169083151502179055507f6151930a846a85f5e64d2dd1cc5deeafb010c63eec4b600458158edd0e33f15d600860149054906101000a900460ff16604051808215151515815260200191505060405180910390a1565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b60001515600860149054906101000a900460ff161515141515611ae057600080fd5b8360016004811115611aee57fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115611b1d57fe5b141515611b2957600080fd5b611b338483612504565b85141515611b4057600080fd5b600083111515611b4f57600080fd5b6005548311151515611b6057600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050816000015488039450600085111515611c1c57600080fd5b878511151515611c2b57600080fd5b8785836000015401141515611c3c57fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfa57600080fd5b505afa158015611d0e573d6000803e3d6000fd5b505050506040513d6020811015611d2457600080fd5b81019080805190602001909291905050500111151515611d4357600080fd5b8782600001819055508060000154826000015401935081600001548410151515611d6c57600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611eb757600080fd5b505af1158015611ecb573d6000803e3d6000fd5b505050506040513d6020811015611ee157600080fd5b81019080805190602001909291905050501515611efd57600080fd5b50505050505050505050565b6000611f188686868686613699565b905095945050505050565b60075481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611f9d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611fd957600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561201457600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1610156120f4578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014019250505060405160208183030381529060405280519060200120905061219c565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b87600160048111156121b057fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff1660048111156121df57fe5b1415156121eb57600080fd5b6121f58789612504565b8914151561220257600080fd5b600080600960008c8152602001908152602001600020905060028160010160006101000a81548160ff0219169083600481111561223b57fe5b021790555060018160020160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555043816000016000828254019250508190555060006122c160018d8b8b8b8b8b6138aa565b90508073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161415156122fd57600080fd5b600088111561235c576123138c8a8a8a8a6134c3565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561234f57600080fd5b61235b82848a8c613ad6565b5b878a73ffffffffffffffffffffffffffffffffffffffff168d7f09d2f946e008c38931cd739dd20e35146deff8ab3134caee6d54fe50816a81b88c6040518082815260200191505060405180910390a4505050505050505050505050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff169050600060048111156123fa57fe5b81600481111561240657fe5b1480156124135750600089115b801561242157506007548911155b156124975760039050612435898989613347565b93506000600b600086815260200190815260200160002090506124598a898b613347565b93506000600b600086815260200190815260200160002090506000826001015414801561248a575060008160010154145b1561249457600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60006124f7888888888888886138aa565b9050979650505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561254157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561257d57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156125b857600080fd5b60006125c48484611f60565b9050600a60008281526020019081526020016000205491505092915050565b6125ed8885612504565b891415156125fa57600080fd5b60006126068986611f60565b90506000600960008c815260200190815260200160002090506002600481111561262c57fe5b8160010160009054906101000a900460ff16600481111561264957fe5b14151561265557600080fd5b43816000015410151561266757600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506126fd828c8c8c613b46565b151561270857600080fd5b61271481888888613b46565b151561271f57600080fd5b61272d828c8c848b8b613bc0565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a6000858152602001908152602001600020600090556128838d8d8a8d8d613ccf565b6128908d898e8989613ccf565b8c7f8db0e7d323ca765ce9ab550780131837e4942ccfea3be2b635ec1084c81f72628c8b8a896040518085815260200184815260200183815260200182815260200194505050505060405180910390a260008b11156129f4576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156129ad57600080fd5b505af11580156129c1573d6000803e3d6000fd5b505050506040513d60208110156129d757600080fd5b810190808051906020019092919050505015156129f357600080fd5b5b6000871115612b08576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612ac157600080fd5b505af1158015612ad5573d6000803e3d6000fd5b505050506040513d6020811015612aeb57600080fd5b81019080805190602001909291905050501515612b0757600080fd5b5b50505050505050505050505050565b8760016004811115612b2557fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115612b5457fe5b141515612b6057600080fd5b6000806000808a111515612b7357600080fd5b8843101515612b8157600080fd5b612bd28c8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613699565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612c0b57600080fd5b612c5c8c8c8c8c8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613699565b9050612c688b82612504565b8c141515612c7557600080fd5b6000600960008e8152602001908152602001600020905060008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000015482600001540195508581600101548e0111151515612d3857600080fd5b80600101548d018d11151515612d4d57600080fd5b81600101548d0394508c8511151515612d6557600080fd5b600085111515612d7457600080fd5b8c85836001015401141515612d8557fe5b8d73ffffffffffffffffffffffffffffffffffffffff168f7f98ed0357b86b313fa9f968de5c9d2bcf591432355b34aa1ab7e3e9e92f4284088f6040518082815260200191505060405180910390a38c82600101819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8f876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612ea157600080fd5b505af1158015612eb5573d6000803e3d6000fd5b505050506040513d6020811015612ecb57600080fd5b81019080805190602001909291905050501515612ee757600080fd5b81600001548610151515612ef757fe5b80600001548610151515612f0757fe5b60008260040154141515612f1757fe5b60008160040154141515612f2757fe5b505050505050505050505050505050565b600860149054906101000a900460ff1681565b60035481565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612ff08c8c8c613347565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b6130618989612504565b8a14151561306e57600080fd5b6000600102871415151561308157600080fd5b60008611151561309057600080fd5b6000806000600960008e81526020019081526020016000209050600260048111156130b757fe5b8160010160009054906101000a900460ff1660048111156130d457fe5b1415156130e057600080fd5b438160000154101515156130f357600080fd5b61318b60028e8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506138aa565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff161415156131c757600080fd5b6132188d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506134c3565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614151561325457600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff1615156132b657600080fd5b6132c2828e8c8e613ad6565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f6fc5b4f4f9e65bfdc4c45456373906876cee8832b605478e281902468875eaed8e6040518082815260200191505060405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561338457600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b600080600083519050600060608281151561345157fe5b0614151561345e57600080fd5b6000806000806000602094505b8585101561348f5761347d8986613d1f565b9250828401935060608501945061346b565b88805190602001209050808497509750505050505050915091565b60008183116134b957826134bb565b815b905092915050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546001600681111561354957fe5b8c8c8c8c604051602001808a805190602001908083835b6020831015156135855780518252602082019150602081019050602083039250613560565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156135d857805182526020820191506020810190506020830392506135b3565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401878152602001868152602001858152602001848152602001838152602001828152602001995050505050505050505060405160208183030381529060405280519060200120905061368c8185613e49565b9250505095945050505050565b600060606040805190810160405280600381526020017f3230300000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546003600681111561371f57fe5b8c8c8c8c604051602001808a805190602001908083835b60208310151561375b5780518252602082019150602081019050602083039250613736565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156137ae5780518252602082019150602081019050602083039250613789565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401838152602001828152602001995050505050505050505060405160208183030381529060405280519060200120905061389d8185613e49565b9250505095945050505050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002548d600681111561392f57fe5b8d8d8d8d8d604051602001808b805190602001908083835b60208310151561396c5780518252602082019150602081019050602083039250613947565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b6020831015156139bf578051825260208201915060208101905060208303925061399a565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b602083101515613a775780518252602082019150602081019050602083039250613a52565b6001836020036101000a0380198251168184511680821785525050505050509050019a5050505050505050505050604051602081830303815290604052805190602001209050613ac78185613e49565b92505050979650505050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806004015483111515613b2d57600080fd5b8281600401819055508181600301819055505050505050565b6000806001028560030154148015613b5e5750600084145b8015613b6a5750600083145b15613b785760019050613bb8565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b6000806000806000806000613bd3614077565b613bdb614077565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a81604001818152505089816060018181525050613c458f8d613f5c565b9250613c518282613f7d565b9450613c5d85846134aa565b94508483039350613c6e858b614011565b809b508196505050613c80848e614011565b809e508195505050828511151515613c9457fe5b828411151515613ca057fe5b898d858701010183141515613cb157fe5b84848e8c985098509850985050505050509650965096509692505050565b6000821415613cdd57613d18565b6000613cea868686613347565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b6000806000806000858751111515613d3e576000945050505050613e43565b858701519350602086018701519250604086018701519050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015613de557600080fd5b505afa158015613df9573d6000803e3d6000fd5b505050506040513d6020811015613e0f57600080fd5b810190808051906020019092919050505091506000821480613e315750818411155b15613e3b57600092505b829450505050505b92915050565b600060418251141515613e5b57600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff161015613e8b57601b810190505b601b8160ff161480613ea05750601c8160ff16145b1515613eab57600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613f08573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613f5057600080fd5b83935050505092915050565b60008160010154836001015483600001548560000154010303905092915050565b6000806000806000613f9787604001518860600151614036565b9350613fab86604001518760600151614036565b9250838310151515613fbc57600080fd5b86604001518410151515613fcc57fe5b85604001518310151515613fdc57fe5b8383039150613fef828860000151614036565b9050613fff818860200151614011565b50809150508094505050505092915050565b6000808284116140265760008481915061402b565b828403835b915091509250929050565b60008082840190508381101561406c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61406e565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a72305820fdc2d4a389e801e76ef6b04a1fafa9669bf902f52d8f4fcd409b2e7432ae1ec40029", + "bin-runtime": "608060405234801561001057600080fd5b5060043610610202576000357c0100000000000000000000000000000000000000000000000000000000900480637709bc781161012c5780639e67ca5f116100bf578063ee4516d91161008e578063ee4516d91461102c578063fadc554b146110dc578063fc0c546a14611213578063fe49ba1c1461125d57610202565b80639e67ca5f14610e89578063b7506d7014610f95578063b8378f7514610fb7578063e5949b5d14610fd557610202565b806387234237116100fb5780638723423714610b1c5780638c81cd9a14610b9f578063938bcd6714610d665780639cadb15914610dde57610202565b80637709bc78146107f65780637c4734f41461085257806382fd7795146108ca578063838d6e0514610a8557610202565b80633af973b1116101a457806363ea01431161017357806363ea01431461060957806365c9a8ff14610681578063679b3763146107ba57806371e75992146107d857610202565b80633af973b11461056d5780634845be761461058b578063524bef8a146105a95780635d6e441b146105eb57610202565b80630fcc0c28116101e05780630fcc0c28146104b1578063224df42f146104bb57806323aa8174146104d957806324d73a931461052357610202565b806303d9d25314610207578063058686871461030c5780630a798f241461042f575b600080fd5b61030a6004803603608081101561021d57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561028457600080fd5b82018360208201111561029657600080fd5b803590602001918460018302840111640100000000831117156102b857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506112df565b005b6103ed600480360360a081101561032257600080fd5b81019080803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561036757600080fd5b82018360208201111561037957600080fd5b8035906020019184600183028401116401000000008311171561039b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061169d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61049b6004803603606081101561044557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506116b7565b6040518082815260200191505060405180910390f35b6104b961195d565b005b6104c3611a42565b6040518082815260200191505060405180910390f35b6104e1611a48565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61052b611a6e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610575611a94565b6040518082815260200191505060405180910390f35b610593611a9a565b6040518082815260200191505060405180910390f35b6105d5600480360360208110156105bf57600080fd5b8101908080359060200190929190505050611aa0565b6040518082815260200191505060405180910390f35b6105f3611ab8565b6040518082815260200191505060405180910390f35b61067f6004803603608081101561061f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611abe565b005b610778600480360360a081101561069757600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001906401000000008111156106f257600080fd5b82018360208201111561070457600080fd5b8035906020019184600183028401116401000000008311171561072657600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611f09565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6107c2611f23565b6040518082815260200191505060405180910390f35b6107e0611f29565b6040518082815260200191505060405180910390f35b6108386004803603602081101561080c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f4d565b604051808215151515815260200191505060405180910390f35b6108b46004803603604081101561086857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f60565b6040518082815260200191505060405180910390f35b610a8360048036036101008110156108e157600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561096657600080fd5b82018360208201111561097857600080fd5b8035906020019184600183028401116401000000008311171561099a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156109fd57600080fd5b820183602082011115610a0f57600080fd5b80359060200191846001830284011164010000000083111715610a3157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506121a2565b005b610af160048036036060811015610a9b57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123ba565b60405180838152602001826004811115610b0757fe5b60ff1681526020019250505060405180910390f35b610b246124ad565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b64578082015181840152602081019050610b49565b50505050905090810190601f168015610b915780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610d24600480360360e0811015610bb557600080fd5b81019080803560ff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610c0757600080fd5b820183602082011115610c1957600080fd5b80359060200191846001830284011164010000000083111715610c3b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610c9e57600080fd5b820183602082011115610cb057600080fd5b80359060200191846001830284011164010000000083111715610cd257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506124e6565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610dc860048036036040811015610d7c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612504565b6040518082815260200191505060405180910390f35b610e876004803603610120811015610df557600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506125e3565b005b610f93600480360360c0811015610e9f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610efa57600080fd5b820183602082011115610f0c57600080fd5b80359060200191846001830284011164010000000083111715610f2e57600080fd5b909192939192939080359060200190640100000000811115610f4f57600080fd5b820183602082011115610f6157600080fd5b80359060200191846001830284011164010000000083111715610f8357600080fd5b9091929391929390505050612b17565b005b610f9d612f38565b604051808215151515815260200191505060405180910390f35b610fbf612f4b565b6040518082815260200191505060405180910390f35b61100160048036036020811015610feb57600080fd5b8101908080359060200190929190505050612f51565b6040518083815260200182600481111561101757fe5b60ff1681526020019250505060405180910390f35b6110986004803603606081101561104257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f82565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b61121160048036036101008110156110f357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561117857600080fd5b82018360208201111561118a57600080fd5b803590602001918460018302840111640100000000831117156111ac57600080fd5b9091929391929390803590602001906401000000008111156111cd57600080fd5b8201836020820111156111df57600080fd5b8035906020019184600183028401116401000000008311171561120157600080fd5b9091929391929390505050613057565b005b61121b613322565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6112c96004803603606081101561127357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613347565b6040518082815260200191505060405180910390f35b6112e98383612504565b84141515156112f757600080fd5b6000600481111561130457fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff16600481111561133357fe5b14151561133f57600080fd5b60008060008060006113508661343a565b809450819550505061136389888a613347565b94506000600b600087815260200190815260200160002090508060010154925084816000015414151561139557600080fd5b6000831115156113a457600080fd5b6113ae84846134aa565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a46000841115611565576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561151e57600080fd5b505af1158015611532573d6000803e3d6000fd5b505050506040513d602081101561154857600080fd5b8101908080519060200190929190505050151561156457600080fd5b5b6000821115611679576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561163257600080fd5b505af1158015611646573d6000803e3d6000fd5b505050506040513d602081101561165c57600080fd5b8101908080519060200190929190505050151561167857600080fd5b5b81831015151561168557fe5b83831015151561169157fe5b50505050505050505050565b60006116ac86868686866134c3565b905095945050505050565b6000801515600860149054906101000a900460ff1615151415156116da57600080fd5b8160035481101515156116ec57600080fd5b60045481111515156116fd57600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156117bd57600080fd5b505afa1580156117d1573d6000803e3d6000fd5b505050506040513d60208110156117e757600080fd5b810190808051906020019092919050505010151561180457600080fd5b600160076000828254019250508190555060075490506118248787611f60565b91506000600a60008481526020019081526020016000205414151561184857600080fd5b80600a60008481526020019081526020016000208190555060006009600083815260200190815260200160002090506000816000015414151561188757fe5b6000600481111561189457fe5b8160010160009054906101000a900460ff1660048111156118b157fe5b1415156118ba57fe5b85816000018190555060018160010160006101000a81548160ff021916908360048111156118e457fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b60001515600860149054906101000a900460ff16151514151561197f57600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156119db57600080fd5b6001600860146101000a81548160ff0219169083151502179055507f6151930a846a85f5e64d2dd1cc5deeafb010c63eec4b600458158edd0e33f15d600860149054906101000a900460ff16604051808215151515815260200191505060405180910390a1565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b60001515600860149054906101000a900460ff161515141515611ae057600080fd5b8360016004811115611aee57fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115611b1d57fe5b141515611b2957600080fd5b611b338483612504565b85141515611b4057600080fd5b600083111515611b4f57600080fd5b6005548311151515611b6057600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050816000015488039450600085111515611c1c57600080fd5b878511151515611c2b57600080fd5b8785836000015401141515611c3c57fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfa57600080fd5b505afa158015611d0e573d6000803e3d6000fd5b505050506040513d6020811015611d2457600080fd5b81019080805190602001909291905050500111151515611d4357600080fd5b8782600001819055508060000154826000015401935081600001548410151515611d6c57600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611eb757600080fd5b505af1158015611ecb573d6000803e3d6000fd5b505050506040513d6020811015611ee157600080fd5b81019080805190602001909291905050501515611efd57600080fd5b50505050505050505050565b6000611f188686868686613699565b905095945050505050565b60075481565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611f9d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611fd957600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561201457600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1610156120f4578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014019250505060405160208183030381529060405280519060200120905061219c565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b87600160048111156121b057fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff1660048111156121df57fe5b1415156121eb57600080fd5b6121f58789612504565b8914151561220257600080fd5b600080600960008c8152602001908152602001600020905060028160010160006101000a81548160ff0219169083600481111561223b57fe5b021790555060018160020160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555043816000016000828254019250508190555060006122c160018d8b8b8b8b8b6138aa565b90508073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff161415156122fd57600080fd5b600088111561235c576123138c8a8a8a8a6134c3565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561234f57600080fd5b61235b82848a8c613ad6565b5b878a73ffffffffffffffffffffffffffffffffffffffff168d7f09d2f946e008c38931cd739dd20e35146deff8ab3134caee6d54fe50816a81b88c6040518082815260200191505060405180910390a4505050505050505050505050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff169050600060048111156123fa57fe5b81600481111561240657fe5b1480156124135750600089115b801561242157506007548911155b156124975760039050612435898989613347565b93506000600b600086815260200190815260200160002090506124598a898b613347565b93506000600b600086815260200190815260200160002090506000826001015414801561248a575060008160010154145b1561249457600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60006124f7888888888888886138aa565b9050979650505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561254157600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561257d57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156125b857600080fd5b60006125c48484611f60565b9050600a60008281526020019081526020016000205491505092915050565b6125ed8885612504565b891415156125fa57600080fd5b60006126068986611f60565b90506000600960008c815260200190815260200160002090506002600481111561262c57fe5b8160010160009054906101000a900460ff16600481111561264957fe5b14151561265557600080fd5b43816000015410151561266757600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506126fd828c8c8c613b46565b151561270857600080fd5b61271481888888613b46565b151561271f57600080fd5b61272d828c8c848b8b613bc0565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a6000858152602001908152602001600020600090556128838d8d8a8d8d613ccf565b6128908d898e8989613ccf565b8c7f8db0e7d323ca765ce9ab550780131837e4942ccfea3be2b635ec1084c81f72628c8b8a896040518085815260200184815260200183815260200182815260200194505050505060405180910390a260008b11156129f4576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156129ad57600080fd5b505af11580156129c1573d6000803e3d6000fd5b505050506040513d60208110156129d757600080fd5b810190808051906020019092919050505015156129f357600080fd5b5b6000871115612b08576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612ac157600080fd5b505af1158015612ad5573d6000803e3d6000fd5b505050506040513d6020811015612aeb57600080fd5b81019080805190602001909291905050501515612b0757600080fd5b5b50505050505050505050505050565b8760016004811115612b2557fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115612b5457fe5b141515612b6057600080fd5b6000806000808a111515612b7357600080fd5b8843101515612b8157600080fd5b612bd28c8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613699565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612c0b57600080fd5b612c5c8c8c8c8c8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613699565b9050612c688b82612504565b8c141515612c7557600080fd5b6000600960008e8152602001908152602001600020905060008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000015482600001540195508581600101548e0111151515612d3857600080fd5b80600101548d018d11151515612d4d57600080fd5b81600101548d0394508c8511151515612d6557600080fd5b600085111515612d7457600080fd5b8c85836001015401141515612d8557fe5b8d73ffffffffffffffffffffffffffffffffffffffff168f7f98ed0357b86b313fa9f968de5c9d2bcf591432355b34aa1ab7e3e9e92f4284088f6040518082815260200191505060405180910390a38c82600101819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8f876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612ea157600080fd5b505af1158015612eb5573d6000803e3d6000fd5b505050506040513d6020811015612ecb57600080fd5b81019080805190602001909291905050501515612ee757600080fd5b81600001548610151515612ef757fe5b80600001548610151515612f0757fe5b60008260040154141515612f1757fe5b60008160040154141515612f2757fe5b505050505050505050505050505050565b600860149054906101000a900460ff1681565b60035481565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612ff08c8c8c613347565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b6130618989612504565b8a14151561306e57600080fd5b6000600102871415151561308157600080fd5b60008611151561309057600080fd5b6000806000600960008e81526020019081526020016000209050600260048111156130b757fe5b8160010160009054906101000a900460ff1660048111156130d457fe5b1415156130e057600080fd5b438160000154101515156130f357600080fd5b61318b60028e8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506138aa565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff161415156131c757600080fd5b6132188d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506134c3565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff1614151561325457600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff1615156132b657600080fd5b6132c2828e8c8e613ad6565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f6fc5b4f4f9e65bfdc4c45456373906876cee8832b605478e281902468875eaed8e6040518082815260200191505060405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561338457600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b600080600083519050600060608281151561345157fe5b0614151561345e57600080fd5b6000806000806000602094505b8585101561348f5761347d8986613d1f565b9250828401935060608501945061346b565b88805190602001209050808497509750505050505050915091565b60008183116134b957826134bb565b815b905092915050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546001600681111561354957fe5b8c8c8c8c604051602001808a805190602001908083835b6020831015156135855780518252602082019150602081019050602083039250613560565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156135d857805182526020820191506020810190506020830392506135b3565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401878152602001868152602001858152602001848152602001838152602001828152602001995050505050505050505060405160208183030381529060405280519060200120905061368c8185613e49565b9250505095945050505050565b600060606040805190810160405280600381526020017f3230300000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546003600681111561371f57fe5b8c8c8c8c604051602001808a805190602001908083835b60208310151561375b5780518252602082019150602081019050602083039250613736565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156137ae5780518252602082019150602081019050602083039250613789565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401838152602001828152602001995050505050505050505060405160208183030381529060405280519060200120905061389d8185613e49565b9250505095945050505050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002548d600681111561392f57fe5b8d8d8d8d8d604051602001808b805190602001908083835b60208310151561396c5780518252602082019150602081019050602083039250613947565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b6020831015156139bf578051825260208201915060208101905060208303925061399a565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b602083101515613a775780518252602082019150602081019050602083039250613a52565b6001836020036101000a0380198251168184511680821785525050505050509050019a5050505050505050505050604051602081830303815290604052805190602001209050613ac78185613e49565b92505050979650505050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806004015483111515613b2d57600080fd5b8281600401819055508181600301819055505050505050565b6000806001028560030154148015613b5e5750600084145b8015613b6a5750600083145b15613b785760019050613bb8565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b6000806000806000806000613bd3614077565b613bdb614077565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a81604001818152505089816060018181525050613c458f8d613f5c565b9250613c518282613f7d565b9450613c5d85846134aa565b94508483039350613c6e858b614011565b809b508196505050613c80848e614011565b809e508195505050828511151515613c9457fe5b828411151515613ca057fe5b898d858701010183141515613cb157fe5b84848e8c985098509850985050505050509650965096509692505050565b6000821415613cdd57613d18565b6000613cea868686613347565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b6000806000806000858751111515613d3e576000945050505050613e43565b858701519350602086018701519250604086018701519050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015613de557600080fd5b505afa158015613df9573d6000803e3d6000fd5b505050506040513d6020811015613e0f57600080fd5b810190808051906020019092919050505091506000821480613e315750818411155b15613e3b57600092505b829450505050505b92915050565b600060418251141515613e5b57600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff161015613e8b57601b810190505b601b8160ff161480613ea05750601c8160ff16145b1515613eab57600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613f08573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613f5057600080fd5b83935050505092915050565b60008160010154836001015483600001548560000154010303905092915050565b6000806000806000613f9787604001518860600151614036565b9350613fab86604001518760600151614036565b9250838310151515613fbc57600080fd5b86604001518410151515613fcc57fe5b85604001518310151515613fdc57fe5b8383039150613fef828860000151614036565b9050613fff818860200151614011565b50809150508094505050505092915050565b6000808284116140265760008481915061402b565b828403835b915091509250929050565b60008082840190508381101561406c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61406e565b805b91505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a72305820fdc2d4a389e801e76ef6b04a1fafa9669bf902f52d8f4fcd409b2e7432ae1ec40029", + "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"address\"},{\"name\":\"sender\",\"type\":\"address\"},{\"name\":\"locks\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"recoverAddressFromBalanceProofPublic\",\"outputs\":[{\"name\":\"signature_address\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"openChannel\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"deprecate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_max\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"deprecation_executor\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"secret_registry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"chain_id\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token_network_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"participants_hash_to_channel_identifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_participant_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"total_deposit\",\"type\":\"uint256\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"setTotalDeposit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"total_withdraw\",\"type\":\"uint256\"},{\"name\":\"expiration_block\",\"type\":\"uint256\"},{\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"recoverAddressFromWithdrawMessagePublic\",\"outputs\":[{\"name\":\"signature_address\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_counter\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_SAFE_UINT256\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contract_address\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getParticipantsHash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"}],\"name\":\"closeChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"}],\"name\":\"getChannelInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"signature_prefix\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"message_type_id\",\"type\":\"uint8\"},{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"}],\"name\":\"recoverAddressFromBalanceProofCounterSignaturePublic\",\"outputs\":[{\"name\":\"signature_address\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant1_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locksroot\",\"type\":\"bytes32\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"participant2_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locksroot\",\"type\":\"bytes32\"}],\"name\":\"settleChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"total_withdraw\",\"type\":\"uint256\"},{\"name\":\"expiration_block\",\"type\":\"uint256\"},{\"name\":\"participant_signature\",\"type\":\"bytes\"},{\"name\":\"partner_signature\",\"type\":\"bytes\"}],\"name\":\"setTotalWithdraw\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"safety_deprecation_switch\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_min\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"channels\",\"outputs\":[{\"name\":\"settle_block_number\",\"type\":\"uint256\"},{\"name\":\"state\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelParticipantInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bool\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"}],\"name\":\"updateNonClosingBalanceProof\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"getUnlockIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_token_address\",\"type\":\"address\"},{\"name\":\"_secret_registry\",\"type\":\"address\"},{\"name\":\"_chain_id\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_min\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_max\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant1\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"participant2\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"ChannelOpened\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"total_deposit\",\"type\":\"uint256\"}],\"name\":\"ChannelNewDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"new_value\",\"type\":\"bool\"}],\"name\":\"DeprecationSwitch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"total_withdraw\",\"type\":\"uint256\"}],\"name\":\"ChannelWithdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"balance_hash\",\"type\":\"bytes32\"}],\"name\":\"ChannelClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"locksroot\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"unlocked_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"returned_tokens\",\"type\":\"uint256\"}],\"name\":\"ChannelUnlocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"balance_hash\",\"type\":\"bytes32\"}],\"name\":\"NonClosingBalanceProofUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant1_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant1_locksroot\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"participant2_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant2_locksroot\",\"type\":\"bytes32\"}],\"name\":\"ChannelSettled\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"closeChannel(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"closing_participant\":\"Channel participant who closes the channel.\",\"closing_signature\":\"Closing participant's signature of the balance proof data.\",\"non_closing_participant\":\"Channel partner of the `closing_participant`, who provided the balance proof.\",\"non_closing_signature\":\"Non-closing participant's signature of the balance proof data.\",\"nonce\":\"Strictly monotonic value used to order transfers.\"}},\"contractExists(address)\":{\"params\":{\"contract_address\":\"The address to check whether a contract is deployed or not\"},\"return\":\"True if a contract exists, false otherwise\"},\"getChannelIdentifier(address,address)\":{\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"},\"return\":\"Unique identifier for the channel. It can be 0 if channel does not exist.\"},\"getChannelInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Address of a channel participant.\",\"participant2\":\"Address of the other channel participant.\"},\"return\":\"Channel settle_block_number and state.\"},\"getChannelParticipantInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Address of the channel participant whose data will be returned.\",\"partner\":\"Address of the channel partner.\"},\"return\":\"Participant's deposit, withdrawn_amount, whether the participant has called `closeChannel` or not, balance_hash, nonce, locksroot, locked_amount.\"},\"getParticipantsHash(address,address)\":{\"details\":\"Get the hash of the participant addresses, ordered lexicographically.\",\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"}},\"getUnlockIdentifier(uint256,address,address)\":{\"details\":\"Get the hash of the channel identifier and the participant addresses (whose ordering matters). The hash might be useful for the receiver to look up the appropriate UnlockData to claim.\",\"params\":{\"channel_identifier\":\"Identifier for the channel which the UnlockData is about.\",\"receiver\":\"Receiver of the pending transfers that the UnlockData represents.\",\"sender\":\"Sender of the pending transfers that the UnlockData represents.\"}},\"openChannel(address,address,uint256)\":{\"params\":{\"participant1\":\"Ethereum address of a channel participant.\",\"participant2\":\"Ethereum address of the other channel participant.\",\"settle_timeout\":\"Number of blocks that need to be mined between a call to closeChannel and settleChannel.\"}},\"setTotalDeposit(uint256,address,uint256,address)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Channel participant whose deposit is being set.\",\"partner\":\"Channel partner address, needed to compute the total channel deposit.\",\"total_deposit\":\"The total amount of tokens that the participant will have as a deposit.\"}},\"setTotalWithdraw(uint256,address,uint256,uint256,bytes,bytes)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Channel participant, who will receive the withdrawn amount.\",\"participant_signature\":\"Participant's signature on the withdraw data.\",\"partner_signature\":\"Partner's signature on the withdraw data.\",\"total_withdraw\":\"Total amount of tokens that are marked as withdrawn from the channel during the channel lifecycle.\"}},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Channel participant.\",\"participant1_locked_amount\":\"Amount of tokens owed by `participant1` to `participant2`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant1_locksroot\":\"The latest known hash of the pending hash-time locks of `participant1`, used to validate the unlocked proofs. If no balance_hash has been submitted, locksroot is ignored.\",\"participant1_transferred_amount\":\"The latest known amount of tokens transferred from `participant1` to `participant2`.\",\"participant2\":\"Other channel participant.\",\"participant2_locked_amount\":\"Amount of tokens owed by `participant2` to `participant1`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant2_locksroot\":\"The latest known hash of the pending hash-time locks of `participant2`, used to validate the unlocked proofs. If no balance_hash has been submitted, locksroot is ignored.\",\"participant2_transferred_amount\":\"The latest known amount of tokens transferred from `participant2` to `participant1`.\"}},\"unlock(uint256,address,address,bytes)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"locks\":\"All pending locks concatenated in order of creation. that `sender` sent to `receiver`.\",\"receiver\":\"Address who will receive the claimable unlocked tokens.\",\"sender\":\"Address who sent the pending transfers and will receive the unclaimable unlocked tokens.\"}},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"closing_participant\":\"Channel participant who closed the channel.\",\"closing_signature\":\"Closing participant's signature of the balance proof data.\",\"non_closing_participant\":\"Channel participant who needs to update the balance proof.\",\"non_closing_signature\":\"Non-closing participant signature of the balance proof data.\",\"nonce\":\"Strictly monotonic value used to order transfers.\"}}}},\"userdoc\":{\"methods\":{\"closeChannel(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"notice\":\"Close the channel defined by the two participant addresses. Anybody can call this function on behalf of a participant (called the closing participant), providing a balance proof signed by both parties. Callable only once.\"},\"contractExists(address)\":{\"notice\":\"Check if a contract exists\"},\"getChannelIdentifier(address,address)\":{\"notice\":\"Returns the unique identifier for the channel given by the contract.\"},\"getChannelInfo(uint256,address,address)\":{\"notice\":\"The contract cannot really distinguish Settled and Removed states, especially when wrong participants are given as input. The contract does not remember the participants of the channel.\"},\"openChannel(address,address,uint256)\":{\"notice\":\"Opens a new channel between `participant1` and `participant2`. Can be called by anyone.\"},\"setTotalDeposit(uint256,address,uint256,address)\":{\"notice\":\"Sets the channel participant total deposit value. Can be called by anyone.\"},\"setTotalWithdraw(uint256,address,uint256,uint256,bytes,bytes)\":{\"notice\":\"Allows `participant` to withdraw tokens from the channel that he has with `partner`, without closing it. Can be called by anyone. Can only be called once per each signed withdraw message.\"},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"notice\":\"Settles the balance between the two parties. Note that arguments order counts: `participant1_transferred_amount + participant1_locked_amount` <= `participant2_transferred_amount + participant2_locked_amount`\"},\"unlock(uint256,address,address,bytes)\":{\"notice\":\"Unlocks all pending off-chain transfers from `sender` to `receiver` and sends the locked tokens corresponding to locks with secrets registered on-chain to the `receiver`. Locked tokens corresponding to locks where the secret was not revealed on-chain will return to the `sender`. Anyone can call unlock.\"},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"notice\":\"Called on a closed channel, the function allows the non-closing participant to provide the last balance proof, which modifies the closing participant's state. Can be called multiple times by anyone.\"}}}},\"settings\":{\"compilationTarget\":{\"data/source/test/TokenNetworkInternalsTest.sol\":\"TokenNetworkSignatureTest\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":.=.\",\":lib=data/source/lib\",\":raiden=data/source/raiden\",\":services=data/source/services\",\":test=data/source/test\"]},\"sources\":{\"data/source/lib/ECVerify.sol\":{\"keccak256\":\"0x8bb402baa478eb53252d77b63982e12685adda290cf4dfa1d8f510284f8df3e9\",\"urls\":[\"bzzr://474c3db1bb54bb831c32eb2ab67a0e870489994bd4d4b8a8fa24b54935211d43\"]},\"data/source/raiden/SecretRegistry.sol\":{\"keccak256\":\"0xb8078bc048ccdeb7c58026754f22fc378baf3b24090db0f17d10bda6cd4951b4\",\"urls\":[\"bzzr://f7a072330393a85a6a274ef526ac2ca0f8eb217bf5f48c18b3080be7ac3a7ede\"]},\"data/source/raiden/Token.sol\":{\"keccak256\":\"0x41b40819d7f6714550c742f48ce46daeb97255c08bc56e83bb9fde4fbe14c3b4\",\"urls\":[\"bzzr://a20e2bea336fb01584cf4dc80e77bb8db3c33666f77f840fd58559116849ae4b\"]},\"data/source/raiden/TokenNetwork.sol\":{\"keccak256\":\"0x8a0471fe654a6eabe757133f5c6b3b3a8d19acce975625d097192cc775d94bbe\",\"urls\":[\"bzzr://7c9b05aac5ab23979b7863a4b15421d28ac2b515b673c0b0d296c580b60cde86\"]},\"data/source/raiden/Utils.sol\":{\"keccak256\":\"0x602fd914e5644696d3c5d42e3a39fe6f16e7ddcc93f8864aa7e368a70cb56d0b\",\"urls\":[\"bzzr://b884810b9826074efb212a825d33409c35d9a159681690e821da3643052be3d1\"]},\"data/source/test/TokenNetworkInternalsTest.sol\":{\"keccak256\":\"0x8e81d3c0a95409085ede2f3bc74986a0348cfdb0ff47f7e18589397bd5960085\",\"urls\":[\"bzzr://2421f40e5bdc2d79549dde21fa8291d3b7c2510806f15e1183cdd79894c5341a\"]}},\"version\":1}" }, "TokenNetworkUtilsTest": { "abi": [ @@ -7249,9 +7253,9 @@ "type": "event" } ], - "bin": "60806040526000600860146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405160a0806200443d833981018060405260a08110156200004e57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050508484848484337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151515620000ec57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141515156200012957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156200016657600080fd5b6000861115156200017657600080fd5b6000851115156200018657600080fd5b84841115156200019557600080fd5b620001af88620003d9640100000000026401000000009004565b1515620001bb57600080fd5b620001d587620003d9640100000000026401000000009004565b1515620001e157600080fd5b600082111515620001f157600080fd5b6000811115156200020157600080fd5b8181101515156200021157600080fd5b876000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600281905550846003819055508360048190555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156200032d57600080fd5b505afa15801562000342573d6000803e3d6000fd5b505050506040513d60208110156200035957600080fd5b81019080805190602001909291905050501115156200037757600080fd5b82600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816005819055508060068190555050505050505050505050505050620003ec565b600080823b905060008111915050919050565b61404180620003fc6000396000f3fe608060405234801561001057600080fd5b506004361061022e576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610142578063b8378f75116100ca578063e5949b5d11610099578063e5949b5d14610ee2578063ee4516d914610f39578063fadc554b14610fe9578063fc0c546a14611120578063fe49ba1c1461116a5761022e565b8063b8378f7514610d84578063c6e2e7f914610da2578063d1ab77f214610dee578063e3fc99ce14610ec45761022e565b8063938bcd6711610111578063938bcd6714610ae05780639548bcef14610b585780639cadb15914610bab5780639e67ca5f14610c56578063b7506d7014610d625761022e565b80637c4734f41461079357806382fd77951461080b578063838d6e05146109c65780638723423714610a5d5761022e565b80633af973b1116101c557806363ea01431161019457806363ea014314610637578063679b3763146106af5780636f5450c2146106cd57806371e75992146107195780637709bc78146107375761022e565b80633af973b11461059b5780634845be76146105b9578063524bef8a146105d75780635d6e441b146106195761022e565b80631e6c80ad116102015780631e6c80ad1461049d578063224df42f146104e957806323aa81741461050757806324d73a93146105515761022e565b806303d9d253146102335780630a798f24146103385780630bcf5a70146103ba5780630fcc0c2814610493575b600080fd5b6103366004803603608081101561024957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156102b057600080fd5b8201836020820111156102c257600080fd5b803590602001918460018302840111640100000000831117156102e457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506111ec565b005b6103a46004803603606081101561034e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115aa565b6040518082815260200191505060405180910390f35b61047d600480360360408110156103d057600080fd5b81019080803590602001906401000000008111156103ed57600080fd5b8201836020820111156103ff57600080fd5b8035906020019184600183028401116401000000008311171561042157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611850565b6040518082815260200191505060405180910390f35b61049b611864565b005b6104d3600480360360408110156104b357600080fd5b810190808035906020019092919080359060200190929190505050611949565b6040518082815260200191505060405180910390f35b6104f161195d565b6040518082815260200191505060405180910390f35b61050f611963565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610559611989565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105a36119af565b6040518082815260200191505060405180910390f35b6105c16119b5565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b81019080803590602001909291905050506119bb565b6040518082815260200191505060405180910390f35b6106216119d3565b6040518082815260200191505060405180910390f35b6106ad6004803603608081101561064d57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119d9565b005b6106b7611e24565b6040518082815260200191505060405180910390f35b610703600480360360408110156106e357600080fd5b810190808035906020019092919080359060200190929190505050611e2a565b6040518082815260200191505060405180910390f35b610721611e3e565b6040518082815260200191505060405180910390f35b6107796004803603602081101561074d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e62565b604051808215151515815260200191505060405180910390f35b6107f5600480360360408110156107a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e75565b6040518082815260200191505060405180910390f35b6109c4600480360361010081101561082257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156108a757600080fd5b8201836020820111156108b957600080fd5b803590602001918460018302840111640100000000831117156108db57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561093e57600080fd5b82018360208201111561095057600080fd5b8035906020019184600183028401116401000000008311171561097257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506120b7565b005b610a32600480360360608110156109dc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122cd565b60405180838152602001826004811115610a4857fe5b60ff1681526020019250505060405180910390f35b610a656123c0565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610aa5578082015181840152602081019050610a8a565b50505050905090810190601f168015610ad25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b4260048036036040811015610af657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123f9565b6040518082815260200191505060405180910390f35b610b8e60048036036040811015610b6e57600080fd5b8101908080359060200190929190803590602001909291905050506124d8565b604051808381526020018281526020019250505060405180910390f35b610c546004803603610120811015610bc257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506124f0565b005b610d60600480360360c0811015610c6c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610cc757600080fd5b820183602082011115610cd957600080fd5b80359060200191846001830284011164010000000083111715610cfb57600080fd5b909192939192939080359060200190640100000000811115610d1c57600080fd5b820183602082011115610d2e57600080fd5b80359060200191846001830284011164010000000083111715610d5057600080fd5b9091929391929390505050612a24565b005b610d6a612e45565b604051808215151515815260200191505060405180910390f35b610d8c612e58565b6040518082815260200191505060405180910390f35b610dd860048036036040811015610db857600080fd5b810190808035906020019092919080359060200190929190505050612e5e565b6040518082815260200191505060405180910390f35b610ea760048036036020811015610e0457600080fd5b8101908080359060200190640100000000811115610e2157600080fd5b820183602082011115610e3357600080fd5b80359060200191846001830284011164010000000083111715610e5557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612e72565b604051808381526020018281526020019250505060405180910390f35b610ecc612e87565b6040518082815260200191505060405180910390f35b610f0e60048036036020811015610ef857600080fd5b8101908080359060200190929190505050612eaf565b60405180838152602001826004811115610f2457fe5b60ff1681526020019250505060405180910390f35b610fa560048036036060811015610f4f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ee0565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b61111e600480360361010081101561100057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561108557600080fd5b82018360208201111561109757600080fd5b803590602001918460018302840111640100000000831117156110b957600080fd5b9091929391929390803590602001906401000000008111156110da57600080fd5b8201836020820111156110ec57600080fd5b8035906020019184600183028401116401000000008311171561110e57600080fd5b9091929391929390505050612fb5565b005b61112861327e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6111d66004803603606081101561118057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132a3565b6040518082815260200191505060405180910390f35b6111f683836123f9565b841415151561120457600080fd5b6000600481111561121157fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff16600481111561124057fe5b14151561124c57600080fd5b600080600080600061125d86613396565b809450819550505061127089888a6132a3565b94506000600b60008781526020019081526020016000209050806001015492508481600001541415156112a257600080fd5b6000831115156112b157600080fd5b6112bb8484613406565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a46000841115611472576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561142b57600080fd5b505af115801561143f573d6000803e3d6000fd5b505050506040513d602081101561145557600080fd5b8101908080519060200190929190505050151561147157600080fd5b5b6000821115611586576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561153f57600080fd5b505af1158015611553573d6000803e3d6000fd5b505050506040513d602081101561156957600080fd5b8101908080519060200190929190505050151561158557600080fd5b5b81831015151561159257fe5b83831015151561159e57fe5b50505050505050505050565b6000801515600860149054906101000a900460ff1615151415156115cd57600080fd5b8160035481101515156115df57600080fd5b60045481111515156115f057600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156116b057600080fd5b505afa1580156116c4573d6000803e3d6000fd5b505050506040513d60208110156116da57600080fd5b81019080805190602001909291905050501015156116f757600080fd5b600160076000828254019250508190555060075490506117178787611e75565b91506000600a60008481526020019081526020016000205414151561173b57600080fd5b80600a60008481526020019081526020016000208190555060006009600083815260200190815260200160002090506000816000015414151561177a57fe5b6000600481111561178757fe5b8160010160009054906101000a900460ff1660048111156117a457fe5b1415156117ad57fe5b85816000018190555060018160010160006101000a81548160ff021916908360048111156117d757fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b600061185c838361341f565b905092915050565b60001515600860149054906101000a900460ff16151514151561188657600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156118e257600080fd5b6001600860146101000a81548160ff0219169083151502179055507f6151930a846a85f5e64d2dd1cc5deeafb010c63eec4b600458158edd0e33f15d600860149054906101000a900460ff16604051808215151515815260200191505060405180910390a1565b60006119558383613549565b905092915050565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b60001515600860149054906101000a900460ff1615151415156119fb57600080fd5b8360016004811115611a0957fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115611a3857fe5b141515611a4457600080fd5b611a4e84836123f9565b85141515611a5b57600080fd5b600083111515611a6a57600080fd5b6005548311151515611a7b57600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050816000015488039450600085111515611b3757600080fd5b878511151515611b4657600080fd5b8785836000015401141515611b5757fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611c1557600080fd5b505afa158015611c29573d6000803e3d6000fd5b505050506040513d6020811015611c3f57600080fd5b81019080805190602001909291905050500111151515611c5e57600080fd5b8782600001819055508060000154826000015401935081600001548410151515611c8757600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611dd257600080fd5b505af1158015611de6573d6000803e3d6000fd5b505050506040513d6020811015611dfc57600080fd5b81019080805190602001909291905050501515611e1857600080fd5b50505050505050505050565b60075481565b6000611e368383613562565b905092915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611eb257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611eee57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611f2957600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015612009578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090506120b1565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b87600160048111156120c557fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff1660048111156120f457fe5b14151561210057600080fd5b61210a87896123f9565b8914151561211757600080fd5b600080600960008c8152602001908152602001600020905060028160010160006101000a81548160ff0219169083600481111561215057fe5b021790555060018160020160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555043816000016000828254019250508190555060006121d48c8a8a8a8a8a6135a3565b90508073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614151561221057600080fd5b600088111561226f576122268c8a8a8a8a6137cf565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561226257600080fd5b61226e82848a8c6139a5565b5b878a73ffffffffffffffffffffffffffffffffffffffff168d7f09d2f946e008c38931cd739dd20e35146deff8ab3134caee6d54fe50816a81b88c6040518082815260200191505060405180910390a4505050505050505050505050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff1690506000600481111561230d57fe5b81600481111561231957fe5b1480156123265750600089115b801561233457506007548911155b156123aa57600390506123488989896132a3565b93506000600b6000868152602001908152602001600020905061236c8a898b6132a3565b93506000600b600086815260200190815260200160002090506000826001015414801561239d575060008160010154145b156123a757600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561243657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561247257600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156124ad57600080fd5b60006124b98484611e75565b9050600a60008281526020019081526020016000205491505092915050565b6000806124e58484613a15565b915091509250929050565b6124fa88856123f9565b8914151561250757600080fd5b60006125138986611e75565b90506000600960008c815260200190815260200160002090506002600481111561253957fe5b8160010160009054906101000a900460ff16600481111561255657fe5b14151561256257600080fd5b43816000015410151561257457600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061260a828c8c8c613a3a565b151561261557600080fd5b61262181888888613a3a565b151561262c57600080fd5b61263a828c8c848b8b613ab4565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a6000858152602001908152602001600020600090556127908d8d8a8d8d613bc3565b61279d8d898e8989613bc3565b8c7f8db0e7d323ca765ce9ab550780131837e4942ccfea3be2b635ec1084c81f72628c8b8a896040518085815260200184815260200183815260200182815260200194505050505060405180910390a260008b1115612901576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156128ba57600080fd5b505af11580156128ce573d6000803e3d6000fd5b505050506040513d60208110156128e457600080fd5b8101908080519060200190929190505050151561290057600080fd5b5b6000871115612a15576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156129ce57600080fd5b505af11580156129e2573d6000803e3d6000fd5b505050506040513d60208110156129f857600080fd5b81019080805190602001909291905050501515612a1457600080fd5b5b50505050505050505050505050565b8760016004811115612a3257fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115612a6157fe5b141515612a6d57600080fd5b6000806000808a111515612a8057600080fd5b8843101515612a8e57600080fd5b612adf8c8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613c13565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612b1857600080fd5b612b698c8c8c8c8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613c13565b9050612b758b826123f9565b8c141515612b8257600080fd5b6000600960008e8152602001908152602001600020905060008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000015482600001540195508581600101548e0111151515612c4557600080fd5b80600101548d018d11151515612c5a57600080fd5b81600101548d0394508c8511151515612c7257600080fd5b600085111515612c8157600080fd5b8c85836001015401141515612c9257fe5b8d73ffffffffffffffffffffffffffffffffffffffff168f7f98ed0357b86b313fa9f968de5c9d2bcf591432355b34aa1ab7e3e9e92f4284088f6040518082815260200191505060405180910390a38c82600101819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8f876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612dae57600080fd5b505af1158015612dc2573d6000803e3d6000fd5b505050506040513d6020811015612dd857600080fd5b81019080805190602001909291905050501515612df457600080fd5b81600001548610151515612e0457fe5b80600001548610151515612e1457fe5b60008260040154141515612e2457fe5b60008160040154141515612e3457fe5b505050505050505050505050505050565b600860149054906101000a900460ff1681565b60035481565b6000612e6a8383613406565b905092915050565b600080612e7e83613396565b91509150915091565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905090565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612f4e8c8c8c6132a3565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b612fbf89896123f9565b8a141515612fcc57600080fd5b60006001028714151515612fdf57600080fd5b600086111515612fee57600080fd5b6000806000600960008e815260200190815260200160002090506002600481111561301557fe5b8160010160009054906101000a900460ff16600481111561303257fe5b14151561303e57600080fd5b4381600001541015151561305157600080fd5b6130e78d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506135a3565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561312357600080fd5b6131748d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506137cf565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff161415156131b057600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff16151561321257600080fd5b61321e828e8c8e6139a5565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f6fc5b4f4f9e65bfdc4c45456373906876cee8832b605478e281902468875eaed8e6040518082815260200191505060405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156132e057600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b60008060008351905060006060828115156133ad57fe5b061415156133ba57600080fd5b6000806000806000602094505b858510156133eb576133d9898661341f565b925082840193506060850194506133c7565b88805190602001209050808497509750505050505050915091565b60008183116134155782613417565b815b905092915050565b600080600080600085875111151561343e576000945050505050613543565b858701519350602086018701519250604086018701519050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b1580156134e557600080fd5b505afa1580156134f9573d6000803e3d6000fd5b505050506040513d602081101561350f57600080fd5b8101908080519060200190929190505050915060008214806135315750818411155b1561353b57600092505b829450505050505b92915050565b6000818311613558578161355a565b825b905092915050565b600080828401905083811015613598577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61359a565b805b91505092915050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546002600681111561362957fe5b8d8d8d8d8d604051602001808b805190602001908083835b6020831015156136665780518252602082019150602081019050602083039250613641565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b6020831015156136b95780518252602082019150602081019050602083039250613694565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b602083101515613771578051825260208201915060208101905060208303925061374c565b6001836020036101000a0380198251168184511680821785525050505050509050019a50505050505050505050506040516020818303038152906040528051906020012090506137c18185613e24565b925050509695505050505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546001600681111561385557fe5b8c8c8c8c604051602001808a805190602001908083835b602083101515613891578051825260208201915060208101905060208303925061386c565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156138e457805182526020820191506020810190506020830392506138bf565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140187815260200186815260200185815260200184815260200183815260200182815260200199505050505050505050506040516020818303038152906040528051906020012090506139988185613e24565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060040154831115156139fc57600080fd5b8281600401819055508181600301819055505050505050565b600080828411613a2a57600084819150613a2f565b828403835b915091509250929050565b6000806001028560030154148015613a525750600084145b8015613a5e5750600083145b15613a6c5760019050613aac565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b6000806000806000806000613ac7613fec565b613acf613fec565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a81604001818152505089816060018181525050613b398f8d613f37565b9250613b458282613f58565b9450613b518584613406565b94508483039350613b62858b613a15565b809b508196505050613b74848e613a15565b809e508195505050828511151515613b8857fe5b828411151515613b9457fe5b898d858701010183141515613ba557fe5b84848e8c985098509850985050505050509650965096509692505050565b6000821415613bd157613c0c565b6000613bde8686866132a3565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3230300000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a000000000000815250823060025460036006811115613c9957fe5b8c8c8c8c604051602001808a805190602001908083835b602083101515613cd55780518252602082019150602081019050602083039250613cb0565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b602083101515613d285780518252602082019150602081019050602083039250613d03565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050613e178185613e24565b9250505095945050505050565b600060418251141515613e3657600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff161015613e6657601b810190505b601b8160ff161480613e7b5750601c8160ff16145b1515613e8657600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613ee3573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613f2b57600080fd5b83935050505092915050565b60008160010154836001015483600001548560000154010303905092915050565b6000806000806000613f7287604001518860600151613562565b9350613f8686604001518760600151613562565b9250838310151515613f9757600080fd5b86604001518410151515613fa757fe5b85604001518310151515613fb757fe5b8383039150613fca828860000151613562565b9050613fda818860200151613a15565b50809150508094505050505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a72305820dab6a8c4e98163c1656c7a59e821fe043fa1aa06ca14780107646a48bcf2291f0029", - "bin-runtime": "608060405234801561001057600080fd5b506004361061022e576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610142578063b8378f75116100ca578063e5949b5d11610099578063e5949b5d14610ee2578063ee4516d914610f39578063fadc554b14610fe9578063fc0c546a14611120578063fe49ba1c1461116a5761022e565b8063b8378f7514610d84578063c6e2e7f914610da2578063d1ab77f214610dee578063e3fc99ce14610ec45761022e565b8063938bcd6711610111578063938bcd6714610ae05780639548bcef14610b585780639cadb15914610bab5780639e67ca5f14610c56578063b7506d7014610d625761022e565b80637c4734f41461079357806382fd77951461080b578063838d6e05146109c65780638723423714610a5d5761022e565b80633af973b1116101c557806363ea01431161019457806363ea014314610637578063679b3763146106af5780636f5450c2146106cd57806371e75992146107195780637709bc78146107375761022e565b80633af973b11461059b5780634845be76146105b9578063524bef8a146105d75780635d6e441b146106195761022e565b80631e6c80ad116102015780631e6c80ad1461049d578063224df42f146104e957806323aa81741461050757806324d73a93146105515761022e565b806303d9d253146102335780630a798f24146103385780630bcf5a70146103ba5780630fcc0c2814610493575b600080fd5b6103366004803603608081101561024957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156102b057600080fd5b8201836020820111156102c257600080fd5b803590602001918460018302840111640100000000831117156102e457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506111ec565b005b6103a46004803603606081101561034e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115aa565b6040518082815260200191505060405180910390f35b61047d600480360360408110156103d057600080fd5b81019080803590602001906401000000008111156103ed57600080fd5b8201836020820111156103ff57600080fd5b8035906020019184600183028401116401000000008311171561042157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611850565b6040518082815260200191505060405180910390f35b61049b611864565b005b6104d3600480360360408110156104b357600080fd5b810190808035906020019092919080359060200190929190505050611949565b6040518082815260200191505060405180910390f35b6104f161195d565b6040518082815260200191505060405180910390f35b61050f611963565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610559611989565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105a36119af565b6040518082815260200191505060405180910390f35b6105c16119b5565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b81019080803590602001909291905050506119bb565b6040518082815260200191505060405180910390f35b6106216119d3565b6040518082815260200191505060405180910390f35b6106ad6004803603608081101561064d57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119d9565b005b6106b7611e24565b6040518082815260200191505060405180910390f35b610703600480360360408110156106e357600080fd5b810190808035906020019092919080359060200190929190505050611e2a565b6040518082815260200191505060405180910390f35b610721611e3e565b6040518082815260200191505060405180910390f35b6107796004803603602081101561074d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e62565b604051808215151515815260200191505060405180910390f35b6107f5600480360360408110156107a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e75565b6040518082815260200191505060405180910390f35b6109c4600480360361010081101561082257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156108a757600080fd5b8201836020820111156108b957600080fd5b803590602001918460018302840111640100000000831117156108db57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561093e57600080fd5b82018360208201111561095057600080fd5b8035906020019184600183028401116401000000008311171561097257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506120b7565b005b610a32600480360360608110156109dc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122cd565b60405180838152602001826004811115610a4857fe5b60ff1681526020019250505060405180910390f35b610a656123c0565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610aa5578082015181840152602081019050610a8a565b50505050905090810190601f168015610ad25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b4260048036036040811015610af657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123f9565b6040518082815260200191505060405180910390f35b610b8e60048036036040811015610b6e57600080fd5b8101908080359060200190929190803590602001909291905050506124d8565b604051808381526020018281526020019250505060405180910390f35b610c546004803603610120811015610bc257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506124f0565b005b610d60600480360360c0811015610c6c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610cc757600080fd5b820183602082011115610cd957600080fd5b80359060200191846001830284011164010000000083111715610cfb57600080fd5b909192939192939080359060200190640100000000811115610d1c57600080fd5b820183602082011115610d2e57600080fd5b80359060200191846001830284011164010000000083111715610d5057600080fd5b9091929391929390505050612a24565b005b610d6a612e45565b604051808215151515815260200191505060405180910390f35b610d8c612e58565b6040518082815260200191505060405180910390f35b610dd860048036036040811015610db857600080fd5b810190808035906020019092919080359060200190929190505050612e5e565b6040518082815260200191505060405180910390f35b610ea760048036036020811015610e0457600080fd5b8101908080359060200190640100000000811115610e2157600080fd5b820183602082011115610e3357600080fd5b80359060200191846001830284011164010000000083111715610e5557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612e72565b604051808381526020018281526020019250505060405180910390f35b610ecc612e87565b6040518082815260200191505060405180910390f35b610f0e60048036036020811015610ef857600080fd5b8101908080359060200190929190505050612eaf565b60405180838152602001826004811115610f2457fe5b60ff1681526020019250505060405180910390f35b610fa560048036036060811015610f4f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ee0565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b61111e600480360361010081101561100057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561108557600080fd5b82018360208201111561109757600080fd5b803590602001918460018302840111640100000000831117156110b957600080fd5b9091929391929390803590602001906401000000008111156110da57600080fd5b8201836020820111156110ec57600080fd5b8035906020019184600183028401116401000000008311171561110e57600080fd5b9091929391929390505050612fb5565b005b61112861327e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6111d66004803603606081101561118057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132a3565b6040518082815260200191505060405180910390f35b6111f683836123f9565b841415151561120457600080fd5b6000600481111561121157fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff16600481111561124057fe5b14151561124c57600080fd5b600080600080600061125d86613396565b809450819550505061127089888a6132a3565b94506000600b60008781526020019081526020016000209050806001015492508481600001541415156112a257600080fd5b6000831115156112b157600080fd5b6112bb8484613406565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a46000841115611472576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561142b57600080fd5b505af115801561143f573d6000803e3d6000fd5b505050506040513d602081101561145557600080fd5b8101908080519060200190929190505050151561147157600080fd5b5b6000821115611586576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561153f57600080fd5b505af1158015611553573d6000803e3d6000fd5b505050506040513d602081101561156957600080fd5b8101908080519060200190929190505050151561158557600080fd5b5b81831015151561159257fe5b83831015151561159e57fe5b50505050505050505050565b6000801515600860149054906101000a900460ff1615151415156115cd57600080fd5b8160035481101515156115df57600080fd5b60045481111515156115f057600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156116b057600080fd5b505afa1580156116c4573d6000803e3d6000fd5b505050506040513d60208110156116da57600080fd5b81019080805190602001909291905050501015156116f757600080fd5b600160076000828254019250508190555060075490506117178787611e75565b91506000600a60008481526020019081526020016000205414151561173b57600080fd5b80600a60008481526020019081526020016000208190555060006009600083815260200190815260200160002090506000816000015414151561177a57fe5b6000600481111561178757fe5b8160010160009054906101000a900460ff1660048111156117a457fe5b1415156117ad57fe5b85816000018190555060018160010160006101000a81548160ff021916908360048111156117d757fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b600061185c838361341f565b905092915050565b60001515600860149054906101000a900460ff16151514151561188657600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156118e257600080fd5b6001600860146101000a81548160ff0219169083151502179055507f6151930a846a85f5e64d2dd1cc5deeafb010c63eec4b600458158edd0e33f15d600860149054906101000a900460ff16604051808215151515815260200191505060405180910390a1565b60006119558383613549565b905092915050565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b60001515600860149054906101000a900460ff1615151415156119fb57600080fd5b8360016004811115611a0957fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115611a3857fe5b141515611a4457600080fd5b611a4e84836123f9565b85141515611a5b57600080fd5b600083111515611a6a57600080fd5b6005548311151515611a7b57600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050816000015488039450600085111515611b3757600080fd5b878511151515611b4657600080fd5b8785836000015401141515611b5757fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611c1557600080fd5b505afa158015611c29573d6000803e3d6000fd5b505050506040513d6020811015611c3f57600080fd5b81019080805190602001909291905050500111151515611c5e57600080fd5b8782600001819055508060000154826000015401935081600001548410151515611c8757600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611dd257600080fd5b505af1158015611de6573d6000803e3d6000fd5b505050506040513d6020811015611dfc57600080fd5b81019080805190602001909291905050501515611e1857600080fd5b50505050505050505050565b60075481565b6000611e368383613562565b905092915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611eb257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611eee57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611f2957600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015612009578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090506120b1565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b87600160048111156120c557fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff1660048111156120f457fe5b14151561210057600080fd5b61210a87896123f9565b8914151561211757600080fd5b600080600960008c8152602001908152602001600020905060028160010160006101000a81548160ff0219169083600481111561215057fe5b021790555060018160020160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555043816000016000828254019250508190555060006121d48c8a8a8a8a8a6135a3565b90508073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614151561221057600080fd5b600088111561226f576122268c8a8a8a8a6137cf565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561226257600080fd5b61226e82848a8c6139a5565b5b878a73ffffffffffffffffffffffffffffffffffffffff168d7f09d2f946e008c38931cd739dd20e35146deff8ab3134caee6d54fe50816a81b88c6040518082815260200191505060405180910390a4505050505050505050505050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff1690506000600481111561230d57fe5b81600481111561231957fe5b1480156123265750600089115b801561233457506007548911155b156123aa57600390506123488989896132a3565b93506000600b6000868152602001908152602001600020905061236c8a898b6132a3565b93506000600b600086815260200190815260200160002090506000826001015414801561239d575060008160010154145b156123a757600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561243657600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561247257600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156124ad57600080fd5b60006124b98484611e75565b9050600a60008281526020019081526020016000205491505092915050565b6000806124e58484613a15565b915091509250929050565b6124fa88856123f9565b8914151561250757600080fd5b60006125138986611e75565b90506000600960008c815260200190815260200160002090506002600481111561253957fe5b8160010160009054906101000a900460ff16600481111561255657fe5b14151561256257600080fd5b43816000015410151561257457600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061260a828c8c8c613a3a565b151561261557600080fd5b61262181888888613a3a565b151561262c57600080fd5b61263a828c8c848b8b613ab4565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a6000858152602001908152602001600020600090556127908d8d8a8d8d613bc3565b61279d8d898e8989613bc3565b8c7f8db0e7d323ca765ce9ab550780131837e4942ccfea3be2b635ec1084c81f72628c8b8a896040518085815260200184815260200183815260200182815260200194505050505060405180910390a260008b1115612901576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156128ba57600080fd5b505af11580156128ce573d6000803e3d6000fd5b505050506040513d60208110156128e457600080fd5b8101908080519060200190929190505050151561290057600080fd5b5b6000871115612a15576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156129ce57600080fd5b505af11580156129e2573d6000803e3d6000fd5b505050506040513d60208110156129f857600080fd5b81019080805190602001909291905050501515612a1457600080fd5b5b50505050505050505050505050565b8760016004811115612a3257fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115612a6157fe5b141515612a6d57600080fd5b6000806000808a111515612a8057600080fd5b8843101515612a8e57600080fd5b612adf8c8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613c13565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612b1857600080fd5b612b698c8c8c8c8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613c13565b9050612b758b826123f9565b8c141515612b8257600080fd5b6000600960008e8152602001908152602001600020905060008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000015482600001540195508581600101548e0111151515612c4557600080fd5b80600101548d018d11151515612c5a57600080fd5b81600101548d0394508c8511151515612c7257600080fd5b600085111515612c8157600080fd5b8c85836001015401141515612c9257fe5b8d73ffffffffffffffffffffffffffffffffffffffff168f7f98ed0357b86b313fa9f968de5c9d2bcf591432355b34aa1ab7e3e9e92f4284088f6040518082815260200191505060405180910390a38c82600101819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8f876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612dae57600080fd5b505af1158015612dc2573d6000803e3d6000fd5b505050506040513d6020811015612dd857600080fd5b81019080805190602001909291905050501515612df457600080fd5b81600001548610151515612e0457fe5b80600001548610151515612e1457fe5b60008260040154141515612e2457fe5b60008160040154141515612e3457fe5b505050505050505050505050505050565b600860149054906101000a900460ff1681565b60035481565b6000612e6a8383613406565b905092915050565b600080612e7e83613396565b91509150915091565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905090565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612f4e8c8c8c6132a3565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b612fbf89896123f9565b8a141515612fcc57600080fd5b60006001028714151515612fdf57600080fd5b600086111515612fee57600080fd5b6000806000600960008e815260200190815260200160002090506002600481111561301557fe5b8160010160009054906101000a900460ff16600481111561303257fe5b14151561303e57600080fd5b4381600001541015151561305157600080fd5b6130e78d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506135a3565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561312357600080fd5b6131748d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506137cf565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff161415156131b057600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff16151561321257600080fd5b61321e828e8c8e6139a5565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f6fc5b4f4f9e65bfdc4c45456373906876cee8832b605478e281902468875eaed8e6040518082815260200191505060405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156132e057600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b60008060008351905060006060828115156133ad57fe5b061415156133ba57600080fd5b6000806000806000602094505b858510156133eb576133d9898661341f565b925082840193506060850194506133c7565b88805190602001209050808497509750505050505050915091565b60008183116134155782613417565b815b905092915050565b600080600080600085875111151561343e576000945050505050613543565b858701519350602086018701519250604086018701519050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b1580156134e557600080fd5b505afa1580156134f9573d6000803e3d6000fd5b505050506040513d602081101561350f57600080fd5b8101908080519060200190929190505050915060008214806135315750818411155b1561353b57600092505b829450505050505b92915050565b6000818311613558578161355a565b825b905092915050565b600080828401905083811015613598577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61359a565b805b91505092915050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546002600681111561362957fe5b8d8d8d8d8d604051602001808b805190602001908083835b6020831015156136665780518252602082019150602081019050602083039250613641565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b6020831015156136b95780518252602082019150602081019050602083039250613694565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b602083101515613771578051825260208201915060208101905060208303925061374c565b6001836020036101000a0380198251168184511680821785525050505050509050019a50505050505050505050506040516020818303038152906040528051906020012090506137c18185613e24565b925050509695505050505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546001600681111561385557fe5b8c8c8c8c604051602001808a805190602001908083835b602083101515613891578051825260208201915060208101905060208303925061386c565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156138e457805182526020820191506020810190506020830392506138bf565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140187815260200186815260200185815260200184815260200183815260200182815260200199505050505050505050506040516020818303038152906040528051906020012090506139988185613e24565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060040154831115156139fc57600080fd5b8281600401819055508181600301819055505050505050565b600080828411613a2a57600084819150613a2f565b828403835b915091509250929050565b6000806001028560030154148015613a525750600084145b8015613a5e5750600083145b15613a6c5760019050613aac565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b6000806000806000806000613ac7613fec565b613acf613fec565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a81604001818152505089816060018181525050613b398f8d613f37565b9250613b458282613f58565b9450613b518584613406565b94508483039350613b62858b613a15565b809b508196505050613b74848e613a15565b809e508195505050828511151515613b8857fe5b828411151515613b9457fe5b898d858701010183141515613ba557fe5b84848e8c985098509850985050505050509650965096509692505050565b6000821415613bd157613c0c565b6000613bde8686866132a3565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3230300000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a000000000000815250823060025460036006811115613c9957fe5b8c8c8c8c604051602001808a805190602001908083835b602083101515613cd55780518252602082019150602081019050602083039250613cb0565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b602083101515613d285780518252602082019150602081019050602083039250613d03565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050613e178185613e24565b9250505095945050505050565b600060418251141515613e3657600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff161015613e6657601b810190505b601b8160ff161480613e7b5750601c8160ff16145b1515613e8657600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613ee3573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613f2b57600080fd5b83935050505092915050565b60008160010154836001015483600001548560000154010303905092915050565b6000806000806000613f7287604001518860600151613562565b9350613f8686604001518760600151613562565b9250838310151515613f9757600080fd5b86604001518410151515613fa757fe5b85604001518310151515613fb757fe5b8383039150613fca828860000151613562565b9050613fda818860200151613a15565b50809150508094505050505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a72305820dab6a8c4e98163c1656c7a59e821fe043fa1aa06ca14780107646a48bcf2291f0029", - "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"address\"},{\"name\":\"sender\",\"type\":\"address\"},{\"name\":\"locks\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"openChannel\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"locks\",\"type\":\"bytes\"},{\"name\":\"offset\",\"type\":\"uint256\"}],\"name\":\"getLockedAmountFromLockPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"deprecate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"a\",\"type\":\"uint256\"},{\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"maxPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_max\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"deprecation_executor\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"secret_registry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"chain_id\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token_network_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"participants_hash_to_channel_identifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_participant_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"total_deposit\",\"type\":\"uint256\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"setTotalDeposit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_counter\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"a\",\"type\":\"uint256\"},{\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"failsafe_additionPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_SAFE_UINT256\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contract_address\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getParticipantsHash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"}],\"name\":\"closeChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"}],\"name\":\"getChannelInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"signature_prefix\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"a\",\"type\":\"uint256\"},{\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"failsafe_subtractPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant1_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locksroot\",\"type\":\"bytes32\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"participant2_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locksroot\",\"type\":\"bytes32\"}],\"name\":\"settleChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"total_withdraw\",\"type\":\"uint256\"},{\"name\":\"expiration_block\",\"type\":\"uint256\"},{\"name\":\"participant_signature\",\"type\":\"bytes\"},{\"name\":\"partner_signature\",\"type\":\"bytes\"}],\"name\":\"setTotalWithdraw\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"safety_deprecation_switch\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_min\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"a\",\"type\":\"uint256\"},{\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"minPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"locks\",\"type\":\"bytes\"}],\"name\":\"getHashAndUnlockedAmountPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"get_max_safe_uint256\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"channels\",\"outputs\":[{\"name\":\"settle_block_number\",\"type\":\"uint256\"},{\"name\":\"state\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelParticipantInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bool\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"}],\"name\":\"updateNonClosingBalanceProof\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"getUnlockIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_token_address\",\"type\":\"address\"},{\"name\":\"_secret_registry\",\"type\":\"address\"},{\"name\":\"_chain_id\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_min\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_max\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant1\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"participant2\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"ChannelOpened\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"total_deposit\",\"type\":\"uint256\"}],\"name\":\"ChannelNewDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"new_value\",\"type\":\"bool\"}],\"name\":\"DeprecationSwitch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"total_withdraw\",\"type\":\"uint256\"}],\"name\":\"ChannelWithdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"balance_hash\",\"type\":\"bytes32\"}],\"name\":\"ChannelClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"locksroot\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"unlocked_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"returned_tokens\",\"type\":\"uint256\"}],\"name\":\"ChannelUnlocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"balance_hash\",\"type\":\"bytes32\"}],\"name\":\"NonClosingBalanceProofUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant1_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant1_locksroot\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"participant2_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant2_locksroot\",\"type\":\"bytes32\"}],\"name\":\"ChannelSettled\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"closeChannel(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"closing_participant\":\"Channel participant who closes the channel.\",\"closing_signature\":\"Closing participant's signature of the balance proof data.\",\"non_closing_participant\":\"Channel partner of the `closing_participant`, who provided the balance proof.\",\"non_closing_signature\":\"Non-closing participant's signature of the balance proof data.\",\"nonce\":\"Strictly monotonic value used to order transfers.\"}},\"contractExists(address)\":{\"params\":{\"contract_address\":\"The address to check whether a contract is deployed or not\"},\"return\":\"True if a contract exists, false otherwise\"},\"getChannelIdentifier(address,address)\":{\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"},\"return\":\"Unique identifier for the channel. It can be 0 if channel does not exist.\"},\"getChannelInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Address of a channel participant.\",\"participant2\":\"Address of the other channel participant.\"},\"return\":\"Channel settle_block_number and state.\"},\"getChannelParticipantInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Address of the channel participant whose data will be returned.\",\"partner\":\"Address of the channel partner.\"},\"return\":\"Participant's deposit, withdrawn_amount, whether the participant has called `closeChannel` or not, balance_hash, nonce, locksroot, locked_amount.\"},\"getParticipantsHash(address,address)\":{\"details\":\"Get the hash of the participant addresses, ordered lexicographically.\",\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"}},\"getUnlockIdentifier(uint256,address,address)\":{\"details\":\"Get the hash of the channel identifier and the participant addresses (whose ordering matters). The hash might be useful for the receiver to look up the appropriate UnlockData to claim.\",\"params\":{\"channel_identifier\":\"Identifier for the channel which the UnlockData is about.\",\"receiver\":\"Receiver of the pending transfers that the UnlockData represents.\",\"sender\":\"Sender of the pending transfers that the UnlockData represents.\"}},\"openChannel(address,address,uint256)\":{\"params\":{\"participant1\":\"Ethereum address of a channel participant.\",\"participant2\":\"Ethereum address of the other channel participant.\",\"settle_timeout\":\"Number of blocks that need to be mined between a call to closeChannel and settleChannel.\"}},\"setTotalDeposit(uint256,address,uint256,address)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Channel participant whose deposit is being set.\",\"partner\":\"Channel partner address, needed to compute the total channel deposit.\",\"total_deposit\":\"The total amount of tokens that the participant will have as a deposit.\"}},\"setTotalWithdraw(uint256,address,uint256,uint256,bytes,bytes)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Channel participant, who will receive the withdrawn amount.\",\"participant_signature\":\"Participant's signature on the withdraw data.\",\"partner_signature\":\"Partner's signature on the withdraw data.\",\"total_withdraw\":\"Total amount of tokens that are marked as withdrawn from the channel during the channel lifecycle.\"}},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Channel participant.\",\"participant1_locked_amount\":\"Amount of tokens owed by `participant1` to `participant2`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant1_locksroot\":\"The latest known hash of the pending hash-time locks of `participant1`, used to validate the unlocked proofs. If no balance_hash has been submitted, locksroot is ignored.\",\"participant1_transferred_amount\":\"The latest known amount of tokens transferred from `participant1` to `participant2`.\",\"participant2\":\"Other channel participant.\",\"participant2_locked_amount\":\"Amount of tokens owed by `participant2` to `participant1`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant2_locksroot\":\"The latest known hash of the pending hash-time locks of `participant2`, used to validate the unlocked proofs. If no balance_hash has been submitted, locksroot is ignored.\",\"participant2_transferred_amount\":\"The latest known amount of tokens transferred from `participant2` to `participant1`.\"}},\"unlock(uint256,address,address,bytes)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"locks\":\"All pending locks concatenated in order of creation. that `sender` sent to `receiver`.\",\"receiver\":\"Address who will receive the claimable unlocked tokens.\",\"sender\":\"Address who sent the pending transfers and will receive the unclaimable unlocked tokens.\"}},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"closing_participant\":\"Channel participant who closed the channel.\",\"closing_signature\":\"Closing participant's signature of the balance proof data.\",\"non_closing_participant\":\"Channel participant who needs to update the balance proof.\",\"non_closing_signature\":\"Non-closing participant signature of the balance proof data.\",\"nonce\":\"Strictly monotonic value used to order transfers.\"}}}},\"userdoc\":{\"methods\":{\"closeChannel(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"notice\":\"Close the channel defined by the two participant addresses. Anybody can call this function on behalf of a participant (called the closing participant), providing a balance proof signed by both parties. Callable only once.\"},\"contractExists(address)\":{\"notice\":\"Check if a contract exists\"},\"getChannelIdentifier(address,address)\":{\"notice\":\"Returns the unique identifier for the channel given by the contract.\"},\"getChannelInfo(uint256,address,address)\":{\"notice\":\"The contract cannot really distinguish Settled and Removed states, especially when wrong participants are given as input. The contract does not remember the participants of the channel.\"},\"openChannel(address,address,uint256)\":{\"notice\":\"Opens a new channel between `participant1` and `participant2`. Can be called by anyone.\"},\"setTotalDeposit(uint256,address,uint256,address)\":{\"notice\":\"Sets the channel participant total deposit value. Can be called by anyone.\"},\"setTotalWithdraw(uint256,address,uint256,uint256,bytes,bytes)\":{\"notice\":\"Allows `participant` to withdraw tokens from the channel that he has with `partner`, without closing it. Can be called by anyone. Can only be called once per each signed withdraw message.\"},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"notice\":\"Settles the balance between the two parties. Note that arguments order counts: `participant1_transferred_amount + participant1_locked_amount` <= `participant2_transferred_amount + participant2_locked_amount`\"},\"unlock(uint256,address,address,bytes)\":{\"notice\":\"Unlocks all pending off-chain transfers from `sender` to `receiver` and sends the locked tokens corresponding to locks with secrets registered on-chain to the `receiver`. Locked tokens corresponding to locks where the secret was not revealed on-chain will return to the `sender`. Anyone can call unlock.\"},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"notice\":\"Called on a closed channel, the function allows the non-closing participant to provide the last balance proof, which modifies the closing participant's state. Can be called multiple times by anyone.\"}}}},\"settings\":{\"compilationTarget\":{\"data/source/test/TokenNetworkInternalsTest.sol\":\"TokenNetworkUtilsTest\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":.=.\",\":lib=data/source/lib\",\":raiden=data/source/raiden\",\":services=data/source/services\",\":test=data/source/test\"]},\"sources\":{\"data/source/lib/ECVerify.sol\":{\"keccak256\":\"0x8bb402baa478eb53252d77b63982e12685adda290cf4dfa1d8f510284f8df3e9\",\"urls\":[\"bzzr://474c3db1bb54bb831c32eb2ab67a0e870489994bd4d4b8a8fa24b54935211d43\"]},\"data/source/raiden/SecretRegistry.sol\":{\"keccak256\":\"0xb8078bc048ccdeb7c58026754f22fc378baf3b24090db0f17d10bda6cd4951b4\",\"urls\":[\"bzzr://f7a072330393a85a6a274ef526ac2ca0f8eb217bf5f48c18b3080be7ac3a7ede\"]},\"data/source/raiden/Token.sol\":{\"keccak256\":\"0x41b40819d7f6714550c742f48ce46daeb97255c08bc56e83bb9fde4fbe14c3b4\",\"urls\":[\"bzzr://a20e2bea336fb01584cf4dc80e77bb8db3c33666f77f840fd58559116849ae4b\"]},\"data/source/raiden/TokenNetwork.sol\":{\"keccak256\":\"0xe236e9c266564b1497d45cff4820b670e02cff86a07dba03310705e090620e66\",\"urls\":[\"bzzr://d629bfb011b3a81416e11a53816c3656f439ee2698b91cb015dade173e583a7c\"]},\"data/source/raiden/Utils.sol\":{\"keccak256\":\"0x602fd914e5644696d3c5d42e3a39fe6f16e7ddcc93f8864aa7e368a70cb56d0b\",\"urls\":[\"bzzr://b884810b9826074efb212a825d33409c35d9a159681690e821da3643052be3d1\"]},\"data/source/test/TokenNetworkInternalsTest.sol\":{\"keccak256\":\"0xb2788f5a8680109641c60e5d881883b0dd0a77c5314a7a6e8be7a3393b2537ab\",\"urls\":[\"bzzr://01583ff6d3db7e414d12a755f7e0a081c1b95048149afe6fc20d95b965d83b1a\"]}},\"version\":1}" + "bin": "60806040526000600860146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405160a08062004441833981018060405260a08110156200004e57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050508484848484337fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614151515620000ec57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16141515156200012957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156200016657600080fd5b6000861115156200017657600080fd5b6000851115156200018657600080fd5b84841115156200019557600080fd5b620001af88620003d9640100000000026401000000009004565b1515620001bb57600080fd5b620001d587620003d9640100000000026401000000009004565b1515620001e157600080fd5b600082111515620001f157600080fd5b6000811115156200020157600080fd5b8181101515156200021157600080fd5b876000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555086600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600281905550846003819055508360048190555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040160206040518083038186803b1580156200032d57600080fd5b505afa15801562000342573d6000803e3d6000fd5b505050506040513d60208110156200035957600080fd5b81019080805190602001909291905050501115156200037757600080fd5b82600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550816005819055508060068190555050505050505050505050505050620003ec565b600080823b905060008111915050919050565b61404580620003fc6000396000f3fe608060405234801561001057600080fd5b506004361061022e576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610142578063b8378f75116100ca578063e5949b5d11610099578063e5949b5d14610ee2578063ee4516d914610f39578063fadc554b14610fe9578063fc0c546a14611120578063fe49ba1c1461116a5761022e565b8063b8378f7514610d84578063c6e2e7f914610da2578063d1ab77f214610dee578063e3fc99ce14610ec45761022e565b8063938bcd6711610111578063938bcd6714610ae05780639548bcef14610b585780639cadb15914610bab5780639e67ca5f14610c56578063b7506d7014610d625761022e565b80637c4734f41461079357806382fd77951461080b578063838d6e05146109c65780638723423714610a5d5761022e565b80633af973b1116101c557806363ea01431161019457806363ea014314610637578063679b3763146106af5780636f5450c2146106cd57806371e75992146107195780637709bc78146107375761022e565b80633af973b11461059b5780634845be76146105b9578063524bef8a146105d75780635d6e441b146106195761022e565b80631e6c80ad116102015780631e6c80ad1461049d578063224df42f146104e957806323aa81741461050757806324d73a93146105515761022e565b806303d9d253146102335780630a798f24146103385780630bcf5a70146103ba5780630fcc0c2814610493575b600080fd5b6103366004803603608081101561024957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156102b057600080fd5b8201836020820111156102c257600080fd5b803590602001918460018302840111640100000000831117156102e457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506111ec565b005b6103a46004803603606081101561034e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115aa565b6040518082815260200191505060405180910390f35b61047d600480360360408110156103d057600080fd5b81019080803590602001906401000000008111156103ed57600080fd5b8201836020820111156103ff57600080fd5b8035906020019184600183028401116401000000008311171561042157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611850565b6040518082815260200191505060405180910390f35b61049b611864565b005b6104d3600480360360408110156104b357600080fd5b810190808035906020019092919080359060200190929190505050611949565b6040518082815260200191505060405180910390f35b6104f161195d565b6040518082815260200191505060405180910390f35b61050f611963565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610559611989565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105a36119af565b6040518082815260200191505060405180910390f35b6105c16119b5565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b81019080803590602001909291905050506119bb565b6040518082815260200191505060405180910390f35b6106216119d3565b6040518082815260200191505060405180910390f35b6106ad6004803603608081101561064d57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119d9565b005b6106b7611e24565b6040518082815260200191505060405180910390f35b610703600480360360408110156106e357600080fd5b810190808035906020019092919080359060200190929190505050611e2a565b6040518082815260200191505060405180910390f35b610721611e3e565b6040518082815260200191505060405180910390f35b6107796004803603602081101561074d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e62565b604051808215151515815260200191505060405180910390f35b6107f5600480360360408110156107a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e75565b6040518082815260200191505060405180910390f35b6109c4600480360361010081101561082257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156108a757600080fd5b8201836020820111156108b957600080fd5b803590602001918460018302840111640100000000831117156108db57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561093e57600080fd5b82018360208201111561095057600080fd5b8035906020019184600183028401116401000000008311171561097257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506120b7565b005b610a32600480360360608110156109dc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122cf565b60405180838152602001826004811115610a4857fe5b60ff1681526020019250505060405180910390f35b610a656123c2565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610aa5578082015181840152602081019050610a8a565b50505050905090810190601f168015610ad25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b4260048036036040811015610af657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123fb565b6040518082815260200191505060405180910390f35b610b8e60048036036040811015610b6e57600080fd5b8101908080359060200190929190803590602001909291905050506124da565b604051808381526020018281526020019250505060405180910390f35b610c546004803603610120811015610bc257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506124f2565b005b610d60600480360360c0811015610c6c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610cc757600080fd5b820183602082011115610cd957600080fd5b80359060200191846001830284011164010000000083111715610cfb57600080fd5b909192939192939080359060200190640100000000811115610d1c57600080fd5b820183602082011115610d2e57600080fd5b80359060200191846001830284011164010000000083111715610d5057600080fd5b9091929391929390505050612a26565b005b610d6a612e47565b604051808215151515815260200191505060405180910390f35b610d8c612e5a565b6040518082815260200191505060405180910390f35b610dd860048036036040811015610db857600080fd5b810190808035906020019092919080359060200190929190505050612e60565b6040518082815260200191505060405180910390f35b610ea760048036036020811015610e0457600080fd5b8101908080359060200190640100000000811115610e2157600080fd5b820183602082011115610e3357600080fd5b80359060200191846001830284011164010000000083111715610e5557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612e74565b604051808381526020018281526020019250505060405180910390f35b610ecc612e89565b6040518082815260200191505060405180910390f35b610f0e60048036036020811015610ef857600080fd5b8101908080359060200190929190505050612eb1565b60405180838152602001826004811115610f2457fe5b60ff1681526020019250505060405180910390f35b610fa560048036036060811015610f4f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ee2565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b61111e600480360361010081101561100057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561108557600080fd5b82018360208201111561109757600080fd5b803590602001918460018302840111640100000000831117156110b957600080fd5b9091929391929390803590602001906401000000008111156110da57600080fd5b8201836020820111156110ec57600080fd5b8035906020019184600183028401116401000000008311171561110e57600080fd5b9091929391929390505050612fb7565b005b611128613282565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6111d66004803603606081101561118057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132a7565b6040518082815260200191505060405180910390f35b6111f683836123fb565b841415151561120457600080fd5b6000600481111561121157fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff16600481111561124057fe5b14151561124c57600080fd5b600080600080600061125d8661339a565b809450819550505061127089888a6132a7565b94506000600b60008781526020019081526020016000209050806001015492508481600001541415156112a257600080fd5b6000831115156112b157600080fd5b6112bb848461340a565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a46000841115611472576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561142b57600080fd5b505af115801561143f573d6000803e3d6000fd5b505050506040513d602081101561145557600080fd5b8101908080519060200190929190505050151561147157600080fd5b5b6000821115611586576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561153f57600080fd5b505af1158015611553573d6000803e3d6000fd5b505050506040513d602081101561156957600080fd5b8101908080519060200190929190505050151561158557600080fd5b5b81831015151561159257fe5b83831015151561159e57fe5b50505050505050505050565b6000801515600860149054906101000a900460ff1615151415156115cd57600080fd5b8160035481101515156115df57600080fd5b60045481111515156115f057600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156116b057600080fd5b505afa1580156116c4573d6000803e3d6000fd5b505050506040513d60208110156116da57600080fd5b81019080805190602001909291905050501015156116f757600080fd5b600160076000828254019250508190555060075490506117178787611e75565b91506000600a60008481526020019081526020016000205414151561173b57600080fd5b80600a60008481526020019081526020016000208190555060006009600083815260200190815260200160002090506000816000015414151561177a57fe5b6000600481111561178757fe5b8160010160009054906101000a900460ff1660048111156117a457fe5b1415156117ad57fe5b85816000018190555060018160010160006101000a81548160ff021916908360048111156117d757fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b600061185c8383613423565b905092915050565b60001515600860149054906101000a900460ff16151514151561188657600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156118e257600080fd5b6001600860146101000a81548160ff0219169083151502179055507f6151930a846a85f5e64d2dd1cc5deeafb010c63eec4b600458158edd0e33f15d600860149054906101000a900460ff16604051808215151515815260200191505060405180910390a1565b6000611955838361354d565b905092915050565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b60001515600860149054906101000a900460ff1615151415156119fb57600080fd5b8360016004811115611a0957fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115611a3857fe5b141515611a4457600080fd5b611a4e84836123fb565b85141515611a5b57600080fd5b600083111515611a6a57600080fd5b6005548311151515611a7b57600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050816000015488039450600085111515611b3757600080fd5b878511151515611b4657600080fd5b8785836000015401141515611b5757fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611c1557600080fd5b505afa158015611c29573d6000803e3d6000fd5b505050506040513d6020811015611c3f57600080fd5b81019080805190602001909291905050500111151515611c5e57600080fd5b8782600001819055508060000154826000015401935081600001548410151515611c8757600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611dd257600080fd5b505af1158015611de6573d6000803e3d6000fd5b505050506040513d6020811015611dfc57600080fd5b81019080805190602001909291905050501515611e1857600080fd5b50505050505050505050565b60075481565b6000611e368383613566565b905092915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611eb257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611eee57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611f2957600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015612009578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090506120b1565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b87600160048111156120c557fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff1660048111156120f457fe5b14151561210057600080fd5b61210a87896123fb565b8914151561211757600080fd5b600080600960008c8152602001908152602001600020905060028160010160006101000a81548160ff0219169083600481111561215057fe5b021790555060018160020160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555043816000016000828254019250508190555060006121d660018d8b8b8b8b8b6135a7565b90508073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614151561221257600080fd5b6000881115612271576122288c8a8a8a8a6137d3565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561226457600080fd5b61227082848a8c6139a9565b5b878a73ffffffffffffffffffffffffffffffffffffffff168d7f09d2f946e008c38931cd739dd20e35146deff8ab3134caee6d54fe50816a81b88c6040518082815260200191505060405180910390a4505050505050505050505050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff1690506000600481111561230f57fe5b81600481111561231b57fe5b1480156123285750600089115b801561233657506007548911155b156123ac576003905061234a8989896132a7565b93506000600b6000868152602001908152602001600020905061236e8a898b6132a7565b93506000600b600086815260200190815260200160002090506000826001015414801561239f575060008160010154145b156123a957600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561243857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561247457600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156124af57600080fd5b60006124bb8484611e75565b9050600a60008281526020019081526020016000205491505092915050565b6000806124e78484613a19565b915091509250929050565b6124fc88856123fb565b8914151561250957600080fd5b60006125158986611e75565b90506000600960008c815260200190815260200160002090506002600481111561253b57fe5b8160010160009054906101000a900460ff16600481111561255857fe5b14151561256457600080fd5b43816000015410151561257657600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061260c828c8c8c613a3e565b151561261757600080fd5b61262381888888613a3e565b151561262e57600080fd5b61263c828c8c848b8b613ab8565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a6000858152602001908152602001600020600090556127928d8d8a8d8d613bc7565b61279f8d898e8989613bc7565b8c7f8db0e7d323ca765ce9ab550780131837e4942ccfea3be2b635ec1084c81f72628c8b8a896040518085815260200184815260200183815260200182815260200194505050505060405180910390a260008b1115612903576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156128bc57600080fd5b505af11580156128d0573d6000803e3d6000fd5b505050506040513d60208110156128e657600080fd5b8101908080519060200190929190505050151561290257600080fd5b5b6000871115612a17576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156129d057600080fd5b505af11580156129e4573d6000803e3d6000fd5b505050506040513d60208110156129fa57600080fd5b81019080805190602001909291905050501515612a1657600080fd5b5b50505050505050505050505050565b8760016004811115612a3457fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115612a6357fe5b141515612a6f57600080fd5b6000806000808a111515612a8257600080fd5b8843101515612a9057600080fd5b612ae18c8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613c17565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612b1a57600080fd5b612b6b8c8c8c8c8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613c17565b9050612b778b826123fb565b8c141515612b8457600080fd5b6000600960008e8152602001908152602001600020905060008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000015482600001540195508581600101548e0111151515612c4757600080fd5b80600101548d018d11151515612c5c57600080fd5b81600101548d0394508c8511151515612c7457600080fd5b600085111515612c8357600080fd5b8c85836001015401141515612c9457fe5b8d73ffffffffffffffffffffffffffffffffffffffff168f7f98ed0357b86b313fa9f968de5c9d2bcf591432355b34aa1ab7e3e9e92f4284088f6040518082815260200191505060405180910390a38c82600101819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8f876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612db057600080fd5b505af1158015612dc4573d6000803e3d6000fd5b505050506040513d6020811015612dda57600080fd5b81019080805190602001909291905050501515612df657600080fd5b81600001548610151515612e0657fe5b80600001548610151515612e1657fe5b60008260040154141515612e2657fe5b60008160040154141515612e3657fe5b505050505050505050505050505050565b600860149054906101000a900460ff1681565b60035481565b6000612e6c838361340a565b905092915050565b600080612e808361339a565b91509150915091565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905090565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612f508c8c8c6132a7565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b612fc189896123fb565b8a141515612fce57600080fd5b60006001028714151515612fe157600080fd5b600086111515612ff057600080fd5b6000806000600960008e815260200190815260200160002090506002600481111561301757fe5b8160010160009054906101000a900460ff16600481111561303457fe5b14151561304057600080fd5b4381600001541015151561305357600080fd5b6130eb60028e8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506135a7565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561312757600080fd5b6131788d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506137d3565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff161415156131b457600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff16151561321657600080fd5b613222828e8c8e6139a9565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f6fc5b4f4f9e65bfdc4c45456373906876cee8832b605478e281902468875eaed8e6040518082815260200191505060405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156132e457600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b60008060008351905060006060828115156133b157fe5b061415156133be57600080fd5b6000806000806000602094505b858510156133ef576133dd8986613423565b925082840193506060850194506133cb565b88805190602001209050808497509750505050505050915091565b6000818311613419578261341b565b815b905092915050565b6000806000806000858751111515613442576000945050505050613547565b858701519350602086018701519250604086018701519050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b1580156134e957600080fd5b505afa1580156134fd573d6000803e3d6000fd5b505050506040513d602081101561351357600080fd5b8101908080519060200190929190505050915060008214806135355750818411155b1561353f57600092505b829450505050505b92915050565b600081831161355c578161355e565b825b905092915050565b60008082840190508381101561359c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61359e565b805b91505092915050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002548d600681111561362c57fe5b8d8d8d8d8d604051602001808b805190602001908083835b6020831015156136695780518252602082019150602081019050602083039250613644565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b6020831015156136bc5780518252602082019150602081019050602083039250613697565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b602083101515613774578051825260208201915060208101905060208303925061374f565b6001836020036101000a0380198251168184511680821785525050505050509050019a50505050505050505050506040516020818303038152906040528051906020012090506137c48185613e28565b92505050979650505050505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546001600681111561385957fe5b8c8c8c8c604051602001808a805190602001908083835b6020831015156138955780518252602082019150602081019050602083039250613870565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156138e857805182526020820191506020810190506020830392506138c3565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401878152602001868152602001858152602001848152602001838152602001828152602001995050505050505050505060405160208183030381529060405280519060200120905061399c8185613e28565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806004015483111515613a0057600080fd5b8281600401819055508181600301819055505050505050565b600080828411613a2e57600084819150613a33565b828403835b915091509250929050565b6000806001028560030154148015613a565750600084145b8015613a625750600083145b15613a705760019050613ab0565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b6000806000806000806000613acb613ff0565b613ad3613ff0565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a81604001818152505089816060018181525050613b3d8f8d613f3b565b9250613b498282613f5c565b9450613b55858461340a565b94508483039350613b66858b613a19565b809b508196505050613b78848e613a19565b809e508195505050828511151515613b8c57fe5b828411151515613b9857fe5b898d858701010183141515613ba957fe5b84848e8c985098509850985050505050509650965096509692505050565b6000821415613bd557613c10565b6000613be28686866132a7565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3230300000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a000000000000815250823060025460036006811115613c9d57fe5b8c8c8c8c604051602001808a805190602001908083835b602083101515613cd95780518252602082019150602081019050602083039250613cb4565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b602083101515613d2c5780518252602082019150602081019050602083039250613d07565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050613e1b8185613e28565b9250505095945050505050565b600060418251141515613e3a57600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff161015613e6a57601b810190505b601b8160ff161480613e7f5750601c8160ff16145b1515613e8a57600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613ee7573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613f2f57600080fd5b83935050505092915050565b60008160010154836001015483600001548560000154010303905092915050565b6000806000806000613f7687604001518860600151613566565b9350613f8a86604001518760600151613566565b9250838310151515613f9b57600080fd5b86604001518410151515613fab57fe5b85604001518310151515613fbb57fe5b8383039150613fce828860000151613566565b9050613fde818860200151613a19565b50809150508094505050505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a72305820be07bd77c4fe7e15120522eaea40802f2a5b8d8a92b5bc830fc88eafc2791f120029", + "bin-runtime": "608060405234801561001057600080fd5b506004361061022e576000357c0100000000000000000000000000000000000000000000000000000000900480637c4734f411610142578063b8378f75116100ca578063e5949b5d11610099578063e5949b5d14610ee2578063ee4516d914610f39578063fadc554b14610fe9578063fc0c546a14611120578063fe49ba1c1461116a5761022e565b8063b8378f7514610d84578063c6e2e7f914610da2578063d1ab77f214610dee578063e3fc99ce14610ec45761022e565b8063938bcd6711610111578063938bcd6714610ae05780639548bcef14610b585780639cadb15914610bab5780639e67ca5f14610c56578063b7506d7014610d625761022e565b80637c4734f41461079357806382fd77951461080b578063838d6e05146109c65780638723423714610a5d5761022e565b80633af973b1116101c557806363ea01431161019457806363ea014314610637578063679b3763146106af5780636f5450c2146106cd57806371e75992146107195780637709bc78146107375761022e565b80633af973b11461059b5780634845be76146105b9578063524bef8a146105d75780635d6e441b146106195761022e565b80631e6c80ad116102015780631e6c80ad1461049d578063224df42f146104e957806323aa81741461050757806324d73a93146105515761022e565b806303d9d253146102335780630a798f24146103385780630bcf5a70146103ba5780630fcc0c2814610493575b600080fd5b6103366004803603608081101561024957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001906401000000008111156102b057600080fd5b8201836020820111156102c257600080fd5b803590602001918460018302840111640100000000831117156102e457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506111ec565b005b6103a46004803603606081101561034e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115aa565b6040518082815260200191505060405180910390f35b61047d600480360360408110156103d057600080fd5b81019080803590602001906401000000008111156103ed57600080fd5b8201836020820111156103ff57600080fd5b8035906020019184600183028401116401000000008311171561042157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050611850565b6040518082815260200191505060405180910390f35b61049b611864565b005b6104d3600480360360408110156104b357600080fd5b810190808035906020019092919080359060200190929190505050611949565b6040518082815260200191505060405180910390f35b6104f161195d565b6040518082815260200191505060405180910390f35b61050f611963565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610559611989565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105a36119af565b6040518082815260200191505060405180910390f35b6105c16119b5565b6040518082815260200191505060405180910390f35b610603600480360360208110156105ed57600080fd5b81019080803590602001909291905050506119bb565b6040518082815260200191505060405180910390f35b6106216119d3565b6040518082815260200191505060405180910390f35b6106ad6004803603608081101561064d57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119d9565b005b6106b7611e24565b6040518082815260200191505060405180910390f35b610703600480360360408110156106e357600080fd5b810190808035906020019092919080359060200190929190505050611e2a565b6040518082815260200191505060405180910390f35b610721611e3e565b6040518082815260200191505060405180910390f35b6107796004803603602081101561074d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e62565b604051808215151515815260200191505060405180910390f35b6107f5600480360360408110156107a957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e75565b6040518082815260200191505060405180910390f35b6109c4600480360361010081101561082257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803590602001906401000000008111156108a757600080fd5b8201836020820111156108b957600080fd5b803590602001918460018302840111640100000000831117156108db57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561093e57600080fd5b82018360208201111561095057600080fd5b8035906020019184600183028401116401000000008311171561097257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506120b7565b005b610a32600480360360608110156109dc57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506122cf565b60405180838152602001826004811115610a4857fe5b60ff1681526020019250505060405180910390f35b610a656123c2565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610aa5578082015181840152602081019050610a8a565b50505050905090810190601f168015610ad25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b4260048036036040811015610af657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123fb565b6040518082815260200191505060405180910390f35b610b8e60048036036040811015610b6e57600080fd5b8101908080359060200190929190803590602001909291905050506124da565b604051808381526020018281526020019250505060405180910390f35b610c546004803603610120811015610bc257600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291905050506124f2565b005b610d60600480360360c0811015610c6c57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019092919080359060200190640100000000811115610cc757600080fd5b820183602082011115610cd957600080fd5b80359060200191846001830284011164010000000083111715610cfb57600080fd5b909192939192939080359060200190640100000000811115610d1c57600080fd5b820183602082011115610d2e57600080fd5b80359060200191846001830284011164010000000083111715610d5057600080fd5b9091929391929390505050612a26565b005b610d6a612e47565b604051808215151515815260200191505060405180910390f35b610d8c612e5a565b6040518082815260200191505060405180910390f35b610dd860048036036040811015610db857600080fd5b810190808035906020019092919080359060200190929190505050612e60565b6040518082815260200191505060405180910390f35b610ea760048036036020811015610e0457600080fd5b8101908080359060200190640100000000811115610e2157600080fd5b820183602082011115610e3357600080fd5b80359060200191846001830284011164010000000083111715610e5557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612e74565b604051808381526020018281526020019250505060405180910390f35b610ecc612e89565b6040518082815260200191505060405180910390f35b610f0e60048036036020811015610ef857600080fd5b8101908080359060200190929190505050612eb1565b60405180838152602001826004811115610f2457fe5b60ff1681526020019250505060405180910390f35b610fa560048036036060811015610f4f57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612ee2565b604051808881526020018781526020018615151515815260200185815260200184815260200183815260200182815260200197505050505050505060405180910390f35b61111e600480360361010081101561100057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561108557600080fd5b82018360208201111561109757600080fd5b803590602001918460018302840111640100000000831117156110b957600080fd5b9091929391929390803590602001906401000000008111156110da57600080fd5b8201836020820111156110ec57600080fd5b8035906020019184600183028401116401000000008311171561110e57600080fd5b9091929391929390505050612fb7565b005b611128613282565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6111d66004803603606081101561118057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132a7565b6040518082815260200191505060405180910390f35b6111f683836123fb565b841415151561120457600080fd5b6000600481111561121157fe5b6009600086815260200190815260200160002060010160009054906101000a900460ff16600481111561124057fe5b14151561124c57600080fd5b600080600080600061125d8661339a565b809450819550505061127089888a6132a7565b94506000600b60008781526020019081526020016000209050806001015492508481600001541415156112a257600080fd5b6000831115156112b157600080fd5b6112bb848461340a565b93508383039150600b6000878152602001908152602001600020600080820160009055600182016000905550508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b7f8c03cf01b3d4e6068cc494e6fe02aa9e3d4af069d37c32ecc3b241af5c37e6c088888760405180848152602001838152602001828152602001935050505060405180910390a46000841115611472576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8a866040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561142b57600080fd5b505af115801561143f573d6000803e3d6000fd5b505050506040513d602081101561145557600080fd5b8101908080519060200190929190505050151561147157600080fd5b5b6000821115611586576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561153f57600080fd5b505af1158015611553573d6000803e3d6000fd5b505050506040513d602081101561156957600080fd5b8101908080519060200190929190505050151561158557600080fd5b5b81831015151561159257fe5b83831015151561159e57fe5b50505050505050505050565b6000801515600860149054906101000a900460ff1615151415156115cd57600080fd5b8160035481101515156115df57600080fd5b60045481111515156115f057600080fd5b6000806006546000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156116b057600080fd5b505afa1580156116c4573d6000803e3d6000fd5b505050506040513d60208110156116da57600080fd5b81019080805190602001909291905050501015156116f757600080fd5b600160076000828254019250508190555060075490506117178787611e75565b91506000600a60008481526020019081526020016000205414151561173b57600080fd5b80600a60008481526020019081526020016000208190555060006009600083815260200190815260200160002090506000816000015414151561177a57fe5b6000600481111561178757fe5b8160010160009054906101000a900460ff1660048111156117a457fe5b1415156117ad57fe5b85816000018190555060018160010160006101000a81548160ff021916908360048111156117d757fe5b02179055508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16837f669a4b0ac0b9994c0f82ed4dbe07bb421fe74e5951725af4f139c7443ebf049d896040518082815260200191505060405180910390a4819450505050509392505050565b600061185c8383613423565b905092915050565b60001515600860149054906101000a900460ff16151514151561188657600080fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156118e257600080fd5b6001600860146101000a81548160ff0219169083151502179055507f6151930a846a85f5e64d2dd1cc5deeafb010c63eec4b600458158edd0e33f15d600860149054906101000a900460ff16604051808215151515815260200191505060405180910390a1565b6000611955838361354d565b905092915050565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60025481565b60065481565b600a6020528060005260406000206000915090505481565b60055481565b60001515600860149054906101000a900460ff1615151415156119fb57600080fd5b8360016004811115611a0957fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115611a3857fe5b141515611a4457600080fd5b611a4e84836123fb565b85141515611a5b57600080fd5b600083111515611a6a57600080fd5b6005548311151515611a7b57600080fd5b600080600060096000898152602001908152602001600020905060008160020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050816000015488039450600085111515611b3757600080fd5b878511151515611b4657600080fd5b8785836000015401141515611b5757fe5b600654856000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611c1557600080fd5b505afa158015611c29573d6000803e3d6000fd5b505050506040513d6020811015611c3f57600080fd5b81019080805190602001909291905050500111151515611c5e57600080fd5b8782600001819055508060000154826000015401935081600001548410151515611c8757600080fd5b8873ffffffffffffffffffffffffffffffffffffffff168a7f2b55547a3b586ab51f65ee9ce4927fa6d25191388299988e89e059a02f9dd44584600001546040518082815260200191505060405180910390a36000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611dd257600080fd5b505af1158015611de6573d6000803e3d6000fd5b505050506040513d6020811015611dfc57600080fd5b81019080805190602001909291905050501515611e1857600080fd5b50505050505050505050565b60075481565b6000611e368383613566565b905092915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81565b600080823b905060008111915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611eb257600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611eee57600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611f2957600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161015612009578282604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090506120b1565b8183604051602001808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401925050506040516020818303038152906040528051906020012090505b92915050565b87600160048111156120c557fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff1660048111156120f457fe5b14151561210057600080fd5b61210a87896123fb565b8914151561211757600080fd5b600080600960008c8152602001908152602001600020905060028160010160006101000a81548160ff0219169083600481111561215057fe5b021790555060018160020160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160006101000a81548160ff02191690831515021790555043816000016000828254019250508190555060006121d660018d8b8b8b8b8b6135a7565b90508073ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff1614151561221257600080fd5b6000881115612271576122288c8a8a8a8a6137d3565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561226457600080fd5b61227082848a8c6139a9565b5b878a73ffffffffffffffffffffffffffffffffffffffff168d7f09d2f946e008c38931cd739dd20e35146deff8ab3134caee6d54fe50816a81b88c6040518082815260200191505060405180910390a4505050505050505050505050565b600080600080600060096000898152602001908152602001600020905060008160010160009054906101000a900460ff1690506000600481111561230f57fe5b81600481111561231b57fe5b1480156123285750600089115b801561233657506007548911155b156123ac576003905061234a8989896132a7565b93506000600b6000868152602001908152602001600020905061236e8a898b6132a7565b93506000600b600086815260200190815260200160002090506000826001015414801561239f575060008160010154145b156123a957600492505b50505b8160000154819550955050505050935093915050565b6040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561243857600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561247457600080fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156124af57600080fd5b60006124bb8484611e75565b9050600a60008281526020019081526020016000205491505092915050565b6000806124e78484613a19565b915091509250929050565b6124fc88856123fb565b8914151561250957600080fd5b60006125158986611e75565b90506000600960008c815260200190815260200160002090506002600481111561253b57fe5b8160010160009054906101000a900460ff16600481111561255857fe5b14151561256457600080fd5b43816000015410151561257657600080fd5b60008160020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905061260c828c8c8c613a3e565b151561261757600080fd5b61262381888888613a3e565b151561262e57600080fd5b61263c828c8c848b8b613ab8565b809950819d50829a50839e50505050508260020160008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff02191690556003820160009055600482016000905550508260020160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008082016000905560018201600090556002820160006101000a81549060ff0219169055600382016000905560048201600090555050600960008e81526020019081526020016000206000808201600090556001820160006101000a81549060ff02191690555050600a6000858152602001908152602001600020600090556127928d8d8a8d8d613bc7565b61279f8d898e8989613bc7565b8c7f8db0e7d323ca765ce9ab550780131837e4942ccfea3be2b635ec1084c81f72628c8b8a896040518085815260200184815260200183815260200182815260200194505050505060405180910390a260008b1115612903576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8d8d6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156128bc57600080fd5b505af11580156128d0573d6000803e3d6000fd5b505050506040513d60208110156128e657600080fd5b8101908080519060200190929190505050151561290257600080fd5b5b6000871115612a17576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb89896040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156129d057600080fd5b505af11580156129e4573d6000803e3d6000fd5b505050506040513d60208110156129fa57600080fd5b81019080805190602001909291905050501515612a1657600080fd5b5b50505050505050505050505050565b8760016004811115612a3457fe5b6009600083815260200190815260200160002060010160009054906101000a900460ff166004811115612a6357fe5b141515612a6f57600080fd5b6000806000808a111515612a8257600080fd5b8843101515612a9057600080fd5b612ae18c8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613c17565b73ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff16141515612b1a57600080fd5b612b6b8c8c8c8c8a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613c17565b9050612b778b826123fb565b8c141515612b8457600080fd5b6000600960008e8152602001908152602001600020905060008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060008260020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806000015482600001540195508581600101548e0111151515612c4757600080fd5b80600101548d018d11151515612c5c57600080fd5b81600101548d0394508c8511151515612c7457600080fd5b600085111515612c8357600080fd5b8c85836001015401141515612c9457fe5b8d73ffffffffffffffffffffffffffffffffffffffff168f7f98ed0357b86b313fa9f968de5c9d2bcf591432355b34aa1ab7e3e9e92f4284088f6040518082815260200191505060405180910390a38c82600101819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb8f876040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612db057600080fd5b505af1158015612dc4573d6000803e3d6000fd5b505050506040513d6020811015612dda57600080fd5b81019080805190602001909291905050501515612df657600080fd5b81600001548610151515612e0657fe5b80600001548610151515612e1657fe5b60008260040154141515612e2657fe5b60008160040154141515612e3657fe5b505050505050505050505050505050565b600860149054906101000a900460ff1681565b60035481565b6000612e6c838361340a565b905092915050565b600080612e808361339a565b91509150915091565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff905090565b60096020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b6000806000806000806000806000600960008d815260200190815260200160002060020160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050612f508c8c8c6132a7565b91506000600b60008481526020019081526020016000209050816000015482600101548360020160009054906101000a900460ff16846003015485600401548560000154866001015499509950995099509950995099505050509397509397509397909450565b612fc189896123fb565b8a141515612fce57600080fd5b60006001028714151515612fe157600080fd5b600086111515612ff057600080fd5b6000806000600960008e815260200190815260200160002090506002600481111561301757fe5b8160010160009054906101000a900460ff16600481111561303457fe5b14151561304057600080fd5b4381600001541015151561305357600080fd5b6130eb60028e8c8c8c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506135a7565b92508273ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff1614151561312757600080fd5b6131788d8b8b8b8b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050506137d3565b91508173ffffffffffffffffffffffffffffffffffffffff168c73ffffffffffffffffffffffffffffffffffffffff161415156131b457600080fd5b60008160020160008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508060020160009054906101000a900460ff16151561321657600080fd5b613222828e8c8e6139a9565b898d73ffffffffffffffffffffffffffffffffffffffff168f7f6fc5b4f4f9e65bfdc4c45456373906876cee8832b605478e281902468875eaed8e6040518082815260200191505060405180910390a45050505050505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156132e457600080fd5b838383604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140193505050506040516020818303038152906040528051906020012090509392505050565b60008060008351905060006060828115156133b157fe5b061415156133be57600080fd5b6000806000806000602094505b858510156133ef576133dd8986613423565b925082840193506060850194506133cb565b88805190602001209050808497509750505050505050915091565b6000818311613419578261341b565b815b905092915050565b6000806000806000858751111515613442576000945050505050613547565b858701519350602086018701519250604086018701519050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c1f62946826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b1580156134e957600080fd5b505afa1580156134fd573d6000803e3d6000fd5b505050506040513d602081101561351357600080fd5b8101908080519060200190929190505050915060008214806135355750818411155b1561353f57600092505b829450505050505b92915050565b600081831161355c578161355e565b825b905092915050565b60008082840190508381101561359c577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61359e565b805b91505092915050565b600060606040805190810160405280600381526020017f3237370000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002548d600681111561362c57fe5b8d8d8d8d8d604051602001808b805190602001908083835b6020831015156136695780518252602082019150602081019050602083039250613644565b6001836020036101000a0380198251168184511680821785525050505050509050018a805190602001908083835b6020831015156136bc5780518252602082019150602081019050602083039250613697565b6001836020036101000a0380198251168184511680821785525050505050509050018973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140188815260200187815260200186815260200185815260200184815260200183815260200182805190602001908083835b602083101515613774578051825260208201915060208101905060208303925061374f565b6001836020036101000a0380198251168184511680821785525050505050509050019a50505050505050505050506040516020818303038152906040528051906020012090506137c48185613e28565b92505050979650505050505050565b600060606040805190810160405280600381526020017f3231320000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a00000000000081525082306002546001600681111561385957fe5b8c8c8c8c604051602001808a805190602001908083835b6020831015156138955780518252602082019150602081019050602083039250613870565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b6020831015156138e857805182526020820191506020810190506020830392506138c3565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c01000000000000000000000000028152601401878152602001868152602001858152602001848152602001838152602001828152602001995050505050505050505060405160208183030381529060405280519060200120905061399c8185613e28565b9250505095945050505050565b60008460020160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806004015483111515613a0057600080fd5b8281600401819055508181600301819055505050505050565b600080828411613a2e57600084819150613a33565b828403835b915091509250929050565b6000806001028560030154148015613a565750600084145b8015613a625750600083145b15613a705760019050613ab0565b8383836040516020018084815260200183815260200182815260200193505050506040516020818303038152906040528051906020012085600301541490505b949350505050565b6000806000806000806000613acb613ff0565b613ad3613ff0565b8e600001548260000181815250508e600101548260200181815250508d8260400181815250508c8260600181815250508b600001548160000181815250508b600101548160200181815250508a81604001818152505089816060018181525050613b3d8f8d613f3b565b9250613b498282613f5c565b9450613b55858461340a565b94508483039350613b66858b613a19565b809b508196505050613b78848e613a19565b809e508195505050828511151515613b8c57fe5b828411151515613b9857fe5b898d858701010183141515613ba957fe5b84848e8c985098509850985050505050509650965096509692505050565b6000821415613bd557613c10565b6000613be28686866132a7565b90506000600b6000838152602001908152602001600020905082816000018190555083816001018190555050505b5050505050565b600060606040805190810160405280600381526020017f3230300000000000000000000000000000000000000000000000000000000000815250905060006040805190810160405280601a81526020017f19457468657265756d205369676e6564204d6573736167653a0a000000000000815250823060025460036006811115613c9d57fe5b8c8c8c8c604051602001808a805190602001908083835b602083101515613cd95780518252602082019150602081019050602083039250613cb4565b6001836020036101000a03801982511681845116808217855250505050505090500189805190602001908083835b602083101515613d2c5780518252602082019150602081019050602083039250613d07565b6001836020036101000a0380198251168184511680821785525050505050509050018873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c010000000000000000000000000281526014018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050613e1b8185613e28565b9250505095945050505050565b600060418251141515613e3a57600080fd5b60008060006020850151925060408501519150606085015160001a9050601b8160ff161015613e6a57601b810190505b601b8160ff161480613e7f5750601c8160ff16145b1515613e8a57600080fd5b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613ee7573d6000803e3d6000fd5b505050602060405103519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515613f2f57600080fd5b83935050505092915050565b60008160010154836001015483600001548560000154010303905092915050565b6000806000806000613f7687604001518860600151613566565b9350613f8a86604001518760600151613566565b9250838310151515613f9b57600080fd5b86604001518410151515613fab57fe5b85604001518310151515613fbb57fe5b8383039150613fce828860000151613566565b9050613fde818860200151613a19565b50809150508094505050505092915050565b60806040519081016040528060008152602001600081526020016000815260200160008152509056fea165627a7a72305820be07bd77c4fe7e15120522eaea40802f2a5b8d8a92b5bc830fc88eafc2791f120029", + "metadata": "{\"compiler\":{\"version\":\"0.5.4+commit.9549d8ff\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"receiver\",\"type\":\"address\"},{\"name\":\"sender\",\"type\":\"address\"},{\"name\":\"locks\",\"type\":\"bytes\"}],\"name\":\"unlock\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"openChannel\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"locks\",\"type\":\"bytes\"},{\"name\":\"offset\",\"type\":\"uint256\"}],\"name\":\"getLockedAmountFromLockPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"deprecate\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"a\",\"type\":\"uint256\"},{\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"maxPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_max\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"deprecation_executor\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"secret_registry\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"chain_id\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token_network_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"participants_hash_to_channel_identifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_participant_deposit_limit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"total_deposit\",\"type\":\"uint256\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"setTotalDeposit\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"channel_counter\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"a\",\"type\":\"uint256\"},{\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"failsafe_additionPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"MAX_SAFE_UINT256\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"contract_address\",\"type\":\"address\"}],\"name\":\"contractExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getParticipantsHash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"}],\"name\":\"closeChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant2\",\"type\":\"address\"}],\"name\":\"getChannelInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"signature_prefix\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"a\",\"type\":\"uint256\"},{\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"failsafe_subtractPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant1\",\"type\":\"address\"},{\"name\":\"participant1_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant1_locksroot\",\"type\":\"bytes32\"},{\"name\":\"participant2\",\"type\":\"address\"},{\"name\":\"participant2_transferred_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locked_amount\",\"type\":\"uint256\"},{\"name\":\"participant2_locksroot\",\"type\":\"bytes32\"}],\"name\":\"settleChannel\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"total_withdraw\",\"type\":\"uint256\"},{\"name\":\"expiration_block\",\"type\":\"uint256\"},{\"name\":\"participant_signature\",\"type\":\"bytes\"},{\"name\":\"partner_signature\",\"type\":\"bytes\"}],\"name\":\"setTotalWithdraw\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"safety_deprecation_switch\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"settlement_timeout_min\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"a\",\"type\":\"uint256\"},{\"name\":\"b\",\"type\":\"uint256\"}],\"name\":\"minPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"locks\",\"type\":\"bytes\"}],\"name\":\"getHashAndUnlockedAmountPublic\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"get_max_safe_uint256\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"channels\",\"outputs\":[{\"name\":\"settle_block_number\",\"type\":\"uint256\"},{\"name\":\"state\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"participant\",\"type\":\"address\"},{\"name\":\"partner\",\"type\":\"address\"}],\"name\":\"getChannelParticipantInfo\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bool\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"closing_participant\",\"type\":\"address\"},{\"name\":\"non_closing_participant\",\"type\":\"address\"},{\"name\":\"balance_hash\",\"type\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint256\"},{\"name\":\"additional_hash\",\"type\":\"bytes32\"},{\"name\":\"closing_signature\",\"type\":\"bytes\"},{\"name\":\"non_closing_signature\",\"type\":\"bytes\"}],\"name\":\"updateNonClosingBalanceProof\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\"},{\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"getUnlockIdentifier\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_token_address\",\"type\":\"address\"},{\"name\":\"_secret_registry\",\"type\":\"address\"},{\"name\":\"_chain_id\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_min\",\"type\":\"uint256\"},{\"name\":\"_settlement_timeout_max\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant1\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"participant2\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"settle_timeout\",\"type\":\"uint256\"}],\"name\":\"ChannelOpened\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"total_deposit\",\"type\":\"uint256\"}],\"name\":\"ChannelNewDeposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"new_value\",\"type\":\"bool\"}],\"name\":\"DeprecationSwitch\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"participant\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"total_withdraw\",\"type\":\"uint256\"}],\"name\":\"ChannelWithdraw\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"balance_hash\",\"type\":\"bytes32\"}],\"name\":\"ChannelClosed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"locksroot\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"unlocked_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"returned_tokens\",\"type\":\"uint256\"}],\"name\":\"ChannelUnlocked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":true,\"name\":\"closing_participant\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"nonce\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"balance_hash\",\"type\":\"bytes32\"}],\"name\":\"NonClosingBalanceProofUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"channel_identifier\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant1_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant1_locksroot\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"participant2_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"participant2_locksroot\",\"type\":\"bytes32\"}],\"name\":\"ChannelSettled\",\"type\":\"event\"}],\"devdoc\":{\"methods\":{\"closeChannel(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"closing_participant\":\"Channel participant who closes the channel.\",\"closing_signature\":\"Closing participant's signature of the balance proof data.\",\"non_closing_participant\":\"Channel partner of the `closing_participant`, who provided the balance proof.\",\"non_closing_signature\":\"Non-closing participant's signature of the balance proof data.\",\"nonce\":\"Strictly monotonic value used to order transfers.\"}},\"contractExists(address)\":{\"params\":{\"contract_address\":\"The address to check whether a contract is deployed or not\"},\"return\":\"True if a contract exists, false otherwise\"},\"getChannelIdentifier(address,address)\":{\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"},\"return\":\"Unique identifier for the channel. It can be 0 if channel does not exist.\"},\"getChannelInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Address of a channel participant.\",\"participant2\":\"Address of the other channel participant.\"},\"return\":\"Channel settle_block_number and state.\"},\"getChannelParticipantInfo(uint256,address,address)\":{\"details\":\"Returns the channel specific data.\",\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Address of the channel participant whose data will be returned.\",\"partner\":\"Address of the channel partner.\"},\"return\":\"Participant's deposit, withdrawn_amount, whether the participant has called `closeChannel` or not, balance_hash, nonce, locksroot, locked_amount.\"},\"getParticipantsHash(address,address)\":{\"details\":\"Get the hash of the participant addresses, ordered lexicographically.\",\"params\":{\"participant\":\"Address of a channel participant.\",\"partner\":\"Address of the other channel participant.\"}},\"getUnlockIdentifier(uint256,address,address)\":{\"details\":\"Get the hash of the channel identifier and the participant addresses (whose ordering matters). The hash might be useful for the receiver to look up the appropriate UnlockData to claim.\",\"params\":{\"channel_identifier\":\"Identifier for the channel which the UnlockData is about.\",\"receiver\":\"Receiver of the pending transfers that the UnlockData represents.\",\"sender\":\"Sender of the pending transfers that the UnlockData represents.\"}},\"openChannel(address,address,uint256)\":{\"params\":{\"participant1\":\"Ethereum address of a channel participant.\",\"participant2\":\"Ethereum address of the other channel participant.\",\"settle_timeout\":\"Number of blocks that need to be mined between a call to closeChannel and settleChannel.\"}},\"setTotalDeposit(uint256,address,uint256,address)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Channel participant whose deposit is being set.\",\"partner\":\"Channel partner address, needed to compute the total channel deposit.\",\"total_deposit\":\"The total amount of tokens that the participant will have as a deposit.\"}},\"setTotalWithdraw(uint256,address,uint256,uint256,bytes,bytes)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant\":\"Channel participant, who will receive the withdrawn amount.\",\"participant_signature\":\"Participant's signature on the withdraw data.\",\"partner_signature\":\"Partner's signature on the withdraw data.\",\"total_withdraw\":\"Total amount of tokens that are marked as withdrawn from the channel during the channel lifecycle.\"}},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"participant1\":\"Channel participant.\",\"participant1_locked_amount\":\"Amount of tokens owed by `participant1` to `participant2`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant1_locksroot\":\"The latest known hash of the pending hash-time locks of `participant1`, used to validate the unlocked proofs. If no balance_hash has been submitted, locksroot is ignored.\",\"participant1_transferred_amount\":\"The latest known amount of tokens transferred from `participant1` to `participant2`.\",\"participant2\":\"Other channel participant.\",\"participant2_locked_amount\":\"Amount of tokens owed by `participant2` to `participant1`, contained in locked transfers that will be retrieved by calling `unlock` after the channel is settled.\",\"participant2_locksroot\":\"The latest known hash of the pending hash-time locks of `participant2`, used to validate the unlocked proofs. If no balance_hash has been submitted, locksroot is ignored.\",\"participant2_transferred_amount\":\"The latest known amount of tokens transferred from `participant2` to `participant1`.\"}},\"unlock(uint256,address,address,bytes)\":{\"params\":{\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"locks\":\"All pending locks concatenated in order of creation. that `sender` sent to `receiver`.\",\"receiver\":\"Address who will receive the claimable unlocked tokens.\",\"sender\":\"Address who sent the pending transfers and will receive the unclaimable unlocked tokens.\"}},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"params\":{\"additional_hash\":\"Computed from the message. Used for message authentication.\",\"balance_hash\":\"Hash of (transferred_amount, locked_amount, locksroot).\",\"channel_identifier\":\"Identifier for the channel on which this operation takes place.\",\"closing_participant\":\"Channel participant who closed the channel.\",\"closing_signature\":\"Closing participant's signature of the balance proof data.\",\"non_closing_participant\":\"Channel participant who needs to update the balance proof.\",\"non_closing_signature\":\"Non-closing participant signature of the balance proof data.\",\"nonce\":\"Strictly monotonic value used to order transfers.\"}}}},\"userdoc\":{\"methods\":{\"closeChannel(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"notice\":\"Close the channel defined by the two participant addresses. Anybody can call this function on behalf of a participant (called the closing participant), providing a balance proof signed by both parties. Callable only once.\"},\"contractExists(address)\":{\"notice\":\"Check if a contract exists\"},\"getChannelIdentifier(address,address)\":{\"notice\":\"Returns the unique identifier for the channel given by the contract.\"},\"getChannelInfo(uint256,address,address)\":{\"notice\":\"The contract cannot really distinguish Settled and Removed states, especially when wrong participants are given as input. The contract does not remember the participants of the channel.\"},\"openChannel(address,address,uint256)\":{\"notice\":\"Opens a new channel between `participant1` and `participant2`. Can be called by anyone.\"},\"setTotalDeposit(uint256,address,uint256,address)\":{\"notice\":\"Sets the channel participant total deposit value. Can be called by anyone.\"},\"setTotalWithdraw(uint256,address,uint256,uint256,bytes,bytes)\":{\"notice\":\"Allows `participant` to withdraw tokens from the channel that he has with `partner`, without closing it. Can be called by anyone. Can only be called once per each signed withdraw message.\"},\"settleChannel(uint256,address,uint256,uint256,bytes32,address,uint256,uint256,bytes32)\":{\"notice\":\"Settles the balance between the two parties. Note that arguments order counts: `participant1_transferred_amount + participant1_locked_amount` <= `participant2_transferred_amount + participant2_locked_amount`\"},\"unlock(uint256,address,address,bytes)\":{\"notice\":\"Unlocks all pending off-chain transfers from `sender` to `receiver` and sends the locked tokens corresponding to locks with secrets registered on-chain to the `receiver`. Locked tokens corresponding to locks where the secret was not revealed on-chain will return to the `sender`. Anyone can call unlock.\"},\"updateNonClosingBalanceProof(uint256,address,address,bytes32,uint256,bytes32,bytes,bytes)\":{\"notice\":\"Called on a closed channel, the function allows the non-closing participant to provide the last balance proof, which modifies the closing participant's state. Can be called multiple times by anyone.\"}}}},\"settings\":{\"compilationTarget\":{\"data/source/test/TokenNetworkInternalsTest.sol\":\"TokenNetworkUtilsTest\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[\":.=.\",\":lib=data/source/lib\",\":raiden=data/source/raiden\",\":services=data/source/services\",\":test=data/source/test\"]},\"sources\":{\"data/source/lib/ECVerify.sol\":{\"keccak256\":\"0x8bb402baa478eb53252d77b63982e12685adda290cf4dfa1d8f510284f8df3e9\",\"urls\":[\"bzzr://474c3db1bb54bb831c32eb2ab67a0e870489994bd4d4b8a8fa24b54935211d43\"]},\"data/source/raiden/SecretRegistry.sol\":{\"keccak256\":\"0xb8078bc048ccdeb7c58026754f22fc378baf3b24090db0f17d10bda6cd4951b4\",\"urls\":[\"bzzr://f7a072330393a85a6a274ef526ac2ca0f8eb217bf5f48c18b3080be7ac3a7ede\"]},\"data/source/raiden/Token.sol\":{\"keccak256\":\"0x41b40819d7f6714550c742f48ce46daeb97255c08bc56e83bb9fde4fbe14c3b4\",\"urls\":[\"bzzr://a20e2bea336fb01584cf4dc80e77bb8db3c33666f77f840fd58559116849ae4b\"]},\"data/source/raiden/TokenNetwork.sol\":{\"keccak256\":\"0x8a0471fe654a6eabe757133f5c6b3b3a8d19acce975625d097192cc775d94bbe\",\"urls\":[\"bzzr://7c9b05aac5ab23979b7863a4b15421d28ac2b515b673c0b0d296c580b60cde86\"]},\"data/source/raiden/Utils.sol\":{\"keccak256\":\"0x602fd914e5644696d3c5d42e3a39fe6f16e7ddcc93f8864aa7e368a70cb56d0b\",\"urls\":[\"bzzr://b884810b9826074efb212a825d33409c35d9a159681690e821da3643052be3d1\"]},\"data/source/test/TokenNetworkInternalsTest.sol\":{\"keccak256\":\"0x8e81d3c0a95409085ede2f3bc74986a0348cfdb0ff47f7e18589397bd5960085\",\"urls\":[\"bzzr://2421f40e5bdc2d79549dde21fa8291d3b7c2510806f15e1183cdd79894c5341a\"]}},\"version\":1}" }, "UDCTransfer": { "abi": [ @@ -7668,13 +7672,13 @@ "SignatureVerifyTest.sol": "505b5b380b36f5aff4b7cb6316a5985b31f7f78c61b23ca56c545473085d6f3b", "StandardToken.sol": "3dcb1cc738bd525c27a00afdcec0b177e47be2e622906d210001995ab99141ab", "Token.sol": "1a73cc2b96ad17dca1b5ba83d943e4576764862c56037905daea0544277d4cd4", - "TokenNetwork.sol": "db984616832915c167a0cf69411886f4b20e649493990f1fd92c4436a6ad7736", - "TokenNetworkInternalsTest.sol": "8ae3c4f40b14e770d6205b9bc4a3a8386c7386f9af860bbed02b554eef49bfe1", + "TokenNetwork.sol": "83f27d184a176f462f3d57674db1abde3457a6d22a25b6150aeff88498468d0c", + "TokenNetworkInternalsTest.sol": "b0c644894b9fac96310a5f5f0d66b75889f2e8d84fc5ddf10b68dbb2b822fdcd", "TokenNetworkRegistry.sol": "d4ac1877f040e0bc126033b950aa1679cbea8105fdc1abf1ae6c3e611f5ef198", "UDCTransfer.sol": "99ba67c9fdb62ab01998ca9ac6aed2be40e2e86eba021f35f6a15621cc49bfbf", "UserDeposit.sol": "08009c66d3c8a581908014e4de01dc5b4c36e753df8b41bf5a28d66b477fc0d7", "Utils.sol": "c37282ebe7cae3a26a8bdb34c25f779202e99d95e09a68cae6b9e92199f10f32" }, "contracts_version": null, - "overall_checksum": "8a2db4977a88d19478fb6a7fe46220f557bf24ef17bab72fe32ae4a10ee6767e" + "overall_checksum": "f2283ea5aa7f944b4eb95d6603b88dd6654612a1b4cf333f4125225dc79f1dd1" } \ No newline at end of file diff --git a/raiden_contracts/data/source/raiden/TokenNetwork.sol b/raiden_contracts/data/source/raiden/TokenNetwork.sol index b1fa35eca..2ee48e5c8 100644 --- a/raiden_contracts/data/source/raiden/TokenNetwork.sol +++ b/raiden_contracts/data/source/raiden/TokenNetwork.sol @@ -517,6 +517,7 @@ contract TokenNetwork is Utils { // The closing participant must have signed the balance proof. address recovered_closing_participant_address = recoverAddressFromBalanceProofCounterSignature( + MessageTypeId.BalanceProof, channel_identifier, balance_hash, nonce, @@ -621,6 +622,7 @@ contract TokenNetwork is Utils { // We need the signature from the non-closing participant to allow // anyone to make this transaction. E.g. a monitoring service. recovered_non_closing_participant = recoverAddressFromBalanceProofCounterSignature( + MessageTypeId.BalanceProofUpdate, channel_identifier, balance_hash, nonce, @@ -1508,6 +1510,7 @@ contract TokenNetwork is Utils { } function recoverAddressFromBalanceProofCounterSignature( + MessageTypeId message_type_id, uint256 channel_identifier, bytes32 balance_hash, uint256 nonce, @@ -1527,7 +1530,7 @@ contract TokenNetwork is Utils { message_length, address(this), chain_id, - uint256(MessageTypeId.BalanceProofUpdate), + uint256(message_type_id), channel_identifier, balance_hash, nonce, diff --git a/raiden_contracts/data/source/test/TokenNetworkInternalsTest.sol b/raiden_contracts/data/source/test/TokenNetworkInternalsTest.sol index d996e5e6f..11b6bc5b4 100644 --- a/raiden_contracts/data/source/test/TokenNetworkInternalsTest.sol +++ b/raiden_contracts/data/source/test/TokenNetworkInternalsTest.sol @@ -184,6 +184,7 @@ contract TokenNetworkSignatureTest is TokenNetwork { } function recoverAddressFromBalanceProofCounterSignaturePublic( + MessageTypeId message_type_id, uint256 channel_identifier, bytes32 balance_hash, uint256 nonce, @@ -196,6 +197,7 @@ contract TokenNetworkSignatureTest is TokenNetwork { returns (address signature_address) { return recoverAddressFromBalanceProofCounterSignature( + message_type_id, channel_identifier, balance_hash, nonce, diff --git a/raiden_contracts/tests/fixtures/channel.py b/raiden_contracts/tests/fixtures/channel.py index 7f3a09bc3..c984edfb3 100644 --- a/raiden_contracts/tests/fixtures/channel.py +++ b/raiden_contracts/tests/fixtures/channel.py @@ -6,7 +6,7 @@ from web3 import Web3 from web3.contract import Contract -from raiden_contracts.constants import TEST_SETTLE_TIMEOUT_MIN, ChannelState +from raiden_contracts.constants import TEST_SETTLE_TIMEOUT_MIN, ChannelState, MessageTypeId from raiden_contracts.tests.utils import ( EMPTY_ADDITIONAL_HASH, EMPTY_BALANCE_HASH, @@ -24,7 +24,7 @@ from raiden_contracts.utils.proofs import ( hash_balance_data, sign_balance_proof, - sign_balance_proof_update_message, + sign_balance_proof_message, sign_cooperative_settle_message, sign_withdraw_message, ) @@ -203,10 +203,10 @@ def get( additional_hash2, ) balance_proof_close_signature_1 = create_balance_proof_countersignature( - participant1, channel_identifier, *balance_proof_2 + participant1, channel_identifier, MessageTypeId.BALANCE_PROOF, *balance_proof_2 ) balance_proof_update_signature_2 = create_balance_proof_countersignature( - participant2, channel_identifier, *balance_proof_1 + participant2, channel_identifier, MessageTypeId.BALANCE_PROOF_UPDATE, *balance_proof_1 ) token_network.functions.closeChannel( @@ -647,6 +647,7 @@ def get( _token_network.address, int(_token_network.functions.chain_id().call()), channel_identifier, + MessageTypeId.BALANCE_PROOF, balance_hash, nonce, additional_hash, @@ -664,6 +665,7 @@ def create_balance_proof_countersignature( def get( participant: HexAddress, channel_identifier: int, + msg_type: MessageTypeId, balance_hash: bytes, nonce: int, additional_hash: bytes, @@ -674,11 +676,12 @@ def get( _token_network = other_token_network or token_network private_key = get_private_key(participant) - non_closing_signature = sign_balance_proof_update_message( + non_closing_signature = sign_balance_proof_message( private_key, _token_network.address, int(_token_network.functions.chain_id().call()), channel_identifier, + msg_type, balance_hash, nonce, additional_hash, @@ -703,11 +706,12 @@ def get( _token_network = other_token_network or token_network private_key = get_private_key(participant) - non_closing_signature = sign_balance_proof_update_message( + non_closing_signature = sign_balance_proof_message( private_key, _token_network.address, int(_token_network.functions.chain_id().call()), channel_identifier, + MessageTypeId.BALANCE_PROOF, EMPTY_BALANCE_HASH, 0, EMPTY_ADDITIONAL_HASH, diff --git a/raiden_contracts/tests/test_channel_close.py b/raiden_contracts/tests/test_channel_close.py index bb4ef2f83..932f13af9 100644 --- a/raiden_contracts/tests/test_channel_close.py +++ b/raiden_contracts/tests/test_channel_close.py @@ -5,7 +5,12 @@ from web3 import Web3 from web3.contract import Contract -from raiden_contracts.constants import TEST_SETTLE_TIMEOUT_MIN, ChannelEvent, ChannelState +from raiden_contracts.constants import ( + TEST_SETTLE_TIMEOUT_MIN, + ChannelEvent, + ChannelState, + MessageTypeId, +) from raiden_contracts.tests.utils import ( EMPTY_ADDITIONAL_HASH, EMPTY_BALANCE_HASH, @@ -124,7 +129,7 @@ def test_close_wrong_signature( channel_identifier, C, transferred_amount, 0, nonce, locksroot ) closing_signature_A = create_balance_proof_countersignature( - A, channel_identifier, *balance_proof + A, channel_identifier, MessageTypeId.BALANCE_PROOF, *balance_proof ) with pytest.raises(TransactionFailed): @@ -225,7 +230,9 @@ def test_close_nonce_zero( vals_B.nonce, vals_B.locksroot, ) - close_sig_A = create_balance_proof_countersignature(A, channel_identifier, *balance_proof_B) + close_sig_A = create_balance_proof_countersignature( + A, channel_identifier, MessageTypeId.BALANCE_PROOF, *balance_proof_B + ) ( _, @@ -285,8 +292,12 @@ def test_close_first_argument_is_for_partner_transfer( # Create balance proofs balance_proof = create_balance_proof(channel_identifier, B) - closing_sig_A = create_balance_proof_countersignature(A, channel_identifier, *balance_proof) - closing_sig_B = create_balance_proof_countersignature(B, channel_identifier, *balance_proof) + closing_sig_A = create_balance_proof_countersignature( + A, channel_identifier, MessageTypeId.BALANCE_PROOF, *balance_proof + ) + closing_sig_B = create_balance_proof_countersignature( + B, channel_identifier, MessageTypeId.BALANCE_PROOF, *balance_proof + ) # closeChannel fails, if the provided balance proof is from the same participant who closes with pytest.raises(TransactionFailed): @@ -460,7 +471,9 @@ def test_close_channel_state( vals_B.nonce, vals_B.locksroot, ) - closing_sig_A = create_balance_proof_countersignature(A, channel_identifier, *balance_proof_B) + closing_sig_A = create_balance_proof_countersignature( + A, channel_identifier, MessageTypeId.BALANCE_PROOF, *balance_proof_B + ) txn_hash = token_network.functions.closeChannel( channel_identifier, B, A, *balance_proof_B, closing_sig_A @@ -568,7 +581,9 @@ def test_close_replay_reopened_channel( nonce, values_B.locksroot, ) - closing_sig_A = create_balance_proof_countersignature(A, channel_identifier1, *balance_proof_B) + closing_sig_A = create_balance_proof_countersignature( + A, channel_identifier1, MessageTypeId.BALANCE_PROOF, *balance_proof_B + ) token_network.functions.closeChannel( channel_identifier1, B, A, *balance_proof_B, closing_sig_A ).call_and_transact({"from": A}) @@ -605,7 +620,7 @@ def test_close_replay_reopened_channel( values_B.locksroot, ) closing_sig_A2 = create_balance_proof_countersignature( - A, channel_identifier2, *balance_proof_B2 + A, channel_identifier2, MessageTypeId.BALANCE_PROOF, *balance_proof_B2 ) token_network.functions.closeChannel( channel_identifier2, B, A, *balance_proof_B2, closing_sig_A2 @@ -631,7 +646,9 @@ def test_close_channel_event( balance_proof = create_balance_proof( channel_identifier, B, transferred_amount=5, locked_amount=0, nonce=3 ) - close_sig = create_balance_proof_countersignature(A, channel_identifier, *balance_proof) + close_sig = create_balance_proof_countersignature( + A, channel_identifier, MessageTypeId.BALANCE_PROOF, *balance_proof + ) txn_hash = token_network.functions.closeChannel( channel_identifier, B, A, *balance_proof, close_sig diff --git a/raiden_contracts/tests/test_channel_settle.py b/raiden_contracts/tests/test_channel_settle.py index 0a4d74541..30f01e518 100644 --- a/raiden_contracts/tests/test_channel_settle.py +++ b/raiden_contracts/tests/test_channel_settle.py @@ -6,7 +6,12 @@ from web3 import Web3 from web3.contract import Contract -from raiden_contracts.constants import TEST_SETTLE_TIMEOUT_MIN, ChannelEvent, ChannelState +from raiden_contracts.constants import ( + TEST_SETTLE_TIMEOUT_MIN, + ChannelEvent, + ChannelState, + MessageTypeId, +) from raiden_contracts.tests.fixtures.channel import call_settle from raiden_contracts.tests.utils import ( EMPTY_ADDITIONAL_HASH, @@ -184,7 +189,9 @@ def test_settle_single_direct_transfer_for_closing_party( 1, LOCKSROOT_OF_NO_LOCKS, ) - closing_sig_A = create_balance_proof_countersignature(A, channel_identifier, *balance_proof_B) + closing_sig_A = create_balance_proof_countersignature( + A, channel_identifier, MessageTypeId.BALANCE_PROOF, *balance_proof_B + ) token_network.functions.closeChannel( channel_identifier, B, A, *balance_proof_B, closing_sig_A ).call_and_transact({"from": A}) @@ -266,7 +273,7 @@ def test_settle_single_direct_transfer_for_counterparty( ) balance_proof_update_signature_B = create_balance_proof_countersignature( - B, channel_identifier, *balance_proof_A + B, channel_identifier, MessageTypeId.BALANCE_PROOF_UPDATE, *balance_proof_A ) token_network.functions.updateNonClosingBalanceProof( channel_identifier, A, B, *balance_proof_A, balance_proof_update_signature_B @@ -584,9 +591,11 @@ def test_settle_channel_event( balance_proof_A = create_balance_proof(channel_identifier, A, 10, 0, 1, LOCKSROOT_OF_NO_LOCKS) balance_proof_B = create_balance_proof(channel_identifier, B, 5, 0, 3, LOCKSROOT_OF_NO_LOCKS) balance_proof_update_signature_B = create_balance_proof_countersignature( - B, channel_identifier, *balance_proof_A + B, channel_identifier, MessageTypeId.BALANCE_PROOF_UPDATE, *balance_proof_A + ) + close_sig_A = create_balance_proof_countersignature( + A, channel_identifier, MessageTypeId.BALANCE_PROOF, *balance_proof_B ) - close_sig_A = create_balance_proof_countersignature(A, channel_identifier, *balance_proof_B) token_network.functions.closeChannel( channel_identifier, B, A, *balance_proof_B, close_sig_A diff --git a/raiden_contracts/tests/test_channel_update_transfer.py b/raiden_contracts/tests/test_channel_update_transfer.py index 13a3ca8ab..c06d8b2fa 100644 --- a/raiden_contracts/tests/test_channel_update_transfer.py +++ b/raiden_contracts/tests/test_channel_update_transfer.py @@ -11,6 +11,7 @@ TEST_SETTLE_TIMEOUT_MIN, ChannelEvent, ChannelState, + MessageTypeId, ) from raiden_contracts.tests.utils import ( EMPTY_ADDITIONAL_HASH, @@ -49,7 +50,7 @@ def test_update_call( balance_proof_A = create_balance_proof(channel_identifier, A, 10, 0, 5, fake_bytes(32, "02")) balance_proof_update_signature_B = create_balance_proof_countersignature( - B, channel_identifier, *balance_proof_A + B, channel_identifier, MessageTypeId.BALANCE_PROOF_UPDATE, *balance_proof_A ) (balance_hash, nonce, additional_hash, closing_signature) = balance_proof_A @@ -149,7 +150,7 @@ def test_update_nonexistent_fail( balance_proof_A = create_balance_proof(channel_identifier, A, 10, 0, 5, fake_bytes(32, "02")) balance_proof_update_signature_B = create_balance_proof_countersignature( - B, channel_identifier, *balance_proof_A + B, channel_identifier, MessageTypeId.BALANCE_PROOF_UPDATE, *balance_proof_A ) with pytest.raises(TransactionFailed): @@ -173,7 +174,7 @@ def test_update_notclosed_fail( balance_proof_A = create_balance_proof(channel_identifier, A, 10, 0, 5, fake_bytes(32, "02")) balance_proof_update_signature_B = create_balance_proof_countersignature( - B, channel_identifier, *balance_proof_A + B, channel_identifier, MessageTypeId.BALANCE_PROOF_UPDATE, *balance_proof_A ) (settle_block_number, state) = token_network.functions.getChannelInfo( @@ -204,9 +205,11 @@ def test_update_wrong_nonce_fail( channel_deposit(channel_identifier, A, deposit_A, B) balance_proof_A = create_balance_proof(channel_identifier, A, 10, 0, 5, fake_bytes(32, "02")) balance_proof_B = create_balance_proof(channel_identifier, B, 5, 0, 3, fake_bytes(32, "02")) - closing_sig_A = create_balance_proof_countersignature(A, channel_identifier, *balance_proof_B) + closing_sig_A = create_balance_proof_countersignature( + A, channel_identifier, MessageTypeId.BALANCE_PROOF, *balance_proof_B + ) balance_proof_update_signature_B = create_balance_proof_countersignature( - B, channel_identifier, *balance_proof_A + B, channel_identifier, MessageTypeId.BALANCE_PROOF_UPDATE, *balance_proof_A ) txn_hash1 = token_network.functions.closeChannel( channel_identifier, B, A, *balance_proof_B, closing_sig_A @@ -234,7 +237,7 @@ def test_update_wrong_nonce_fail( ) balance_proof_update_signature_B = create_balance_proof_countersignature( - B, channel_identifier, *balance_proof_A_lower_nonce + B, channel_identifier, MessageTypeId.BALANCE_PROOF_UPDATE, *balance_proof_A_lower_nonce ) with pytest.raises(TransactionFailed): token_network.functions.updateNonClosingBalanceProof( @@ -270,10 +273,10 @@ def test_update_wrong_signatures( ) balance_proof_update_signature_B = create_balance_proof_countersignature( - B, channel_identifier, *balance_proof_A + B, channel_identifier, MessageTypeId.BALANCE_PROOF_UPDATE, *balance_proof_A ) balance_proof_update_signature_B_fake = create_balance_proof_countersignature( - C, channel_identifier, *balance_proof_A + C, channel_identifier, MessageTypeId.BALANCE_PROOF_UPDATE, *balance_proof_A ) # Close the channel so updateNonClosingBalanceProof() is possible @@ -324,9 +327,11 @@ def test_update_channel_state( channel_deposit(channel_identifier, A, deposit_A, B) balance_proof_A = create_balance_proof(channel_identifier, A, 10, 0, 5, fake_bytes(32, "02")) balance_proof_B = create_balance_proof(channel_identifier, B, 5, 0, 3, fake_bytes(32, "02")) - closing_sig_A = create_balance_proof_countersignature(A, channel_identifier, *balance_proof_B) + closing_sig_A = create_balance_proof_countersignature( + A, channel_identifier, MessageTypeId.BALANCE_PROOF, *balance_proof_B + ) balance_proof_update_signature_B = create_balance_proof_countersignature( - B, channel_identifier, *balance_proof_A + B, channel_identifier, MessageTypeId.BALANCE_PROOF_UPDATE, *balance_proof_A ) txn_hash1 = token_network.functions.closeChannel( @@ -376,7 +381,7 @@ def test_update_channel_fail_no_offchain_transfers( channel_identifier = create_channel(A, B)[0] balance_proof_A = create_balance_proof(channel_identifier, A, 0, 0, 0) balance_proof_update_signature_B = create_balance_proof_countersignature( - B, channel_identifier, *balance_proof_A + B, channel_identifier, MessageTypeId.BALANCE_PROOF_UPDATE, *balance_proof_A ) closing_sig = create_close_signature_for_no_balance_proof(A, channel_identifier) @@ -426,9 +431,11 @@ def test_update_not_allowed_after_settlement_period( channel_deposit(channel_identifier, A, deposit_A, B) balance_proof_A = create_balance_proof(channel_identifier, A, 10, 0, 5, fake_bytes(32, "02")) balance_proof_B = create_balance_proof(channel_identifier, B, 5, 0, 3, fake_bytes(32, "02")) - closing_sig_A = create_balance_proof_countersignature(A, channel_identifier, *balance_proof_B) + closing_sig_A = create_balance_proof_countersignature( + A, channel_identifier, MessageTypeId.BALANCE_PROOF, *balance_proof_B + ) balance_proof_update_signature_B = create_balance_proof_countersignature( - B, channel_identifier, *balance_proof_A + B, channel_identifier, MessageTypeId.BALANCE_PROOF_UPDATE, *balance_proof_A ) token_network.functions.closeChannel( channel_identifier, B, A, *balance_proof_B, closing_sig_A @@ -458,7 +465,7 @@ def test_update_not_allowed_for_the_closing_address( # Some balance proof from B balance_proof_B_0 = create_balance_proof(channel_identifier, B, 5, 0, 3, fake_bytes(32, "02")) closing_sig_A_0 = create_balance_proof_countersignature( - A, channel_identifier, *balance_proof_B_0 + A, channel_identifier, MessageTypeId.BALANCE_PROOF, *balance_proof_B_0 ) # Later balance proof, higher transferred amount, higher nonce @@ -466,7 +473,7 @@ def test_update_not_allowed_for_the_closing_address( # B's signature on the update message is valid balance_proof_update_signature_B = create_balance_proof_countersignature( - B, channel_identifier, *balance_proof_B_1 + B, channel_identifier, MessageTypeId.BALANCE_PROOF_UPDATE, *balance_proof_B_1 ) # A closes with the first balance proof @@ -529,7 +536,7 @@ def test_update_invalid_balance_proof_arguments( # And a valid nonclosing_signature valid_balance_proof_update_signature = create_balance_proof_countersignature( - B, channel_identifier, *balance_proof_valid + B, channel_identifier, MessageTypeId.BALANCE_PROOF_UPDATE, *balance_proof_valid ) # We test invalid balance proof arguments with valid signatures @@ -550,6 +557,7 @@ def test_update_invalid_balance_proof_arguments( signature_invalid_token_network = create_balance_proof_countersignature( B, channel_identifier, + MessageTypeId.BALANCE_PROOF_UPDATE, balance_proof_valid.balance_hash, balance_proof_valid.nonce, balance_proof_valid.additional_hash, @@ -573,6 +581,7 @@ def test_update_invalid_balance_proof_arguments( signature_invalid_channel_participant = create_balance_proof_countersignature( B, channel_identifier, + MessageTypeId.BALANCE_PROOF_UPDATE, balance_proof_valid.balance_hash, balance_proof_valid.nonce, balance_proof_valid.additional_hash, @@ -595,6 +604,7 @@ def test_update_invalid_balance_proof_arguments( signature_invalid_channel_identifier = create_balance_proof_countersignature( B, channel_identifier + 1, + MessageTypeId.BALANCE_PROOF_UPDATE, balance_proof_valid.balance_hash, balance_proof_valid.nonce, balance_proof_valid.additional_hash, @@ -612,6 +622,7 @@ def test_update_invalid_balance_proof_arguments( signature_invalid_balance_hash = create_balance_proof_countersignature( B, channel_identifier, + MessageTypeId.BALANCE_PROOF_UPDATE, balance_proof_valid.balance_hash[::-1], balance_proof_valid.nonce, balance_proof_valid.additional_hash, @@ -632,6 +643,7 @@ def test_update_invalid_balance_proof_arguments( signature_invalid_nonce = create_balance_proof_countersignature( B, channel_identifier, + MessageTypeId.BALANCE_PROOF_UPDATE, balance_proof_valid.balance_hash, 1, balance_proof_valid.additional_hash, @@ -653,6 +665,7 @@ def test_update_invalid_balance_proof_arguments( signature_invalid_additional_hash = create_balance_proof_countersignature( B, channel_identifier, + MessageTypeId.BALANCE_PROOF_UPDATE, balance_proof_valid.balance_hash, balance_proof_valid.nonce, balance_proof_valid.additional_hash[::-1], @@ -674,6 +687,7 @@ def test_update_invalid_balance_proof_arguments( signature_invalid_closing_signature = create_balance_proof_countersignature( B, channel_identifier, + MessageTypeId.BALANCE_PROOF_UPDATE, balance_proof_valid.balance_hash, balance_proof_valid.nonce, balance_proof_valid.additional_hash, @@ -743,6 +757,7 @@ def test_update_signature_on_invalid_arguments( signature_invalid_token_network_address = create_balance_proof_countersignature( B, channel_identifier, + MessageTypeId.BALANCE_PROOF_UPDATE, *balance_proof_valid, other_token_network=token_network_test_utils, # invalid token_network_address ) @@ -754,6 +769,7 @@ def test_update_signature_on_invalid_arguments( signature_invalid_participant = create_balance_proof_countersignature( C, # invalid signer channel_identifier, + MessageTypeId.BALANCE_PROOF_UPDATE, balance_proof_valid.balance_hash, balance_proof_valid.nonce, balance_proof_valid.additional_hash, @@ -767,6 +783,7 @@ def test_update_signature_on_invalid_arguments( signature_invalid_channel_identifier = create_balance_proof_countersignature( B, channel_identifier + 1, # invalid channel_identifier + MessageTypeId.BALANCE_PROOF_UPDATE, balance_proof_valid.balance_hash, balance_proof_valid.nonce, balance_proof_valid.additional_hash, @@ -780,6 +797,7 @@ def test_update_signature_on_invalid_arguments( signature_invalid_balance_hash = create_balance_proof_countersignature( B, channel_identifier, + MessageTypeId.BALANCE_PROOF_UPDATE, balance_proof_valid.balance_hash[::-1], # invalid balance_hash balance_proof_valid.nonce, balance_proof_valid.additional_hash, @@ -793,6 +811,7 @@ def test_update_signature_on_invalid_arguments( signature_invalid_nonce = create_balance_proof_countersignature( B, channel_identifier, + MessageTypeId.BALANCE_PROOF_UPDATE, balance_proof_valid.balance_hash, 1, # invalid nonce balance_proof_valid.additional_hash, @@ -806,6 +825,7 @@ def test_update_signature_on_invalid_arguments( signature_invalid_additional_hash = create_balance_proof_countersignature( B, channel_identifier, + MessageTypeId.BALANCE_PROOF_UPDATE, balance_proof_valid.balance_hash, balance_proof_valid.nonce, b"\x00" * 32, # invalid additional_hash @@ -819,6 +839,7 @@ def test_update_signature_on_invalid_arguments( signature_invalid_closing_signature = create_balance_proof_countersignature( B, channel_identifier, + MessageTypeId.BALANCE_PROOF_UPDATE, balance_proof_valid.balance_hash, balance_proof_valid.nonce, balance_proof_valid.additional_hash, @@ -831,7 +852,7 @@ def test_update_signature_on_invalid_arguments( # Call with same balance_proof and signature on valid arguments works balance_proof_update_signature = create_balance_proof_countersignature( - B, channel_identifier, *balance_proof_valid + B, channel_identifier, MessageTypeId.BALANCE_PROOF_UPDATE, *balance_proof_valid ) token_network.functions.updateNonClosingBalanceProof( channel_identifier, A, B, *balance_proof_valid, balance_proof_update_signature @@ -865,7 +886,7 @@ def test_update_replay_reopened_channel( values_B.locksroot, ) balance_proof_update_signature_A = create_balance_proof_countersignature( - A, channel_identifier1, *balance_proof_B + A, channel_identifier1, MessageTypeId.BALANCE_PROOF_UPDATE, *balance_proof_B ) closing_sig = create_close_signature_for_no_balance_proof(B, channel_identifier1) @@ -934,7 +955,7 @@ def test_update_replay_reopened_channel( values_B.locksroot, ) balance_proof_update_signature_A2 = create_balance_proof_countersignature( - A, channel_identifier2, *balance_proof_B2 + A, channel_identifier2, MessageTypeId.BALANCE_PROOF_UPDATE, *balance_proof_B2 ) token_network.functions.updateNonClosingBalanceProof( @@ -961,10 +982,12 @@ def test_update_channel_event( channel_deposit(channel_identifier, A, deposit_A, B) channel_deposit(channel_identifier, B, deposit_B, A) balance_proof_B = create_balance_proof(channel_identifier, B, 5, 0, 3) - closing_sig_A = create_balance_proof_countersignature(A, channel_identifier, *balance_proof_B) + closing_sig_A = create_balance_proof_countersignature( + A, channel_identifier, MessageTypeId.BALANCE_PROOF, *balance_proof_B + ) balance_proof_A = create_balance_proof(channel_identifier, A, 2, 0, 1) balance_proof_update_signature_B = create_balance_proof_countersignature( - B, channel_identifier, *balance_proof_A + B, channel_identifier, MessageTypeId.BALANCE_PROOF_UPDATE, *balance_proof_A ) token_network.functions.closeChannel( @@ -984,7 +1007,7 @@ def test_update_channel_event( # Test event for second balance proof update balance_proof_A2 = create_balance_proof(channel_identifier, A, 4, 0, 2) balance_proof_update_signature_B2 = create_balance_proof_countersignature( - B, channel_identifier, *balance_proof_A2 + B, channel_identifier, MessageTypeId.BALANCE_PROOF_UPDATE, *balance_proof_A2 ) txn_hash = token_network.functions.updateNonClosingBalanceProof( channel_identifier, A, B, *balance_proof_A2, balance_proof_update_signature_B2 diff --git a/raiden_contracts/tests/test_monitoring_service.py b/raiden_contracts/tests/test_monitoring_service.py index 372f5ce44..ebedb1f87 100644 --- a/raiden_contracts/tests/test_monitoring_service.py +++ b/raiden_contracts/tests/test_monitoring_service.py @@ -11,6 +11,7 @@ from raiden_contracts.constants import ( LOCKSROOT_OF_NO_LOCKS, TEST_SETTLE_TIMEOUT_MIN, + MessageTypeId, MonitoringServiceEvent, ) from raiden_contracts.tests.utils import SERVICE_DEPOSIT @@ -62,10 +63,10 @@ def f(monitoring_service_contract: Contract) -> Dict: # Add signatures by non_closing_participant closing_signature_A = create_balance_proof_countersignature( - A, channel_identifier, *balance_proof_A + A, channel_identifier, MessageTypeId.BALANCE_PROOF, *balance_proof_A ) non_closing_signature_B = create_balance_proof_countersignature( - B, channel_identifier, *balance_proof_B + B, channel_identifier, MessageTypeId.BALANCE_PROOF_UPDATE, *balance_proof_B ) reward_proof_signature = sign_reward_proof( privatekey=get_private_key(B), diff --git a/raiden_contracts/tests/test_print_gas.py b/raiden_contracts/tests/test_print_gas.py index 44d64ba0a..8c4861362 100644 --- a/raiden_contracts/tests/test_print_gas.py +++ b/raiden_contracts/tests/test_print_gas.py @@ -14,6 +14,7 @@ CONTRACT_USER_DEPOSIT, TEST_SETTLE_TIMEOUT_MAX, TEST_SETTLE_TIMEOUT_MIN, + MessageTypeId, ) from raiden_contracts.contract_manager import gas_measurements from raiden_contracts.tests.utils.constants import ( @@ -181,10 +182,12 @@ def print_gas_channel_cycle( channel_identifier, A, 10, locked_amount1, 5, locksroot1 ) balance_proof_update_signature_B = create_balance_proof_countersignature( - B, channel_identifier, *balance_proof_A + B, channel_identifier, MessageTypeId.BALANCE_PROOF_UPDATE, *balance_proof_A ) balance_proof_B = create_balance_proof(channel_identifier, B, 5, locked_amount2, 3, locksroot2) - closing_sig_A = create_balance_proof_countersignature(A, channel_identifier, *balance_proof_B) + closing_sig_A = create_balance_proof_countersignature( + A, channel_identifier, MessageTypeId.BALANCE_PROOF, *balance_proof_B + ) for lock in pending_transfers_tree1.unlockable: txn_hash = secret_registry_contract.functions.registerSecret(lock[3]).call_and_transact( @@ -269,10 +272,12 @@ def print_gas_monitoring_service( # create balance and reward proofs balance_proof_A = create_balance_proof(channel_identifier, B, transferred_amount=10, nonce=1) - closing_sig_A = create_balance_proof_countersignature(A, channel_identifier, *balance_proof_A) + closing_sig_A = create_balance_proof_countersignature( + A, channel_identifier, MessageTypeId.BALANCE_PROOF, *balance_proof_A + ) balance_proof_B = create_balance_proof(channel_identifier, A, transferred_amount=20, nonce=2) non_closing_signature_B = create_balance_proof_countersignature( - B, channel_identifier, *balance_proof_B + B, channel_identifier, MessageTypeId.BALANCE_PROOF_UPDATE, *balance_proof_B ) reward_proof_signature = sign_reward_proof( privatekey=get_private_key(B), diff --git a/raiden_contracts/tests/unit/test_recover_from_signature.py b/raiden_contracts/tests/unit/test_recover_from_signature.py index 46d338f9b..adab29b5c 100644 --- a/raiden_contracts/tests/unit/test_recover_from_signature.py +++ b/raiden_contracts/tests/unit/test_recover_from_signature.py @@ -5,7 +5,7 @@ from web3 import Web3 from web3.contract import Contract -from raiden_contracts.constants import EMPTY_ADDRESS +from raiden_contracts.constants import EMPTY_ADDRESS, MessageTypeId from raiden_contracts.utils.proofs import eth_sign_hash_message, pack_balance_proof from raiden_contracts.utils.signature import sign @@ -36,10 +36,13 @@ def test_verify( signature = balance_proof_A[3] balance_proof_hash = eth_sign_hash_message( pack_balance_proof( - token_network.address, - int(web3.version.network), - channel_identifier, - *balance_proof_A[:3] + token_network_address=token_network.address, + chain_identifier=int(web3.version.network), + channel_identifier=channel_identifier, + balance_hash=balance_proof_A[0], + nonce=balance_proof_A[1], + additional_hash=balance_proof_A[2], + msg_type=MessageTypeId.BALANCE_PROOF, ) ) address = signature_test_contract.functions.verify(balance_proof_hash, signature).call() @@ -49,10 +52,13 @@ def test_verify( signature = balance_proof_B[3] balance_proof_hash = eth_sign_hash_message( pack_balance_proof( - token_network.address, - int(web3.version.network), - channel_identifier, - *balance_proof_B[:3] + token_network_address=token_network.address, + chain_identifier=int(web3.version.network), + channel_identifier=channel_identifier, + balance_hash=balance_proof_B[0], + nonce=balance_proof_B[1], + additional_hash=balance_proof_B[2], + msg_type=MessageTypeId.BALANCE_PROOF, ) ) address = signature_test_contract.functions.verify(balance_proof_hash, signature).call() @@ -99,10 +105,13 @@ def test_ecrecover_output( v = signature[64:] balance_proof_hash = eth_sign_hash_message( pack_balance_proof( - token_network.address, - int(web3.version.network), - channel_identifier, - *balance_proof_A[:3] + token_network_address=token_network.address, + chain_identifier=int(web3.version.network), + channel_identifier=channel_identifier, + balance_hash=balance_proof_A[0], + nonce=balance_proof_A[1], + additional_hash=balance_proof_A[2], + msg_type=MessageTypeId.BALANCE_PROOF, ) ) diff --git a/raiden_contracts/tests/unit/test_unit_signatures.py b/raiden_contracts/tests/unit/test_unit_signatures.py index da08ee441..d8e93831d 100644 --- a/raiden_contracts/tests/unit/test_unit_signatures.py +++ b/raiden_contracts/tests/unit/test_unit_signatures.py @@ -4,6 +4,7 @@ from eth_tester.exceptions import TransactionFailed from web3.contract import Contract +from raiden_contracts.constants import MessageTypeId from raiden_contracts.tests.utils import fake_bytes @@ -130,38 +131,124 @@ def test_recover_address_from_balance_proof_update( channel_identifier, A, other_token_network=other_token_network ) balance_proof_update_signature = create_balance_proof_countersignature( - B, channel_identifier, *balance_proof, other_token_network=other_token_network + participant=B, + channel_identifier=channel_identifier, + msg_type=MessageTypeId.BALANCE_PROOF_UPDATE, + balance_hash=balance_proof[0], + nonce=balance_proof[1], + additional_hash=balance_proof[2], + original_signature=balance_proof[3], + other_token_network=other_token_network, ) - balance_proof_update_signature_wrong_token_network = create_balance_proof_countersignature( - B, channel_identifier, *balance_proof + sig_wrong_token_network = create_balance_proof_countersignature( + B, channel_identifier, MessageTypeId.BALANCE_PROOF_UPDATE, *balance_proof ) balance_proof_signed_B = create_balance_proof( channel_identifier, B, other_token_network=other_token_network ) balance_proof_update_signature_wrong_signer = create_balance_proof_countersignature( - B, channel_identifier, *balance_proof_signed_B + B, channel_identifier, MessageTypeId.BALANCE_PROOF_UPDATE, *balance_proof_signed_B ) assert ( B == other_token_network.functions.recoverAddressFromBalanceProofCounterSignaturePublic( - channel_identifier, *balance_proof, balance_proof_update_signature + MessageTypeId.BALANCE_PROOF_UPDATE, + channel_identifier, + *balance_proof, + balance_proof_update_signature, ).call() ) assert ( B != other_token_network.functions.recoverAddressFromBalanceProofCounterSignaturePublic( - channel_identifier, *balance_proof, balance_proof_update_signature_wrong_token_network + MessageTypeId.BALANCE_PROOF_UPDATE, + channel_identifier, + *balance_proof, + sig_wrong_token_network, ).call() ) assert ( B != other_token_network.functions.recoverAddressFromBalanceProofCounterSignaturePublic( - channel_identifier, *balance_proof, balance_proof_update_signature_wrong_signer + MessageTypeId.BALANCE_PROOF_UPDATE, + channel_identifier, + *balance_proof, + balance_proof_update_signature_wrong_signer, + ).call() + ) + + +def test_recover_address_from_balance_proof_close( + token_network_test_signatures: Contract, + create_balance_proof: Callable, + create_balance_proof_countersignature: Callable, + get_accounts: Callable, +) -> None: + """ TokenNetwork can recover the signer's address from a closing proof + + This test checks that the TokenNetwork contract + 1) can recover the signer's address from a balance proof update + 2) recovers a wrong address if the balance proof update is for a wrong token network + 3) recovers a wrong address if the balance proof update is signed by the same secret key twice + """ + (A, B) = get_accounts(2) + other_token_network = token_network_test_signatures + + channel_identifier = 4 + balance_proof = create_balance_proof( + channel_identifier, A, other_token_network=other_token_network + ) + balance_proof_update_signature = create_balance_proof_countersignature( + B, + channel_identifier, + MessageTypeId.BALANCE_PROOF, + *balance_proof, + other_token_network=other_token_network, + ) + + sig_wrong_token_network = create_balance_proof_countersignature( + B, channel_identifier, MessageTypeId.BALANCE_PROOF, *balance_proof + ) + + balance_proof_signed_B = create_balance_proof( + channel_identifier, B, other_token_network=other_token_network + ) + balance_proof_update_signature_wrong_signer = create_balance_proof_countersignature( + B, channel_identifier, MessageTypeId.BALANCE_PROOF, *balance_proof_signed_B + ) + + assert ( + B + == other_token_network.functions.recoverAddressFromBalanceProofCounterSignaturePublic( + MessageTypeId.BALANCE_PROOF, + channel_identifier, + *balance_proof, + balance_proof_update_signature, + ).call() + ) + + assert ( + B + != other_token_network.functions.recoverAddressFromBalanceProofCounterSignaturePublic( + MessageTypeId.BALANCE_PROOF, + channel_identifier, + *balance_proof, + sig_wrong_token_network, + ).call() + ) + + assert ( + B + != other_token_network.functions.recoverAddressFromBalanceProofCounterSignaturePublic( + MessageTypeId.BALANCE_PROOF, + channel_identifier, + *balance_proof, + balance_proof_update_signature_wrong_signer, ).call() ) diff --git a/raiden_contracts/utils/proofs.py b/raiden_contracts/utils/proofs.py index 3dcdf1f71..08bf7a846 100644 --- a/raiden_contracts/utils/proofs.py +++ b/raiden_contracts/utils/proofs.py @@ -31,7 +31,7 @@ def pack_balance_proof( balance_hash: bytes, nonce: int, additional_hash: bytes, - msg_type: MessageTypeId = MessageTypeId.BALANCE_PROOF, + msg_type: MessageTypeId, ) -> bytes: return ( Web3.toBytes(hexstr=token_network_address) @@ -44,10 +44,11 @@ def pack_balance_proof( ) -def pack_balance_proof_update_message( +def pack_balance_proof_message( token_network_address: HexAddress, chain_identifier: int, channel_identifier: int, + msg_type: MessageTypeId, balance_hash: bytes, nonce: int, additional_hash: bytes, @@ -61,7 +62,7 @@ def pack_balance_proof_update_message( balance_hash=balance_hash, nonce=nonce, additional_hash=additional_hash, - msg_type=MessageTypeId.BALANCE_PROOF_UPDATE, + msg_type=msg_type, ) + closing_signature ) @@ -127,6 +128,7 @@ def sign_balance_proof( token_network_address: HexAddress, chain_identifier: int, channel_identifier: int, + msg_type: MessageTypeId, balance_hash: bytes, nonce: int, additional_hash: bytes, @@ -140,17 +142,19 @@ def sign_balance_proof( balance_hash=balance_hash, nonce=nonce, additional_hash=additional_hash, + msg_type=msg_type, ) ) return sign(privkey=privatekey, msg_hash=message_hash, v=v) -def sign_balance_proof_update_message( +def sign_balance_proof_message( privatekey: str, token_network_address: HexAddress, chain_identifier: int, channel_identifier: int, + msg_type: MessageTypeId, balance_hash: bytes, nonce: int, additional_hash: bytes, @@ -158,10 +162,11 @@ def sign_balance_proof_update_message( v: int = 27, ) -> bytes: message_hash = eth_sign_hash_message( - pack_balance_proof_update_message( + pack_balance_proof_message( token_network_address=token_network_address, chain_identifier=chain_identifier, channel_identifier=channel_identifier, + msg_type=msg_type, balance_hash=balance_hash, nonce=nonce, additional_hash=additional_hash,