{
  "_format": "hh-sol-artifact-1",
  "contractName": "Bytes_slice_Test",
  "sourceName": "contracts/test/Bytes.t.sol",
  "abi": [
    {
      "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": "excludeArtifacts",
      "outputs": [
        {
          "internalType": "string[]",
          "name": "excludedArtifacts_",
          "type": "string[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "excludeContracts",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "excludedContracts_",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "excludeSenders",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "excludedSenders_",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "failed",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "targetArtifactSelectors",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "addr",
              "type": "address"
            },
            {
              "internalType": "bytes4[]",
              "name": "selectors",
              "type": "bytes4[]"
            }
          ],
          "internalType": "struct StdInvariant.FuzzSelector[]",
          "name": "targetedArtifactSelectors_",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "targetArtifacts",
      "outputs": [
        {
          "internalType": "string[]",
          "name": "targetedArtifacts_",
          "type": "string[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "targetContracts",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "targetedContracts_",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "targetSelectors",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "addr",
              "type": "address"
            },
            {
              "internalType": "bytes4[]",
              "name": "selectors",
              "type": "bytes4[]"
            }
          ],
          "internalType": "struct StdInvariant.FuzzSelector[]",
          "name": "targetedSelectors_",
          "type": "tuple[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "targetSenders",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "targetedSenders_",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_input",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_length",
          "type": "uint256"
        }
      ],
      "name": "testFuzz_slice_lengthOverflows_reverts",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_input",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_length",
          "type": "uint256"
        }
      ],
      "name": "testFuzz_slice_memorySafety_succeeds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_input",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_length",
          "type": "uint256"
        }
      ],
      "name": "testFuzz_slice_outOfBounds_reverts",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "_input",
          "type": "bytes"
        },
        {
          "internalType": "uint256",
          "name": "_start",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_length",
          "type": "uint256"
        }
      ],
      "name": "testFuzz_slice_rangeOverflows_reverts",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_slice_acrossMultipleWords_works",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_slice_acrossWords_works",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_slice_fromNonZeroIdx_works",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "test_slice_fromZeroIdx_works",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x608060405260008054600160ff19918216811790925560048054909116909117905534801561002d57600080fd5b5061233c8061003d6000396000f3fe608060405234801561001057600080fd5b50600436106101365760003560e01c806384932af8116100b2578063b5508aa911610081578063e20c9f7111610066578063e20c9f7114610221578063e621eb3514610229578063fa7626d41461023157600080fd5b8063b5508aa914610201578063ba414fa61461020957600080fd5b806384932af8146101be57806385226c81146101d157806386bec17e146101e6578063916a17c6146101f957600080fd5b80633e5e3c2311610109578063440f3c40116100ee578063440f3c401461019957806349034c2a146101a157806366d9a9a0146101a957600080fd5b80633e5e3c23146101895780633f7286f41461019157600080fd5b806310d461301461013b5780631bcbcfe0146101505780631ed7831c1461015857806323631e8314610176575b600080fd5b61014e610149366004611bde565b61023e565b005b61014e6103fd565b610160610746565b60405161016d9190611cc0565b60405180910390f35b61014e610184366004611bde565b6107b5565b610160610836565b6101606108a3565b61014e610910565b61014e610bc7565b6101b1610c1b565b60405161016d9190611d1a565b61014e6101cc366004611bde565b610d2c565b6101d9610ff1565b60405161016d9190611e86565b61014e6101f4366004611bde565b6110c1565b6101b1611242565b6101d961134a565b61021161141a565b604051901515815260200161016d565b61016061157a565b61014e6115e7565b6000546102119060ff1681565b82516040517f4c63e5620000000000000000000000000000000000000000000000000000000081529082106004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90634c63e5629060240160006040518083038186803b1580156102a557600080fd5b505afa1580156102b9573d6000803e3d6000fd5b50737109709ecfa91a80626ff3989d68f67f5b1dd12d9250634c63e56291506103049050837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611f35565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815290851160048201526024015b60006040518083038186803b15801561035457600080fd5b505afa158015610368573d6000803e3d6000fd5b50506040517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063f28dceb391506103ba90600401611f4c565b600060405180830381600087803b1580156103d457600080fd5b505af11580156103e8573d6000803e3d6000fd5b505050506103f7838383611610565b50505050565b60408051808201909152600a81527f1122334455667788990000000000000000000000000000000000000000000000602082015261045561044082600080611610565b60405180602001604052806000815250611761565b6104a06104658260006001611610565b6040518060400160405280600181526020017f1100000000000000000000000000000000000000000000000000000000000000815250611761565b6104eb6104b08260006002611610565b6040518060400160405280600281526020017f1122000000000000000000000000000000000000000000000000000000000000815250611761565b6105366104fb8260006003611610565b6040518060400160405280600381526020017f1122330000000000000000000000000000000000000000000000000000000000815250611761565b6105816105468260006004611610565b6040518060400160405280600481526020017f1122334400000000000000000000000000000000000000000000000000000000815250611761565b6105cc6105918260006005611610565b6040518060400160405280600581526020017f1122334455000000000000000000000000000000000000000000000000000000815250611761565b6106176105dc8260006006611610565b6040518060400160405280600681526020017f1122334455660000000000000000000000000000000000000000000000000000815250611761565b6106626106278260006007611610565b6040518060400160405280600781526020017f1122334455667700000000000000000000000000000000000000000000000000815250611761565b6106ad6106728260006008611610565b6040518060400160405280600881526020017f1122334455667788000000000000000000000000000000000000000000000000815250611761565b6106f86106bd8260006009611610565b6040518060400160405280600981526020017f1122334455667788990000000000000000000000000000000000000000000000815250611761565b610743610708826000600a611610565b6040518060400160405280600a81526020017f1122334455667788990000000000000000000000000000000000000000000000815250611761565b50565b6060600d8054806020026020016040519081016040528092919081815260200182805480156107ab57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610780575b5050505050905090565b737109709ecfa91a80626ff3989d68f67f5b1dd12d634c63e5626107fa601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611f35565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152908411600482015260240161033c565b6060600f8054806020026020016040519081016040528092919081815260200182805480156107ab5760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610780575050505050905090565b6060600e8054806020026020016040519081016040528092919081815260200182805480156107ab5760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610780575050505050905090565b60408051808201909152600a81527f112233445566778899000000000000000000000000000000000000000000000060208201526109706109548260096001611610565b6040518060400160405280600181526020016000815250611761565b6109bb6109808260086002611610565b6040518060400160405280600281526020017f9900000000000000000000000000000000000000000000000000000000000000815250611761565b610a066109cb8260076003611610565b6040518060400160405280600381526020017f8899000000000000000000000000000000000000000000000000000000000000815250611761565b610a51610a168260066004611610565b6040518060400160405280600481526020017f7788990000000000000000000000000000000000000000000000000000000000815250611761565b610a9b610a6082600580611610565b6040518060400160405280600581526020017f6677889900000000000000000000000000000000000000000000000000000000815250611761565b610ae6610aab8260046006611610565b6040518060400160405280600681526020017f5566778899000000000000000000000000000000000000000000000000000000815250611761565b610b31610af68260036007611610565b6040518060400160405280600781526020017f4455667788990000000000000000000000000000000000000000000000000000815250611761565b610b7c610b418260026008611610565b6040518060400160405280600881526020017f3344556677889900000000000000000000000000000000000000000000000000815250611761565b610743610b8c8260016009611610565b6040518060400160405280600981526020017f2233445566778899000000000000000000000000000000000000000000000000815250611761565b60006040518060800160405280606081526020016122d0606091399050600060405180606001604052806022815260200161226e602291399050610c17610c1183601f6022611610565b82611761565b5050565b60606012805480602002602001604051908101604052809291908181526020016000905b82821015610d2357600084815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff168352600181018054835181870281018701909452808452939491938583019392830182828015610d0b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411610cb85790505b50505050508152505081526020019060010190610c3f565b50505050905090565b82516040517f4c63e5620000000000000000000000000000000000000000000000000000000081529083106004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90634c63e5629060240160006040518083038186803b158015610d9357600080fd5b505afa158015610da7573d6000803e3d6000fd5b50508451737109709ecfa91a80626ff3989d68f67f5b1dd12d9250634c63e5629150610dd4908590611f35565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815290841115600482015260240160006040518083038186803b158015610e2457600080fd5b505afa158015610e38573d6000803e3d6000fd5b50506040519150600090507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610e6f84601f611f89565b16610e7b836020611fa1565b67ffffffffffffffff16610e8f9190611f89565b6040517f6d01668800000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808516600483015282166024820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d90636d01668890604401600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b505050506000610f2e868686611610565b6040519091506000859003610f6a57610f6567ffffffffffffffff8216610f56866020611fa1565b67ffffffffffffffff1661176b565b610fdd565b6000600580610f7a88601f611f89565b901c901b610f89866020611fa1565b67ffffffffffffffff16610f9d9190611f89565b9050610fbd8267ffffffffffffffff168267ffffffffffffffff1661176b565b610fdb8167ffffffffffffffff168567ffffffffffffffff1661176b565b505b610fe882518661176b565b50505050505050565b60606011805480602002602001604051908101604052809291908181526020016000905b82821015610d2357838290600052602060002001805461103490611fcd565b80601f016020809104026020016040519081016040528092919081815260200182805461106090611fcd565b80156110ad5780601f10611082576101008083540402835291602001916110ad565b820191906000526020600020905b81548152906001019060200180831161109057829003601f168201915b505050505081526020019060010190611015565b8251737109709ecfa91a80626ff3989d68f67f5b1dd12d90634c63e56290841080156111165750611113601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611f35565b83105b6040518263ffffffff1660e01b8152600401611136911515815260200190565b60006040518083038186803b15801561114e57600080fd5b505afa158015611162573d6000803e3d6000fd5b50508451737109709ecfa91a80626ff3989d68f67f5b1dd12d9250634c63e562915061118e8486611f89565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681529110600482015260240160006040518083038186803b1580156111dc57600080fd5b505afa1580156111f0573d6000803e3d6000fd5b50506040517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063f28dceb391506103ba90600401612020565b60606013805480602002602001604051908101604052809291908181526020016000905b82821015610d2357600084815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff16835260018101805483518187028101870190945280845293949193858301939283018282801561133257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116112df5790505b50505050508152505081526020019060010190611266565b60606010805480602002602001604051908101604052809291908181526020016000905b82821015610d2357838290600052602060002001805461138d90611fcd565b80601f01602080910402602001604051908101604052809291908181526020018280546113b990611fcd565b80156114065780601f106113db57610100808354040283529160200191611406565b820191906000526020600020905b8154815290600101906020018083116113e957829003601f168201915b50505050508152602001906001019061136e565b60008054610100900460ff161561143a5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115755760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c65640000000000000000000000000000000000000000000000000000828401528251808303840181526060830190935260009290916114df917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800161205d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611517916120a5565b6000604051808303816000865af19150503d8060008114611554576040519150601f19603f3d011682016040523d82523d6000602084013e611559565b606091505b509150508080602001905181019061157191906120c1565b9150505b919050565b6060600c8054806020026020016040519081016040528092919081815260200182805480156107ab5760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610780575050505050905090565b60006040518060600160405280604081526020016122906040913990506107436104b082601f60025b60608182601f011015611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f90611f4c565b60405180910390fd5b828284011015611694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f90611f4c565b818301845110156116d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f90612020565b6060821580156116f05760405191506000825260208201604052611758565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015611729578051835260209283019201611711565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b610c178282611875565b808214610c17577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516117f79060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88160405161182e91906120ea565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8826040516118659190612135565b60405180910390a1610c17611976565b61187f8282611af2565b610c17577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516119089060208082526023908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b62797460408201527f65735d0000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf188160405161193f9190612172565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf188260405161186591906121c9565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15611ac45760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611a45929160200161205d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611a7d916120a5565b6000604051808303816000865af19150503d8060008114611aba576040519150601f19603f3d011682016040523d82523d6000602084013e611abf565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b805182516001919003611ba55760005b8351811015611b9f57828181518110611b1d57611b1d612206565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110611b5c57611b5c612206565b01602001517fff000000000000000000000000000000000000000000000000000000000000001614611b8d57600091505b80611b9781612235565b915050611b02565b50611ba9565b5060005b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600060608486031215611bf357600080fd5b833567ffffffffffffffff80821115611c0b57600080fd5b818601915086601f830112611c1f57600080fd5b813581811115611c3157611c31611baf565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611c7757611c77611baf565b81604052828152896020848701011115611c9057600080fd5b82602086016020830137600060208483010152809750505050505060208401359150604084013590509250925092565b6020808252825182820181905260009190848201906040850190845b81811015611d0e57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101611cdc565b50909695505050505050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b84811015611e01578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00186528251805173ffffffffffffffffffffffffffffffffffffffff168552880151888501889052805188860181905290890190839060608701905b80831015611dec5783517fffffffff00000000000000000000000000000000000000000000000000000000168252928b019260019290920191908b0190611daa565b50978a01979550505091870191600101611d42565b50919998505050505050505050565b60005b83811015611e2b578181015183820152602001611e13565b838111156103f75750506000910152565b60008151808452611e54816020860160208601611e10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015611ef9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452611ee7858351611e3c565b94509285019290850190600101611ead565b5092979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611f4757611f47611f06565b500390565b602081526000611ba960208301600e81527f736c6963655f6f766572666c6f77000000000000000000000000000000000000602082015260400190565b60008219821115611f9c57611f9c611f06565b500190565b600067ffffffffffffffff808316818516808303821115611fc457611fc4611f06565b01949350505050565b600181811c90821680611fe157607f821691505b60208210810361201a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b602081526000611ba960208301601181527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000602082015260400190565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251612097816004850160208701611e10565b919091016004019392505050565b600082516120b7818460208701611e10565b9190910192915050565b6000602082840312156120d357600080fd5b815180151581146120e357600080fd5b9392505050565b60408152600061212760408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b60408152600061212760408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b6040815260006121af60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b82810360208401526121c18185611e3c565b949350505050565b6040815260006121af60408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361226657612266611f06565b506001019056fe1122ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1100000000000000000000000000000000000000000000000000000000000000112200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001122ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1100000000000000000000000000000000000000000000000000000000000000a164736f6c634300080f000a",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101365760003560e01c806384932af8116100b2578063b5508aa911610081578063e20c9f7111610066578063e20c9f7114610221578063e621eb3514610229578063fa7626d41461023157600080fd5b8063b5508aa914610201578063ba414fa61461020957600080fd5b806384932af8146101be57806385226c81146101d157806386bec17e146101e6578063916a17c6146101f957600080fd5b80633e5e3c2311610109578063440f3c40116100ee578063440f3c401461019957806349034c2a146101a157806366d9a9a0146101a957600080fd5b80633e5e3c23146101895780633f7286f41461019157600080fd5b806310d461301461013b5780631bcbcfe0146101505780631ed7831c1461015857806323631e8314610176575b600080fd5b61014e610149366004611bde565b61023e565b005b61014e6103fd565b610160610746565b60405161016d9190611cc0565b60405180910390f35b61014e610184366004611bde565b6107b5565b610160610836565b6101606108a3565b61014e610910565b61014e610bc7565b6101b1610c1b565b60405161016d9190611d1a565b61014e6101cc366004611bde565b610d2c565b6101d9610ff1565b60405161016d9190611e86565b61014e6101f4366004611bde565b6110c1565b6101b1611242565b6101d961134a565b61021161141a565b604051901515815260200161016d565b61016061157a565b61014e6115e7565b6000546102119060ff1681565b82516040517f4c63e5620000000000000000000000000000000000000000000000000000000081529082106004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90634c63e5629060240160006040518083038186803b1580156102a557600080fd5b505afa1580156102b9573d6000803e3d6000fd5b50737109709ecfa91a80626ff3989d68f67f5b1dd12d9250634c63e56291506103049050837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611f35565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815290851160048201526024015b60006040518083038186803b15801561035457600080fd5b505afa158015610368573d6000803e3d6000fd5b50506040517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063f28dceb391506103ba90600401611f4c565b600060405180830381600087803b1580156103d457600080fd5b505af11580156103e8573d6000803e3d6000fd5b505050506103f7838383611610565b50505050565b60408051808201909152600a81527f1122334455667788990000000000000000000000000000000000000000000000602082015261045561044082600080611610565b60405180602001604052806000815250611761565b6104a06104658260006001611610565b6040518060400160405280600181526020017f1100000000000000000000000000000000000000000000000000000000000000815250611761565b6104eb6104b08260006002611610565b6040518060400160405280600281526020017f1122000000000000000000000000000000000000000000000000000000000000815250611761565b6105366104fb8260006003611610565b6040518060400160405280600381526020017f1122330000000000000000000000000000000000000000000000000000000000815250611761565b6105816105468260006004611610565b6040518060400160405280600481526020017f1122334400000000000000000000000000000000000000000000000000000000815250611761565b6105cc6105918260006005611610565b6040518060400160405280600581526020017f1122334455000000000000000000000000000000000000000000000000000000815250611761565b6106176105dc8260006006611610565b6040518060400160405280600681526020017f1122334455660000000000000000000000000000000000000000000000000000815250611761565b6106626106278260006007611610565b6040518060400160405280600781526020017f1122334455667700000000000000000000000000000000000000000000000000815250611761565b6106ad6106728260006008611610565b6040518060400160405280600881526020017f1122334455667788000000000000000000000000000000000000000000000000815250611761565b6106f86106bd8260006009611610565b6040518060400160405280600981526020017f1122334455667788990000000000000000000000000000000000000000000000815250611761565b610743610708826000600a611610565b6040518060400160405280600a81526020017f1122334455667788990000000000000000000000000000000000000000000000815250611761565b50565b6060600d8054806020026020016040519081016040528092919081815260200182805480156107ab57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610780575b5050505050905090565b737109709ecfa91a80626ff3989d68f67f5b1dd12d634c63e5626107fa601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611f35565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b168152908411600482015260240161033c565b6060600f8054806020026020016040519081016040528092919081815260200182805480156107ab5760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610780575050505050905090565b6060600e8054806020026020016040519081016040528092919081815260200182805480156107ab5760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610780575050505050905090565b60408051808201909152600a81527f112233445566778899000000000000000000000000000000000000000000000060208201526109706109548260096001611610565b6040518060400160405280600181526020016000815250611761565b6109bb6109808260086002611610565b6040518060400160405280600281526020017f9900000000000000000000000000000000000000000000000000000000000000815250611761565b610a066109cb8260076003611610565b6040518060400160405280600381526020017f8899000000000000000000000000000000000000000000000000000000000000815250611761565b610a51610a168260066004611610565b6040518060400160405280600481526020017f7788990000000000000000000000000000000000000000000000000000000000815250611761565b610a9b610a6082600580611610565b6040518060400160405280600581526020017f6677889900000000000000000000000000000000000000000000000000000000815250611761565b610ae6610aab8260046006611610565b6040518060400160405280600681526020017f5566778899000000000000000000000000000000000000000000000000000000815250611761565b610b31610af68260036007611610565b6040518060400160405280600781526020017f4455667788990000000000000000000000000000000000000000000000000000815250611761565b610b7c610b418260026008611610565b6040518060400160405280600881526020017f3344556677889900000000000000000000000000000000000000000000000000815250611761565b610743610b8c8260016009611610565b6040518060400160405280600981526020017f2233445566778899000000000000000000000000000000000000000000000000815250611761565b60006040518060800160405280606081526020016122d0606091399050600060405180606001604052806022815260200161226e602291399050610c17610c1183601f6022611610565b82611761565b5050565b60606012805480602002602001604051908101604052809291908181526020016000905b82821015610d2357600084815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff168352600181018054835181870281018701909452808452939491938583019392830182828015610d0b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411610cb85790505b50505050508152505081526020019060010190610c3f565b50505050905090565b82516040517f4c63e5620000000000000000000000000000000000000000000000000000000081529083106004820152737109709ecfa91a80626ff3989d68f67f5b1dd12d90634c63e5629060240160006040518083038186803b158015610d9357600080fd5b505afa158015610da7573d6000803e3d6000fd5b50508451737109709ecfa91a80626ff3989d68f67f5b1dd12d9250634c63e5629150610dd4908590611f35565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815290841115600482015260240160006040518083038186803b158015610e2457600080fd5b505afa158015610e38573d6000803e3d6000fd5b50506040519150600090507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0610e6f84601f611f89565b16610e7b836020611fa1565b67ffffffffffffffff16610e8f9190611f89565b6040517f6d01668800000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808516600483015282166024820152909150737109709ecfa91a80626ff3989d68f67f5b1dd12d90636d01668890604401600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b505050506000610f2e868686611610565b6040519091506000859003610f6a57610f6567ffffffffffffffff8216610f56866020611fa1565b67ffffffffffffffff1661176b565b610fdd565b6000600580610f7a88601f611f89565b901c901b610f89866020611fa1565b67ffffffffffffffff16610f9d9190611f89565b9050610fbd8267ffffffffffffffff168267ffffffffffffffff1661176b565b610fdb8167ffffffffffffffff168567ffffffffffffffff1661176b565b505b610fe882518661176b565b50505050505050565b60606011805480602002602001604051908101604052809291908181526020016000905b82821015610d2357838290600052602060002001805461103490611fcd565b80601f016020809104026020016040519081016040528092919081815260200182805461106090611fcd565b80156110ad5780601f10611082576101008083540402835291602001916110ad565b820191906000526020600020905b81548152906001019060200180831161109057829003601f168201915b505050505081526020019060010190611015565b8251737109709ecfa91a80626ff3989d68f67f5b1dd12d90634c63e56290841080156111165750611113601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff611f35565b83105b6040518263ffffffff1660e01b8152600401611136911515815260200190565b60006040518083038186803b15801561114e57600080fd5b505afa158015611162573d6000803e3d6000fd5b50508451737109709ecfa91a80626ff3989d68f67f5b1dd12d9250634c63e562915061118e8486611f89565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681529110600482015260240160006040518083038186803b1580156111dc57600080fd5b505afa1580156111f0573d6000803e3d6000fd5b50506040517ff28dceb3000000000000000000000000000000000000000000000000000000008152737109709ecfa91a80626ff3989d68f67f5b1dd12d925063f28dceb391506103ba90600401612020565b60606013805480602002602001604051908101604052809291908181526020016000905b82821015610d2357600084815260209081902060408051808201825260028602909201805473ffffffffffffffffffffffffffffffffffffffff16835260018101805483518187028101870190945280845293949193858301939283018282801561133257602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116112df5790505b50505050508152505081526020019060010190611266565b60606010805480602002602001604051908101604052809291908181526020016000905b82821015610d2357838290600052602060002001805461138d90611fcd565b80601f01602080910402602001604051908101604052809291908181526020018280546113b990611fcd565b80156114065780601f106113db57610100808354040283529160200191611406565b820191906000526020600020905b8154815290600101906020018083116113e957829003601f168201915b50505050508152602001906001019061136e565b60008054610100900460ff161561143a5750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115755760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c65640000000000000000000000000000000000000000000000000000828401528251808303840181526060830190935260009290916114df917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc49160800161205d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611517916120a5565b6000604051808303816000865af19150503d8060008114611554576040519150601f19603f3d011682016040523d82523d6000602084013e611559565b606091505b509150508080602001905181019061157191906120c1565b9150505b919050565b6060600c8054806020026020016040519081016040528092919081815260200182805480156107ab5760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610780575050505050905090565b60006040518060600160405280604081526020016122906040913990506107436104b082601f60025b60608182601f011015611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f90611f4c565b60405180910390fd5b828284011015611694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f90611f4c565b818301845110156116d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f90612020565b6060821580156116f05760405191506000825260208201604052611758565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015611729578051835260209283019201611711565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b610c178282611875565b808214610c17577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516117f79060208082526022908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b75696e60408201527f745d000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a88160405161182e91906120ea565b60405180910390a17fb2de2fbe801a0df6c0cbddfd448ba3c41d48a040ca35c56c8196ef0fcae721a8826040516118659190612135565b60405180910390a1610c17611976565b61187f8282611af2565b610c17577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f506040516119089060208082526023908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b62797460408201527f65735d0000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf188160405161193f9190612172565b60405180910390a17fd26e16cad4548705e4c9e2d94f98ee91c289085ee425594fd5635fa2964ccf188260405161186591906121c9565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15611ac45760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc490608001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611a45929160200161205d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611a7d916120a5565b6000604051808303816000865af19150503d8060008114611aba576040519150601f19603f3d011682016040523d82523d6000602084013e611abf565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b805182516001919003611ba55760005b8351811015611b9f57828181518110611b1d57611b1d612206565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848281518110611b5c57611b5c612206565b01602001517fff000000000000000000000000000000000000000000000000000000000000001614611b8d57600091505b80611b9781612235565b915050611b02565b50611ba9565b5060005b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600060608486031215611bf357600080fd5b833567ffffffffffffffff80821115611c0b57600080fd5b818601915086601f830112611c1f57600080fd5b813581811115611c3157611c31611baf565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611c7757611c77611baf565b81604052828152896020848701011115611c9057600080fd5b82602086016020830137600060208483010152809750505050505060208401359150604084013590509250925092565b6020808252825182820181905260009190848201906040850190845b81811015611d0e57835173ffffffffffffffffffffffffffffffffffffffff1683529284019291840191600101611cdc565b50909695505050505050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b84811015611e01578984037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00186528251805173ffffffffffffffffffffffffffffffffffffffff168552880151888501889052805188860181905290890190839060608701905b80831015611dec5783517fffffffff00000000000000000000000000000000000000000000000000000000168252928b019260019290920191908b0190611daa565b50978a01979550505091870191600101611d42565b50919998505050505050505050565b60005b83811015611e2b578181015183820152602001611e13565b838111156103f75750506000910152565b60008151808452611e54816020860160208601611e10565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015611ef9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452611ee7858351611e3c565b94509285019290850190600101611ead565b5092979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611f4757611f47611f06565b500390565b602081526000611ba960208301600e81527f736c6963655f6f766572666c6f77000000000000000000000000000000000000602082015260400190565b60008219821115611f9c57611f9c611f06565b500190565b600067ffffffffffffffff808316818516808303821115611fc457611fc4611f06565b01949350505050565b600181811c90821680611fe157607f821691505b60208210810361201a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b602081526000611ba960208301601181527f736c6963655f6f75744f66426f756e6473000000000000000000000000000000602082015260400190565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251612097816004850160208701611e10565b919091016004019392505050565b600082516120b7818460208701611e10565b9190910192915050565b6000602082840312156120d357600080fd5b815180151581146120e357600080fd5b9392505050565b60408152600061212760408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b905082602083015292915050565b60408152600061212760408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b6040815260006121af60408301600a81527f2020457870656374656400000000000000000000000000000000000000000000602082015260400190565b82810360208401526121c18185611e3c565b949350505050565b6040815260006121af60408301600a81527f2020202041637475616c00000000000000000000000000000000000000000000602082015260400190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361226657612266611f06565b506001019056fe1122ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1100000000000000000000000000000000000000000000000000000000000000112200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001122ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1100000000000000000000000000000000000000000000000000000000000000a164736f6c634300080f000a",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
