{
  "_format": "hh-sol-artifact-1",
  "contractName": "Proxy_Test",
  "sourceName": "contracts/test/Proxy.t.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previousAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "AdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "name": "log",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "log_address",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "val",
          "type": "uint256[]"
        }
      ],
      "name": "log_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "int256[]",
          "name": "val",
          "type": "int256[]"
        }
      ],
      "name": "log_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "val",
          "type": "address[]"
        }
      ],
      "name": "log_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "log_bytes",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "log_bytes32",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "name": "log_int",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "val",
          "type": "address"
        }
      ],
      "name": "log_named_address",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "val",
          "type": "uint256[]"
        }
      ],
      "name": "log_named_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "int256[]",
          "name": "val",
          "type": "int256[]"
        }
      ],
      "name": "log_named_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "address[]",
          "name": "val",
          "type": "address[]"
        }
      ],
      "name": "log_named_array",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "val",
          "type": "bytes"
        }
      ],
      "name": "log_named_bytes",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "val",
          "type": "bytes32"
        }
      ],
      "name": "log_named_bytes32",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "val",
          "type": "int256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "decimals",
          "type": "uint256"
        }
      ],
      "name": "log_named_decimal_int",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "val",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "decimals",
          "type": "uint256"
        }
      ],
      "name": "log_named_decimal_uint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "int256",
          "name": "val",
          "type": "int256"
        }
      ],
      "name": "log_named_int",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "string",
          "name": "val",
          "type": "string"
        }
      ],
      "name": "log_named_string",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "key",
          "type": "string"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "val",
          "type": "uint256"
        }
      ],
      "name": "log_named_uint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "name": "log_string",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "log_uint",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "name": "logs",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "IS_TEST",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "failed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "setUp",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_delegatesToImpl_succeeds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_implementationKey_succeeds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_implementation_isZeroAddress_reverts",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_implementation_zeroAddressCaller_succeeds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_ownerKey_succeeds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_ownerProxyCall_notAdmin_succeeds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_proxyCallToImp_notAdmin_succeeds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_upgradeToAndCall_functionDoesNotExist_reverts",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_upgradeToAndCall_isPayable_succeeds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_upgradeToAndCall_succeeds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_upgradeTo_clashingFunctionSignatures_succeeds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060409081526000805460ff19166001179055601380546001600160a01b031916909117905534801561003257600080fd5b506149ab806100426000396000f3fe60806040523480156200001157600080fd5b5060043610620000fd5760003560e01c80637dfd7ed11162000097578063aba0cf01116200006e578063aba0cf011462000168578063b4c821dd1462000172578063ba414fa6146200017c578063fa7626d4146200019a57600080fd5b80637dfd7ed1146200014a578063829f35ea146200015457806389f4619f146200015e57600080fd5b80631acf575311620000d85780631acf57531462000122578063444a1e4f146200012c57806350218d551462000136578063646af406146200014057600080fd5b80630a9254e414620001025780630cec2002146200010e57806318133bed1462000118575b600080fd5b6200010c620001a8565b005b6200010c620003cd565b6200010c620007ff565b6200010c62000b52565b6200010c62000c93565b6200010c62001394565b6200010c620018ea565b6200010c62001b64565b6200010c62001fcd565b6200010c62002300565b6200010c6200292d565b6200010c62002d32565b6200018662003055565b604051901515815260200160405180910390f35b600054620001869060ff1681565b60135460405173ffffffffffffffffffffffffffffffffffffffff90911690620001d29062003953565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f0801580156200020c573d6000803e3d6000fd5b50601480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055604051620002609062003961565b604051809103906000f0801580156200027d573d6000803e3d6000fd5b50601580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556013546040517fca669fa700000000000000000000000000000000000000000000000000000000815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156200032957600080fd5b505af11580156200033e573d6000803e3d6000fd5b50506014546015546040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169250633659cfe69150602401600060405180830381600087803b158015620003b257600080fd5b505af1158015620003c7573d6000803e3d6000fd5b50505050565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff1663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200043957600080fd5b505af11580156200044e573d6000803e3d6000fd5b5050601454604080517f3659cfe6000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff9091169250633659cfe69150602401600060405180830381600087803b158015620004c157600080fd5b505af1158015620004d6573d6000803e3d6000fd5b50506040517f491cc7c200000000000000000000000000000000000000000000000000000000815260016004820181905260248201819052604482018190526064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063491cc7c29150608401600060405180830381600087803b1580156200055657600080fd5b505af11580156200056b573d6000803e3d6000fd5b5050604080519092507fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b9150600090a26013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156200061b57600080fd5b505af115801562000630573d6000803e3d6000fd5b5050601454604080517f3659cfe6000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff9091169250633659cfe69150602401600060405180830381600087803b158015620006a357600080fd5b505af1158015620006b8573d6000803e3d6000fd5b50506013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156200073c57600080fd5b505af115801562000751573d6000803e3d6000fd5b505050506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015620007c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007ed91906200397c565b9050620007fc816040620031bf565b50565b6013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156200087f57600080fd5b505af115801562000894573d6000803e3d6000fd5b50506014546040517f8f2839700000000000000000000000000000000000000000000000000000000081526006600482015273ffffffffffffffffffffffffffffffffffffffff9091169250638f2839709150602401600060405180830381600087803b1580156200090557600080fd5b505af11580156200091a573d6000803e3d6000fd5b505060145460009250737109709ecfa91a80626ff3989d68f67f5b1dd12d915063667f9d709073ffffffffffffffffffffffffffffffffffffffff166200098360017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620039ea565b60405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401602060405180830381865afa158015620009f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a18919062003a04565b905062000a27600682620031bf565b6040517fca669fa700000000000000000000000000000000000000000000000000000000815260066004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801562000a8e57600080fd5b505af115801562000aa3573d6000803e3d6000fd5b505050506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af115801562000b19573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b3f91906200397c565b905062000b4e816006620031bf565b5050565b6040517fca669fa700000000000000000000000000000000000000000000000000000000815260006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801562000bb957600080fd5b505af115801562000bce573d6000803e3d6000fd5b505050506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b81526004016020604051808303816000875af115801562000c44573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c6a91906200397c565b601554909150620007fc90829073ffffffffffffffffffffffffffffffffffffffff16620031bf565b6013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801562000d1357600080fd5b505af115801562000d28573d6000803e3d6000fd5b505050506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b81526004016020604051808303816000875af115801562000d9e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000dc491906200397c565b60155490915062000ded90829073ffffffffffffffffffffffffffffffffffffffff16620031bf565b60405162000dfb9062003961565b604051809103906000f08015801562000e18573d6000803e3d6000fd5b50601580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c6564000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390608401600060405180830381600087803b15801562000f1857600080fd5b505af115801562000f2d573d6000803e3d6000fd5b50506013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801562000fb157600080fd5b505af115801562000fc6573d6000803e3d6000fd5b5050601454601554604080517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248101919091526000604482015291169250634f1ef28691506064016000604051808303816000875af11580156200104f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001097919081019062003a7c565b506013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156200111857600080fd5b505af11580156200112d573d6000803e3d6000fd5b505050506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015620011a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011c991906200397c565b9050620011d78282620031bf565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff1663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200124357600080fd5b505af115801562001258573d6000803e3d6000fd5b50506014546015546040805160016024820181905260448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1ab06ee50000000000000000000000000000000000000000000000000000000017905290517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384169550634f1ef286945062001327939092169160040162003b9f565b6000604051808303816000875af115801562001347573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200138f919081019062003a7c565b505050565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff1663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200140057600080fd5b505af115801562001415573d6000803e3d6000fd5b50506014546040517f8f2839700000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff9091169250638f2839709150602401600060405180830381600087803b1580156200148657600080fd5b505af11580156200149b573d6000803e3d6000fd5b50506040517f491cc7c200000000000000000000000000000000000000000000000000000000815260016004820181905260248201819052604482018190526064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063491cc7c29150608401600060405180830381600087803b1580156200151b57600080fd5b505af115801562001530573d6000803e3d6000fd5b50506013546040805173ffffffffffffffffffffffffffffffffffffffff9092168252600160208301527f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f935001905060405180910390a16013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156200160857600080fd5b505af11580156200161d573d6000803e3d6000fd5b50506014546040517f8f2839700000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff9091169250638f2839709150602401600060405180830381600087803b1580156200168e57600080fd5b505af1158015620016a3573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff1663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200171357600080fd5b505af115801562001728573d6000803e3d6000fd5b50505050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af11580156200179c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017c291906200397c565b506040517fca669fa700000000000000000000000000000000000000000000000000000000815260016004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156200182a57600080fd5b505af11580156200183f573d6000803e3d6000fd5b505050506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015620018b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018db91906200397c565b9050620007fc816001620031bf565b6013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156200196a57600080fd5b505af11580156200197f573d6000803e3d6000fd5b50506014546040517f3659cfe60000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff9091169250633659cfe69150602401600060405180830381600087803b158015620019f057600080fd5b505af115801562001a05573d6000803e3d6000fd5b50506014546040516000935083925073ffffffffffffffffffffffffffffffffffffffff909116908281818181865af19150503d806000811462001a66576040519150601f19603f3d011682016040523d82523d6000602084013e62001a6b565b606091505b509150915062001a7d826000620032fd565b60405160206024820152602560448201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160648201527f6c697a6564000000000000000000000000000000000000000000000000000000608482015260009060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f08c379a00000000000000000000000000000000000000000000000000000000017905290506200138f8282620034f1565b6014546040517f9507d39a0000000000000000000000000000000000000000000000000000000081526001600482015260009173ffffffffffffffffffffffffffffffffffffffff1690639507d39a906024016020604051808303816000875af115801562001bd7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001bfd919062003a04565b905062001c0c816000620034fd565b5060405162001c1b9062003961565b604051809103906000f08015801562001c38573d6000803e3d6000fd5b50601580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556040517f491cc7c200000000000000000000000000000000000000000000000000000000815260016004820181905260248201819052604482018190526064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063491cc7c290608401600060405180830381600087803b15801562001cfa57600080fd5b505af115801562001d0f573d6000803e3d6000fd5b505060155460405173ffffffffffffffffffffffffffffffffffffffff90911692507fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b9150600090a26013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801562001dd857600080fd5b505af115801562001ded573d6000803e3d6000fd5b50506014546015546040805160016024820181905260448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1ab06ee50000000000000000000000000000000000000000000000000000000017905290517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384169550634f1ef286945062001ebc939092169160040162003b9f565b6000604051808303816000875af115801562001edc573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001f24919081019062003a7c565b506014546040517f9507d39a0000000000000000000000000000000000000000000000000000000081526001600482015260009173ffffffffffffffffffffffffffffffffffffffff1690639507d39a906024016020604051808303816000875af115801562001f98573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fbe919062003a04565b9050620007fc816001620034fd565b6013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156200204d57600080fd5b505af115801562002062573d6000803e3d6000fd5b50506014546040517f3659cfe60000000000000000000000000000000000000000000000000000000081526006600482015273ffffffffffffffffffffffffffffffffffffffff9091169250633659cfe69150602401600060405180830381600087803b158015620020d357600080fd5b505af1158015620020e8573d6000803e3d6000fd5b505060145460009250737109709ecfa91a80626ff3989d68f67f5b1dd12d915063667f9d709073ffffffffffffffffffffffffffffffffffffffff166200215160017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620039ea565b60405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401602060405180830381865afa158015620021c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021e6919062003a04565b9050620021f5600682620031bf565b6013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156200227557600080fd5b505af11580156200228a573d6000803e3d6000fd5b505050506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b81526004016020604051808303816000875af115801562000b19573d6000803e3d6000fd5b600060405162002310906200396e565b604051809103906000f0801580156200232d573d6000803e3d6000fd5b506013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015620023b157600080fd5b505af1158015620023c6573d6000803e3d6000fd5b50506014546040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529091169250633659cfe69150602401600060405180830381600087803b1580156200243857600080fd5b505af11580156200244d573d6000803e3d6000fd5b50506013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015620024d157600080fd5b505af1158015620024e6573d6000803e3d6000fd5b505050506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156200255c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200258291906200397c565b9050620025908183620031bf565b50604080518082018252600981527f75706772616465546f0000000000000000000000000000000000000000000000602082015290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb39162002614919060040162003bd8565b600060405180830381600087803b1580156200262f57600080fd5b505af115801562002644573d6000803e3d6000fd5b50506014546040517f3659cfe60000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff9091169250633659cfe69150602401600060405180830381600087803b158015620026b557600080fd5b505af1158015620026ca573d6000803e3d6000fd5b50506013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156200274e57600080fd5b505af115801562002763573d6000803e3d6000fd5b50506014546040517f3659cfe60000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff9091169250633659cfe69150602401600060405180830381600087803b158015620027d457600080fd5b505af1158015620027e9573d6000803e3d6000fd5b50506013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156200286d57600080fd5b505af115801562002882573d6000803e3d6000fd5b505050506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015620028f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200291e91906200397c565b905062000b4e816000620031bf565b6013546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015620029bb57600080fd5b505af1158015620029d0573d6000803e3d6000fd5b50506013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801562002a5457600080fd5b505af115801562002a69573d6000803e3d6000fd5b50506014546015546040805160016024820181905260448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1ab06ee50000000000000000000000000000000000000000000000000000000017905290517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384169550634f1ef2869450670de0b6b3a76400009362002b419316919060040162003b9f565b60006040518083038185885af115801562002b60573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262002ba9919081019062003a7c565b506013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801562002c2a57600080fd5b505af115801562002c3f573d6000803e3d6000fd5b505050506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b81526004016020604051808303816000875af115801562002cb5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002cdb91906200397c565b60155490915062002d0490829073ffffffffffffffffffffffffffffffffffffffff16620031bf565b601454620007fc9073ffffffffffffffffffffffffffffffffffffffff1631670de0b6b3a7640000620034fd565b6014546040517f1ab06ee5000000000000000000000000000000000000000000000000000000008152600160048201819052602482015273ffffffffffffffffffffffffffffffffffffffff90911690631ab06ee590604401600060405180830381600087803b15801562002da657600080fd5b505af115801562002dbb573d6000803e3d6000fd5b50506015546040517f9507d39a000000000000000000000000000000000000000000000000000000008152600160048201526000935073ffffffffffffffffffffffffffffffffffffffff9091169150639507d39a906024016020604051808303816000875af115801562002e34573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002e5a919062003a04565b905062002e69816000620034fd565b6014546040517f9507d39a0000000000000000000000000000000000000000000000000000000081526001600482015260009173ffffffffffffffffffffffffffffffffffffffff1690639507d39a906024016020604051808303816000875af115801562002edc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002f02919062003a04565b905062002f11816001620034fd565b506013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801562002f9257600080fd5b505af115801562002fa7573d6000803e3d6000fd5b50506014546040517f9507d39a000000000000000000000000000000000000000000000000000000008152600160048201526000935073ffffffffffffffffffffffffffffffffffffffff9091169150639507d39a906024016020604051808303816000875af115801562003020573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003046919062003a04565b905062000b4e816001620034fd565b60008054610100900460ff1615620030765750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620031ba5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c65640000000000000000000000000000000000000000000000000000828401528251808303840181526060830190935260009290916200311e917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800162003bed565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620031589162003c37565b6000604051808303816000865af19150503d806000811462003197576040519150601f19603f3d011682016040523d82523d6000602084013e6200319c565b606091505b5091505080806020019051810190620031b6919062003c55565b9150505b919050565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000b4e577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620032799060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f81604051620032b2919062003c79565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f82604051620032eb919062003cdb565b60405180910390a162000b4e620035fd565b8015158215151462000b4e577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200338f9060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b626f6f60408201527f6c5d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381620033fa576040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525062003431565b6040518060400160405280600481526020017f74727565000000000000000000000000000000000000000000000000000000008152505b60405162003440919062003d19565b60405180910390a17f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358382620034ab576040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250620034e2565b6040518060400160405280600481526020017f74727565000000000000000000000000000000000000000000000000000000008152505b604051620032eb919062003d6b565b62000b4e828262003780565b80821462000b4e577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200358b9060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a881604051620035c4919062003da9565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a882604051620032eb919062003df5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620037525760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620036cf929160200162003bed565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620037099162003c37565b6000604051808303816000865af19150503d806000811462003748576040519150601f19603f3d011682016040523d82523d6000602084013e6200374d565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b6200378c828262003889565b62000b4e577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620038179060208082526023908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b62797460408201527f65735d0000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf188160405162003850919062003d19565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf1882604051620032eb919062003d6b565b805182516001919003620039495760005b83518110156200394257828181518110620038b957620038b962003e33565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110620038fb57620038fb62003e33565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016146200392d57600091505b80620039398162003e62565b9150506200389a565b506200394d565b5060005b92915050565b6109188062003e9e83390190565b60de80620047b683390190565b61010b806200489483390190565b6000602082840312156200398f57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff81168114620039b457600080fd5b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015620039ff57620039ff620039bb565b500390565b60006020828403121562003a1757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b8381101562003a6a57818101518382015260200162003a50565b83811115620003c75750506000910152565b60006020828403121562003a8f57600080fd5b815167ffffffffffffffff8082111562003aa857600080fd5b818401915084601f83011262003abd57600080fd5b81518181111562003ad25762003ad262003a1e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171562003b1b5762003b1b62003a1e565b8160405282815287602084870101111562003b3557600080fd5b62003b4883602083016020880162003a4d565b979650505050505050565b6000815180845262003b6d81602086016020860162003a4d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8316815260406020820152600062003bd0604083018462003b53565b949350505050565b602081526000620039b4602083018462003b53565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000825162003c2981600485016020870162003a4d565b919091016004019392505050565b6000825162003c4b81846020870162003a4d565b9190910192915050565b60006020828403121562003c6857600080fd5b81518015158114620039b457600080fd5b60408152600062003cb760408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b60408152600062003cb760408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b60408152600062003d5760408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b828103602084015262003bd0818562003b53565b60408152600062003d5760408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b60408152600062003de760408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b60408152600062003de760408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003e965762003e96620039bb565b506001019056fe608060405234801561001057600080fd5b5060405161091838038061091883398101604081905261002f916100b2565b6100388161003e565b506100e2565b60006100566000805160206108f88339815191525490565b6000805160206108f8833981519152839055604080516001600160a01b038084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b6000602082840312156100c457600080fd5b81516001600160a01b03811681146100db57600080fd5b9392505050565b610807806100f16000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106d9565b610224565b6100a86100a33660046106f4565b610296565b6040516100b59190610777565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106d9565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ea565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060b565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006106357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038390556040805173ffffffffffffffffffffffffffffffffffffffff8084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d457600080fd5b919050565b6000602082840312156106eb57600080fd5b610412826106b0565b60008060006040848603121561070957600080fd5b610712846106b0565b9250602084013567ffffffffffffffff8082111561072f57600080fd5b818601915086601f83011261074357600080fd5b81358181111561075257600080fd5b87602082850101111561076457600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a457858101830151858201604001528201610788565b818111156107b6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103608060405234801561001057600080fd5b5060bf8061001f6000396000f3fe60806040526004361060265760003560e01c80631ab06ee514602b5780639507d39a14604a575b600080fd5b604860363660046079565b60009182526020829052604090912055565b005b60676055366004609a565b60009081526020819052604090205490565b60405190815260200160405180910390f35b60008060408385031215608b57600080fd5b50508035926020909101359150565b60006020828403121560ab57600080fd5b503591905056fea164736f6c634300080f000a608060405234801561001057600080fd5b5060ec8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80633659cfe614602d575b600080fd5b603c603836600460a4565b603e565b005b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f75706772616465546f0000000000000000000000000000000000000000000000604482015260640160405180910390fd5b60006020828403121560b557600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811460d857600080fd5b939250505056fea164736f6c634300080f000aa164736f6c634300080f000a",
  "deployedBytecode": "0x60806040523480156200001157600080fd5b5060043610620000fd5760003560e01c80637dfd7ed11162000097578063aba0cf01116200006e578063aba0cf011462000168578063b4c821dd1462000172578063ba414fa6146200017c578063fa7626d4146200019a57600080fd5b80637dfd7ed1146200014a578063829f35ea146200015457806389f4619f146200015e57600080fd5b80631acf575311620000d85780631acf57531462000122578063444a1e4f146200012c57806350218d551462000136578063646af406146200014057600080fd5b80630a9254e414620001025780630cec2002146200010e57806318133bed1462000118575b600080fd5b6200010c620001a8565b005b6200010c620003cd565b6200010c620007ff565b6200010c62000b52565b6200010c62000c93565b6200010c62001394565b6200010c620018ea565b6200010c62001b64565b6200010c62001fcd565b6200010c62002300565b6200010c6200292d565b6200010c62002d32565b6200018662003055565b604051901515815260200160405180910390f35b600054620001869060ff1681565b60135460405173ffffffffffffffffffffffffffffffffffffffff90911690620001d29062003953565b73ffffffffffffffffffffffffffffffffffffffff9091168152602001604051809103906000f0801580156200020c573d6000803e3d6000fd5b50601480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055604051620002609062003961565b604051809103906000f0801580156200027d573d6000803e3d6000fd5b50601580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9283161790556013546040517fca669fa700000000000000000000000000000000000000000000000000000000815291166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156200032957600080fd5b505af11580156200033e573d6000803e3d6000fd5b50506014546015546040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff918216600482015291169250633659cfe69150602401600060405180830381600087803b158015620003b257600080fd5b505af1158015620003c7573d6000803e3d6000fd5b50505050565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff1663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200043957600080fd5b505af11580156200044e573d6000803e3d6000fd5b5050601454604080517f3659cfe6000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff9091169250633659cfe69150602401600060405180830381600087803b158015620004c157600080fd5b505af1158015620004d6573d6000803e3d6000fd5b50506040517f491cc7c200000000000000000000000000000000000000000000000000000000815260016004820181905260248201819052604482018190526064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063491cc7c29150608401600060405180830381600087803b1580156200055657600080fd5b505af11580156200056b573d6000803e3d6000fd5b5050604080519092507fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b9150600090a26013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156200061b57600080fd5b505af115801562000630573d6000803e3d6000fd5b5050601454604080517f3659cfe6000000000000000000000000000000000000000000000000000000008152600481019190915273ffffffffffffffffffffffffffffffffffffffff9091169250633659cfe69150602401600060405180830381600087803b158015620006a357600080fd5b505af1158015620006b8573d6000803e3d6000fd5b50506013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156200073c57600080fd5b505af115801562000751573d6000803e3d6000fd5b505050506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015620007c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007ed91906200397c565b9050620007fc816040620031bf565b50565b6013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156200087f57600080fd5b505af115801562000894573d6000803e3d6000fd5b50506014546040517f8f2839700000000000000000000000000000000000000000000000000000000081526006600482015273ffffffffffffffffffffffffffffffffffffffff9091169250638f2839709150602401600060405180830381600087803b1580156200090557600080fd5b505af11580156200091a573d6000803e3d6000fd5b505060145460009250737109709ecfa91a80626ff3989d68f67f5b1dd12d915063667f9d709073ffffffffffffffffffffffffffffffffffffffff166200098360017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620039ea565b60405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401602060405180830381865afa158015620009f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a18919062003a04565b905062000a27600682620031bf565b6040517fca669fa700000000000000000000000000000000000000000000000000000000815260066004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801562000a8e57600080fd5b505af115801562000aa3573d6000803e3d6000fd5b505050506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af115801562000b19573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b3f91906200397c565b905062000b4e816006620031bf565b5050565b6040517fca669fa700000000000000000000000000000000000000000000000000000000815260006004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801562000bb957600080fd5b505af115801562000bce573d6000803e3d6000fd5b505050506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b81526004016020604051808303816000875af115801562000c44573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c6a91906200397c565b601554909150620007fc90829073ffffffffffffffffffffffffffffffffffffffff16620031bf565b6013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801562000d1357600080fd5b505af115801562000d28573d6000803e3d6000fd5b505050506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b81526004016020604051808303816000875af115801562000d9e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000dc491906200397c565b60155490915062000ded90829073ffffffffffffffffffffffffffffffffffffffff16620031bf565b60405162000dfb9062003961565b604051809103906000f08015801562000e18573d6000803e3d6000fd5b50601580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556040517ff28dceb300000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c6564000000000000006064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063f28dceb390608401600060405180830381600087803b15801562000f1857600080fd5b505af115801562000f2d573d6000803e3d6000fd5b50506013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801562000fb157600080fd5b505af115801562000fc6573d6000803e3d6000fd5b5050601454601554604080517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff928316600482015260248101919091526000604482015291169250634f1ef28691506064016000604051808303816000875af11580156200104f573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001097919081019062003a7c565b506013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156200111857600080fd5b505af11580156200112d573d6000803e3d6000fd5b505050506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015620011a3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011c991906200397c565b9050620011d78282620031bf565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff1663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200124357600080fd5b505af115801562001258573d6000803e3d6000fd5b50506014546015546040805160016024820181905260448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1ab06ee50000000000000000000000000000000000000000000000000000000017905290517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384169550634f1ef286945062001327939092169160040162003b9f565b6000604051808303816000875af115801562001347573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526200138f919081019062003a7c565b505050565b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff1663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200140057600080fd5b505af115801562001415573d6000803e3d6000fd5b50506014546040517f8f2839700000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff9091169250638f2839709150602401600060405180830381600087803b1580156200148657600080fd5b505af11580156200149b573d6000803e3d6000fd5b50506040517f491cc7c200000000000000000000000000000000000000000000000000000000815260016004820181905260248201819052604482018190526064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063491cc7c29150608401600060405180830381600087803b1580156200151b57600080fd5b505af115801562001530573d6000803e3d6000fd5b50506013546040805173ffffffffffffffffffffffffffffffffffffffff9092168252600160208301527f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f935001905060405180910390a16013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156200160857600080fd5b505af11580156200161d573d6000803e3d6000fd5b50506014546040517f8f2839700000000000000000000000000000000000000000000000000000000081526001600482015273ffffffffffffffffffffffffffffffffffffffff9091169250638f2839709150602401600060405180830381600087803b1580156200168e57600080fd5b505af1158015620016a3573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff1663f48448146040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156200171357600080fd5b505af115801562001728573d6000803e3d6000fd5b50505050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af11580156200179c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620017c291906200397c565b506040517fca669fa700000000000000000000000000000000000000000000000000000000815260016004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156200182a57600080fd5b505af11580156200183f573d6000803e3d6000fd5b505050506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f851a4406040518163ffffffff1660e01b81526004016020604051808303816000875af1158015620018b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018db91906200397c565b9050620007fc816001620031bf565b6013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156200196a57600080fd5b505af11580156200197f573d6000803e3d6000fd5b50506014546040517f3659cfe60000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff9091169250633659cfe69150602401600060405180830381600087803b158015620019f057600080fd5b505af115801562001a05573d6000803e3d6000fd5b50506014546040516000935083925073ffffffffffffffffffffffffffffffffffffffff909116908281818181865af19150503d806000811462001a66576040519150601f19603f3d011682016040523d82523d6000602084013e62001a6b565b606091505b509150915062001a7d826000620032fd565b60405160206024820152602560448201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160648201527f6c697a6564000000000000000000000000000000000000000000000000000000608482015260009060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f08c379a00000000000000000000000000000000000000000000000000000000017905290506200138f8282620034f1565b6014546040517f9507d39a0000000000000000000000000000000000000000000000000000000081526001600482015260009173ffffffffffffffffffffffffffffffffffffffff1690639507d39a906024016020604051808303816000875af115801562001bd7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001bfd919062003a04565b905062001c0c816000620034fd565b5060405162001c1b9062003961565b604051809103906000f08015801562001c38573d6000803e3d6000fd5b50601580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff929092169190911790556040517f491cc7c200000000000000000000000000000000000000000000000000000000815260016004820181905260248201819052604482018190526064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063491cc7c290608401600060405180830381600087803b15801562001cfa57600080fd5b505af115801562001d0f573d6000803e3d6000fd5b505060155460405173ffffffffffffffffffffffffffffffffffffffff90911692507fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b9150600090a26013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801562001dd857600080fd5b505af115801562001ded573d6000803e3d6000fd5b50506014546015546040805160016024820181905260448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1ab06ee50000000000000000000000000000000000000000000000000000000017905290517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384169550634f1ef286945062001ebc939092169160040162003b9f565b6000604051808303816000875af115801562001edc573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262001f24919081019062003a7c565b506014546040517f9507d39a0000000000000000000000000000000000000000000000000000000081526001600482015260009173ffffffffffffffffffffffffffffffffffffffff1690639507d39a906024016020604051808303816000875af115801562001f98573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001fbe919062003a04565b9050620007fc816001620034fd565b6013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156200204d57600080fd5b505af115801562002062573d6000803e3d6000fd5b50506014546040517f3659cfe60000000000000000000000000000000000000000000000000000000081526006600482015273ffffffffffffffffffffffffffffffffffffffff9091169250633659cfe69150602401600060405180830381600087803b158015620020d357600080fd5b505af1158015620020e8573d6000803e3d6000fd5b505060145460009250737109709ecfa91a80626ff3989d68f67f5b1dd12d915063667f9d709073ffffffffffffffffffffffffffffffffffffffff166200215160017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620039ea565b60405160e084901b7fffffffff0000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff90921660048301526024820152604401602060405180830381865afa158015620021c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620021e6919062003a04565b9050620021f5600682620031bf565b6013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b1580156200227557600080fd5b505af11580156200228a573d6000803e3d6000fd5b505050506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b81526004016020604051808303816000875af115801562000b19573d6000803e3d6000fd5b600060405162002310906200396e565b604051809103906000f0801580156200232d573d6000803e3d6000fd5b506013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b158015620023b157600080fd5b505af1158015620023c6573d6000803e3d6000fd5b50506014546040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301529091169250633659cfe69150602401600060405180830381600087803b1580156200243857600080fd5b505af11580156200244d573d6000803e3d6000fd5b50506013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b158015620024d157600080fd5b505af1158015620024e6573d6000803e3d6000fd5b505050506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156200255c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200258291906200397c565b9050620025908183620031bf565b50604080518082018252600981527f75706772616465546f0000000000000000000000000000000000000000000000602082015290517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d9163f28dceb39162002614919060040162003bd8565b600060405180830381600087803b1580156200262f57600080fd5b505af115801562002644573d6000803e3d6000fd5b50506014546040517f3659cfe60000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff9091169250633659cfe69150602401600060405180830381600087803b158015620026b557600080fd5b505af1158015620026ca573d6000803e3d6000fd5b50506013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156200274e57600080fd5b505af115801562002763573d6000803e3d6000fd5b50506014546040517f3659cfe60000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff9091169250633659cfe69150602401600060405180830381600087803b158015620027d457600080fd5b505af1158015620027e9573d6000803e3d6000fd5b50506013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b1580156200286d57600080fd5b505af115801562002882573d6000803e3d6000fd5b505050506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b81526004016020604051808303816000875af1158015620028f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200291e91906200397c565b905062000b4e816000620031bf565b6013546040517fc88a5e6d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152670de0b6b3a76400006024820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c88a5e6d90604401600060405180830381600087803b158015620029bb57600080fd5b505af1158015620029d0573d6000803e3d6000fd5b50506013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063ca669fa79150602401600060405180830381600087803b15801562002a5457600080fd5b505af115801562002a69573d6000803e3d6000fd5b50506014546015546040805160016024820181905260448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1ab06ee50000000000000000000000000000000000000000000000000000000017905290517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9384169550634f1ef2869450670de0b6b3a76400009362002b419316919060040162003b9f565b60006040518083038185885af115801562002b60573d6000803e3d6000fd5b50505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405262002ba9919081019062003a7c565b506013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801562002c2a57600080fd5b505af115801562002c3f573d6000803e3d6000fd5b505050506000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c60da1b6040518163ffffffff1660e01b81526004016020604051808303816000875af115801562002cb5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002cdb91906200397c565b60155490915062002d0490829073ffffffffffffffffffffffffffffffffffffffff16620031bf565b601454620007fc9073ffffffffffffffffffffffffffffffffffffffff1631670de0b6b3a7640000620034fd565b6014546040517f1ab06ee5000000000000000000000000000000000000000000000000000000008152600160048201819052602482015273ffffffffffffffffffffffffffffffffffffffff90911690631ab06ee590604401600060405180830381600087803b15801562002da657600080fd5b505af115801562002dbb573d6000803e3d6000fd5b50506015546040517f9507d39a000000000000000000000000000000000000000000000000000000008152600160048201526000935073ffffffffffffffffffffffffffffffffffffffff9091169150639507d39a906024016020604051808303816000875af115801562002e34573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002e5a919062003a04565b905062002e69816000620034fd565b6014546040517f9507d39a0000000000000000000000000000000000000000000000000000000081526001600482015260009173ffffffffffffffffffffffffffffffffffffffff1690639507d39a906024016020604051808303816000875af115801562002edc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002f02919062003a04565b905062002f11816001620034fd565b506013546040517fca669fa700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ca669fa790602401600060405180830381600087803b15801562002f9257600080fd5b505af115801562002fa7573d6000803e3d6000fd5b50506014546040517f9507d39a000000000000000000000000000000000000000000000000000000008152600160048201526000935073ffffffffffffffffffffffffffffffffffffffff9091169150639507d39a906024016020604051808303816000875af115801562003020573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003046919062003a04565b905062000b4e816001620034fd565b60008054610100900460ff1615620030765750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620031ba5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c65640000000000000000000000000000000000000000000000000000828401528251808303840181526060830190935260009290916200311e917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800162003bed565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620031589162003c37565b6000604051808303816000865af19150503d806000811462003197576040519150601f19603f3d011682016040523d82523d6000602084013e6200319c565b606091505b5091505080806020019051810190620031b6919062003c55565b9150505b919050565b8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000b4e577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620032799060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f81604051620032b2919062003c79565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f82604051620032eb919062003cdb565b60405180910390a162000b4e620035fd565b8015158215151462000b4e577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200338f9060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b626f6f60408201527f6c5d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381620033fa576040518060400160405280600581526020017f66616c736500000000000000000000000000000000000000000000000000000081525062003431565b6040518060400160405280600481526020017f74727565000000000000000000000000000000000000000000000000000000008152505b60405162003440919062003d19565b60405180910390a17f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358382620034ab576040518060400160405280600581526020017f66616c7365000000000000000000000000000000000000000000000000000000815250620034e2565b6040518060400160405280600481526020017f74727565000000000000000000000000000000000000000000000000000000008152505b604051620032eb919062003d6b565b62000b4e828262003780565b80821462000b4e577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516200358b9060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a881604051620035c4919062003da9565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a882604051620032eb919062003df5565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15620037525760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620036cf929160200162003bed565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052620037099162003c37565b6000604051808303816000865af19150503d806000811462003748576040519150601f19603f3d011682016040523d82523d6000602084013e6200374d565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b6200378c828262003889565b62000b4e577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051620038179060208082526023908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b62797460408201527f65735d0000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf188160405162003850919062003d19565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf1882604051620032eb919062003d6b565b805182516001919003620039495760005b83518110156200394257828181518110620038b957620038b962003e33565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110620038fb57620038fb62003e33565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016146200392d57600091505b80620039398162003e62565b9150506200389a565b506200394d565b5060005b92915050565b6109188062003e9e83390190565b60de80620047b683390190565b61010b806200489483390190565b6000602082840312156200398f57600080fd5b815173ffffffffffffffffffffffffffffffffffffffff81168114620039b457600080fd5b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015620039ff57620039ff620039bb565b500390565b60006020828403121562003a1757600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60005b8381101562003a6a57818101518382015260200162003a50565b83811115620003c75750506000910152565b60006020828403121562003a8f57600080fd5b815167ffffffffffffffff8082111562003aa857600080fd5b818401915084601f83011262003abd57600080fd5b81518181111562003ad25762003ad262003a1e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171562003b1b5762003b1b62003a1e565b8160405282815287602084870101111562003b3557600080fd5b62003b4883602083016020880162003a4d565b979650505050505050565b6000815180845262003b6d81602086016020860162003a4d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8316815260406020820152600062003bd0604083018462003b53565b949350505050565b602081526000620039b4602083018462003b53565b7fffffffff00000000000000000000000000000000000000000000000000000000831681526000825162003c2981600485016020870162003a4d565b919091016004019392505050565b6000825162003c4b81846020870162003a4d565b9190910192915050565b60006020828403121562003c6857600080fd5b81518015158114620039b457600080fd5b60408152600062003cb760408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905073ffffffffffffffffffffffffffffffffffffffff8316602083015292915050565b60408152600062003cb760408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b60408152600062003d5760408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b828103602084015262003bd0818562003b53565b60408152600062003d5760408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b60408152600062003de760408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b60408152600062003de760408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362003e965762003e96620039bb565b506001019056fe608060405234801561001057600080fd5b5060405161091838038061091883398101604081905261002f916100b2565b6100388161003e565b506100e2565b60006100566000805160206108f88339815191525490565b6000805160206108f8833981519152839055604080516001600160a01b038084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b6000602082840312156100c457600080fd5b81516001600160a01b03811681146100db57600080fd5b9392505050565b610807806100f16000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106d9565b610224565b6100a86100a33660046106f4565b610296565b6040516100b59190610777565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106d9565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ea565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060b565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81905560405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60006106357fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038390556040805173ffffffffffffffffffffffffffffffffffffffff8084168252851660208201529192507f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a15050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d457600080fd5b919050565b6000602082840312156106eb57600080fd5b610412826106b0565b60008060006040848603121561070957600080fd5b610712846106b0565b9250602084013567ffffffffffffffff8082111561072f57600080fd5b818601915086601f83011261074357600080fd5b81358181111561075257600080fd5b87602082850101111561076457600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a457858101830151858201604001528201610788565b818111156107b6576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103608060405234801561001057600080fd5b5060bf8061001f6000396000f3fe60806040526004361060265760003560e01c80631ab06ee514602b5780639507d39a14604a575b600080fd5b604860363660046079565b60009182526020829052604090912055565b005b60676055366004609a565b60009081526020819052604090205490565b60405190815260200160405180910390f35b60008060408385031215608b57600080fd5b50508035926020909101359150565b60006020828403121560ab57600080fd5b503591905056fea164736f6c634300080f000a608060405234801561001057600080fd5b5060ec8061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80633659cfe614602d575b600080fd5b603c603836600460a4565b603e565b005b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f75706772616465546f0000000000000000000000000000000000000000000000604482015260640160405180910390fd5b60006020828403121560b557600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811460d857600080fd5b939250505056fea164736f6c634300080f000aa164736f6c634300080f000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
