diff --git a/packages/tokamak/contracts/deployments/mainnet/20241226-titan-shutdown/addresses.json b/packages/tokamak/contracts/deployments/mainnet/20241226-titan-shutdown/addresses.json new file mode 100644 index 000000000..96f793da7 --- /dev/null +++ b/packages/tokamak/contracts/deployments/mainnet/20241226-titan-shutdown/addresses.json @@ -0,0 +1,4 @@ +{ + "UpgradeL1Bridge": "0xc344e14cfba54bb1660c858599df243238538128", + "UpgradeL1CrossDomainMessenger": "0xf3174242f55f5993701d8c8c4f4572c06f2e2538" +} \ No newline at end of file diff --git a/packages/tokamak/contracts/deployments/mainnet/20241226-titan-shutdown/json/UpgradeL1Bridge.json b/packages/tokamak/contracts/deployments/mainnet/20241226-titan-shutdown/json/UpgradeL1Bridge.json new file mode 100644 index 000000000..48c126f22 --- /dev/null +++ b/packages/tokamak/contracts/deployments/mainnet/20241226-titan-shutdown/json/UpgradeL1Bridge.json @@ -0,0 +1,755 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "UpgradeL1Bridge", + "sourceName": "contracts/UpgradeL1Bridge.sol", + "abi": [ + { + "inputs": [], + "name": "ER_SAME_STORAGE", + "type": "error" + }, + { + "inputs": [], + "name": "FW_FAIl_TRANSFER_ETH", + "type": "error" + }, + { + "inputs": [], + "name": "FW_INVALID_HASH", + "type": "error" + }, + { + "inputs": [], + "name": "FW_NOT_AVAILABLE_POSITION", + "type": "error" + }, + { + "inputs": [], + "name": "FW_NOT_SEARCH_POSITION", + "type": "error" + }, + { + "inputs": [], + "name": "FW_ONLY_CLOSER", + "type": "error" + }, + { + "inputs": [], + "name": "FW_ONLY_OWNER", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_l1Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "_l2Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "ERC20DepositInitiated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_l1Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "_l2Token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "ERC20WithdrawalFinalized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "ETHDepositInitiated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "ETHWithdrawalFinalized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "_index", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "_token", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "_claimer", + "type": "address" + } + ], + "name": "ForceWithdraw", + "type": "event" + }, + { + "inputs": [], + "name": "active", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "closer", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_l2Token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "_l2Gas", + "type": "uint32" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "depositERC20", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_l2Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "_l2Gas", + "type": "uint32" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "depositERC20To", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_l2Gas", + "type": "uint32" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "depositETH", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint32", + "name": "_l2Gas", + "type": "uint32" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "depositETHTo", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "deposits", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "donateETH", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_l2Token", + "type": "address" + }, + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "finalizeERC20Withdrawal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "finalizeETHWithdrawal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_state", + "type": "bool" + } + ], + "name": "forceActive", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "position", + "type": "address" + }, + { + "internalType": "bool", + "name": "state", + "type": "bool" + } + ], + "internalType": "struct UpgradeL1Bridge.ForceRegistryParam[]", + "name": "_data", + "type": "tuple[]" + } + ], + "name": "forceModify", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "_position", + "type": "address[]" + } + ], + "name": "forceRegistry", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_position", + "type": "address" + }, + { + "internalType": "string", + "name": "_hash", + "type": "string" + }, + { + "internalType": "address", + "name": "_token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "forceWithdrawClaim", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "position", + "type": "address" + }, + { + "internalType": "string", + "name": "hashed", + "type": "string" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "internalType": "struct UpgradeL1Bridge.ForceClaimParam[]", + "name": "params", + "type": "tuple[]" + } + ], + "name": "forceWithdrawClaimAll", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "gb", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_hash", + "type": "string" + } + ], + "name": "getForcePosition", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getProxyOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_l1messenger", + "type": "address" + }, + { + "internalType": "address", + "name": "_l2TokenBridge", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "l2TokenBridge", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "messenger", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "position", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "positions", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_closer", + "type": "address" + } + ], + "name": "setCloser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_closer", + "type": "address" + }, + { + "internalType": "bool", + "name": "_state", + "type": "bool" + } + ], + "name": "setCloserAndActive", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x60806040526003805460ff1916600117905534801561001d57600080fd5b50600080546001600160a01b0319169055612cdd8061003d6000396000f3fe6080604052600436106101a55760003560e01c80638b4c40b0116100e15780639a2ac6d51161008a578063b7648fb911610064578063b7648fb91461055a578063e18937b51461058a578063f1fb2abc146105aa578063f25d6a06146105ca57600080fd5b80639a2ac6d514610514578063a9f9e67514610527578063b1a1a8821461054757600080fd5b806391c49bf8116100bb57806391c49bf8146104b457806396a9a211146104d457806399fbab88146104f457600080fd5b80638b4c40b01461029a5780638f601f661461043a57806390e4b7201461048057600080fd5b80633cb747bf1161014e57806365c0f8491161012857806365c0f849146103ba5780637044f282146103da578063838b2520146103fa5780638627ed9b1461041a57600080fd5b80633cb747bf1461035a578063485cc9551461037a57806358a997f61461039a57600080fd5b80631a4a45611161017f5780631a4a4561146102bc5780631ab7710d146102dc578063323205e61461032457600080fd5b806302fb0c5e1461024b578063064a6a2b1461027a5780631532ec341461029c57600080fd5b3661024657333b156101fe5760405162461bcd60e51b815260206004820152600f60248201527f4163636f756e74206e6f7420454f41000000000000000000000000000000000060448201526064015b60405180910390fd5b60405162461bcd60e51b815260206004820152601560248201527f537461727420537573656e742050726f746f636f6c000000000000000000000060448201526064016101f5565b600080fd5b34801561025757600080fd5b506003546102659060ff1681565b60405190151581526020015b60405180910390f35b34801561028657600080fd5b5061029a61029536600461230b565b6105ea565b005b3480156102a857600080fd5b5061029a6102b73660046123be565b6105fc565b3480156102c857600080fd5b5061029a6102d736600461243f565b6108e3565b3480156102e857600080fd5b507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103545b6040516001600160a01b039091168152602001610271565b34801561033057600080fd5b5061030c61033f366004612463565b6004602052600090815260409020546001600160a01b031681565b34801561036657600080fd5b5060005461030c906001600160a01b031681565b34801561038657600080fd5b5061029a61039536600461247c565b6109b1565b3480156103a657600080fd5b5061029a6103b53660046124ce565b610a76565b3480156103c657600080fd5b5061029a6103d5366004612551565b610b30565b3480156103e657600080fd5b5060075461030c906001600160a01b031681565b34801561040657600080fd5b5061029a61041536600461256e565b610cd2565b34801561042657600080fd5b5061029a610435366004612649565b610d3e565b34801561044657600080fd5b5061047261045536600461247c565b600260209081526000928352604080842090915290825290205481565b604051908152602001610271565b34801561048c57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5461030c565b3480156104c057600080fd5b5060015461030c906001600160a01b031681565b3480156104e057600080fd5b5061030c6104ef36600461268b565b610e8a565b34801561050057600080fd5b5061030c61050f366004612463565b611032565b61029a6105223660046126c0565b61105c565b34801561053357600080fd5b5061029a610542366004612723565b6110f1565b61029a61055536600461279c565b61136a565b34801561056657600080fd5b50610265610575366004612551565b60056020526000908152604090205460ff1681565b34801561059657600080fd5b5061029a6105a5366004612649565b61144e565b3480156105b657600080fd5b5061029a6105c53660046127ef565b61156b565b3480156105d657600080fd5b5061029a6105e5366004612864565b611668565b6105f684848484611838565b50505050565b6001546001600160a01b031661061a6000546001600160a01b031690565b6001600160a01b0316336001600160a01b0316146106a05760405162461bcd60e51b815260206004820152602e60248201527f4f564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e7469636174656400000000000000000000000000000000000060648201526084016101f5565b806001600160a01b03166106bc6000546001600160a01b031690565b6001600160a01b0316636e296e456040518163ffffffff1660e01b815260040160206040518083038186803b1580156106f457600080fd5b505afa158015610708573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072c9190612892565b6001600160a01b0316146107a85760405162461bcd60e51b815260206004820152603060248201527f4f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d6573736167650000000000000000000000000000000060648201526084016101f5565b604080516000808252602082019092526001600160a01b0387169086906040516107d291906128db565b60006040518083038185875af1925050503d806000811461080f576040519150601f19603f3d011682016040523d82523d6000602084013e610814565b606091505b505090508061088b5760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527f20455448207472616e73666572206661696c656400000000000000000000000060648201526084016101f5565b856001600160a01b0316876001600160a01b03167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318787876040516108d293929190612922565b60405180910390a350505050505050565b6007546001600160a01b03163314610927576040517f89d6e77900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460ff16151581151514156109805760405162461bcd60e51b815260206004820152600a60248201527f53616d652053746174650000000000000000000000000000000000000000000060448201526064016101f5565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6000546001600160a01b031615610a305760405162461bcd60e51b815260206004820152602660248201527f436f6e74726163742068617320616c7265616479206265656e20696e6974696160448201527f6c697a65642e000000000000000000000000000000000000000000000000000060648201526084016101f5565b600080546001600160a01b039384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560018054929093169116179055565b333b15610ac55760405162461bcd60e51b815260206004820152600f60248201527f4163636f756e74206e6f7420454f41000000000000000000000000000000000060448201526064016101f5565b60035460ff1615610b185760405162461bcd60e51b815260206004820152601760248201527f506175736564204c315374616e6461726442726964676500000000000000000060448201526064016101f5565b610b288686333388888888611be4565b505050505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f893d20e80000000000000000000000000000000000000000000000000000000017905290516000913091610b9791906128db565b600060405180830381855af49150503d8060008114610bd2576040519150601f19603f3d011682016040523d82523d6000602084013e610bd7565b606091505b5091505080806020019051810190610bef9190612892565b6001600160a01b0316336001600160a01b031614610c39576040517f7d85418c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007546001600160a01b0383811691161415610c975760405162461bcd60e51b815260206004820152600c60248201527f53616d652041646472657373000000000000000000000000000000000000000060448201526064016101f5565b50600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60035460ff1615610d255760405162461bcd60e51b815260206004820152601760248201527f506175736564204c315374616e6461726442726964676500000000000000000060448201526064016101f5565b610d358787338888888888611be4565b50505050505050565b6007546001600160a01b03163314610d82576040517f89d6e77900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610e8557600160056000858585818110610da557610da5612945565b9050602002016020810190610dba9190612551565b6001600160a01b03168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790556006838383818110610e1457610e14612945565b9050602002016020810190610e299190612551565b81546001810183556000928352602090922090910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0390921691909117905580610e7d816129a3565b915050610d85565b505050565b60008082604051602001610e9e91906129dc565b604051602081830303815290604052905060005b60065481101561102857600060068281548110610ed157610ed1612945565b60009182526020808320909101546001600160a01b0316808352600590915260409091205490915060ff16610f065750611016565b6040805160048152602481019182905260009182916001600160a01b03851691610f319088906128db565b60408051918290039091206020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090921691909117905251610f9591906128db565b600060405180830381855afa9150503d8060008114610fd0576040519150601f19603f3d011682016040523d82523d6000602084013e610fd5565b606091505b5091509150811561101257600081806020019051810190610ff69190612a48565b9050806110065750505050611016565b50919695505050505050565b5050505b80611020816129a3565b915050610eb2565b5060009392505050565b6006818154811061104257600080fd5b6000918252602090912001546001600160a01b0316905081565b60035460ff16156110af5760405162461bcd60e51b815260206004820152601760248201527f506175736564204c315374616e6461726442726964676500000000000000000060448201526064016101f5565b6105f633858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d2f92505050565b6001546001600160a01b031661110f6000546001600160a01b031690565b6001600160a01b0316336001600160a01b0316146111955760405162461bcd60e51b815260206004820152602e60248201527f4f564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e7469636174656400000000000000000000000000000000000060648201526084016101f5565b806001600160a01b03166111b16000546001600160a01b031690565b6001600160a01b0316636e296e456040518163ffffffff1660e01b815260040160206040518083038186803b1580156111e957600080fd5b505afa1580156111fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112219190612892565b6001600160a01b03161461129d5760405162461bcd60e51b815260206004820152603060248201527f4f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d6573736167650000000000000000000000000000000060648201526084016101f5565b6001600160a01b038089166000908152600260209081526040808320938b16835292905220546112ce908590612a61565b6001600160a01b03808a166000818152600260209081526040808320948d1683529390529190912091909155611305908686611e36565b856001600160a01b0316876001600160a01b0316896001600160a01b03167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3888888886040516113589493929190612a78565b60405180910390a45050505050505050565b333b156113b95760405162461bcd60e51b815260206004820152600f60248201527f4163636f756e74206e6f7420454f41000000000000000000000000000000000060448201526064016101f5565b60035460ff161561140c5760405162461bcd60e51b815260206004820152601760248201527f506175736564204c315374616e6461726442726964676500000000000000000060448201526064016101f5565b610e8533338585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d2f92505050565b60005b81811015610e855761155983838381811061146e5761146e612945565b90506020028101906114809190612aab565b61148e906020810190612551565b8484848181106114a0576114a0612945565b90506020028101906114b29190612aab565b6114c0906020810190612adf565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525088925087915086905081811061150957611509612945565b905060200281019061151b9190612aab565b61152c906060810190604001612551565b86868681811061153e5761153e612945565b90506020028101906115509190612aab565b60600135611838565b80611563816129a3565b915050611451565b6007546001600160a01b031633146115af576040517f89d6e77900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610e85578282828181106115cc576115cc612945565b90506040020160200160208101906115e4919061243f565b600560008585858181106115fa576115fa612945565b6116109260206040909202019081019150612551565b6001600160a01b03168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905580611660816129a3565b9150506115b2565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f893d20e800000000000000000000000000000000000000000000000000000000179052905160009130916116cf91906128db565b600060405180830381855af49150503d806000811461170a576040519150601f19603f3d011682016040523d82523d6000602084013e61170f565b606091505b50915050808060200190518101906117279190612892565b6001600160a01b0316336001600160a01b031614611771576040517f7d85418c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007546001600160a01b038481169116148015611796575060035460ff161515821515145b156117cd576040517f2c52682a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039390931692909217909155600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6001600160a01b03841660009081526005602052604090205460ff1661188a576040517fef30807f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008360405160200161189d91906129dc565b60408051601f19818403018152600483526024830191829052925060009182916001600160a01b03891691906118d49086906128db565b60408051918290039091206020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009092169190911790525161193891906128db565b600060405180830381855afa9150503d8060008114611973576040519150601f19603f3d011682016040523d82523d6000602084013e611978565b606091505b509150915081158061198957508051155b156119c0576040517f1cbba5b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087811b8216602084015233901b16603482015260488101859052600090606801604051602081830303815290604052805190602001209050600082806020019051810190611a349190612a48565b90508082141580611a5b57506000818152600460205260409020546001600160a01b031615155b15611a92576040517fbfd1ca4700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260046020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790556001600160a01b038716611b77576040805160008152602081019182905233918891611af3916128db565b60006040518083038185875af1925050503d8060008114611b30576040519150601f19603f3d011682016040523d82523d6000602084013e611b35565b606091505b50508094505083611b72576040517f515bd1b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b8b565b611b8b6001600160a01b0388163388611e36565b336001600160a01b0316876001600160a01b0316827f9570d360679f48443322a65d5cabe1ef5a81d7624db792a20c7a6f3eb5de36f589604051611bd191815260200190565b60405180910390a4505050505050505050565b611bf96001600160a01b038916873087611edf565b600063662a633a60e01b89898989898888604051602401611c209796959493929190612b44565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600154909150611c99906001600160a01b03168583611f30565b6001600160a01b03808a166000908152600260209081526040808320938c1683529290522054611cca908690612b94565b6001600160a01b03808b1660008181526002602090815260408083208e86168085529252918290209490945551918a1692917f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039690611bd1908b908b908a908a90612a78565b600063662a633a60e01b600073deaddeaddeaddeaddeaddeaddeaddeaddead000087873487604051602401611d6996959493929190612bd8565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600154909150611de2906001600160a01b03168483611f30565b836001600160a01b0316856001600160a01b03167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f233485604051611e27929190612c26565b60405180910390a35050505050565b6040516001600160a01b038316602482015260448101829052610e859084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611fab565b6040516001600160a01b03808516602483015283166044820152606481018290526105f69085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611e7b565b6000546040517f3dbb202b0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690633dbb202b90611f7d90869085908790600401612c3f565b600060405180830381600087803b158015611f9757600080fd5b505af1158015610d35573d6000803e3d6000fd5b6000612000826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166120939092919063ffffffff16565b90508051600014806120215750808060200190518101906120219190612c77565b610e855760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016101f5565b60606120a284846000856120aa565b949350505050565b6060824710156121225760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016101f5565b600080866001600160a01b0316858760405161213e91906128db565b60006040518083038185875af1925050503d806000811461217b576040519150601f19603f3d011682016040523d82523d6000602084013e612180565b606091505b50915091506121918783838761219c565b979650505050505050565b60608315612208578251612201576001600160a01b0385163b6122015760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101f5565b50816120a2565b6120a2838381511561221d5781518083602001fd5b8060405162461bcd60e51b81526004016101f59190612c94565b6001600160a01b038116811461224c57600080fd5b50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261228f57600080fd5b813567ffffffffffffffff808211156122aa576122aa61224f565b604051601f8301601f19908116603f011681019082821181831017156122d2576122d261224f565b816040528381528660208588010111156122eb57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806080858703121561232157600080fd5b843561232c81612237565b9350602085013567ffffffffffffffff81111561234857600080fd5b6123548782880161227e565b935050604085013561236581612237565b9396929550929360600135925050565b60008083601f84011261238757600080fd5b50813567ffffffffffffffff81111561239f57600080fd5b6020830191508360208285010111156123b757600080fd5b9250929050565b6000806000806000608086880312156123d657600080fd5b85356123e181612237565b945060208601356123f181612237565b935060408601359250606086013567ffffffffffffffff81111561241457600080fd5b61242088828901612375565b969995985093965092949392505050565b801515811461224c57600080fd5b60006020828403121561245157600080fd5b813561245c81612431565b9392505050565b60006020828403121561247557600080fd5b5035919050565b6000806040838503121561248f57600080fd5b823561249a81612237565b915060208301356124aa81612237565b809150509250929050565b803563ffffffff811681146124c957600080fd5b919050565b60008060008060008060a087890312156124e757600080fd5b86356124f281612237565b9550602087013561250281612237565b945060408701359350612517606088016124b5565b9250608087013567ffffffffffffffff81111561253357600080fd5b61253f89828a01612375565b979a9699509497509295939492505050565b60006020828403121561256357600080fd5b813561245c81612237565b600080600080600080600060c0888a03121561258957600080fd5b873561259481612237565b965060208801356125a481612237565b955060408801356125b481612237565b9450606088013593506125c9608089016124b5565b925060a088013567ffffffffffffffff8111156125e557600080fd5b6125f18a828b01612375565b989b979a50959850939692959293505050565b60008083601f84011261261657600080fd5b50813567ffffffffffffffff81111561262e57600080fd5b6020830191508360208260051b85010111156123b757600080fd5b6000806020838503121561265c57600080fd5b823567ffffffffffffffff81111561267357600080fd5b61267f85828601612604565b90969095509350505050565b60006020828403121561269d57600080fd5b813567ffffffffffffffff8111156126b457600080fd5b6120a28482850161227e565b600080600080606085870312156126d657600080fd5b84356126e181612237565b93506126ef602086016124b5565b9250604085013567ffffffffffffffff81111561270b57600080fd5b61271787828801612375565b95989497509550505050565b600080600080600080600060c0888a03121561273e57600080fd5b873561274981612237565b9650602088013561275981612237565b9550604088013561276981612237565b9450606088013561277981612237565b93506080880135925060a088013567ffffffffffffffff8111156125e557600080fd5b6000806000604084860312156127b157600080fd5b6127ba846124b5565b9250602084013567ffffffffffffffff8111156127d657600080fd5b6127e286828701612375565b9497909650939450505050565b6000806020838503121561280257600080fd5b823567ffffffffffffffff8082111561281a57600080fd5b818501915085601f83011261282e57600080fd5b81358181111561283d57600080fd5b8660208260061b850101111561285257600080fd5b60209290920196919550909350505050565b6000806040838503121561287757600080fd5b823561288281612237565b915060208301356124aa81612431565b6000602082840312156128a457600080fd5b815161245c81612237565b60005b838110156128ca5781810151838201526020016128b2565b838111156105f65750506000910152565b600082516128ed8184602087016128af565b9190910192915050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b83815260406020820152600061293c6040830184866128f7565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156129d5576129d5612974565b5060010190565b7f5f00000000000000000000000000000000000000000000000000000000000000815260008251612a148160018501602087016128af565b7f28290000000000000000000000000000000000000000000000000000000000006001939091019283015250600301919050565b600060208284031215612a5a57600080fd5b5051919050565b600082821015612a7357612a73612974565b500390565b6001600160a01b0385168152836020820152606060408201526000612aa16060830184866128f7565b9695505050505050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818336030181126128ed57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612b1457600080fd5b83018035915067ffffffffffffffff821115612b2f57600080fd5b6020019150368190038213156123b757600080fd5b60006001600160a01b03808a1683528089166020840152808816604084015280871660608401525084608083015260c060a0830152612b8760c0830184866128f7565b9998505050505050505050565b60008219821115612ba757612ba7612974565b500190565b60008151808452612bc48160208601602086016128af565b601f01601f19169290920160200192915050565b60006001600160a01b0380891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612c1a60c0830184612bac565b98975050505050505050565b8281526040602082015260006120a26040830184612bac565b6001600160a01b0384168152606060208201526000612c616060830185612bac565b905063ffffffff83166040830152949350505050565b600060208284031215612c8957600080fd5b815161245c81612431565b60208152600061245c6020830184612bac56fea26469706673582212203b6f3dc07c840fbd27ea80df3046826e0b3e4d56f06cdd96425f51b485d0c6a764736f6c63430008090033", + "deployedBytecode": "0x6080604052600436106101a55760003560e01c80638b4c40b0116100e15780639a2ac6d51161008a578063b7648fb911610064578063b7648fb91461055a578063e18937b51461058a578063f1fb2abc146105aa578063f25d6a06146105ca57600080fd5b80639a2ac6d514610514578063a9f9e67514610527578063b1a1a8821461054757600080fd5b806391c49bf8116100bb57806391c49bf8146104b457806396a9a211146104d457806399fbab88146104f457600080fd5b80638b4c40b01461029a5780638f601f661461043a57806390e4b7201461048057600080fd5b80633cb747bf1161014e57806365c0f8491161012857806365c0f849146103ba5780637044f282146103da578063838b2520146103fa5780638627ed9b1461041a57600080fd5b80633cb747bf1461035a578063485cc9551461037a57806358a997f61461039a57600080fd5b80631a4a45611161017f5780631a4a4561146102bc5780631ab7710d146102dc578063323205e61461032457600080fd5b806302fb0c5e1461024b578063064a6a2b1461027a5780631532ec341461029c57600080fd5b3661024657333b156101fe5760405162461bcd60e51b815260206004820152600f60248201527f4163636f756e74206e6f7420454f41000000000000000000000000000000000060448201526064015b60405180910390fd5b60405162461bcd60e51b815260206004820152601560248201527f537461727420537573656e742050726f746f636f6c000000000000000000000060448201526064016101f5565b600080fd5b34801561025757600080fd5b506003546102659060ff1681565b60405190151581526020015b60405180910390f35b34801561028657600080fd5b5061029a61029536600461230b565b6105ea565b005b3480156102a857600080fd5b5061029a6102b73660046123be565b6105fc565b3480156102c857600080fd5b5061029a6102d736600461243f565b6108e3565b3480156102e857600080fd5b507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103545b6040516001600160a01b039091168152602001610271565b34801561033057600080fd5b5061030c61033f366004612463565b6004602052600090815260409020546001600160a01b031681565b34801561036657600080fd5b5060005461030c906001600160a01b031681565b34801561038657600080fd5b5061029a61039536600461247c565b6109b1565b3480156103a657600080fd5b5061029a6103b53660046124ce565b610a76565b3480156103c657600080fd5b5061029a6103d5366004612551565b610b30565b3480156103e657600080fd5b5060075461030c906001600160a01b031681565b34801561040657600080fd5b5061029a61041536600461256e565b610cd2565b34801561042657600080fd5b5061029a610435366004612649565b610d3e565b34801561044657600080fd5b5061047261045536600461247c565b600260209081526000928352604080842090915290825290205481565b604051908152602001610271565b34801561048c57600080fd5b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5461030c565b3480156104c057600080fd5b5060015461030c906001600160a01b031681565b3480156104e057600080fd5b5061030c6104ef36600461268b565b610e8a565b34801561050057600080fd5b5061030c61050f366004612463565b611032565b61029a6105223660046126c0565b61105c565b34801561053357600080fd5b5061029a610542366004612723565b6110f1565b61029a61055536600461279c565b61136a565b34801561056657600080fd5b50610265610575366004612551565b60056020526000908152604090205460ff1681565b34801561059657600080fd5b5061029a6105a5366004612649565b61144e565b3480156105b657600080fd5b5061029a6105c53660046127ef565b61156b565b3480156105d657600080fd5b5061029a6105e5366004612864565b611668565b6105f684848484611838565b50505050565b6001546001600160a01b031661061a6000546001600160a01b031690565b6001600160a01b0316336001600160a01b0316146106a05760405162461bcd60e51b815260206004820152602e60248201527f4f564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e7469636174656400000000000000000000000000000000000060648201526084016101f5565b806001600160a01b03166106bc6000546001600160a01b031690565b6001600160a01b0316636e296e456040518163ffffffff1660e01b815260040160206040518083038186803b1580156106f457600080fd5b505afa158015610708573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072c9190612892565b6001600160a01b0316146107a85760405162461bcd60e51b815260206004820152603060248201527f4f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d6573736167650000000000000000000000000000000060648201526084016101f5565b604080516000808252602082019092526001600160a01b0387169086906040516107d291906128db565b60006040518083038185875af1925050503d806000811461080f576040519150601f19603f3d011682016040523d82523d6000602084013e610814565b606091505b505090508061088b5760405162461bcd60e51b815260206004820152603460248201527f5472616e7366657248656c7065723a3a736166655472616e736665724554483a60448201527f20455448207472616e73666572206661696c656400000000000000000000000060648201526084016101f5565b856001600160a01b0316876001600160a01b03167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318787876040516108d293929190612922565b60405180910390a350505050505050565b6007546001600160a01b03163314610927576040517f89d6e77900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460ff16151581151514156109805760405162461bcd60e51b815260206004820152600a60248201527f53616d652053746174650000000000000000000000000000000000000000000060448201526064016101f5565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6000546001600160a01b031615610a305760405162461bcd60e51b815260206004820152602660248201527f436f6e74726163742068617320616c7265616479206265656e20696e6974696160448201527f6c697a65642e000000000000000000000000000000000000000000000000000060648201526084016101f5565b600080546001600160a01b039384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560018054929093169116179055565b333b15610ac55760405162461bcd60e51b815260206004820152600f60248201527f4163636f756e74206e6f7420454f41000000000000000000000000000000000060448201526064016101f5565b60035460ff1615610b185760405162461bcd60e51b815260206004820152601760248201527f506175736564204c315374616e6461726442726964676500000000000000000060448201526064016101f5565b610b288686333388888888611be4565b505050505050565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f893d20e80000000000000000000000000000000000000000000000000000000017905290516000913091610b9791906128db565b600060405180830381855af49150503d8060008114610bd2576040519150601f19603f3d011682016040523d82523d6000602084013e610bd7565b606091505b5091505080806020019051810190610bef9190612892565b6001600160a01b0316336001600160a01b031614610c39576040517f7d85418c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007546001600160a01b0383811691161415610c975760405162461bcd60e51b815260206004820152600c60248201527f53616d652041646472657373000000000000000000000000000000000000000060448201526064016101f5565b50600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60035460ff1615610d255760405162461bcd60e51b815260206004820152601760248201527f506175736564204c315374616e6461726442726964676500000000000000000060448201526064016101f5565b610d358787338888888888611be4565b50505050505050565b6007546001600160a01b03163314610d82576040517f89d6e77900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610e8557600160056000858585818110610da557610da5612945565b9050602002016020810190610dba9190612551565b6001600160a01b03168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790556006838383818110610e1457610e14612945565b9050602002016020810190610e299190612551565b81546001810183556000928352602090922090910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0390921691909117905580610e7d816129a3565b915050610d85565b505050565b60008082604051602001610e9e91906129dc565b604051602081830303815290604052905060005b60065481101561102857600060068281548110610ed157610ed1612945565b60009182526020808320909101546001600160a01b0316808352600590915260409091205490915060ff16610f065750611016565b6040805160048152602481019182905260009182916001600160a01b03851691610f319088906128db565b60408051918290039091206020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090921691909117905251610f9591906128db565b600060405180830381855afa9150503d8060008114610fd0576040519150601f19603f3d011682016040523d82523d6000602084013e610fd5565b606091505b5091509150811561101257600081806020019051810190610ff69190612a48565b9050806110065750505050611016565b50919695505050505050565b5050505b80611020816129a3565b915050610eb2565b5060009392505050565b6006818154811061104257600080fd5b6000918252602090912001546001600160a01b0316905081565b60035460ff16156110af5760405162461bcd60e51b815260206004820152601760248201527f506175736564204c315374616e6461726442726964676500000000000000000060448201526064016101f5565b6105f633858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d2f92505050565b6001546001600160a01b031661110f6000546001600160a01b031690565b6001600160a01b0316336001600160a01b0316146111955760405162461bcd60e51b815260206004820152602e60248201527f4f564d5f58434841494e3a206d657373656e67657220636f6e7472616374207560448201527f6e61757468656e7469636174656400000000000000000000000000000000000060648201526084016101f5565b806001600160a01b03166111b16000546001600160a01b031690565b6001600160a01b0316636e296e456040518163ffffffff1660e01b815260040160206040518083038186803b1580156111e957600080fd5b505afa1580156111fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112219190612892565b6001600160a01b03161461129d5760405162461bcd60e51b815260206004820152603060248201527f4f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f7360448201527f732d646f6d61696e206d6573736167650000000000000000000000000000000060648201526084016101f5565b6001600160a01b038089166000908152600260209081526040808320938b16835292905220546112ce908590612a61565b6001600160a01b03808a166000818152600260209081526040808320948d1683529390529190912091909155611305908686611e36565b856001600160a01b0316876001600160a01b0316896001600160a01b03167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3888888886040516113589493929190612a78565b60405180910390a45050505050505050565b333b156113b95760405162461bcd60e51b815260206004820152600f60248201527f4163636f756e74206e6f7420454f41000000000000000000000000000000000060448201526064016101f5565b60035460ff161561140c5760405162461bcd60e51b815260206004820152601760248201527f506175736564204c315374616e6461726442726964676500000000000000000060448201526064016101f5565b610e8533338585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d2f92505050565b60005b81811015610e855761155983838381811061146e5761146e612945565b90506020028101906114809190612aab565b61148e906020810190612551565b8484848181106114a0576114a0612945565b90506020028101906114b29190612aab565b6114c0906020810190612adf565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525088925087915086905081811061150957611509612945565b905060200281019061151b9190612aab565b61152c906060810190604001612551565b86868681811061153e5761153e612945565b90506020028101906115509190612aab565b60600135611838565b80611563816129a3565b915050611451565b6007546001600160a01b031633146115af576040517f89d6e77900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b81811015610e85578282828181106115cc576115cc612945565b90506040020160200160208101906115e4919061243f565b600560008585858181106115fa576115fa612945565b6116109260206040909202019081019150612551565b6001600160a01b03168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905580611660816129a3565b9150506115b2565b60408051600481526024810182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f893d20e800000000000000000000000000000000000000000000000000000000179052905160009130916116cf91906128db565b600060405180830381855af49150503d806000811461170a576040519150601f19603f3d011682016040523d82523d6000602084013e61170f565b606091505b50915050808060200190518101906117279190612892565b6001600160a01b0316336001600160a01b031614611771576040517f7d85418c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007546001600160a01b038481169116148015611796575060035460ff161515821515145b156117cd576040517f2c52682a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50600780547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039390931692909217909155600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b6001600160a01b03841660009081526005602052604090205460ff1661188a576040517fef30807f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008360405160200161189d91906129dc565b60408051601f19818403018152600483526024830191829052925060009182916001600160a01b03891691906118d49086906128db565b60408051918290039091206020830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009092169190911790525161193891906128db565b600060405180830381855afa9150503d8060008114611973576040519150601f19603f3d011682016040523d82523d6000602084013e611978565b606091505b509150915081158061198957508051155b156119c0576040517f1cbba5b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606087811b8216602084015233901b16603482015260488101859052600090606801604051602081830303815290604052805190602001209050600082806020019051810190611a349190612a48565b90508082141580611a5b57506000818152600460205260409020546001600160a01b031615155b15611a92576040517fbfd1ca4700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260046020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790556001600160a01b038716611b77576040805160008152602081019182905233918891611af3916128db565b60006040518083038185875af1925050503d8060008114611b30576040519150601f19603f3d011682016040523d82523d6000602084013e611b35565b606091505b50508094505083611b72576040517f515bd1b600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b8b565b611b8b6001600160a01b0388163388611e36565b336001600160a01b0316876001600160a01b0316827f9570d360679f48443322a65d5cabe1ef5a81d7624db792a20c7a6f3eb5de36f589604051611bd191815260200190565b60405180910390a4505050505050505050565b611bf96001600160a01b038916873087611edf565b600063662a633a60e01b89898989898888604051602401611c209796959493929190612b44565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600154909150611c99906001600160a01b03168583611f30565b6001600160a01b03808a166000908152600260209081526040808320938c1683529290522054611cca908690612b94565b6001600160a01b03808b1660008181526002602090815260408083208e86168085529252918290209490945551918a1692917f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039690611bd1908b908b908a908a90612a78565b600063662a633a60e01b600073deaddeaddeaddeaddeaddeaddeaddeaddead000087873487604051602401611d6996959493929190612bd8565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600154909150611de2906001600160a01b03168483611f30565b836001600160a01b0316856001600160a01b03167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f233485604051611e27929190612c26565b60405180910390a35050505050565b6040516001600160a01b038316602482015260448101829052610e859084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611fab565b6040516001600160a01b03808516602483015283166044820152606481018290526105f69085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611e7b565b6000546040517f3dbb202b0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690633dbb202b90611f7d90869085908790600401612c3f565b600060405180830381600087803b158015611f9757600080fd5b505af1158015610d35573d6000803e3d6000fd5b6000612000826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166120939092919063ffffffff16565b90508051600014806120215750808060200190518101906120219190612c77565b610e855760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016101f5565b60606120a284846000856120aa565b949350505050565b6060824710156121225760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016101f5565b600080866001600160a01b0316858760405161213e91906128db565b60006040518083038185875af1925050503d806000811461217b576040519150601f19603f3d011682016040523d82523d6000602084013e612180565b606091505b50915091506121918783838761219c565b979650505050505050565b60608315612208578251612201576001600160a01b0385163b6122015760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101f5565b50816120a2565b6120a2838381511561221d5781518083602001fd5b8060405162461bcd60e51b81526004016101f59190612c94565b6001600160a01b038116811461224c57600080fd5b50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261228f57600080fd5b813567ffffffffffffffff808211156122aa576122aa61224f565b604051601f8301601f19908116603f011681019082821181831017156122d2576122d261224f565b816040528381528660208588010111156122eb57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806000806080858703121561232157600080fd5b843561232c81612237565b9350602085013567ffffffffffffffff81111561234857600080fd5b6123548782880161227e565b935050604085013561236581612237565b9396929550929360600135925050565b60008083601f84011261238757600080fd5b50813567ffffffffffffffff81111561239f57600080fd5b6020830191508360208285010111156123b757600080fd5b9250929050565b6000806000806000608086880312156123d657600080fd5b85356123e181612237565b945060208601356123f181612237565b935060408601359250606086013567ffffffffffffffff81111561241457600080fd5b61242088828901612375565b969995985093965092949392505050565b801515811461224c57600080fd5b60006020828403121561245157600080fd5b813561245c81612431565b9392505050565b60006020828403121561247557600080fd5b5035919050565b6000806040838503121561248f57600080fd5b823561249a81612237565b915060208301356124aa81612237565b809150509250929050565b803563ffffffff811681146124c957600080fd5b919050565b60008060008060008060a087890312156124e757600080fd5b86356124f281612237565b9550602087013561250281612237565b945060408701359350612517606088016124b5565b9250608087013567ffffffffffffffff81111561253357600080fd5b61253f89828a01612375565b979a9699509497509295939492505050565b60006020828403121561256357600080fd5b813561245c81612237565b600080600080600080600060c0888a03121561258957600080fd5b873561259481612237565b965060208801356125a481612237565b955060408801356125b481612237565b9450606088013593506125c9608089016124b5565b925060a088013567ffffffffffffffff8111156125e557600080fd5b6125f18a828b01612375565b989b979a50959850939692959293505050565b60008083601f84011261261657600080fd5b50813567ffffffffffffffff81111561262e57600080fd5b6020830191508360208260051b85010111156123b757600080fd5b6000806020838503121561265c57600080fd5b823567ffffffffffffffff81111561267357600080fd5b61267f85828601612604565b90969095509350505050565b60006020828403121561269d57600080fd5b813567ffffffffffffffff8111156126b457600080fd5b6120a28482850161227e565b600080600080606085870312156126d657600080fd5b84356126e181612237565b93506126ef602086016124b5565b9250604085013567ffffffffffffffff81111561270b57600080fd5b61271787828801612375565b95989497509550505050565b600080600080600080600060c0888a03121561273e57600080fd5b873561274981612237565b9650602088013561275981612237565b9550604088013561276981612237565b9450606088013561277981612237565b93506080880135925060a088013567ffffffffffffffff8111156125e557600080fd5b6000806000604084860312156127b157600080fd5b6127ba846124b5565b9250602084013567ffffffffffffffff8111156127d657600080fd5b6127e286828701612375565b9497909650939450505050565b6000806020838503121561280257600080fd5b823567ffffffffffffffff8082111561281a57600080fd5b818501915085601f83011261282e57600080fd5b81358181111561283d57600080fd5b8660208260061b850101111561285257600080fd5b60209290920196919550909350505050565b6000806040838503121561287757600080fd5b823561288281612237565b915060208301356124aa81612431565b6000602082840312156128a457600080fd5b815161245c81612237565b60005b838110156128ca5781810151838201526020016128b2565b838111156105f65750506000910152565b600082516128ed8184602087016128af565b9190910192915050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b83815260406020820152600061293c6040830184866128f7565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156129d5576129d5612974565b5060010190565b7f5f00000000000000000000000000000000000000000000000000000000000000815260008251612a148160018501602087016128af565b7f28290000000000000000000000000000000000000000000000000000000000006001939091019283015250600301919050565b600060208284031215612a5a57600080fd5b5051919050565b600082821015612a7357612a73612974565b500390565b6001600160a01b0385168152836020820152606060408201526000612aa16060830184866128f7565b9695505050505050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818336030181126128ed57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612b1457600080fd5b83018035915067ffffffffffffffff821115612b2f57600080fd5b6020019150368190038213156123b757600080fd5b60006001600160a01b03808a1683528089166020840152808816604084015280871660608401525084608083015260c060a0830152612b8760c0830184866128f7565b9998505050505050505050565b60008219821115612ba757612ba7612974565b500190565b60008151808452612bc48160208601602086016128af565b601f01601f19169290920160200192915050565b60006001600160a01b0380891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612c1a60c0830184612bac565b98975050505050505050565b8281526040602082015260006120a26040830184612bac565b6001600160a01b0384168152606060208201526000612c616060830185612bac565b905063ffffffff83166040830152949350505050565b600060208284031215612c8957600080fd5b815161245c81612431565b60208152600061245c6020830184612bac56fea26469706673582212203b6f3dc07c840fbd27ea80df3046826e0b3e4d56f06cdd96425f51b485d0c6a764736f6c63430008090033", + "linkReferences": {}, + "deployedLinkReferences": {} + } \ No newline at end of file diff --git a/packages/tokamak/contracts/deployments/mainnet/20241226-titan-shutdown/json/UpgradeL1CrossDomainMessenger.json b/packages/tokamak/contracts/deployments/mainnet/20241226-titan-shutdown/json/UpgradeL1CrossDomainMessenger.json new file mode 100644 index 000000000..716e258c5 --- /dev/null +++ b/packages/tokamak/contracts/deployments/mainnet/20241226-titan-shutdown/json/UpgradeL1CrossDomainMessenger.json @@ -0,0 +1,699 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "UpgradeL1CrossDomainMessenger", + "sourceName": "contracts/UpgradeL1CrossDomainMessenger.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "messageNonce", + "type": "uint256" + } + ], + "name": "FailedRelayedFastMessage", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "msgHash", + "type": "bytes32" + } + ], + "name": "FailedRelayedMessage", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "_xDomainCalldataHash", + "type": "bytes32" + } + ], + "name": "MessageAllowed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "_xDomainCalldataHash", + "type": "bytes32" + } + ], + "name": "MessageBlocked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "messageNonce", + "type": "uint256" + } + ], + "name": "RelayedFastMessage", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "msgHash", + "type": "bytes32" + } + ], + "name": "RelayedMessage", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "messageNonce", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "gasLimit", + "type": "uint256" + } + ], + "name": "SentMessage", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_xDomainCalldataHash", + "type": "bytes32" + } + ], + "name": "allowMessage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "bytes", + "name": "message", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "messageNonce", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "batchIndex", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "batchRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "batchSize", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "prevTotalElements", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "extraData", + "type": "bytes" + } + ], + "internalType": "struct Lib_OVMCodec.ChainBatchHeader", + "name": "stateRootBatchHeader", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "siblings", + "type": "bytes32[]" + } + ], + "internalType": "struct Lib_OVMCodec.ChainInclusionProof", + "name": "stateRootProof", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "stateTrieWitness", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "storageTrieWitness", + "type": "bytes" + } + ], + "internalType": "struct IL1CrossDomainMessenger.L2MessageInclusionProof", + "name": "proof", + "type": "tuple" + } + ], + "internalType": "struct IL1CrossDomainMessenger.L2ToL1Message[]", + "name": "_messages", + "type": "tuple[]" + } + ], + "name": "batchRelayMessages", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_xDomainCalldataHash", + "type": "bytes32" + } + ], + "name": "blockMessage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "blockedMessages", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "failedMessages", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_libAddressManager", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "libAddressManager", + "outputs": [ + { + "internalType": "contract Lib_AddressManager", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_target", + "type": "address" + }, + { + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_message", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_messageNonce", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "stateRoot", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "batchIndex", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "batchRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "batchSize", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "prevTotalElements", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "extraData", + "type": "bytes" + } + ], + "internalType": "struct Lib_OVMCodec.ChainBatchHeader", + "name": "stateRootBatchHeader", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "bytes32[]", + "name": "siblings", + "type": "bytes32[]" + } + ], + "internalType": "struct Lib_OVMCodec.ChainInclusionProof", + "name": "stateRootProof", + "type": "tuple" + }, + { + "internalType": "bytes", + "name": "stateTrieWitness", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "storageTrieWitness", + "type": "bytes" + } + ], + "internalType": "struct IL1CrossDomainMessenger.L2MessageInclusionProof", + "name": "_proof", + "type": "tuple" + } + ], + "name": "relayMessage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "relayedMessages", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_target", + "type": "address" + }, + { + "internalType": "address", + "name": "_sender", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_message", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "_queueIndex", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "_oldGasLimit", + "type": "uint32" + }, + { + "internalType": "uint32", + "name": "_newGasLimit", + "type": "uint32" + } + ], + "name": "replayMessage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + } + ], + "name": "resolve", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_target", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_message", + "type": "bytes" + }, + { + "internalType": "uint32", + "name": "_gasLimit", + "type": "uint32" + } + ], + "name": "sendMessage", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "successfulMessages", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "xDomainMessageSender", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608060405260cd80546001600160a01b03191661dead17905534801561002457600080fd5b50600080546001600160a01b0319169055613933806100446000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c8063715018a6116100cd578063b1b1b20911610081578063c6b94ab011610066578063c6b94ab0146102e1578063d7fd19dd14610304578063f2fde38b1461031757600080fd5b8063b1b1b209146102ab578063c4d66de8146102ce57600080fd5b80638456cb59116100b25780638456cb59146102625780638da5cb5b1461026a578063a4e7f8bd1461028857600080fd5b8063715018a61461024757806381ada46c1461024f57600080fd5b80633dbb202b116101245780635c975abb116101095780635c975abb146102215780636e296e451461022c5780636f1c8d471461023457600080fd5b80633dbb202b146101fb578063461a44781461020e57600080fd5b80630ecf2eea1461015657806316e9cd9b1461016b57806321d800ec1461017e578063299ca478146101b6575b600080fd5b610169610164366004612d3c565b61032a565b005b610169610179366004612d55565b610375565b6101a161018c366004612d3c565b60ca6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6000546101d69073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ad565b610169610209366004612f29565b6103f2565b6101d661021c366004612f89565b610447565b60655460ff166101a1565b6101d66104f4565b610169610242366004612fda565b61057e565b61016961076d565b61016961025d366004612d3c565b610781565b6101696107c9565b60335473ffffffffffffffffffffffffffffffffffffffff166101d6565b6101a1610296366004612d3c565b60cc6020526000908152604090205460ff1681565b6101a16102b9366004612d3c565b60cb6020526000908152604090205460ff1681565b6101696102dc366004613066565b6107d9565b6101a16102ef366004612d3c565b60c96020526000908152604090205460ff1681565b610169610312366004613266565b610ab1565b610169610325366004613066565b610f4a565b610332610fe7565b600081815260c96020526040808220805460ff191660011790555182917ff52508d5339edf0d7e5060a416df98db067af561bdc60872d29c0439eaa13a0291a250565b61037d61104e565b60005b818110156103ed57600083838381811061039c5761039c6132f9565b90506020028101906103ae9190613328565b6103b790613366565b90506103da81600001518260200151836040015184606001518560800151610ab1565b50806103e581613426565b915050610380565b505050565b6103fa61104e565b60405162461bcd60e51b815260206004820152601660248201527f53746172742053687574646f776e2050726f746f636c0000000000000000000060448201526064015b60405180910390fd5b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061049e9085906004016134d0565b60206040518083038186803b1580156104b657600080fd5b505afa1580156104ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ee91906134e3565b92915050565b60cd5460009073ffffffffffffffffffffffffffffffffffffffff1661dead14156105615760405162461bcd60e51b815260206004820152601f60248201527f78446f6d61696e4d65737361676553656e646572206973206e6f742073657400604482015260640161043e565b5060cd5473ffffffffffffffffffffffffffffffffffffffff1690565b61058661104e565b60006105c66040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610447565b6040517f2a7f18be0000000000000000000000000000000000000000000000000000000081526004810186905290915060009073ffffffffffffffffffffffffffffffffffffffff831690632a7f18be9060240160606040518083038186803b15801561063257600080fd5b505afa158015610646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066a9190613500565b9050600061067a898989896110a1565b90506000731111000000000000000000000000000000001111300173420000000000000000000000000000000000000787846040516020016106bf9493929190613565565b604051602081830303815290604052805190602001209050826000015181146107505760405162461bcd60e51b815260206004820152602760248201527f50726f7669646564206d65737361676520686173206e6f74206265656e20656e60448201527f7175657565642e00000000000000000000000000000000000000000000000000606482015260840161043e565b61076184838763ffffffff1661111c565b50505050505050505050565b610775610fe7565b61077f60006111bd565b565b610789610fe7565b600081815260c96020526040808220805460ff191690555182917f52c8a2680a9f4cc0ad0bf88f32096eadbebf0646ea611d93a0ce6a29a024040591a250565b6107d1610fe7565b61077f611234565b6000547501000000000000000000000000000000000000000000900460ff1615808015610824575060005460017401000000000000000000000000000000000000000090910460ff16105b806108565750303b158015610856575060005474010000000000000000000000000000000000000000900460ff166001145b6108c85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161043e565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055801561094e57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60005473ffffffffffffffffffffffffffffffffffffffff16156109da5760405162461bcd60e51b815260206004820152602a60248201527f4c3143726f7373446f6d61696e4d657373656e67657220616c7265616479206960448201527f6e7469616c697a65642e00000000000000000000000000000000000000000000606482015260840161043e565b6000805473ffffffffffffffffffffffffffffffffffffffff84167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560cd805490911661dead179055610a3261129b565b610a3a61132c565b610a426113c6565b610a4a611463565b8015610aad57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b60026097541415610b045760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161043e565b6002609755610b1161104e565b6000610b1f868686866110a1565b9050610b2b81836114fb565b1515600114610ba25760405162461bcd60e51b815260206004820152602760248201527f50726f7669646564206d65737361676520636f756c64206e6f7420626520766560448201527f7269666965642e00000000000000000000000000000000000000000000000000606482015260840161043e565b8051602080830191909120600081815260cb90925260409091205460ff1615610c335760405162461bcd60e51b815260206004820152602b60248201527f50726f7669646564206d6573736167652068617320616c72656164792062656560448201527f6e2072656365697665642e000000000000000000000000000000000000000000606482015260840161043e565b600081815260c9602052604090205460ff1615610cb85760405162461bcd60e51b815260206004820152602260248201527f50726f7669646564206d65737361676520686173206265656e20626c6f636b6560448201527f642e000000000000000000000000000000000000000000000000000000000000606482015260840161043e565b610cf66040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610447565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161415610d975760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f742073656e64204c322d3e4c31206d6573736167657320746f204c60448201527f312073797374656d20636f6e7472616374732e00000000000000000000000000606482015260840161043e565b60cd80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff88811691909117909155604051600091891690610df09088906135aa565b6000604051808303816000865af19150503d8060008114610e2d576040519150601f19603f3d011682016040523d82523d6000602084013e610e32565b606091505b505060cd80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080151560011415610eb257600082815260cb6020526040808220805460ff191660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2610ef3565b600082815260cc6020526040808220805460ff191660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a25b6000833343604051602001610f0a939291906135bc565b60408051601f198184030181529181528151602092830120600090815260ca9092529020805460ff19166001908117909155609755505050505050505050565b610f52610fe7565b73ffffffffffffffffffffffffffffffffffffffff8116610fdb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161043e565b610fe4816111bd565b50565b60335473ffffffffffffffffffffffffffffffffffffffff16331461077f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161043e565b60655460ff161561077f5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640161043e565b6060848484846040516024016110ba949392919061360e565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6040517f6fee07e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636fee07e090611186907342000000000000000000000000000000000000079085908790600401613658565b600060405180830381600087803b1580156111a057600080fd5b505af11580156111b4573d6000803e3d6000fd5b50505050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61123c61104e565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112713390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6000547501000000000000000000000000000000000000000000900460ff1661077f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161043e565b6000547501000000000000000000000000000000000000000000900460ff166113bd5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161043e565b61077f336111bd565b6000547501000000000000000000000000000000000000000000900460ff166114575760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161043e565b6065805460ff19169055565b6000547501000000000000000000000000000000000000000000900460ff166114f45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161043e565b6001609755565b60006115068261151e565b8015611517575061151783836116c0565b9392505050565b60008061155f6040518060400160405280601481526020017f5374617465436f6d6d69746d656e74436861696e000000000000000000000000815250610447565b60208401516040517f9418bddd00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff831691639418bddd916115b7916004016136ca565b60206040518083038186803b1580156115cf57600080fd5b505afa1580156115e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160791906136dd565b15801561151757508251602084015160408086015190517f4d69ee5700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851693634d69ee57936116709391929091906004016136ff565b60206040518083038186803b15801561168857600080fd5b505afa15801561169c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151791906136dd565b600080837342000000000000000000000000000000000000076040516020016116ea929190613777565b60408051601f1981840301815282825280516020918201209083015260009082015260600160408051601f198184030181529082905280516020918201207f4200000000000000000000000000000000000000000000000000000000000000918301919091529150600090819061177a9060340160408051601f19818403018152919052606087015187516118a4565b909250905060018215151461181d5760405162461bcd60e51b815260206004820152604d60248201527f4d6573736167652070617373696e67207072656465706c6f7920686173206e6f60448201527f74206265656e20696e697469616c697a6564206f7220696e76616c696420707260648201527f6f6f662070726f76696465642e00000000000000000000000000000000000000608482015260a40161043e565b6000611828826118cd565b90506118998460405160200161184091815260200190565b60408051601f19818403018152908290527f010000000000000000000000000000000000000000000000000000000000000060208301529060210160405160208183030381529060405288608001518460400151611991565b979650505050505050565b6000606060006118b3866119b5565b90506118c08186866119e7565b9250925050935093915050565b6040805160808101825260008082526020820181905291810182905260608101829052906118fa83611ac2565b9050604051806080016040528061192a8360008151811061191d5761191d6132f9565b6020026020010151611af5565b81526020016119458360018151811061191d5761191d6132f9565b815260200161196d83600281518110611960576119606132f9565b6020026020010151611afc565b815260200161198883600381518110611960576119606132f9565b90529392505050565b60008061199d866119b5565b90506119ab81868686611bfe565b9695505050505050565b606081805190602001206040516020016119d191815260200190565b6040516020818303038152906040529050919050565b6000606060006119f685611c34565b90506000806000611a08848a89611d2f565b81519295509093509150158080611a1c5750815b611a685760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e000000000000604482015260640161043e565b600081611a845760405180602001604052806000815250611ab0565b611ab086611a936001886137c1565b81518110611aa357611aa36132f9565b60200260200101516121ca565b919b919a509098505050505050505050565b6040805180820182526000808252602091820152815180830190925282518252808301908201526060906104ee906121f4565b60006104ee825b6000602182600001511115611b535760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604482015260640161043e565b6000806000611b61856123f3565b919450925090506000816001811115611b7c57611b7c6137d8565b14611bc95760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604482015260640161043e565b6000838660200151611bdb9190613807565b805190915060208410156119ab5760208490036101000a90049695505050505050565b6000806000611c0e8786866119e7565b915091508180156118995750805160208083019190912087519188019190912014611899565b60606000611c4183611ac2565b90506000815167ffffffffffffffff811115611c5f57611c5f612dec565b604051908082528060200260200182016040528015611ca457816020015b6040805180820190915260608082526020820152815260200190600190039081611c7d5790505b50905060005b8251811015611d27576000611cd7848381518110611cca57611cca6132f9565b6020026020010151612744565b90506040518060400160405280828152602001611cf383611ac2565b815250838381518110611d0857611d086132f9565b6020026020010181905250508080611d1f90613426565b915050611caa565b509392505050565b60006060818080611d3f876127d4565b90506000869050600080611d66604051806040016040528060608152602001606081525090565b60005b8c51811015612186578c8181518110611d8457611d846132f9565b602002602001015191508284611d9a9190613807565b9350611da7600188613807565b965083611e0b57815180516020909101208514611e065760405162461bcd60e51b815260206004820152601160248201527f496e76616c696420726f6f742068617368000000000000000000000000000000604482015260640161043e565b611ec8565b815151602011611e6d57815180516020909101208514611e065760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c20686173680000000000604482015260640161043e565b84611e7b8360000151612957565b14611ec85760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f64652068617368000000000000604482015260640161043e565b611ed460106001613807565b8260200151511415611f4d578551841415611eee57612186565b6000868581518110611f0257611f026132f9565b602001015160f81c60f81b60f81c9050600083602001518260ff1681518110611f2d57611f2d6132f9565b60200260200101519050611f408161297f565b9650600194505050612174565b6002826020015151141561212c576000611f66836129b5565b9050600081600081518110611f7d57611f7d6132f9565b016020015160f81c90506000611f9460028361384e565b611f9f906002613870565b90506000611fb0848360ff166129d9565b90506000611fbe8b8a6129d9565b90506000611fcc8383612a0f565b905060ff851660021480611fe3575060ff85166003145b1561203957808351148015611ff85750808251145b1561200a57612007818b613807565b99505b507f80000000000000000000000000000000000000000000000000000000000000009950612186945050505050565b60ff8516158061204c575060ff85166001145b156120be578251811461208857507f80000000000000000000000000000000000000000000000000000000000000009950612186945050505050565b6120af88602001516001815181106120a2576120a26132f9565b602002602001015161297f565b9a509750612174945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e2060448201527f7072656669780000000000000000000000000000000000000000000000000000606482015260840161043e565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e000000604482015260640161043e565b8061217e81613426565b915050611d69565b507f80000000000000000000000000000000000000000000000000000000000000008414866121b587866129d9565b909e909d50909b509950505050505050505050565b602081015180516060916104ee916121e4906001906137c1565b81518110611cca57611cca6132f9565b6060600080612202846123f3565b9193509091506001905081600181111561221e5761221e6137d8565b1461226b5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c50206c6973742076616c75652e000000000000000000604482015260640161043e565b6040805160208082526104208201909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816122845790505090506000835b86518110156123e857602082106123305760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201527f7374206c656e6774682e00000000000000000000000000000000000000000000606482015260840161043e565b60008061236d6040518060400160405280858c6000015161235191906137c1565b8152602001858c602001516123669190613807565b90526123f3565b5091509150604051806040016040528083836123899190613807565b8152602001848b6020015161239e9190613807565b8152508585815181106123b3576123b36132f9565b60209081029190910101526123c9600185613807565b93506123d58183613807565b6123df9084613807565b925050506122b1565b508152949350505050565b60008060008084600001511161244b5760405162461bcd60e51b815260206004820152601860248201527f524c50206974656d2063616e6e6f74206265206e756c6c2e0000000000000000604482015260640161043e565b6020840151805160001a607f811161247057600060016000945094509450505061273d565b60b781116124ec5760006124856080836137c1565b9050808760000151116124da5760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420524c502073686f727420737472696e672e00000000000000604482015260640161043e565b6001955093506000925061273d915050565b60bf81116125db57600061250160b7836137c1565b9050808760000151116125565760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e00604482015260640161043e565b600183015160208290036101000a90046125708183613807565b8851116125bf5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c50206c6f6e6720737472696e672e0000000000000000604482015260640161043e565b6125ca826001613807565b965094506000935061273d92505050565b60f781116126565760006125f060c0836137c1565b9050808760000151116126455760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c502073686f7274206c6973742e000000000000000000604482015260640161043e565b60019550935084925061273d915050565b600061266360f7836137c1565b9050808760000151116126b85760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e000000604482015260640161043e565b600183015160208290036101000a90046126d28183613807565b8851116127215760405162461bcd60e51b815260206004820152601660248201527f496e76616c696420524c50206c6f6e67206c6973742e00000000000000000000604482015260640161043e565b61272c826001613807565b965094506001935061273d92505050565b9193909250565b60606000806000612754856123f3565b91945092509050600081600181111561276f5761276f6137d8565b146127bc5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c502062797465732076616c75652e0000000000000000604482015260640161043e565b6127cb85602001518484612abb565b95945050505050565b60606000825160026127e69190613893565b67ffffffffffffffff8111156127fe576127fe612dec565b6040519080825280601f01601f191660200182016040528015612828576020820181803683370190505b50905060005b835181101561295057600484828151811061284b5761284b6132f9565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c82612880836002613893565b81518110612890576128906132f9565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060108482815181106128d3576128d36132f9565b01602001516128e5919060f81c61384e565b60f81b826128f4836002613893565b6128ff906001613807565b8151811061290f5761290f6132f9565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508061294881613426565b91505061282e565b5092915050565b600060208251101561296b57506020015190565b818060200190518101906104ee91906138d0565b600060606020836000015110156129a05761299983612b9a565b90506129ac565b6129a983612744565b90505b61151781612957565b60606104ee6129d48360200151600081518110611cca57611cca6132f9565b6127d4565b6060825182106129f857506040805160208101909152600081526104ee565b6115178383848651612a0a91906137c1565b612ba5565b6000805b808451118015612a235750808351115b8015612aa45750828181518110612a3c57612a3c6132f9565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110612a7b57612a7b6132f9565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156115175780612ab381613426565b915050612a13565b606060008267ffffffffffffffff811115612ad857612ad8612dec565b6040519080825280601f01601f191660200182016040528015612b02576020820181803683370190505b509050805160001415612b16579050611517565b6000612b228587613807565b90506020820160005b612b366020876138e9565b811015612b6d5782518252612b4c602084613807565b9250612b59602083613807565b915080612b6581613426565b915050612b2b565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b60606104ee82612d26565b606081612bb381601f613807565b1015612c015760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015260640161043e565b82612c0c8382613807565b1015612c5a5760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015260640161043e565b612c648284613807565b84511015612cb45760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015260640161043e565b606082158015612cd35760405191506000825260208201604052612d1d565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015612d0c578051835260209283019201612cf4565b5050858452601f01601f1916604052505b50949350505050565b60606104ee826020015160008460000151612abb565b600060208284031215612d4e57600080fd5b5035919050565b60008060208385031215612d6857600080fd5b823567ffffffffffffffff80821115612d8057600080fd5b818501915085601f830112612d9457600080fd5b813581811115612da357600080fd5b8660208260051b8501011115612db857600080fd5b60209290920196919550909350505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610fe457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715612e3e57612e3e612dec565b60405290565b6040805190810167ffffffffffffffff81118282101715612e3e57612e3e612dec565b604051601f8201601f1916810167ffffffffffffffff81118282101715612e9057612e90612dec565b604052919050565b600067ffffffffffffffff831115612eb257612eb2612dec565b612ec56020601f19601f86011601612e67565b9050828152838383011115612ed957600080fd5b828260208301376000602084830101529392505050565b600082601f830112612f0157600080fd5b61151783833560208501612e98565b803563ffffffff81168114612f2457600080fd5b919050565b600080600060608486031215612f3e57600080fd5b8335612f4981612dca565b9250602084013567ffffffffffffffff811115612f6557600080fd5b612f7186828701612ef0565b925050612f8060408501612f10565b90509250925092565b600060208284031215612f9b57600080fd5b813567ffffffffffffffff811115612fb257600080fd5b8201601f81018413612fc357600080fd5b612fd284823560208401612e98565b949350505050565b60008060008060008060c08789031215612ff357600080fd5b8635612ffe81612dca565b9550602087013561300e81612dca565b9450604087013567ffffffffffffffff81111561302a57600080fd5b61303689828a01612ef0565b9450506060870135925061304c60808801612f10565b915061305a60a08801612f10565b90509295509295509295565b60006020828403121561307857600080fd5b813561151781612dca565b600060a0828403121561309557600080fd5b61309d612e1b565b905081358152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff8111156130db57600080fd5b6130e784828501612ef0565b60808301525092915050565b60006040828403121561310557600080fd5b61310d612e44565b90508135815260208083013567ffffffffffffffff8082111561312f57600080fd5b818501915085601f83011261314357600080fd5b81358181111561315557613155612dec565b8060051b9150613166848301612e67565b818152918301840191848101908884111561318057600080fd5b938501935b8385101561319e57843582529385019390850190613185565b808688015250505050505092915050565b600060a082840312156131c157600080fd5b6131c9612e1b565b905081358152602082013567ffffffffffffffff808211156131ea57600080fd5b6131f685838601613083565b6020840152604084013591508082111561320f57600080fd5b61321b858386016130f3565b6040840152606084013591508082111561323457600080fd5b61324085838601612ef0565b6060840152608084013591508082111561325957600080fd5b506130e784828501612ef0565b600080600080600060a0868803121561327e57600080fd5b853561328981612dca565b9450602086013561329981612dca565b9350604086013567ffffffffffffffff808211156132b657600080fd5b6132c289838a01612ef0565b94506060880135935060808801359150808211156132df57600080fd5b506132ec888289016131af565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6183360301811261335c57600080fd5b9190910192915050565b600060a0823603121561337857600080fd5b613380612e1b565b823561338b81612dca565b8152602083013561339b81612dca565b6020820152604083013567ffffffffffffffff808211156133bb57600080fd5b6133c736838701612ef0565b60408401526060850135606084015260808501359150808211156133ea57600080fd5b506130e7368286016131af565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613458576134586133f7565b5060010190565b805164ffffffffff81168114612f2457600080fd5b60005b8381101561348f578181015183820152602001613477565b8381111561349e576000848401525b50505050565b600081518084526134bc816020860160208601613474565b601f01601f19169290920160200192915050565b60208152600061151760208301846134a4565b6000602082840312156134f557600080fd5b815161151781612dca565b60006060828403121561351257600080fd5b6040516060810181811067ffffffffffffffff8211171561353557613535612dec565b604052825181526135486020840161345f565b60208201526135596040840161345f565b60408201529392505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525063ffffffff84166040830152608060608301526119ab60808301846134a4565b6000825161335c818460208701613474565b600084516135ce818460208901613474565b60609490941b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001691909301908152601481019190915260340192915050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261364760808301856134a4565b905082606083015295945050505050565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006127cb60608301846134a4565b805182526020810151602083015260408101516040830152606081015160608301526000608082015160a06080850152612fd260a08501826134a4565b602081526000611517602083018461368d565b6000602082840312156136ef57600080fd5b8151801515811461151757600080fd5b83815260006020606081840152613719606084018661368d565b83810360408501526040810185518252828601516040848401528181518084526060850191508583019450600093505b808410156137695784518252938501936001939093019290850190613749565b509998505050505050505050565b60008351613789818460208801613474565b60609390931b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190920190815260140192915050565b6000828210156137d3576137d36133f7565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000821982111561381a5761381a6133f7565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600060ff8316806138615761386161381f565b8060ff84160691505092915050565b600060ff821660ff84168082101561388a5761388a6133f7565b90039392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138cb576138cb6133f7565b500290565b6000602082840312156138e257600080fd5b5051919050565b6000826138f8576138f861381f565b50049056fea2646970667358221220c6ac4db32fab75d96297861b671c542b0068669005f6df224161b67ef45e1ba364736f6c63430008090033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101515760003560e01c8063715018a6116100cd578063b1b1b20911610081578063c6b94ab011610066578063c6b94ab0146102e1578063d7fd19dd14610304578063f2fde38b1461031757600080fd5b8063b1b1b209146102ab578063c4d66de8146102ce57600080fd5b80638456cb59116100b25780638456cb59146102625780638da5cb5b1461026a578063a4e7f8bd1461028857600080fd5b8063715018a61461024757806381ada46c1461024f57600080fd5b80633dbb202b116101245780635c975abb116101095780635c975abb146102215780636e296e451461022c5780636f1c8d471461023457600080fd5b80633dbb202b146101fb578063461a44781461020e57600080fd5b80630ecf2eea1461015657806316e9cd9b1461016b57806321d800ec1461017e578063299ca478146101b6575b600080fd5b610169610164366004612d3c565b61032a565b005b610169610179366004612d55565b610375565b6101a161018c366004612d3c565b60ca6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6000546101d69073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ad565b610169610209366004612f29565b6103f2565b6101d661021c366004612f89565b610447565b60655460ff166101a1565b6101d66104f4565b610169610242366004612fda565b61057e565b61016961076d565b61016961025d366004612d3c565b610781565b6101696107c9565b60335473ffffffffffffffffffffffffffffffffffffffff166101d6565b6101a1610296366004612d3c565b60cc6020526000908152604090205460ff1681565b6101a16102b9366004612d3c565b60cb6020526000908152604090205460ff1681565b6101696102dc366004613066565b6107d9565b6101a16102ef366004612d3c565b60c96020526000908152604090205460ff1681565b610169610312366004613266565b610ab1565b610169610325366004613066565b610f4a565b610332610fe7565b600081815260c96020526040808220805460ff191660011790555182917ff52508d5339edf0d7e5060a416df98db067af561bdc60872d29c0439eaa13a0291a250565b61037d61104e565b60005b818110156103ed57600083838381811061039c5761039c6132f9565b90506020028101906103ae9190613328565b6103b790613366565b90506103da81600001518260200151836040015184606001518560800151610ab1565b50806103e581613426565b915050610380565b505050565b6103fa61104e565b60405162461bcd60e51b815260206004820152601660248201527f53746172742053687574646f776e2050726f746f636c0000000000000000000060448201526064015b60405180910390fd5b600080546040517fbf40fac100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063bf40fac19061049e9085906004016134d0565b60206040518083038186803b1580156104b657600080fd5b505afa1580156104ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ee91906134e3565b92915050565b60cd5460009073ffffffffffffffffffffffffffffffffffffffff1661dead14156105615760405162461bcd60e51b815260206004820152601f60248201527f78446f6d61696e4d65737361676553656e646572206973206e6f742073657400604482015260640161043e565b5060cd5473ffffffffffffffffffffffffffffffffffffffff1690565b61058661104e565b60006105c66040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610447565b6040517f2a7f18be0000000000000000000000000000000000000000000000000000000081526004810186905290915060009073ffffffffffffffffffffffffffffffffffffffff831690632a7f18be9060240160606040518083038186803b15801561063257600080fd5b505afa158015610646573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066a9190613500565b9050600061067a898989896110a1565b90506000731111000000000000000000000000000000001111300173420000000000000000000000000000000000000787846040516020016106bf9493929190613565565b604051602081830303815290604052805190602001209050826000015181146107505760405162461bcd60e51b815260206004820152602760248201527f50726f7669646564206d65737361676520686173206e6f74206265656e20656e60448201527f7175657565642e00000000000000000000000000000000000000000000000000606482015260840161043e565b61076184838763ffffffff1661111c565b50505050505050505050565b610775610fe7565b61077f60006111bd565b565b610789610fe7565b600081815260c96020526040808220805460ff191690555182917f52c8a2680a9f4cc0ad0bf88f32096eadbebf0646ea611d93a0ce6a29a024040591a250565b6107d1610fe7565b61077f611234565b6000547501000000000000000000000000000000000000000000900460ff1615808015610824575060005460017401000000000000000000000000000000000000000090910460ff16105b806108565750303b158015610856575060005474010000000000000000000000000000000000000000900460ff166001145b6108c85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161043e565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055801561094e57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60005473ffffffffffffffffffffffffffffffffffffffff16156109da5760405162461bcd60e51b815260206004820152602a60248201527f4c3143726f7373446f6d61696e4d657373656e67657220616c7265616479206960448201527f6e7469616c697a65642e00000000000000000000000000000000000000000000606482015260840161043e565b6000805473ffffffffffffffffffffffffffffffffffffffff84167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560cd805490911661dead179055610a3261129b565b610a3a61132c565b610a426113c6565b610a4a611463565b8015610aad57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b60026097541415610b045760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161043e565b6002609755610b1161104e565b6000610b1f868686866110a1565b9050610b2b81836114fb565b1515600114610ba25760405162461bcd60e51b815260206004820152602760248201527f50726f7669646564206d65737361676520636f756c64206e6f7420626520766560448201527f7269666965642e00000000000000000000000000000000000000000000000000606482015260840161043e565b8051602080830191909120600081815260cb90925260409091205460ff1615610c335760405162461bcd60e51b815260206004820152602b60248201527f50726f7669646564206d6573736167652068617320616c72656164792062656560448201527f6e2072656365697665642e000000000000000000000000000000000000000000606482015260840161043e565b600081815260c9602052604090205460ff1615610cb85760405162461bcd60e51b815260206004820152602260248201527f50726f7669646564206d65737361676520686173206265656e20626c6f636b6560448201527f642e000000000000000000000000000000000000000000000000000000000000606482015260840161043e565b610cf66040518060400160405280601981526020017f43616e6f6e6963616c5472616e73616374696f6e436861696e00000000000000815250610447565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161415610d975760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f742073656e64204c322d3e4c31206d6573736167657320746f204c60448201527f312073797374656d20636f6e7472616374732e00000000000000000000000000606482015260840161043e565b60cd80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff88811691909117909155604051600091891690610df09088906135aa565b6000604051808303816000865af19150503d8060008114610e2d576040519150601f19603f3d011682016040523d82523d6000602084013e610e32565b606091505b505060cd80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080151560011415610eb257600082815260cb6020526040808220805460ff191660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2610ef3565b600082815260cc6020526040808220805460ff191660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a25b6000833343604051602001610f0a939291906135bc565b60408051601f198184030181529181528151602092830120600090815260ca9092529020805460ff19166001908117909155609755505050505050505050565b610f52610fe7565b73ffffffffffffffffffffffffffffffffffffffff8116610fdb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161043e565b610fe4816111bd565b50565b60335473ffffffffffffffffffffffffffffffffffffffff16331461077f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161043e565b60655460ff161561077f5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640161043e565b6060848484846040516024016110ba949392919061360e565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6040517f6fee07e000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690636fee07e090611186907342000000000000000000000000000000000000079085908790600401613658565b600060405180830381600087803b1580156111a057600080fd5b505af11580156111b4573d6000803e3d6000fd5b50505050505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61123c61104e565b6065805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586112713390565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b6000547501000000000000000000000000000000000000000000900460ff1661077f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161043e565b6000547501000000000000000000000000000000000000000000900460ff166113bd5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161043e565b61077f336111bd565b6000547501000000000000000000000000000000000000000000900460ff166114575760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161043e565b6065805460ff19169055565b6000547501000000000000000000000000000000000000000000900460ff166114f45760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161043e565b6001609755565b60006115068261151e565b8015611517575061151783836116c0565b9392505050565b60008061155f6040518060400160405280601481526020017f5374617465436f6d6d69746d656e74436861696e000000000000000000000000815250610447565b60208401516040517f9418bddd00000000000000000000000000000000000000000000000000000000815291925073ffffffffffffffffffffffffffffffffffffffff831691639418bddd916115b7916004016136ca565b60206040518083038186803b1580156115cf57600080fd5b505afa1580156115e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160791906136dd565b15801561151757508251602084015160408086015190517f4d69ee5700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851693634d69ee57936116709391929091906004016136ff565b60206040518083038186803b15801561168857600080fd5b505afa15801561169c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151791906136dd565b600080837342000000000000000000000000000000000000076040516020016116ea929190613777565b60408051601f1981840301815282825280516020918201209083015260009082015260600160408051601f198184030181529082905280516020918201207f4200000000000000000000000000000000000000000000000000000000000000918301919091529150600090819061177a9060340160408051601f19818403018152919052606087015187516118a4565b909250905060018215151461181d5760405162461bcd60e51b815260206004820152604d60248201527f4d6573736167652070617373696e67207072656465706c6f7920686173206e6f60448201527f74206265656e20696e697469616c697a6564206f7220696e76616c696420707260648201527f6f6f662070726f76696465642e00000000000000000000000000000000000000608482015260a40161043e565b6000611828826118cd565b90506118998460405160200161184091815260200190565b60408051601f19818403018152908290527f010000000000000000000000000000000000000000000000000000000000000060208301529060210160405160208183030381529060405288608001518460400151611991565b979650505050505050565b6000606060006118b3866119b5565b90506118c08186866119e7565b9250925050935093915050565b6040805160808101825260008082526020820181905291810182905260608101829052906118fa83611ac2565b9050604051806080016040528061192a8360008151811061191d5761191d6132f9565b6020026020010151611af5565b81526020016119458360018151811061191d5761191d6132f9565b815260200161196d83600281518110611960576119606132f9565b6020026020010151611afc565b815260200161198883600381518110611960576119606132f9565b90529392505050565b60008061199d866119b5565b90506119ab81868686611bfe565b9695505050505050565b606081805190602001206040516020016119d191815260200190565b6040516020818303038152906040529050919050565b6000606060006119f685611c34565b90506000806000611a08848a89611d2f565b81519295509093509150158080611a1c5750815b611a685760405162461bcd60e51b815260206004820152601a60248201527f50726f76696465642070726f6f6620697320696e76616c69642e000000000000604482015260640161043e565b600081611a845760405180602001604052806000815250611ab0565b611ab086611a936001886137c1565b81518110611aa357611aa36132f9565b60200260200101516121ca565b919b919a509098505050505050505050565b6040805180820182526000808252602091820152815180830190925282518252808301908201526060906104ee906121f4565b60006104ee825b6000602182600001511115611b535760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604482015260640161043e565b6000806000611b61856123f3565b919450925090506000816001811115611b7c57611b7c6137d8565b14611bc95760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420524c5020627974657333322076616c75652e000000000000604482015260640161043e565b6000838660200151611bdb9190613807565b805190915060208410156119ab5760208490036101000a90049695505050505050565b6000806000611c0e8786866119e7565b915091508180156118995750805160208083019190912087519188019190912014611899565b60606000611c4183611ac2565b90506000815167ffffffffffffffff811115611c5f57611c5f612dec565b604051908082528060200260200182016040528015611ca457816020015b6040805180820190915260608082526020820152815260200190600190039081611c7d5790505b50905060005b8251811015611d27576000611cd7848381518110611cca57611cca6132f9565b6020026020010151612744565b90506040518060400160405280828152602001611cf383611ac2565b815250838381518110611d0857611d086132f9565b6020026020010181905250508080611d1f90613426565b915050611caa565b509392505050565b60006060818080611d3f876127d4565b90506000869050600080611d66604051806040016040528060608152602001606081525090565b60005b8c51811015612186578c8181518110611d8457611d846132f9565b602002602001015191508284611d9a9190613807565b9350611da7600188613807565b965083611e0b57815180516020909101208514611e065760405162461bcd60e51b815260206004820152601160248201527f496e76616c696420726f6f742068617368000000000000000000000000000000604482015260640161043e565b611ec8565b815151602011611e6d57815180516020909101208514611e065760405162461bcd60e51b815260206004820152601b60248201527f496e76616c6964206c6172676520696e7465726e616c20686173680000000000604482015260640161043e565b84611e7b8360000151612957565b14611ec85760405162461bcd60e51b815260206004820152601a60248201527f496e76616c696420696e7465726e616c206e6f64652068617368000000000000604482015260640161043e565b611ed460106001613807565b8260200151511415611f4d578551841415611eee57612186565b6000868581518110611f0257611f026132f9565b602001015160f81c60f81b60f81c9050600083602001518260ff1681518110611f2d57611f2d6132f9565b60200260200101519050611f408161297f565b9650600194505050612174565b6002826020015151141561212c576000611f66836129b5565b9050600081600081518110611f7d57611f7d6132f9565b016020015160f81c90506000611f9460028361384e565b611f9f906002613870565b90506000611fb0848360ff166129d9565b90506000611fbe8b8a6129d9565b90506000611fcc8383612a0f565b905060ff851660021480611fe3575060ff85166003145b1561203957808351148015611ff85750808251145b1561200a57612007818b613807565b99505b507f80000000000000000000000000000000000000000000000000000000000000009950612186945050505050565b60ff8516158061204c575060ff85166001145b156120be578251811461208857507f80000000000000000000000000000000000000000000000000000000000000009950612186945050505050565b6120af88602001516001815181106120a2576120a26132f9565b602002602001015161297f565b9a509750612174945050505050565b60405162461bcd60e51b815260206004820152602660248201527f52656365697665642061206e6f6465207769746820616e20756e6b6e6f776e2060448201527f7072656669780000000000000000000000000000000000000000000000000000606482015260840161043e565b60405162461bcd60e51b815260206004820152601d60248201527f526563656976656420616e20756e706172736561626c65206e6f64652e000000604482015260640161043e565b8061217e81613426565b915050611d69565b507f80000000000000000000000000000000000000000000000000000000000000008414866121b587866129d9565b909e909d50909b509950505050505050505050565b602081015180516060916104ee916121e4906001906137c1565b81518110611cca57611cca6132f9565b6060600080612202846123f3565b9193509091506001905081600181111561221e5761221e6137d8565b1461226b5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c50206c6973742076616c75652e000000000000000000604482015260640161043e565b6040805160208082526104208201909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816122845790505090506000835b86518110156123e857602082106123305760405162461bcd60e51b815260206004820152602a60248201527f50726f766964656420524c50206c6973742065786365656473206d6178206c6960448201527f7374206c656e6774682e00000000000000000000000000000000000000000000606482015260840161043e565b60008061236d6040518060400160405280858c6000015161235191906137c1565b8152602001858c602001516123669190613807565b90526123f3565b5091509150604051806040016040528083836123899190613807565b8152602001848b6020015161239e9190613807565b8152508585815181106123b3576123b36132f9565b60209081029190910101526123c9600185613807565b93506123d58183613807565b6123df9084613807565b925050506122b1565b508152949350505050565b60008060008084600001511161244b5760405162461bcd60e51b815260206004820152601860248201527f524c50206974656d2063616e6e6f74206265206e756c6c2e0000000000000000604482015260640161043e565b6020840151805160001a607f811161247057600060016000945094509450505061273d565b60b781116124ec5760006124856080836137c1565b9050808760000151116124da5760405162461bcd60e51b815260206004820152601960248201527f496e76616c696420524c502073686f727420737472696e672e00000000000000604482015260640161043e565b6001955093506000925061273d915050565b60bf81116125db57600061250160b7836137c1565b9050808760000151116125565760405162461bcd60e51b815260206004820152601f60248201527f496e76616c696420524c50206c6f6e6720737472696e67206c656e6774682e00604482015260640161043e565b600183015160208290036101000a90046125708183613807565b8851116125bf5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c50206c6f6e6720737472696e672e0000000000000000604482015260640161043e565b6125ca826001613807565b965094506000935061273d92505050565b60f781116126565760006125f060c0836137c1565b9050808760000151116126455760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420524c502073686f7274206c6973742e000000000000000000604482015260640161043e565b60019550935084925061273d915050565b600061266360f7836137c1565b9050808760000151116126b85760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420524c50206c6f6e67206c697374206c656e6774682e000000604482015260640161043e565b600183015160208290036101000a90046126d28183613807565b8851116127215760405162461bcd60e51b815260206004820152601660248201527f496e76616c696420524c50206c6f6e67206c6973742e00000000000000000000604482015260640161043e565b61272c826001613807565b965094506001935061273d92505050565b9193909250565b60606000806000612754856123f3565b91945092509050600081600181111561276f5761276f6137d8565b146127bc5760405162461bcd60e51b815260206004820152601860248201527f496e76616c696420524c502062797465732076616c75652e0000000000000000604482015260640161043e565b6127cb85602001518484612abb565b95945050505050565b60606000825160026127e69190613893565b67ffffffffffffffff8111156127fe576127fe612dec565b6040519080825280601f01601f191660200182016040528015612828576020820181803683370190505b50905060005b835181101561295057600484828151811061284b5761284b6132f9565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c82612880836002613893565b81518110612890576128906132f9565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060108482815181106128d3576128d36132f9565b01602001516128e5919060f81c61384e565b60f81b826128f4836002613893565b6128ff906001613807565b8151811061290f5761290f6132f9565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508061294881613426565b91505061282e565b5092915050565b600060208251101561296b57506020015190565b818060200190518101906104ee91906138d0565b600060606020836000015110156129a05761299983612b9a565b90506129ac565b6129a983612744565b90505b61151781612957565b60606104ee6129d48360200151600081518110611cca57611cca6132f9565b6127d4565b6060825182106129f857506040805160208101909152600081526104ee565b6115178383848651612a0a91906137c1565b612ba5565b6000805b808451118015612a235750808351115b8015612aa45750828181518110612a3c57612a3c6132f9565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110612a7b57612a7b6132f9565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156115175780612ab381613426565b915050612a13565b606060008267ffffffffffffffff811115612ad857612ad8612dec565b6040519080825280601f01601f191660200182016040528015612b02576020820181803683370190505b509050805160001415612b16579050611517565b6000612b228587613807565b90506020820160005b612b366020876138e9565b811015612b6d5782518252612b4c602084613807565b9250612b59602083613807565b915080612b6581613426565b915050612b2b565b5060006001602087066020036101000a039050808251168119845116178252839450505050509392505050565b60606104ee82612d26565b606081612bb381601f613807565b1015612c015760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015260640161043e565b82612c0c8382613807565b1015612c5a5760405162461bcd60e51b815260206004820152600e60248201527f736c6963655f6f766572666c6f77000000000000000000000000000000000000604482015260640161043e565b612c648284613807565b84511015612cb45760405162461bcd60e51b815260206004820152601160248201527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000604482015260640161043e565b606082158015612cd35760405191506000825260208201604052612d1d565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015612d0c578051835260209283019201612cf4565b5050858452601f01601f1916604052505b50949350505050565b60606104ee826020015160008460000151612abb565b600060208284031215612d4e57600080fd5b5035919050565b60008060208385031215612d6857600080fd5b823567ffffffffffffffff80821115612d8057600080fd5b818501915085601f830112612d9457600080fd5b813581811115612da357600080fd5b8660208260051b8501011115612db857600080fd5b60209290920196919550909350505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610fe457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715612e3e57612e3e612dec565b60405290565b6040805190810167ffffffffffffffff81118282101715612e3e57612e3e612dec565b604051601f8201601f1916810167ffffffffffffffff81118282101715612e9057612e90612dec565b604052919050565b600067ffffffffffffffff831115612eb257612eb2612dec565b612ec56020601f19601f86011601612e67565b9050828152838383011115612ed957600080fd5b828260208301376000602084830101529392505050565b600082601f830112612f0157600080fd5b61151783833560208501612e98565b803563ffffffff81168114612f2457600080fd5b919050565b600080600060608486031215612f3e57600080fd5b8335612f4981612dca565b9250602084013567ffffffffffffffff811115612f6557600080fd5b612f7186828701612ef0565b925050612f8060408501612f10565b90509250925092565b600060208284031215612f9b57600080fd5b813567ffffffffffffffff811115612fb257600080fd5b8201601f81018413612fc357600080fd5b612fd284823560208401612e98565b949350505050565b60008060008060008060c08789031215612ff357600080fd5b8635612ffe81612dca565b9550602087013561300e81612dca565b9450604087013567ffffffffffffffff81111561302a57600080fd5b61303689828a01612ef0565b9450506060870135925061304c60808801612f10565b915061305a60a08801612f10565b90509295509295509295565b60006020828403121561307857600080fd5b813561151781612dca565b600060a0828403121561309557600080fd5b61309d612e1b565b905081358152602082013560208201526040820135604082015260608201356060820152608082013567ffffffffffffffff8111156130db57600080fd5b6130e784828501612ef0565b60808301525092915050565b60006040828403121561310557600080fd5b61310d612e44565b90508135815260208083013567ffffffffffffffff8082111561312f57600080fd5b818501915085601f83011261314357600080fd5b81358181111561315557613155612dec565b8060051b9150613166848301612e67565b818152918301840191848101908884111561318057600080fd5b938501935b8385101561319e57843582529385019390850190613185565b808688015250505050505092915050565b600060a082840312156131c157600080fd5b6131c9612e1b565b905081358152602082013567ffffffffffffffff808211156131ea57600080fd5b6131f685838601613083565b6020840152604084013591508082111561320f57600080fd5b61321b858386016130f3565b6040840152606084013591508082111561323457600080fd5b61324085838601612ef0565b6060840152608084013591508082111561325957600080fd5b506130e784828501612ef0565b600080600080600060a0868803121561327e57600080fd5b853561328981612dca565b9450602086013561329981612dca565b9350604086013567ffffffffffffffff808211156132b657600080fd5b6132c289838a01612ef0565b94506060880135935060808801359150808211156132df57600080fd5b506132ec888289016131af565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6183360301811261335c57600080fd5b9190910192915050565b600060a0823603121561337857600080fd5b613380612e1b565b823561338b81612dca565b8152602083013561339b81612dca565b6020820152604083013567ffffffffffffffff808211156133bb57600080fd5b6133c736838701612ef0565b60408401526060850135606084015260808501359150808211156133ea57600080fd5b506130e7368286016131af565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613458576134586133f7565b5060010190565b805164ffffffffff81168114612f2457600080fd5b60005b8381101561348f578181015183820152602001613477565b8381111561349e576000848401525b50505050565b600081518084526134bc816020860160208601613474565b601f01601f19169290920160200192915050565b60208152600061151760208301846134a4565b6000602082840312156134f557600080fd5b815161151781612dca565b60006060828403121561351257600080fd5b6040516060810181811067ffffffffffffffff8211171561353557613535612dec565b604052825181526135486020840161345f565b60208201526135596040840161345f565b60408201529392505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525063ffffffff84166040830152608060608301526119ab60808301846134a4565b6000825161335c818460208701613474565b600084516135ce818460208901613474565b60609490941b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001691909301908152601481019190915260340192915050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261364760808301856134a4565b905082606083015295945050505050565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006127cb60608301846134a4565b805182526020810151602083015260408101516040830152606081015160608301526000608082015160a06080850152612fd260a08501826134a4565b602081526000611517602083018461368d565b6000602082840312156136ef57600080fd5b8151801515811461151757600080fd5b83815260006020606081840152613719606084018661368d565b83810360408501526040810185518252828601516040848401528181518084526060850191508583019450600093505b808410156137695784518252938501936001939093019290850190613749565b509998505050505050505050565b60008351613789818460208801613474565b60609390931b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190920190815260140192915050565b6000828210156137d3576137d36133f7565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6000821982111561381a5761381a6133f7565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600060ff8316806138615761386161381f565b8060ff84160691505092915050565b600060ff821660ff84168082101561388a5761388a6133f7565b90039392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138cb576138cb6133f7565b500290565b6000602082840312156138e257600080fd5b5051919050565b6000826138f8576138f861381f565b50049056fea2646970667358221220c6ac4db32fab75d96297861b671c542b0068669005f6df224161b67ef45e1ba364736f6c63430008090033", + "linkReferences": {}, + "deployedLinkReferences": {} + } \ No newline at end of file