{
  "contractName": "Controller",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_globalConstraint",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "enum GlobalConstraintInterface.CallPhase",
          "name": "_when",
          "type": "uint8"
        }
      ],
      "name": "AddGlobalConstraint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "BurnReputation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "MintReputation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_beneficiary",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        }
      ],
      "name": "MintTokens",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_scheme",
          "type": "address"
        }
      ],
      "name": "RegisterScheme",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_globalConstraint",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_index",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "_isPre",
          "type": "bool"
        }
      ],
      "name": "RemoveGlobalConstraint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_sender",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "_scheme",
          "type": "address"
        }
      ],
      "name": "UnregisterScheme",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_oldController",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "_newController",
          "type": "address"
        }
      ],
      "name": "UpgradeController",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_globalConstraint",
          "type": "address"
        }
      ],
      "name": "addGlobalConstraint",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "avatar",
      "outputs": [
        {
          "internalType": "contract Avatar",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        }
      ],
      "name": "burnReputation",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "_externalToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "externalTokenApproval",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "_externalToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "externalTokenTransfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IERC20",
          "name": "_externalToken",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "externalTokenTransferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_contract",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "_data",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "genericCall",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        },
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "globalConstraintsCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "globalConstraintsPost",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "globalConstraintsPre",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "globalConstraintsRegisterPost",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isRegistered",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "globalConstraintsRegisterPre",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isRegistered",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract Avatar",
          "name": "_avatar",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "initialScheme",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_globalConstraint",
          "type": "address"
        }
      ],
      "name": "isGlobalConstraintRegistered",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_scheme",
          "type": "address"
        }
      ],
      "name": "isSchemeRegistered",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_metaData",
          "type": "string"
        }
      ],
      "name": "metaData",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_to",
          "type": "address"
        }
      ],
      "name": "mintReputation",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_beneficiary",
          "type": "address"
        }
      ],
      "name": "mintTokens",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nativeReputation",
      "outputs": [
        {
          "internalType": "contract Reputation",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nativeToken",
      "outputs": [
        {
          "internalType": "contract DAOToken",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "newController",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_scheme",
          "type": "address"
        },
        {
          "internalType": "bytes4",
          "name": "_permissions",
          "type": "bytes4"
        }
      ],
      "name": "registerScheme",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_globalConstraint",
          "type": "address"
        }
      ],
      "name": "removeGlobalConstraint",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "schemesPermissions",
      "outputs": [
        {
          "internalType": "bytes4",
          "name": "",
          "type": "bytes4"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_amountInWei",
          "type": "uint256"
        },
        {
          "internalType": "address payable",
          "name": "_to",
          "type": "address"
        }
      ],
      "name": "sendEther",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_key",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "_value",
          "type": "string"
        }
      ],
      "name": "setDBValue",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_scheme",
          "type": "address"
        }
      ],
      "name": "unregisterScheme",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unregisterSelf",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newController",
          "type": "address"
        }
      ],
      "name": "upgradeController",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50613bc4806100206000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806381d064c411610104578063b9c2ee82116100a2578063ddbfcc6b11610071578063ddbfcc6b14610783578063dea9e24d146107af578063e1758bd8146107db578063e8c98b22146107e3576101cf565b8063b9c2ee82146106da578063cb16d4a214610700578063d5210f601461072c578063dab0efff1461074d576101cf565b806389ae1c90116100de57806389ae1c90146105a25780639c9c7326146105aa578063ab751f7114610668578063b756d5a21461069e576101cf565b806381d064c4146104cb57806384da77f5146104f1578063890ac46c14610534576101cf565b8063488b3814116101715780635f30e5811161014b5780635f30e58114610451578063653915e5146104775780636bafaa591461049d578063814784f6146104a5576101cf565b8063488b3814146103ed5780635aef7de6146104135780635d1da8cb1461041b576101cf565b80633a02263c116101ad5780633a02263c1461035657806341443cea1461037a5780634422d372146103a0578063485cc955146103bd576101cf565b806310c5b328146101d4578063177eebb0146102145780632bf1645814610255575b600080fd5b610200600480360360408110156101ea57600080fd5b50803590602001356001600160a01b0316610800565b604080519115158252519081900360200190f35b61023a6004803603602081101561022a57600080fd5b50356001600160a01b0316610b0c565b60408051921515835260208301919091528051918290030190f35b6102d36004803603606081101561026b57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561029557600080fd5b8201836020820111156102a757600080fd5b803590602001918460018302840111600160201b831117156102c857600080fd5b919350915035610b2b565b604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561031a578181015183820152602001610302565b50505050905090810190601f1680156103475780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b61035e610f10565b604080516001600160a01b039092168252519081900360200190f35b6102006004803603602081101561039057600080fd5b50356001600160a01b0316610f1f565b61035e600480360360208110156103b657600080fd5b5035610f64565b6103eb600480360360408110156103d357600080fd5b506001600160a01b0381358116916020013516610f8b565b005b6102006004803603602081101561040357600080fd5b50356001600160a01b031661119f565b61035e611588565b6102006004803603604081101561043157600080fd5b5080356001600160a01b031690602001356001600160e01b031916611597565b6102006004803603602081101561046757600080fd5b50356001600160a01b03166118f9565b6102006004803603602081101561048d57600080fd5b50356001600160a01b0316611bad565b610200611ed5565b61023a600480360360208110156104bb57600080fd5b50356001600160a01b0316611f34565b610200600480360360208110156104e157600080fd5b50356001600160a01b0316611f53565b6105176004803603602081101561050757600080fd5b50356001600160a01b0316611f5e565b604080516001600160e01b03199092168252519081900360200190f35b6102006004803603602081101561054a57600080fd5b810190602081018135600160201b81111561056457600080fd5b82018360208201111561057657600080fd5b803590602001918460018302840111600160201b8311171561059757600080fd5b509092509050611f73565b61035e61208a565b610200600480360360408110156105c057600080fd5b810190602081018135600160201b8111156105da57600080fd5b8201836020820111156105ec57600080fd5b803590602001918460018302840111600160201b8311171561060d57600080fd5b919390929091602081019035600160201b81111561062a57600080fd5b82018360208201111561063c57600080fd5b803590602001918460018302840111600160201b8311171561065d57600080fd5b509092509050612099565b6102006004803603606081101561067e57600080fd5b506001600160a01b038135811691602081013590911690604001356121cf565b610200600480360360808110156106b457600080fd5b506001600160a01b038135811691602081013582169160408201351690606001356124b7565b610200600480360360208110156106f057600080fd5b50356001600160a01b03166127a8565b6102006004803603604081101561071657600080fd5b50803590602001356001600160a01b0316612da3565b610734613066565b6040805192835260208301919091528051918290030190f35b6102006004803603606081101561076357600080fd5b506001600160a01b03813581169160208101359091169060400135613070565b6102006004803603604081101561079957600080fd5b50803590602001356001600160a01b0316613347565b610200600480360360408110156107c557600080fd5b50803590602001356001600160a01b031661364f565b61035e613957565b61035e600480360360208110156107f957600080fd5b5035613966565b3360009081526033602052604081205460e01b600160e01b9081161461085b576040805162461bcd60e51b815260206004820152601f6024820152600080516020613abd833981519152604482015290519081900360640190fd5b696d696e74546f6b656e7360b01b60005b603854811015610954576038818154811061088357fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b1580156108e157600080fd5b505af11580156108f5573d6000803e3d6000fd5b505050506040513d602081101561090b57600080fd5b505161094c576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b60010161086c565b6040805186815290516001600160a01b0386169133917f21f9c9a1a1f9a311a50f15fec5c1faa9e21fc9edf964f0fdecba5bd490484c5e9181900360200190a3603554604080516340c10f1960e01b81526001600160a01b03878116600483015260248201899052915191909216916340c10f199160448083019260209291908290030181600087803b1580156109ea57600080fd5b505af11580156109fe573d6000803e3d6000fd5b505050506040513d6020811015610a1457600080fd5b505192505060005b603954811015610b045760398181548110610a3357fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b158015610a9157600080fd5b505af1158015610aa5573d6000803e3d6000fd5b505050506040513d6020811015610abb57600080fd5b5051610afc576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b600101610a1c565b505092915050565b603a602052600090815260409020805460019091015460ff9091169082565b3360009081526033602052604081205460609060e01b600160e41b90811614610b9b576040805162461bcd60e51b815260206004820152601e60248201527f73656e646572206973206e6f7420612047656e6572696320536368656d650000604482015290519081900360640190fd5b6a19d95b995c9a58d0d85b1b60aa1b60005b603854811015610c955760388181548110610bc457fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b158015610c2257600080fd5b505af1158015610c36573d6000803e3d6000fd5b505050506040513d6020811015610c4c57600080fd5b5051610c8d576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b600101610bad565b60345460405163057e2c8b60e31b81526001600160a01b038a81166004830190815260448301899052606060248401908152606484018b90529190931692632bf16458928c928c928c928c9290608401858580828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015610d2357600080fd5b505af1158015610d37573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040908152811015610d6057600080fd5b815160208301805160405192949293830192919084600160201b821115610d8657600080fd5b908301906020820185811115610d9b57600080fd5b8251600160201b811182820188101715610db457600080fd5b82525081516020918201929091019080838360005b83811015610de1578181015183820152602001610dc9565b50505050905090810190601f168015610e0e5780820380516001836020036101000a031916815260200191505b50604052505050935093505060005b603954811015610f055760398181548110610e3457fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b158015610e9257600080fd5b505af1158015610ea6573d6000803e3d6000fd5b505050506040513d6020811015610ebc57600080fd5b5051610efd576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b600101610e1d565b505094509492505050565b6037546001600160a01b031681565b6001600160a01b0381166000908152603a602052604081205460ff1680610f5e57506001600160a01b0382166000908152603b602052604090205460ff165b92915050565b60388181548110610f7157fe5b6000918252602090912001546001600160a01b0316905081565b600054610100900460ff1680610fa45750610fa4613973565b80610fb2575060005460ff16155b610fed5760405162461bcd60e51b815260040180806020018281038252602e815260200180613add602e913960400191505060405180910390fd5b600054610100900460ff16158015611018576000805460ff1961ff0019909116610100171660011790555b603480546001600160a01b0319166001600160a01b03858116919091179182905560408051631c2eb17b60e31b81529051929091169163e1758bd891600480820192602092909190829003018186803b15801561107457600080fd5b505afa158015611088573d6000803e3d6000fd5b505050506040513d602081101561109e57600080fd5b5051603580546001600160a01b0319166001600160a01b039283161790556034546040805163089ae1c960e41b8152905191909216916389ae1c90916004808301926020929190829003018186803b1580156110f957600080fd5b505afa15801561110d573d6000803e3d6000fd5b505050506040513d602081101561112357600080fd5b5051603680546001600160a01b039283166001600160a01b03199091161790558216600081815260336020526040808220805463ffffffff1916601f1790555133917f546816e99403df442acb68ef69562682a50762c20a3fb6b472f7af9923736cfc91a3801561119a576000805461ff00191690555b505050565b3360009081526033602052604081205460e01b600160e21b908116146111f65760405162461bcd60e51b8152600401808060200182810382526025815260200180613a986025913960400191505060405180910390fd5b6111fe6139a2565b600080846001600160a01b031663e2b0caef6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561123c57600080fd5b505af1158015611250573d6000803e3d6000fd5b505050506040513d602081101561126657600080fd5b5051905060008082600281111561127957fe5b14806112905750600282600281111561128e57fe5b145b156113c6576001600160a01b0386166000908152603a60209081526040918290208251808401909352805460ff161580158452600190910154918301919091529094506113c6576001603880549050038460200151101561136d576038805460001981019081106112fd57fe5b9060005260206000200160009054906101000a90046001600160a01b0316925082603885602001518154811061132f57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055868101519286168252603a905260409020600101555b603880548061137857fe5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388168252603a905260408120805460ff1916815560019081019190915590505b60018260028111156113d457fe5b14806113eb575060028260028111156113e957fe5b145b15611521576001600160a01b0386166000908152603b60209081526040918290208251808401909352805460ff1615801584526001909101549183019190915290945061152157600160398054905003846020015110156114c85760398054600019810190811061145857fe5b9060005260206000200160009054906101000a90046001600160a01b0316925082603985602001518154811061148a57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055868101519286168252603b905260409020600101555b60398054806114d357fe5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388168252603b905260408120805460ff1916815560019081019190915590505b801561157f5760208401516001600160a01b038716907fcdf1a50ea6b7de555bd409f8a4a53ea43c6dc6b4caa961889da9e005f21bbaa990600085600281111561156757fe5b60408051938452911460208301528051918290030190a25b95945050505050565b6034546001600160a01b031681565b3360009081526033602052604081205460e01b600160e11b908116146115ee5760405162461bcd60e51b8152600401808060200182810382526025815260200180613a536025913960400191505060405180910390fd5b6d7265676973746572536368656d6560901b60005b6038548110156116eb576038818154811061161a57fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b15801561167857600080fd5b505af115801561168c573d6000803e3d6000fd5b505050506040513d60208110156116a257600080fd5b50516116e3576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b600101611603565b6001600160a01b0385166000908152603360205260408082205433835291205460e091821b9186831891901b1916601f60e01b161561175b5760405162461bcd60e51b81526004018080602001828103825260248152602001806139ba6024913960400191505060405180910390fd5b3360009081526033602052604090205460e01b198116601f60e01b16156117b35760405162461bcd60e51b81526004018080602001828103825260248152602001806139ba6024913960400191505060405180910390fd5b6001600160a01b038616600081815260336020526040808220805463ffffffff1916600160e01b8a1760e01c1790555133917f546816e99403df442acb68ef69562682a50762c20a3fb6b472f7af9923736cfc91a360019350505060005b603954811015610b04576039818154811061182857fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b15801561188657600080fd5b505af115801561189a573d6000803e3d6000fd5b505050506040513d60208110156118b057600080fd5b50516118f1576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b600101611811565b3360009081526033602052604081205460e01b600160e21b908116146119505760405162461bcd60e51b8152600401808060200182810382526025815260200180613a986025913960400191505060405180910390fd5b6000826001600160a01b031663e2b0caef6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561198d57600080fd5b505af11580156119a1573d6000803e3d6000fd5b505050506040513d60208110156119b757600080fd5b5051905060008160028111156119c957fe5b14806119e0575060028160028111156119de57fe5b145b15611a88576001600160a01b0383166000908152603a602052604090205460ff16611a885760388054600180820183557f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f45619990910180546001600160a01b0319166001600160a01b03871690811790915560408051808201825283815293546000190160208086019182526000938452603a905291209251835460ff1916901515178355519101555b6001816002811115611a9657fe5b1480611aad57506002816002811115611aab57fe5b145b15611b55576001600160a01b0383166000908152603b602052604090205460ff16611b555760398054600180820183557fdc16fef70f8d5ddbc01ee3d903d1e69c18a3c7be080eb86a81e0578814ee58d390910180546001600160a01b0319166001600160a01b03871690811790915560408051808201825283815293546000190160208086019182526000938452603b905291209251835460ff1916901515178355519101555b826001600160a01b03167fbe8cc209a3d881fa6ea5b12c6a389bbea620f5f0c1bcc2955a7961d0c5846ead8260405180826002811115611b9157fe5b60ff16815260200191505060405180910390a250600192915050565b3360009081526033602052604081205460e01b600160e11b90811614611c045760405162461bcd60e51b8152600401808060200182810382526025815260200180613a536025913960400191505060405180910390fd5b6f756e7265676973746572536368656d6560801b60005b603854811015611d035760388181548110611c3257fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b158015611c9057600080fd5b505af1158015611ca4573d6000803e3d6000fd5b505050506040513d6020811015611cba57600080fd5b5051611cfb576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b600101611c1b565b611d0c84613979565b611d195760009250611de2565b33600090815260336020526040808220546001600160a01b038716835291205460e091821b19911b16601f60e01b1615611d845760405162461bcd60e51b8152600401808060200182810382526027815260200180613b686027913960400191505060405180910390fd5b6040516001600160a01b0385169033907f10bb2cf04cb8b902a8e736d494f1a51003be6d4b16ef6fb95ce62c38445023bf90600090a36001600160a01b0384166000908152603360205260409020805463ffffffff19169055600192505b5060005b603954811015611ece5760398181548110611dfd57fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b158015611e5b57600080fd5b505af1158015611e6f573d6000803e3d6000fd5b505050506040513d6020811015611e8557600080fd5b5051611ec6576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b600101611de6565b5050919050565b6000611ee033613979565b611eec57506000611f31565b33600081815260336020526040808220805463ffffffff191690555182917f10bb2cf04cb8b902a8e736d494f1a51003be6d4b16ef6fb95ce62c38445023bf91a35060015b90565b603b602052600090815260409020805460019091015460ff9091169082565b6000610f5e82613979565b60336020526000908152604090205460e01b81565b3360009081526033602052604081205460e01b600160e41b90811614611fe0576040805162461bcd60e51b815260206004820152601f60248201527f73656e646572206973206e6f742061204d6574614461746120536368656d6500604482015290519081900360640190fd5b603454604051632242b11b60e21b8152602060048201908152602482018590526001600160a01b039092169163890ac46c91869186918190604401848480828437600081840152601f19601f8201169050808301925050509350505050602060405180830381600087803b15801561205757600080fd5b505af115801561206b573d6000803e3d6000fd5b505050506040513d602081101561208157600080fd5b50519392505050565b6036546001600160a01b031681565b3360009081526033602052604081205460e01b600160e01b908116146120f4576040805162461bcd60e51b815260206004820152601f6024820152600080516020613abd833981519152604482015290519081900360640190fd5b60345460408051634e4e399360e11b815260048101918252604481018790526001600160a01b0390921691639c9c73269188918891889188919081906024810190606401878780828437600083820152601f01601f191690910184810383528581526020019050858580828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b15801561219a57600080fd5b505af11580156121ae573d6000803e3d6000fd5b505050506040513d60208110156121c457600080fd5b505195945050505050565b3360009081526033602052604081205460e01b600160e01b9081161461222a576040805162461bcd60e51b815260206004820152601f6024820152600080516020613abd833981519152604482015290519081900360640190fd5b7f65787465726e616c546f6b656e496e637265617365417070726f76616c00000060005b603854811015612336576038818154811061226557fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b1580156122c357600080fd5b505af11580156122d7573d6000803e3d6000fd5b505050506040513d60208110156122ed57600080fd5b505161232e576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b60010161224e565b6034546040805163ab751f7160e01b81526001600160a01b0389811660048301528881166024830152604482018890529151919092169163ab751f719160648083019260209291908290030181600087803b15801561239457600080fd5b505af11580156123a8573d6000803e3d6000fd5b505050506040513d60208110156123be57600080fd5b505192505060005b6039548110156124ae57603981815481106123dd57fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b15801561243b57600080fd5b505af115801561244f573d6000803e3d6000fd5b505050506040513d602081101561246557600080fd5b50516124a6576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b6001016123c6565b50509392505050565b3360009081526033602052604081205460e01b600160e01b90811614612512576040805162461bcd60e51b815260206004820152601f6024820152600080516020613abd833981519152604482015290519081900360640190fd5b7f65787465726e616c546f6b656e5472616e7366657246726f6d0000000000000060005b60385481101561261e576038818154811061254d57fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b1580156125ab57600080fd5b505af11580156125bf573d6000803e3d6000fd5b505050506040513d60208110156125d557600080fd5b5051612616576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b600101612536565b60345460408051635bab6ad160e11b81526001600160a01b038a8116600483015289811660248301528881166044830152606482018890529151919092169163b756d5a29160848083019260209291908290030181600087803b15801561268457600080fd5b505af1158015612698573d6000803e3d6000fd5b505050506040513d60208110156126ae57600080fd5b505192505060005b60395481101561279e57603981815481106126cd57fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b15801561272b57600080fd5b505af115801561273f573d6000803e3d6000fd5b505050506040513d602081101561275557600080fd5b5051612796576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b6001016126b6565b5050949350505050565b3360009081526033602052604081205460e01b600160e31b90811614612815576040805162461bcd60e51b815260206004820152601d60248201527f73656e646572206973206e6f7420557067726164696e67536368656d65000000604482015290519081900360640190fd5b6037546001600160a01b03161561285d5760405162461bcd60e51b8152600401808060200182810382526024815260200180613b0b6024913960400191505060405180910390fd5b6001600160a01b0382166128b8576040805162461bcd60e51b815260206004820152601a60248201527f6e657720636f6e74726f6c6c65722063616e6e6f742062652030000000000000604482015290519081900360640190fd5b603780546001600160a01b0319166001600160a01b038481169182179092556034546040805163f2fde38b60e01b815260048101939093525192169163f2fde38b9160248082019260009290919082900301818387803b15801561291b57600080fd5b505af115801561292f573d6000803e3d6000fd5b50505050816001600160a01b0316603460009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561298b57600080fd5b505afa15801561299f573d6000803e3d6000fd5b505050506040513d60208110156129b557600080fd5b50516001600160a01b0316146129fc5760405162461bcd60e51b8152600401808060200182810382526039815260200180613b2f6039913960400191505060405180910390fd5b60355460408051638da5cb5b60e01b8152905130926001600160a01b031691638da5cb5b916004808301926020929190829003018186803b158015612a4057600080fd5b505afa158015612a54573d6000803e3d6000fd5b505050506040513d6020811015612a6a57600080fd5b50516001600160a01b03161415612baa576035546040805163f2fde38b60e01b81526001600160a01b0385811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b158015612ac957600080fd5b505af1158015612add573d6000803e3d6000fd5b50505050816001600160a01b0316603560009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612b3957600080fd5b505afa158015612b4d573d6000803e3d6000fd5b505050506040513d6020811015612b6357600080fd5b50516001600160a01b031614612baa5760405162461bcd60e51b8152600401808060200182810382526038815260200180613a1b6038913960400191505060405180910390fd5b60365460408051638da5cb5b60e01b8152905130926001600160a01b031691638da5cb5b916004808301926020929190829003018186803b158015612bee57600080fd5b505afa158015612c02573d6000803e3d6000fd5b505050506040513d6020811015612c1857600080fd5b50516001600160a01b03161415612d58576036546040805163f2fde38b60e01b81526001600160a01b0385811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b158015612c7757600080fd5b505af1158015612c8b573d6000803e3d6000fd5b50505050816001600160a01b0316603660009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612ce757600080fd5b505afa158015612cfb573d6000803e3d6000fd5b505050506040513d6020811015612d1157600080fd5b50516001600160a01b031614612d585760405162461bcd60e51b815260040180806020018281038252603d8152602001806139de603d913960400191505060405180910390fd5b603754604080516001600160a01b039290921682525130917fdb7cbacf8df312d794506c0cc9af07f64d29ca075796ea2e950a3832cc9a63dd919081900360200190a2506001919050565b3360009081526033602052604081205460e01b600160e01b90811614612dfe576040805162461bcd60e51b815260206004820152601f6024820152600080516020613abd833981519152604482015290519081900360640190fd5b6839b2b73222ba3432b960b91b60005b603854811015612ef65760388181548110612e2557fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b158015612e8357600080fd5b505af1158015612e97573d6000803e3d6000fd5b505050506040513d6020811015612ead57600080fd5b5051612eee576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b600101612e0e565b6034546040805163658b6a5160e11b8152600481018890526001600160a01b0387811660248301529151919092169163cb16d4a29160448083019260209291908290030181600087803b158015612f4c57600080fd5b505af1158015612f60573d6000803e3d6000fd5b505050506040513d6020811015612f7657600080fd5b505192505060005b603954811015610b045760398181548110612f9557fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b158015612ff357600080fd5b505af1158015613007573d6000803e3d6000fd5b505050506040513d602081101561301d57600080fd5b505161305e576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b600101612f7e565b6038546039549091565b3360009081526033602052604081205460e01b600160e01b908116146130cb576040805162461bcd60e51b815260206004820152601f6024820152600080516020613abd833981519152604482015290519081900360640190fd5b7432bc3a32b93730b62a37b5b2b72a3930b739b332b960591b60005b6038548110156131cf57603881815481106130fe57fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b15801561315c57600080fd5b505af1158015613170573d6000803e3d6000fd5b505050506040513d602081101561318657600080fd5b50516131c7576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b6001016130e7565b6034546040805163dab0efff60e01b81526001600160a01b0389811660048301528881166024830152604482018890529151919092169163dab0efff9160648083019260209291908290030181600087803b15801561322d57600080fd5b505af1158015613241573d6000803e3d6000fd5b505050506040513d602081101561325757600080fd5b505192505060005b6039548110156124ae576039818154811061327657fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b1580156132d457600080fd5b505af11580156132e8573d6000803e3d6000fd5b505050506040513d60208110156132fe57600080fd5b505161333f576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b60010161325f565b3360009081526033602052604081205460e01b600160e01b908116146133a2576040805162461bcd60e51b815260206004820152601f6024820152600080516020613abd833981519152604482015290519081900360640190fd5b6d313ab9372932b83aba30ba34b7b760911b60005b60385481101561349f57603881815481106133ce57fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b15801561342c57600080fd5b505af1158015613440573d6000803e3d6000fd5b505050506040513d602081101561345657600080fd5b5051613497576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b6001016133b7565b6040805186815290516001600160a01b0386169133917f186d8887e1b22f9d9b16849c36baa748950d09d9c9b67a4a6ea140eaad00c21c9181900360200190a360365460408051632770a7eb60e21b81526001600160a01b0387811660048301526024820189905291519190921691639dc29fac9160448083019260209291908290030181600087803b15801561353557600080fd5b505af1158015613549573d6000803e3d6000fd5b505050506040513d602081101561355f57600080fd5b505192505060005b603954811015610b04576039818154811061357e57fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b1580156135dc57600080fd5b505af11580156135f0573d6000803e3d6000fd5b505050506040513d602081101561360657600080fd5b5051613647576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b600101613567565b3360009081526033602052604081205460e01b600160e01b908116146136aa576040805162461bcd60e51b815260206004820152601f6024820152600080516020613abd833981519152604482015290519081900360640190fd5b6d36b4b73a2932b83aba30ba34b7b760911b60005b6038548110156137a757603881815481106136d657fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b15801561373457600080fd5b505af1158015613748573d6000803e3d6000fd5b505050506040513d602081101561375e57600080fd5b505161379f576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b6001016136bf565b6040805186815290516001600160a01b0386169133917f837f2931e3df0592458212be4e470025f197feb7a8e39deb5b7f1f1d42e6f2629181900360200190a3603654604080516340c10f1960e01b81526001600160a01b03878116600483015260248201899052915191909216916340c10f199160448083019260209291908290030181600087803b15801561383d57600080fd5b505af1158015613851573d6000803e3d6000fd5b505050506040513d602081101561386757600080fd5b505192505060005b603954811015610b04576039818154811061388657fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b1580156138e457600080fd5b505af11580156138f8573d6000803e3d6000fd5b505050506040513d602081101561390e57600080fd5b505161394f576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b60010161386f565b6035546001600160a01b031681565b60398181548110610f7157fe5b303b1590565b6001600160a01b03811660009081526033602052604090205460e01b600160e01b161515919050565b60408051808201909152600080825260208201529056fe73656e64657220756e6175746f72697a6520746f20726567697374657220736368656d656661696c656420746f207472616e736665722072657075746174696f6e206f776e65727368697020746f20746865206e657720636f6e74726f6c6c65726661696c656420746f207472616e7366657220746f6b656e206f776e65727368697020746f20746865206e657720636f6e74726f6c6c657273656e64657220756e6175746f72697a656420746f20726567697374657220736368656d656e6f7420616c6c6f77656420627920676c6f62616c436f6e73747261696e740073656e646572206973206e6f7420676c6f62616c436f6e73747261696e7420736368656d6573656e646572206973206e6f74207265676973746572656420736368656d6500436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65647468697320636f6e74726f6c6c65722077617320616c72656164792075706772616465646661696c656420746f207472616e7366657220617661746172206f776e65727368697020746f20746865206e657720636f6e74726f6c6c657273656e64657220756e6175746f72697a656420746f20756e726567697374657220736368656d65a264697066735822122022a87459f614a7e2727b607037c12012020e829648da04703bcebbac1559a35b64736f6c634300060a0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c806381d064c411610104578063b9c2ee82116100a2578063ddbfcc6b11610071578063ddbfcc6b14610783578063dea9e24d146107af578063e1758bd8146107db578063e8c98b22146107e3576101cf565b8063b9c2ee82146106da578063cb16d4a214610700578063d5210f601461072c578063dab0efff1461074d576101cf565b806389ae1c90116100de57806389ae1c90146105a25780639c9c7326146105aa578063ab751f7114610668578063b756d5a21461069e576101cf565b806381d064c4146104cb57806384da77f5146104f1578063890ac46c14610534576101cf565b8063488b3814116101715780635f30e5811161014b5780635f30e58114610451578063653915e5146104775780636bafaa591461049d578063814784f6146104a5576101cf565b8063488b3814146103ed5780635aef7de6146104135780635d1da8cb1461041b576101cf565b80633a02263c116101ad5780633a02263c1461035657806341443cea1461037a5780634422d372146103a0578063485cc955146103bd576101cf565b806310c5b328146101d4578063177eebb0146102145780632bf1645814610255575b600080fd5b610200600480360360408110156101ea57600080fd5b50803590602001356001600160a01b0316610800565b604080519115158252519081900360200190f35b61023a6004803603602081101561022a57600080fd5b50356001600160a01b0316610b0c565b60408051921515835260208301919091528051918290030190f35b6102d36004803603606081101561026b57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561029557600080fd5b8201836020820111156102a757600080fd5b803590602001918460018302840111600160201b831117156102c857600080fd5b919350915035610b2b565b604051808315151515815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561031a578181015183820152602001610302565b50505050905090810190601f1680156103475780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b61035e610f10565b604080516001600160a01b039092168252519081900360200190f35b6102006004803603602081101561039057600080fd5b50356001600160a01b0316610f1f565b61035e600480360360208110156103b657600080fd5b5035610f64565b6103eb600480360360408110156103d357600080fd5b506001600160a01b0381358116916020013516610f8b565b005b6102006004803603602081101561040357600080fd5b50356001600160a01b031661119f565b61035e611588565b6102006004803603604081101561043157600080fd5b5080356001600160a01b031690602001356001600160e01b031916611597565b6102006004803603602081101561046757600080fd5b50356001600160a01b03166118f9565b6102006004803603602081101561048d57600080fd5b50356001600160a01b0316611bad565b610200611ed5565b61023a600480360360208110156104bb57600080fd5b50356001600160a01b0316611f34565b610200600480360360208110156104e157600080fd5b50356001600160a01b0316611f53565b6105176004803603602081101561050757600080fd5b50356001600160a01b0316611f5e565b604080516001600160e01b03199092168252519081900360200190f35b6102006004803603602081101561054a57600080fd5b810190602081018135600160201b81111561056457600080fd5b82018360208201111561057657600080fd5b803590602001918460018302840111600160201b8311171561059757600080fd5b509092509050611f73565b61035e61208a565b610200600480360360408110156105c057600080fd5b810190602081018135600160201b8111156105da57600080fd5b8201836020820111156105ec57600080fd5b803590602001918460018302840111600160201b8311171561060d57600080fd5b919390929091602081019035600160201b81111561062a57600080fd5b82018360208201111561063c57600080fd5b803590602001918460018302840111600160201b8311171561065d57600080fd5b509092509050612099565b6102006004803603606081101561067e57600080fd5b506001600160a01b038135811691602081013590911690604001356121cf565b610200600480360360808110156106b457600080fd5b506001600160a01b038135811691602081013582169160408201351690606001356124b7565b610200600480360360208110156106f057600080fd5b50356001600160a01b03166127a8565b6102006004803603604081101561071657600080fd5b50803590602001356001600160a01b0316612da3565b610734613066565b6040805192835260208301919091528051918290030190f35b6102006004803603606081101561076357600080fd5b506001600160a01b03813581169160208101359091169060400135613070565b6102006004803603604081101561079957600080fd5b50803590602001356001600160a01b0316613347565b610200600480360360408110156107c557600080fd5b50803590602001356001600160a01b031661364f565b61035e613957565b61035e600480360360208110156107f957600080fd5b5035613966565b3360009081526033602052604081205460e01b600160e01b9081161461085b576040805162461bcd60e51b815260206004820152601f6024820152600080516020613abd833981519152604482015290519081900360640190fd5b696d696e74546f6b656e7360b01b60005b603854811015610954576038818154811061088357fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b1580156108e157600080fd5b505af11580156108f5573d6000803e3d6000fd5b505050506040513d602081101561090b57600080fd5b505161094c576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b60010161086c565b6040805186815290516001600160a01b0386169133917f21f9c9a1a1f9a311a50f15fec5c1faa9e21fc9edf964f0fdecba5bd490484c5e9181900360200190a3603554604080516340c10f1960e01b81526001600160a01b03878116600483015260248201899052915191909216916340c10f199160448083019260209291908290030181600087803b1580156109ea57600080fd5b505af11580156109fe573d6000803e3d6000fd5b505050506040513d6020811015610a1457600080fd5b505192505060005b603954811015610b045760398181548110610a3357fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b158015610a9157600080fd5b505af1158015610aa5573d6000803e3d6000fd5b505050506040513d6020811015610abb57600080fd5b5051610afc576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b600101610a1c565b505092915050565b603a602052600090815260409020805460019091015460ff9091169082565b3360009081526033602052604081205460609060e01b600160e41b90811614610b9b576040805162461bcd60e51b815260206004820152601e60248201527f73656e646572206973206e6f7420612047656e6572696320536368656d650000604482015290519081900360640190fd5b6a19d95b995c9a58d0d85b1b60aa1b60005b603854811015610c955760388181548110610bc457fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b158015610c2257600080fd5b505af1158015610c36573d6000803e3d6000fd5b505050506040513d6020811015610c4c57600080fd5b5051610c8d576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b600101610bad565b60345460405163057e2c8b60e31b81526001600160a01b038a81166004830190815260448301899052606060248401908152606484018b90529190931692632bf16458928c928c928c928c9290608401858580828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b158015610d2357600080fd5b505af1158015610d37573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040908152811015610d6057600080fd5b815160208301805160405192949293830192919084600160201b821115610d8657600080fd5b908301906020820185811115610d9b57600080fd5b8251600160201b811182820188101715610db457600080fd5b82525081516020918201929091019080838360005b83811015610de1578181015183820152602001610dc9565b50505050905090810190601f168015610e0e5780820380516001836020036101000a031916815260200191505b50604052505050935093505060005b603954811015610f055760398181548110610e3457fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b158015610e9257600080fd5b505af1158015610ea6573d6000803e3d6000fd5b505050506040513d6020811015610ebc57600080fd5b5051610efd576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b600101610e1d565b505094509492505050565b6037546001600160a01b031681565b6001600160a01b0381166000908152603a602052604081205460ff1680610f5e57506001600160a01b0382166000908152603b602052604090205460ff165b92915050565b60388181548110610f7157fe5b6000918252602090912001546001600160a01b0316905081565b600054610100900460ff1680610fa45750610fa4613973565b80610fb2575060005460ff16155b610fed5760405162461bcd60e51b815260040180806020018281038252602e815260200180613add602e913960400191505060405180910390fd5b600054610100900460ff16158015611018576000805460ff1961ff0019909116610100171660011790555b603480546001600160a01b0319166001600160a01b03858116919091179182905560408051631c2eb17b60e31b81529051929091169163e1758bd891600480820192602092909190829003018186803b15801561107457600080fd5b505afa158015611088573d6000803e3d6000fd5b505050506040513d602081101561109e57600080fd5b5051603580546001600160a01b0319166001600160a01b039283161790556034546040805163089ae1c960e41b8152905191909216916389ae1c90916004808301926020929190829003018186803b1580156110f957600080fd5b505afa15801561110d573d6000803e3d6000fd5b505050506040513d602081101561112357600080fd5b5051603680546001600160a01b039283166001600160a01b03199091161790558216600081815260336020526040808220805463ffffffff1916601f1790555133917f546816e99403df442acb68ef69562682a50762c20a3fb6b472f7af9923736cfc91a3801561119a576000805461ff00191690555b505050565b3360009081526033602052604081205460e01b600160e21b908116146111f65760405162461bcd60e51b8152600401808060200182810382526025815260200180613a986025913960400191505060405180910390fd5b6111fe6139a2565b600080846001600160a01b031663e2b0caef6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561123c57600080fd5b505af1158015611250573d6000803e3d6000fd5b505050506040513d602081101561126657600080fd5b5051905060008082600281111561127957fe5b14806112905750600282600281111561128e57fe5b145b156113c6576001600160a01b0386166000908152603a60209081526040918290208251808401909352805460ff161580158452600190910154918301919091529094506113c6576001603880549050038460200151101561136d576038805460001981019081106112fd57fe5b9060005260206000200160009054906101000a90046001600160a01b0316925082603885602001518154811061132f57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055868101519286168252603a905260409020600101555b603880548061137857fe5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388168252603a905260408120805460ff1916815560019081019190915590505b60018260028111156113d457fe5b14806113eb575060028260028111156113e957fe5b145b15611521576001600160a01b0386166000908152603b60209081526040918290208251808401909352805460ff1615801584526001909101549183019190915290945061152157600160398054905003846020015110156114c85760398054600019810190811061145857fe5b9060005260206000200160009054906101000a90046001600160a01b0316925082603985602001518154811061148a57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055868101519286168252603b905260409020600101555b60398054806114d357fe5b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b0388168252603b905260408120805460ff1916815560019081019190915590505b801561157f5760208401516001600160a01b038716907fcdf1a50ea6b7de555bd409f8a4a53ea43c6dc6b4caa961889da9e005f21bbaa990600085600281111561156757fe5b60408051938452911460208301528051918290030190a25b95945050505050565b6034546001600160a01b031681565b3360009081526033602052604081205460e01b600160e11b908116146115ee5760405162461bcd60e51b8152600401808060200182810382526025815260200180613a536025913960400191505060405180910390fd5b6d7265676973746572536368656d6560901b60005b6038548110156116eb576038818154811061161a57fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b15801561167857600080fd5b505af115801561168c573d6000803e3d6000fd5b505050506040513d60208110156116a257600080fd5b50516116e3576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b600101611603565b6001600160a01b0385166000908152603360205260408082205433835291205460e091821b9186831891901b1916601f60e01b161561175b5760405162461bcd60e51b81526004018080602001828103825260248152602001806139ba6024913960400191505060405180910390fd5b3360009081526033602052604090205460e01b198116601f60e01b16156117b35760405162461bcd60e51b81526004018080602001828103825260248152602001806139ba6024913960400191505060405180910390fd5b6001600160a01b038616600081815260336020526040808220805463ffffffff1916600160e01b8a1760e01c1790555133917f546816e99403df442acb68ef69562682a50762c20a3fb6b472f7af9923736cfc91a360019350505060005b603954811015610b04576039818154811061182857fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b15801561188657600080fd5b505af115801561189a573d6000803e3d6000fd5b505050506040513d60208110156118b057600080fd5b50516118f1576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b600101611811565b3360009081526033602052604081205460e01b600160e21b908116146119505760405162461bcd60e51b8152600401808060200182810382526025815260200180613a986025913960400191505060405180910390fd5b6000826001600160a01b031663e2b0caef6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561198d57600080fd5b505af11580156119a1573d6000803e3d6000fd5b505050506040513d60208110156119b757600080fd5b5051905060008160028111156119c957fe5b14806119e0575060028160028111156119de57fe5b145b15611a88576001600160a01b0383166000908152603a602052604090205460ff16611a885760388054600180820183557f38395c5dceade9603479b177b68959049485df8aa97b39f3533039af5f45619990910180546001600160a01b0319166001600160a01b03871690811790915560408051808201825283815293546000190160208086019182526000938452603a905291209251835460ff1916901515178355519101555b6001816002811115611a9657fe5b1480611aad57506002816002811115611aab57fe5b145b15611b55576001600160a01b0383166000908152603b602052604090205460ff16611b555760398054600180820183557fdc16fef70f8d5ddbc01ee3d903d1e69c18a3c7be080eb86a81e0578814ee58d390910180546001600160a01b0319166001600160a01b03871690811790915560408051808201825283815293546000190160208086019182526000938452603b905291209251835460ff1916901515178355519101555b826001600160a01b03167fbe8cc209a3d881fa6ea5b12c6a389bbea620f5f0c1bcc2955a7961d0c5846ead8260405180826002811115611b9157fe5b60ff16815260200191505060405180910390a250600192915050565b3360009081526033602052604081205460e01b600160e11b90811614611c045760405162461bcd60e51b8152600401808060200182810382526025815260200180613a536025913960400191505060405180910390fd5b6f756e7265676973746572536368656d6560801b60005b603854811015611d035760388181548110611c3257fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b158015611c9057600080fd5b505af1158015611ca4573d6000803e3d6000fd5b505050506040513d6020811015611cba57600080fd5b5051611cfb576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b600101611c1b565b611d0c84613979565b611d195760009250611de2565b33600090815260336020526040808220546001600160a01b038716835291205460e091821b19911b16601f60e01b1615611d845760405162461bcd60e51b8152600401808060200182810382526027815260200180613b686027913960400191505060405180910390fd5b6040516001600160a01b0385169033907f10bb2cf04cb8b902a8e736d494f1a51003be6d4b16ef6fb95ce62c38445023bf90600090a36001600160a01b0384166000908152603360205260409020805463ffffffff19169055600192505b5060005b603954811015611ece5760398181548110611dfd57fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b158015611e5b57600080fd5b505af1158015611e6f573d6000803e3d6000fd5b505050506040513d6020811015611e8557600080fd5b5051611ec6576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b600101611de6565b5050919050565b6000611ee033613979565b611eec57506000611f31565b33600081815260336020526040808220805463ffffffff191690555182917f10bb2cf04cb8b902a8e736d494f1a51003be6d4b16ef6fb95ce62c38445023bf91a35060015b90565b603b602052600090815260409020805460019091015460ff9091169082565b6000610f5e82613979565b60336020526000908152604090205460e01b81565b3360009081526033602052604081205460e01b600160e41b90811614611fe0576040805162461bcd60e51b815260206004820152601f60248201527f73656e646572206973206e6f742061204d6574614461746120536368656d6500604482015290519081900360640190fd5b603454604051632242b11b60e21b8152602060048201908152602482018590526001600160a01b039092169163890ac46c91869186918190604401848480828437600081840152601f19601f8201169050808301925050509350505050602060405180830381600087803b15801561205757600080fd5b505af115801561206b573d6000803e3d6000fd5b505050506040513d602081101561208157600080fd5b50519392505050565b6036546001600160a01b031681565b3360009081526033602052604081205460e01b600160e01b908116146120f4576040805162461bcd60e51b815260206004820152601f6024820152600080516020613abd833981519152604482015290519081900360640190fd5b60345460408051634e4e399360e11b815260048101918252604481018790526001600160a01b0390921691639c9c73269188918891889188919081906024810190606401878780828437600083820152601f01601f191690910184810383528581526020019050858580828437600081840152601f19601f8201169050808301925050509650505050505050602060405180830381600087803b15801561219a57600080fd5b505af11580156121ae573d6000803e3d6000fd5b505050506040513d60208110156121c457600080fd5b505195945050505050565b3360009081526033602052604081205460e01b600160e01b9081161461222a576040805162461bcd60e51b815260206004820152601f6024820152600080516020613abd833981519152604482015290519081900360640190fd5b7f65787465726e616c546f6b656e496e637265617365417070726f76616c00000060005b603854811015612336576038818154811061226557fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b1580156122c357600080fd5b505af11580156122d7573d6000803e3d6000fd5b505050506040513d60208110156122ed57600080fd5b505161232e576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b60010161224e565b6034546040805163ab751f7160e01b81526001600160a01b0389811660048301528881166024830152604482018890529151919092169163ab751f719160648083019260209291908290030181600087803b15801561239457600080fd5b505af11580156123a8573d6000803e3d6000fd5b505050506040513d60208110156123be57600080fd5b505192505060005b6039548110156124ae57603981815481106123dd57fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b15801561243b57600080fd5b505af115801561244f573d6000803e3d6000fd5b505050506040513d602081101561246557600080fd5b50516124a6576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b6001016123c6565b50509392505050565b3360009081526033602052604081205460e01b600160e01b90811614612512576040805162461bcd60e51b815260206004820152601f6024820152600080516020613abd833981519152604482015290519081900360640190fd5b7f65787465726e616c546f6b656e5472616e7366657246726f6d0000000000000060005b60385481101561261e576038818154811061254d57fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b1580156125ab57600080fd5b505af11580156125bf573d6000803e3d6000fd5b505050506040513d60208110156125d557600080fd5b5051612616576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b600101612536565b60345460408051635bab6ad160e11b81526001600160a01b038a8116600483015289811660248301528881166044830152606482018890529151919092169163b756d5a29160848083019260209291908290030181600087803b15801561268457600080fd5b505af1158015612698573d6000803e3d6000fd5b505050506040513d60208110156126ae57600080fd5b505192505060005b60395481101561279e57603981815481106126cd57fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b15801561272b57600080fd5b505af115801561273f573d6000803e3d6000fd5b505050506040513d602081101561275557600080fd5b5051612796576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b6001016126b6565b5050949350505050565b3360009081526033602052604081205460e01b600160e31b90811614612815576040805162461bcd60e51b815260206004820152601d60248201527f73656e646572206973206e6f7420557067726164696e67536368656d65000000604482015290519081900360640190fd5b6037546001600160a01b03161561285d5760405162461bcd60e51b8152600401808060200182810382526024815260200180613b0b6024913960400191505060405180910390fd5b6001600160a01b0382166128b8576040805162461bcd60e51b815260206004820152601a60248201527f6e657720636f6e74726f6c6c65722063616e6e6f742062652030000000000000604482015290519081900360640190fd5b603780546001600160a01b0319166001600160a01b038481169182179092556034546040805163f2fde38b60e01b815260048101939093525192169163f2fde38b9160248082019260009290919082900301818387803b15801561291b57600080fd5b505af115801561292f573d6000803e3d6000fd5b50505050816001600160a01b0316603460009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561298b57600080fd5b505afa15801561299f573d6000803e3d6000fd5b505050506040513d60208110156129b557600080fd5b50516001600160a01b0316146129fc5760405162461bcd60e51b8152600401808060200182810382526039815260200180613b2f6039913960400191505060405180910390fd5b60355460408051638da5cb5b60e01b8152905130926001600160a01b031691638da5cb5b916004808301926020929190829003018186803b158015612a4057600080fd5b505afa158015612a54573d6000803e3d6000fd5b505050506040513d6020811015612a6a57600080fd5b50516001600160a01b03161415612baa576035546040805163f2fde38b60e01b81526001600160a01b0385811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b158015612ac957600080fd5b505af1158015612add573d6000803e3d6000fd5b50505050816001600160a01b0316603560009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612b3957600080fd5b505afa158015612b4d573d6000803e3d6000fd5b505050506040513d6020811015612b6357600080fd5b50516001600160a01b031614612baa5760405162461bcd60e51b8152600401808060200182810382526038815260200180613a1b6038913960400191505060405180910390fd5b60365460408051638da5cb5b60e01b8152905130926001600160a01b031691638da5cb5b916004808301926020929190829003018186803b158015612bee57600080fd5b505afa158015612c02573d6000803e3d6000fd5b505050506040513d6020811015612c1857600080fd5b50516001600160a01b03161415612d58576036546040805163f2fde38b60e01b81526001600160a01b0385811660048301529151919092169163f2fde38b91602480830192600092919082900301818387803b158015612c7757600080fd5b505af1158015612c8b573d6000803e3d6000fd5b50505050816001600160a01b0316603660009054906101000a90046001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015612ce757600080fd5b505afa158015612cfb573d6000803e3d6000fd5b505050506040513d6020811015612d1157600080fd5b50516001600160a01b031614612d585760405162461bcd60e51b815260040180806020018281038252603d8152602001806139de603d913960400191505060405180910390fd5b603754604080516001600160a01b039290921682525130917fdb7cbacf8df312d794506c0cc9af07f64d29ca075796ea2e950a3832cc9a63dd919081900360200190a2506001919050565b3360009081526033602052604081205460e01b600160e01b90811614612dfe576040805162461bcd60e51b815260206004820152601f6024820152600080516020613abd833981519152604482015290519081900360640190fd5b6839b2b73222ba3432b960b91b60005b603854811015612ef65760388181548110612e2557fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b158015612e8357600080fd5b505af1158015612e97573d6000803e3d6000fd5b505050506040513d6020811015612ead57600080fd5b5051612eee576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b600101612e0e565b6034546040805163658b6a5160e11b8152600481018890526001600160a01b0387811660248301529151919092169163cb16d4a29160448083019260209291908290030181600087803b158015612f4c57600080fd5b505af1158015612f60573d6000803e3d6000fd5b505050506040513d6020811015612f7657600080fd5b505192505060005b603954811015610b045760398181548110612f9557fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b158015612ff357600080fd5b505af1158015613007573d6000803e3d6000fd5b505050506040513d602081101561301d57600080fd5b505161305e576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b600101612f7e565b6038546039549091565b3360009081526033602052604081205460e01b600160e01b908116146130cb576040805162461bcd60e51b815260206004820152601f6024820152600080516020613abd833981519152604482015290519081900360640190fd5b7432bc3a32b93730b62a37b5b2b72a3930b739b332b960591b60005b6038548110156131cf57603881815481106130fe57fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b15801561315c57600080fd5b505af1158015613170573d6000803e3d6000fd5b505050506040513d602081101561318657600080fd5b50516131c7576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b6001016130e7565b6034546040805163dab0efff60e01b81526001600160a01b0389811660048301528881166024830152604482018890529151919092169163dab0efff9160648083019260209291908290030181600087803b15801561322d57600080fd5b505af1158015613241573d6000803e3d6000fd5b505050506040513d602081101561325757600080fd5b505192505060005b6039548110156124ae576039818154811061327657fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b1580156132d457600080fd5b505af11580156132e8573d6000803e3d6000fd5b505050506040513d60208110156132fe57600080fd5b505161333f576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b60010161325f565b3360009081526033602052604081205460e01b600160e01b908116146133a2576040805162461bcd60e51b815260206004820152601f6024820152600080516020613abd833981519152604482015290519081900360640190fd5b6d313ab9372932b83aba30ba34b7b760911b60005b60385481101561349f57603881815481106133ce57fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b15801561342c57600080fd5b505af1158015613440573d6000803e3d6000fd5b505050506040513d602081101561345657600080fd5b5051613497576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b6001016133b7565b6040805186815290516001600160a01b0386169133917f186d8887e1b22f9d9b16849c36baa748950d09d9c9b67a4a6ea140eaad00c21c9181900360200190a360365460408051632770a7eb60e21b81526001600160a01b0387811660048301526024820189905291519190921691639dc29fac9160448083019260209291908290030181600087803b15801561353557600080fd5b505af1158015613549573d6000803e3d6000fd5b505050506040513d602081101561355f57600080fd5b505192505060005b603954811015610b04576039818154811061357e57fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b1580156135dc57600080fd5b505af11580156135f0573d6000803e3d6000fd5b505050506040513d602081101561360657600080fd5b5051613647576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b600101613567565b3360009081526033602052604081205460e01b600160e01b908116146136aa576040805162461bcd60e51b815260206004820152601f6024820152600080516020613abd833981519152604482015290519081900360640190fd5b6d36b4b73a2932b83aba30ba34b7b760911b60005b6038548110156137a757603881815481106136d657fe5b60009182526020808320909101546040805163c63b7d0960e01b81523360048201526024810187905290516001600160a01b039092169363c63b7d099360448084019491939192918390030190829087803b15801561373457600080fd5b505af1158015613748573d6000803e3d6000fd5b505050506040513d602081101561375e57600080fd5b505161379f576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b6001016136bf565b6040805186815290516001600160a01b0386169133917f837f2931e3df0592458212be4e470025f197feb7a8e39deb5b7f1f1d42e6f2629181900360200190a3603654604080516340c10f1960e01b81526001600160a01b03878116600483015260248201899052915191909216916340c10f199160448083019260209291908290030181600087803b15801561383d57600080fd5b505af1158015613851573d6000803e3d6000fd5b505050506040513d602081101561386757600080fd5b505192505060005b603954811015610b04576039818154811061388657fe5b600091825260208083209091015460408051636abd2c7d60e11b81523360048201526024810187905290516001600160a01b039092169363d57a58fa9360448084019491939192918390030190829087803b1580156138e457600080fd5b505af11580156138f8573d6000803e3d6000fd5b505050506040513d602081101561390e57600080fd5b505161394f576040805162461bcd60e51b815260206004820152601f6024820152600080516020613a78833981519152604482015290519081900360640190fd5b60010161386f565b6035546001600160a01b031681565b60398181548110610f7157fe5b303b1590565b6001600160a01b03811660009081526033602052604090205460e01b600160e01b161515919050565b60408051808201909152600080825260208201529056fe73656e64657220756e6175746f72697a6520746f20726567697374657220736368656d656661696c656420746f207472616e736665722072657075746174696f6e206f776e65727368697020746f20746865206e657720636f6e74726f6c6c65726661696c656420746f207472616e7366657220746f6b656e206f776e65727368697020746f20746865206e657720636f6e74726f6c6c657273656e64657220756e6175746f72697a656420746f20726567697374657220736368656d656e6f7420616c6c6f77656420627920676c6f62616c436f6e73747261696e740073656e646572206973206e6f7420676c6f62616c436f6e73747261696e7420736368656d6573656e646572206973206e6f74207265676973746572656420736368656d6500436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a65647468697320636f6e74726f6c6c65722077617320616c72656164792075706772616465646661696c656420746f207472616e7366657220617661746172206f776e65727368697020746f20746865206e657720636f6e74726f6c6c657273656e64657220756e6175746f72697a656420746f20756e726567697374657220736368656d65a264697066735822122022a87459f614a7e2727b607037c12012020e829648da04703bcebbac1559a35b64736f6c634300060a0033"
}