{
  "_format": "hh-sol-artifact-1",
  "contractName": "LinearPoolMock",
  "sourceName": "contracts/mocks/staking/linear/LinearPoolMock.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract LinearPoolReentrancyAttacker",
          "name": "reentrancyAttacker",
          "type": "address"
        },
        {
          "internalType": "uint8",
          "name": "scalingFactorDecimals",
          "type": "uint8"
        },
        {
          "internalType": "contract IForwarderRegistry",
          "name": "forwarderRegistry",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "FailedCall",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "IllegalInterfaceId",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InconsistentArrayLengths",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenContract",
          "type": "address"
        }
      ],
      "name": "IncorrectTokenContractType",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "needed",
          "type": "uint256"
        }
      ],
      "name": "InsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "claimable",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "claimed",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "unclaimed",
          "type": "uint256"
        }
      ],
      "name": "InvalidClaimSum",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidDuration",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidRewardAmount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidStakeAmount",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidWithdrawAmount",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "NotContractOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "stake",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "withdraw",
          "type": "uint256"
        }
      ],
      "name": "NotEnoughStake",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "NotRoleHolder",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ReentrancyGuardReentrantCall",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "currentRewardRate",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newRewardRate",
          "type": "uint256"
        }
      ],
      "name": "RewardDilution",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "RewardOverflow",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "SafeERC20FailedOperation",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ScalingFactorOutOfBounds",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "claimData",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "claimed",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "unclaimed",
          "type": "uint256"
        }
      ],
      "name": "Claimed",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "rewarder",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "reward",
          "type": "uint256"
        }
      ],
      "name": "ComputeAddRewardCalled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "claimable",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "claimData",
          "type": "bytes"
        }
      ],
      "name": "ComputeClaimCalled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "stakeData",
          "type": "bytes"
        }
      ],
      "name": "ComputeStakeCalled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "withdrawData",
          "type": "bytes"
        }
      ],
      "name": "ComputeWithdrawCalled",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "rewarder",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "reward",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        }
      ],
      "name": "RewardAdded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "stakeData",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "stakePoints",
          "type": "uint256"
        }
      ],
      "name": "Staked",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "staker",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "withdrawData",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "stakePoints",
          "type": "uint256"
        }
      ],
      "name": "Withdrawn",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "REENTRANCY_ATTACKER",
      "outputs": [
        {
          "internalType": "contract LinearPoolReentrancyAttacker",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "REWARDER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SCALING_FACTOR",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "__msgData",
      "outputs": [
        {
          "internalType": "bytes",
          "name": "",
          "type": "bytes"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "reward",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "duration",
          "type": "uint256"
        }
      ],
      "name": "addReward",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "claimData",
          "type": "bytes"
        }
      ],
      "name": "claim",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "distributionEnd",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "earned",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "forwarderRegistry",
      "outputs": [
        {
          "internalType": "contract IForwarderRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "hasRole_",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "forwarder",
          "type": "address"
        }
      ],
      "name": "isTrustedForwarder",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastTimeRewardApplicable",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "lastUpdated",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "accounts",
          "type": "address[]"
        },
        {
          "internalType": "contract IERC20[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "name": "recoverERC20s",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "accounts",
          "type": "address[]"
        },
        {
          "internalType": "contract IERC721[]",
          "name": "contracts",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "tokenIds",
          "type": "uint256[]"
        }
      ],
      "name": "recoverERC721s",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address payable[]",
          "name": "accounts",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "name": "recoverETH",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rewardPerStakePoint",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "staker",
          "type": "address"
        }
      ],
      "name": "rewardPerStakePointPaid",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "paid",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rewardPerStakePointStored",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "rewardRate",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "staker",
          "type": "address"
        }
      ],
      "name": "rewards",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "reward",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "stakeData",
          "type": "bytes"
        }
      ],
      "name": "stake",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "staker",
          "type": "address"
        }
      ],
      "name": "staked",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "stakePoints",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalStaked",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "withdrawData",
          "type": "bytes"
        }
      ],
      "name": "withdraw",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60e0346101e357601f612a2938819003918201601f19168301916001600160401b038311848410176101e8578084926060946040528339810103126101e3578051906001600160a01b03821682036101e35760208101519060ff82168092036101e357604001516001600160a01b03811681036101e35733610184575b6307f5828d60e41b60009081527fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d6020527fa53d5a615b1d5279f1a6647c5c0f31bf064b1e70af135676a4a96aeaeb691a2f805460ff191660019081179091559055608052604d81101561017357604d811161015d57600a0a60a05260c05260405161282a90816101ff8239608051818181611b73015281816122910152818161256401526126c5015260a05181818161052b0152818161077e015261114b015260c0518181816107c501528181611705015281816119860152611be60152f35b634e487b7160e01b600052601160045260246000fd5b63a54ad6c560e01b60005260046000fd5b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc80546001600160a01b0319163390811790915560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a361007c565b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001257600080fd5b6000803560e01c80628cc26214611e5557806301ffc9a714611ded5780630700037d14611d8a5780630968f26414611b975780632b4c9f1614611b285780632c9d0b8014611aef5780632d1e0c02146119235780632f2ff15d1461177b57806331e66e1e1461172957806352880f35146116ba578063572b6c051461166e57806373c8a9581461148d57806375c93bb91461108d5780637b0a47ee1461105157806380faa57d14611010578063817b1cd214610fd45780638580cf7614610f7b5780638bb9c5bf14610e115780638da5cb5b14610d9f57806391d1485414610d0857806398807d8414610ca55780639d696e3614610c69578063c3666c36146109e9578063c5c8f77014610986578063c63ff8dd14610739578063d0b06f5d146106fd578063d547741f1461054e578063ef4cadc5146104f5578063efa90b54146104b9578063f2fde38b146103935763f7ba94bd1461017157600080fd5b346103905760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103905760043567ffffffffffffffff811161038e576101c0903690600401611f90565b60243567ffffffffffffffff811161038a576101e0903690600401611f90565b90917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff8061022161254d565b925416911690810361035d575081810361033557845b818110610242578580f35b61024d818387612415565b3573ffffffffffffffffffffffffffffffffffffffff811680910361033157610277828587612415565b3590814710610301578780809381935af13d156102f9573d906102998261218a565b916102a7604051938461211a565b82523d88602084013e5b156102bf5750600101610237565b80518790156102d15750602081519101fd5b807fd6bda2750000000000000000000000000000000000000000000000000000000060049252fd5b6060906102b1565b60448883477fcf479181000000000000000000000000000000000000000000000000000000008352600452602452fd5b8680fd5b6004857f65825336000000000000000000000000000000000000000000000000000000008152fd5b7f2ef4875e0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b8380fd5b505b80fd5b50346103905760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610390576103cb611e97565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc6103f461254d565b9080549273ffffffffffffffffffffffffffffffffffffffff808516931683810361048e575073ffffffffffffffffffffffffffffffffffffffff169283830361043c578480f35b7fffffffffffffffffffffffff000000000000000000000000000000000000000016831790557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a3388080808480f35b7f2ef4875e000000000000000000000000000000000000000000000000000000008652600452602485fd5b503461039057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610390576020600554604051908152f35b503461039057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103905760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b50346103905760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261039057600435610589611ebf565b61059161254d565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361035d57507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22818552806020526040852073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff60406000205416610643578480f35b7ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b936106f2918387526020526040862073ffffffffffffffffffffffffffffffffffffffff851660005260205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690556040519384938491604091949373ffffffffffffffffffffffffffffffffffffffff80926060860197865216602085015216910152565b0390a1388080808480f35b503461039057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610390576020600254604051908152f35b50346103905761074836611ee2565b9190610752612512565b61075a61254d565b9061076482612475565b61076d826120b0565b938461077c575b836001815580f35b7f00000000000000000000000000000000000000000000000000000000000000006107a781876121fb565b9080156109595773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b15610331578660405180927fc63ff8dd0000000000000000000000000000000000000000000000000000000082526020600483015281838161082d602482018b8d611f51565b03925af1801561094e57908791610935575b50507f9a3288933ffcc8b186ccc9c2882353ccd8904216bf0bedbc6cefb5fc16ab09ed73ffffffffffffffffffffffffffffffffffffffff604051961695868152836020820152606060408201528061089c606082018789611f51565b0390a1856109085760009606958495967f019eda09011e476781de26947e4b78ee0a834e7182f5ff2eb62bcf8c523f42ca958252600760205260408220556108f1604051948594606086526060860191611f51565b91602084015260408301520390a280388080610774565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b8161093f9161211a565b61094a57853861083f565b8580fd5b6040513d89823e3d90fd5b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526012600452fd5b50346103905760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261039057604060209173ffffffffffffffffffffffffffffffffffffffff6109d8611e97565b168152600883522054604051908152f35b5034610390576109f836611fc1565b9294939092917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610a3d61254d565b925416911690810361035d5750808214801590610c5f575b610c3757865b828110610a66578780f35b73ffffffffffffffffffffffffffffffffffffffff610a8e610a8983858b612415565b612454565b166040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f80ac58cd000000000000000000000000000000000000000000000000000000006004820152602081602481855afa908115610c2c578a91610bfe575b5015610bd357508773ffffffffffffffffffffffffffffffffffffffff610b1d610a8984868c612415565b16610b2c610a8984878b612415565b90610b3884888a612415565b3591813b1561038a57606473ffffffffffffffffffffffffffffffffffffffff9185809460405196879586947f42842e0e00000000000000000000000000000000000000000000000000000000865230600487015216602485015260448401525af18015610bc857610baf575b5050600101610a5b565b81610bb99161211a565b610bc4578738610ba5565b8780fd5b6040513d84823e3d90fd5b7f986b9f1f000000000000000000000000000000000000000000000000000000008952600452602488fd5b610c1f915060203d8111610c25575b610c17818361211a565b8101906124fa565b38610af2565b503d610c0d565b6040513d8c823e3d90fd5b6004877f65825336000000000000000000000000000000000000000000000000000000008152fd5b5082821415610a55565b503461039057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610390576020600454604051908152f35b50346103905760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261039057604060209173ffffffffffffffffffffffffffffffffffffffff610cf7611e97565b168152600683522054604051908152f35b50346103905760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103905773ffffffffffffffffffffffffffffffffffffffff6040610d57611ebf565b927fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b226004358252602052209116600052602052602060ff604060002054166040519015158152f35b503461039057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103905750602073ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc5416604051908152f35b50346103905760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261039057600435907fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22610e6e61254d565b90838352806020526040832073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff6040600020541615610f35578383526020908152604080842073ffffffffffffffffffffffffffffffffffffffff9390931660008181529383529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558051948552908401829052830152907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b90606090a180f35b5073ffffffffffffffffffffffffffffffffffffffff906044937f7aa7288200000000000000000000000000000000000000000000000000000000845260045216602452fd5b503461039057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103905760206040517f72657761726465720000000000000000000000000000000000000000000000008152f35b503461039057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610390576020600154604051908152f35b503461039057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103905760206110496122d9565b604051908152f35b503461039057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610390576020600354604051908152f35b5060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610390576004356024356110c661254d565b907fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b227f726577617264657200000000000000000000000000000000000000000000000085526020526040842073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff60406000205416156114275782156113ff5780156113d7577f0000000000000000000000000000000000000000000000000000000000000000808402908482041480910290156113af57611183612234565b60045560055442108015906113a4575b611394575b600554906111a683426120a3565b914281116112575750928273ffffffffffffffffffffffffffffffffffffffff926111f46040957f6a6f77044107a33658235d41bedbbaf2fe9ccdceb313143c947a5e76e1ec8474976121fb565b6003556005555b42600255835173ffffffffffffffffffffffffffffffffffffffff83168152602081018790527f5ec3e451d22b879ea6838eff0b038773ea3bfcf4bb51a4c4e2f168333f489b9090604090a1835195865260208601521692a280f35b9160039391935461127161126b4286612054565b82612090565b8501948510948515029461136c578382116112e0575050507f6a6f77044107a33658235d41bedbbaf2fe9ccdceb313143c947a5e76e1ec8474926040926112d86112d173ffffffffffffffffffffffffffffffffffffffff944290612054565b80926121fb565b6003556111fb565b916112ee91935080946121fb565b9080821061133e57509260409273ffffffffffffffffffffffffffffffffffffffff927f6a6f77044107a33658235d41bedbbaf2fe9ccdceb313143c947a5e76e1ec8474956003556005556111fb565b7f19e2447d000000000000000000000000000000000000000000000000000000008752600452602452604485fd5b6004887f50082065000000000000000000000000000000000000000000000000000000008152fd5b61139c6122d9565b600255611198565b506001541515611193565b6004857f50082065000000000000000000000000000000000000000000000000000000008152fd5b6004847f76166401000000000000000000000000000000000000000000000000000000008152fd5b6004847f38539865000000000000000000000000000000000000000000000000000000008152fd5b60448473ffffffffffffffffffffffffffffffffffffffff847f7aa728820000000000000000000000000000000000000000000000000000000083527f726577617264657200000000000000000000000000000000000000000000000060045216602452fd5b50346103905761149c36611fc1565b929594939290917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806114e261254d565b925416911690810361035d5750808414801590611664575b61163c57855b84811061150b578680f35b61151681838a612415565b3573ffffffffffffffffffffffffffffffffffffffff811690818103611638578860209187826115b66115e261155e898f8f610a898f92611558928591612415565b96612415565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000089820190815273ffffffffffffffffffffffffffffffffffffffff9096166024820152903560448201529182906064820190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261211a565b51925af11561094e5787513d61162f5750803b155b6116045750600101611500565b7f5274afe7000000000000000000000000000000000000000000000000000000008852600452602487fd5b600114156115f7565b8880fd5b6004867f65825336000000000000000000000000000000000000000000000000000000008152fd5b50818414156114fa565b50346103905760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103905760206116b06116ab611e97565b61227a565b6040519015158152f35b503461039057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261039057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461039057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610390576117606126ae565b611777604051928392602084526020840191611f51565b0390f35b50346103905760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610390576004356117b6611ebf565b6117be61254d565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361035d57507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22818552806020526040852073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff6040600020541615611871578480f35b7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d936106f2918387526020526040862073ffffffffffffffffffffffffffffffffffffffff8516600052602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556040519384938491604091949373ffffffffffffffffffffffffffffffffffffffff80926060860197865216602085015216910152565b5061194261193036611ee2565b919061193a61254d565b9236916121c4565b9061194b612512565b61195481612475565b81516020830190602082816000938701010312610390575051908373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b1561038e578160405180927f2d1e0c02000000000000000000000000000000000000000000000000000000008252602060048301528183816119ed602482018c61239a565b03925af18015610bc857611ada575b50507f8939976db42d3930b780581daf935c63f4b2b954a86929d714db0ac546958b7f60405180611a2e868583612681565b0390a18115611ab2579073ffffffffffffffffffffffffffffffffffffffff7ff4679d394f1f97f1a3df1d73e193866ec5a813168ad5fa6958f9be21b10a594e92611a7b836001546120a3565b6001551692838552600660205260408520611a978382546120a3565b9055611aa8604051928392836123f9565b0390a26001815580f35b6004847f040ef8ec000000000000000000000000000000000000000000000000000000008152fd5b81611ae49161211a565b61038a5783386119fc565b503461039057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610390576020611049612234565b503461039057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261039057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461039057611ba961193036611ee2565b90611bb2612512565b611bbb81612475565b815160208381019184018490031261038a57519073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b15611d86578460405180927f0968f26400000000000000000000000000000000000000000000000000000000825260206004830152818381611c4d602482018b61239a565b03925af18015611d7b57611d67575b507f36a2ea31c4d4156a140674bc8c3400a4e5c09f48aeb6fcee2b3d04962eeebc2060405180611c8d868583612681565b0390a18115611d3f5773ffffffffffffffffffffffffffffffffffffffff169182845260066020526040842054828110611d0b5790827faae638dec0d864ccb08558c28981bcfaee41330f57c4911cbe2d8432d0fb729e939285875260066020520360408620558160015403600155611aa8604051928392836123f9565b905083927f2b6a77580000000000000000000000000000000000000000000000000000000060649552600452602452604452fd5b6004847fdb73cdf0000000000000000000000000000000000000000000000000000000008152fd5b84611d749195929561211a565b9238611c5c565b6040513d87823e3d90fd5b8480fd5b50346103905760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261039057604060209173ffffffffffffffffffffffffffffffffffffffff611ddc611e97565b168152600783522054604051908152f35b50346103905760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261039057600435907fffffffff00000000000000000000000000000000000000000000000000000000821682036103905760206116b0836122eb565b50346103905760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610390576020611049611e92611e97565b6120b0565b6004359073ffffffffffffffffffffffffffffffffffffffff82168203611eba57565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff82168203611eba57565b9060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc830112611eba5760043567ffffffffffffffff8111611eba5782602382011215611eba5780600401359267ffffffffffffffff8411611eba5760248483010111611eba576024019190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b9181601f84011215611eba5782359167ffffffffffffffff8311611eba576020808501948460051b010111611eba57565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112611eba5760043567ffffffffffffffff8111611eba578161200a91600401611f90565b9290929160243567ffffffffffffffff8111611eba578161202d91600401611f90565b929092916044359067ffffffffffffffff8211611eba5761205091600401611f90565b9091565b9190820391821161206157565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181029291811591840414171561206157565b9190820180921161206157565b73ffffffffffffffffffffffffffffffffffffffff61211791168060005260066020526121026040600020546120fc6120e7612234565b84600052600860205260406000205490612054565b90612090565b906000526007602052604060002054906120a3565b90565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761215b57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff811161215b57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926121d08261218a565b916121de604051938461211a565b829481845281830111611eba578281602093846000960137010152565b8115612205570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6001548015612273576121179061226d6004549161226861225f6122566122d9565b60025490612054565b60035490612090565b6121fb565b906120a3565b5060045490565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169081156122d25773ffffffffffffffffffffffffffffffffffffffff161490565b5050600090565b60055480421060001461211757504290565b7fffffffff00000000000000000000000000000000000000000000000000000000167fffffffff000000000000000000000000000000000000000000000000000000008114612394577f01ffc9a700000000000000000000000000000000000000000000000000000000811461238e576000527fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d60205260ff6040600020541690565b50600190565b50600090565b919082519283825260005b8481106123e45750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b806020809284010151828286010152016123a5565b92919061241060209160408652604086019061239a565b930152565b91908110156124255760051b0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3573ffffffffffffffffffffffffffffffffffffffff81168103611eba5790565b61247d612234565b60045560055442108015906124ef575b6124df575b73ffffffffffffffffffffffffffffffffffffffff811690816124b3575050565b6124bc906120b0565b816000526007602052604060002055600454906000526008602052604060002055565b6124e76122d9565b600255612492565b50600154151561248d565b90816020910312611eba57518015158103611eba5790565b600260005414612523576002600055565b7f3ee5aeb50000000000000000000000000000000000000000000000000000000060005260046000fd5b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168015612672573233148015612677575b612672577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c908033149081156125d5575b5061211757503390565b6040517f019a202800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201523360248201523060448201529150602090829060649082905afa90811561266657600091612647575b50386125cb565b612660915060203d602011610c2557610c17818361211a565b38612640565b6040513d6000823e3d90fd5b503390565b5060183610612594565b60409073ffffffffffffffffffffffffffffffffffffffff6121179493168152816020820152019061239a565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156127e25732331480156127ea575b6127e257803314908115612741575b50612710576000903690565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec360190368211611eba5760009190565b6040517f019a20280000000000000000000000000000000000000000000000000000000081527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c60048201523360248201523060448201529150602090829060649082905afa908115612666576000916127c3575b5038612704565b6127dc915060203d602011610c2557610c17818361211a565b386127bc565b506000903690565b50601836106126f556fea26469706673582212208da9f17450c6b268cf3bcf20ec6c47e43686c0b33ed304b1f03904dba0900fd864736f6c634300081e0033",
  "deployedBytecode": "0x6080604052600436101561001257600080fd5b6000803560e01c80628cc26214611e5557806301ffc9a714611ded5780630700037d14611d8a5780630968f26414611b975780632b4c9f1614611b285780632c9d0b8014611aef5780632d1e0c02146119235780632f2ff15d1461177b57806331e66e1e1461172957806352880f35146116ba578063572b6c051461166e57806373c8a9581461148d57806375c93bb91461108d5780637b0a47ee1461105157806380faa57d14611010578063817b1cd214610fd45780638580cf7614610f7b5780638bb9c5bf14610e115780638da5cb5b14610d9f57806391d1485414610d0857806398807d8414610ca55780639d696e3614610c69578063c3666c36146109e9578063c5c8f77014610986578063c63ff8dd14610739578063d0b06f5d146106fd578063d547741f1461054e578063ef4cadc5146104f5578063efa90b54146104b9578063f2fde38b146103935763f7ba94bd1461017157600080fd5b346103905760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103905760043567ffffffffffffffff811161038e576101c0903690600401611f90565b60243567ffffffffffffffff811161038a576101e0903690600401611f90565b90917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff8061022161254d565b925416911690810361035d575081810361033557845b818110610242578580f35b61024d818387612415565b3573ffffffffffffffffffffffffffffffffffffffff811680910361033157610277828587612415565b3590814710610301578780809381935af13d156102f9573d906102998261218a565b916102a7604051938461211a565b82523d88602084013e5b156102bf5750600101610237565b80518790156102d15750602081519101fd5b807fd6bda2750000000000000000000000000000000000000000000000000000000060049252fd5b6060906102b1565b60448883477fcf479181000000000000000000000000000000000000000000000000000000008352600452602452fd5b8680fd5b6004857f65825336000000000000000000000000000000000000000000000000000000008152fd5b7f2ef4875e0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b8380fd5b505b80fd5b50346103905760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610390576103cb611e97565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc6103f461254d565b9080549273ffffffffffffffffffffffffffffffffffffffff808516931683810361048e575073ffffffffffffffffffffffffffffffffffffffff169283830361043c578480f35b7fffffffffffffffffffffffff000000000000000000000000000000000000000016831790557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a3388080808480f35b7f2ef4875e000000000000000000000000000000000000000000000000000000008652600452602485fd5b503461039057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610390576020600554604051908152f35b503461039057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103905760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b50346103905760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261039057600435610589611ebf565b61059161254d565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361035d57507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22818552806020526040852073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff60406000205416610643578480f35b7ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b936106f2918387526020526040862073ffffffffffffffffffffffffffffffffffffffff851660005260205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541690556040519384938491604091949373ffffffffffffffffffffffffffffffffffffffff80926060860197865216602085015216910152565b0390a1388080808480f35b503461039057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610390576020600254604051908152f35b50346103905761074836611ee2565b9190610752612512565b61075a61254d565b9061076482612475565b61076d826120b0565b938461077c575b836001815580f35b7f00000000000000000000000000000000000000000000000000000000000000006107a781876121fb565b9080156109595773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b15610331578660405180927fc63ff8dd0000000000000000000000000000000000000000000000000000000082526020600483015281838161082d602482018b8d611f51565b03925af1801561094e57908791610935575b50507f9a3288933ffcc8b186ccc9c2882353ccd8904216bf0bedbc6cefb5fc16ab09ed73ffffffffffffffffffffffffffffffffffffffff604051961695868152836020820152606060408201528061089c606082018789611f51565b0390a1856109085760009606958495967f019eda09011e476781de26947e4b78ee0a834e7182f5ff2eb62bcf8c523f42ca958252600760205260408220556108f1604051948594606086526060860191611f51565b91602084015260408301520390a280388080610774565b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b8161093f9161211a565b61094a57853861083f565b8580fd5b6040513d89823e3d90fd5b6024867f4e487b710000000000000000000000000000000000000000000000000000000081526012600452fd5b50346103905760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261039057604060209173ffffffffffffffffffffffffffffffffffffffff6109d8611e97565b168152600883522054604051908152f35b5034610390576109f836611fc1565b9294939092917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610a3d61254d565b925416911690810361035d5750808214801590610c5f575b610c3757865b828110610a66578780f35b73ffffffffffffffffffffffffffffffffffffffff610a8e610a8983858b612415565b612454565b166040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f80ac58cd000000000000000000000000000000000000000000000000000000006004820152602081602481855afa908115610c2c578a91610bfe575b5015610bd357508773ffffffffffffffffffffffffffffffffffffffff610b1d610a8984868c612415565b16610b2c610a8984878b612415565b90610b3884888a612415565b3591813b1561038a57606473ffffffffffffffffffffffffffffffffffffffff9185809460405196879586947f42842e0e00000000000000000000000000000000000000000000000000000000865230600487015216602485015260448401525af18015610bc857610baf575b5050600101610a5b565b81610bb99161211a565b610bc4578738610ba5565b8780fd5b6040513d84823e3d90fd5b7f986b9f1f000000000000000000000000000000000000000000000000000000008952600452602488fd5b610c1f915060203d8111610c25575b610c17818361211a565b8101906124fa565b38610af2565b503d610c0d565b6040513d8c823e3d90fd5b6004877f65825336000000000000000000000000000000000000000000000000000000008152fd5b5082821415610a55565b503461039057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610390576020600454604051908152f35b50346103905760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261039057604060209173ffffffffffffffffffffffffffffffffffffffff610cf7611e97565b168152600683522054604051908152f35b50346103905760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103905773ffffffffffffffffffffffffffffffffffffffff6040610d57611ebf565b927fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b226004358252602052209116600052602052602060ff604060002054166040519015158152f35b503461039057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103905750602073ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc5416604051908152f35b50346103905760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261039057600435907fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22610e6e61254d565b90838352806020526040832073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff6040600020541615610f35578383526020908152604080842073ffffffffffffffffffffffffffffffffffffffff9390931660008181529383529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558051948552908401829052830152907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b90606090a180f35b5073ffffffffffffffffffffffffffffffffffffffff906044937f7aa7288200000000000000000000000000000000000000000000000000000000845260045216602452fd5b503461039057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103905760206040517f72657761726465720000000000000000000000000000000000000000000000008152f35b503461039057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610390576020600154604051908152f35b503461039057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103905760206110496122d9565b604051908152f35b503461039057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610390576020600354604051908152f35b5060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610390576004356024356110c661254d565b907fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b227f726577617264657200000000000000000000000000000000000000000000000085526020526040842073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff60406000205416156114275782156113ff5780156113d7577f0000000000000000000000000000000000000000000000000000000000000000808402908482041480910290156113af57611183612234565b60045560055442108015906113a4575b611394575b600554906111a683426120a3565b914281116112575750928273ffffffffffffffffffffffffffffffffffffffff926111f46040957f6a6f77044107a33658235d41bedbbaf2fe9ccdceb313143c947a5e76e1ec8474976121fb565b6003556005555b42600255835173ffffffffffffffffffffffffffffffffffffffff83168152602081018790527f5ec3e451d22b879ea6838eff0b038773ea3bfcf4bb51a4c4e2f168333f489b9090604090a1835195865260208601521692a280f35b9160039391935461127161126b4286612054565b82612090565b8501948510948515029461136c578382116112e0575050507f6a6f77044107a33658235d41bedbbaf2fe9ccdceb313143c947a5e76e1ec8474926040926112d86112d173ffffffffffffffffffffffffffffffffffffffff944290612054565b80926121fb565b6003556111fb565b916112ee91935080946121fb565b9080821061133e57509260409273ffffffffffffffffffffffffffffffffffffffff927f6a6f77044107a33658235d41bedbbaf2fe9ccdceb313143c947a5e76e1ec8474956003556005556111fb565b7f19e2447d000000000000000000000000000000000000000000000000000000008752600452602452604485fd5b6004887f50082065000000000000000000000000000000000000000000000000000000008152fd5b61139c6122d9565b600255611198565b506001541515611193565b6004857f50082065000000000000000000000000000000000000000000000000000000008152fd5b6004847f76166401000000000000000000000000000000000000000000000000000000008152fd5b6004847f38539865000000000000000000000000000000000000000000000000000000008152fd5b60448473ffffffffffffffffffffffffffffffffffffffff847f7aa728820000000000000000000000000000000000000000000000000000000083527f726577617264657200000000000000000000000000000000000000000000000060045216602452fd5b50346103905761149c36611fc1565b929594939290917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806114e261254d565b925416911690810361035d5750808414801590611664575b61163c57855b84811061150b578680f35b61151681838a612415565b3573ffffffffffffffffffffffffffffffffffffffff811690818103611638578860209187826115b66115e261155e898f8f610a898f92611558928591612415565b96612415565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000089820190815273ffffffffffffffffffffffffffffffffffffffff9096166024820152903560448201529182906064820190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810183528261211a565b51925af11561094e5787513d61162f5750803b155b6116045750600101611500565b7f5274afe7000000000000000000000000000000000000000000000000000000008852600452602487fd5b600114156115f7565b8880fd5b6004867f65825336000000000000000000000000000000000000000000000000000000008152fd5b50818414156114fa565b50346103905760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103905760206116b06116ab611e97565b61227a565b6040519015158152f35b503461039057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261039057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461039057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610390576117606126ae565b611777604051928392602084526020840191611f51565b0390f35b50346103905760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610390576004356117b6611ebf565b6117be61254d565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361035d57507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22818552806020526040852073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff6040600020541615611871578480f35b7f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d936106f2918387526020526040862073ffffffffffffffffffffffffffffffffffffffff8516600052602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790556040519384938491604091949373ffffffffffffffffffffffffffffffffffffffff80926060860197865216602085015216910152565b5061194261193036611ee2565b919061193a61254d565b9236916121c4565b9061194b612512565b61195481612475565b81516020830190602082816000938701010312610390575051908373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b1561038e578160405180927f2d1e0c02000000000000000000000000000000000000000000000000000000008252602060048301528183816119ed602482018c61239a565b03925af18015610bc857611ada575b50507f8939976db42d3930b780581daf935c63f4b2b954a86929d714db0ac546958b7f60405180611a2e868583612681565b0390a18115611ab2579073ffffffffffffffffffffffffffffffffffffffff7ff4679d394f1f97f1a3df1d73e193866ec5a813168ad5fa6958f9be21b10a594e92611a7b836001546120a3565b6001551692838552600660205260408520611a978382546120a3565b9055611aa8604051928392836123f9565b0390a26001815580f35b6004847f040ef8ec000000000000000000000000000000000000000000000000000000008152fd5b81611ae49161211a565b61038a5783386119fc565b503461039057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610390576020611049612234565b503461039057807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261039057602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461039057611ba961193036611ee2565b90611bb2612512565b611bbb81612475565b815160208381019184018490031261038a57519073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b15611d86578460405180927f0968f26400000000000000000000000000000000000000000000000000000000825260206004830152818381611c4d602482018b61239a565b03925af18015611d7b57611d67575b507f36a2ea31c4d4156a140674bc8c3400a4e5c09f48aeb6fcee2b3d04962eeebc2060405180611c8d868583612681565b0390a18115611d3f5773ffffffffffffffffffffffffffffffffffffffff169182845260066020526040842054828110611d0b5790827faae638dec0d864ccb08558c28981bcfaee41330f57c4911cbe2d8432d0fb729e939285875260066020520360408620558160015403600155611aa8604051928392836123f9565b905083927f2b6a77580000000000000000000000000000000000000000000000000000000060649552600452602452604452fd5b6004847fdb73cdf0000000000000000000000000000000000000000000000000000000008152fd5b84611d749195929561211a565b9238611c5c565b6040513d87823e3d90fd5b8480fd5b50346103905760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261039057604060209173ffffffffffffffffffffffffffffffffffffffff611ddc611e97565b168152600783522054604051908152f35b50346103905760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261039057600435907fffffffff00000000000000000000000000000000000000000000000000000000821682036103905760206116b0836122eb565b50346103905760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610390576020611049611e92611e97565b6120b0565b6004359073ffffffffffffffffffffffffffffffffffffffff82168203611eba57565b600080fd5b6024359073ffffffffffffffffffffffffffffffffffffffff82168203611eba57565b9060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc830112611eba5760043567ffffffffffffffff8111611eba5782602382011215611eba5780600401359267ffffffffffffffff8411611eba5760248483010111611eba576024019190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b9181601f84011215611eba5782359167ffffffffffffffff8311611eba576020808501948460051b010111611eba57565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112611eba5760043567ffffffffffffffff8111611eba578161200a91600401611f90565b9290929160243567ffffffffffffffff8111611eba578161202d91600401611f90565b929092916044359067ffffffffffffffff8211611eba5761205091600401611f90565b9091565b9190820391821161206157565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181029291811591840414171561206157565b9190820180921161206157565b73ffffffffffffffffffffffffffffffffffffffff61211791168060005260066020526121026040600020546120fc6120e7612234565b84600052600860205260406000205490612054565b90612090565b906000526007602052604060002054906120a3565b90565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761215b57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff811161215b57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926121d08261218a565b916121de604051938461211a565b829481845281830111611eba578281602093846000960137010152565b8115612205570490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6001548015612273576121179061226d6004549161226861225f6122566122d9565b60025490612054565b60035490612090565b6121fb565b906120a3565b5060045490565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169081156122d25773ffffffffffffffffffffffffffffffffffffffff161490565b5050600090565b60055480421060001461211757504290565b7fffffffff00000000000000000000000000000000000000000000000000000000167fffffffff000000000000000000000000000000000000000000000000000000008114612394577f01ffc9a700000000000000000000000000000000000000000000000000000000811461238e576000527fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d60205260ff6040600020541690565b50600190565b50600090565b919082519283825260005b8481106123e45750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b806020809284010151828286010152016123a5565b92919061241060209160408652604086019061239a565b930152565b91908110156124255760051b0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3573ffffffffffffffffffffffffffffffffffffffff81168103611eba5790565b61247d612234565b60045560055442108015906124ef575b6124df575b73ffffffffffffffffffffffffffffffffffffffff811690816124b3575050565b6124bc906120b0565b816000526007602052604060002055600454906000526008602052604060002055565b6124e76122d9565b600255612492565b50600154151561248d565b90816020910312611eba57518015158103611eba5790565b600260005414612523576002600055565b7f3ee5aeb50000000000000000000000000000000000000000000000000000000060005260046000fd5b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168015612672573233148015612677575b612672577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c908033149081156125d5575b5061211757503390565b6040517f019a202800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201523360248201523060448201529150602090829060649082905afa90811561266657600091612647575b50386125cb565b612660915060203d602011610c2557610c17818361211a565b38612640565b6040513d6000823e3d90fd5b503390565b5060183610612594565b60409073ffffffffffffffffffffffffffffffffffffffff6121179493168152816020820152019061239a565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156127e25732331480156127ea575b6127e257803314908115612741575b50612710576000903690565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec360190368211611eba5760009190565b6040517f019a20280000000000000000000000000000000000000000000000000000000081527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c60048201523360248201523060448201529150602090829060649082905afa908115612666576000916127c3575b5038612704565b6127dc915060203d602011610c2557610c17818361211a565b386127bc565b506000903690565b50601836106126f556fea26469706673582212208da9f17450c6b268cf3bcf20ec6c47e43686c0b33ed304b1f03904dba0900fd864736f6c634300081e0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
