{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC1155FullMock",
  "sourceName": "contracts/mocks/token/ERC1155/preset/ERC1155FullMock.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "tokenName",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "tokenSymbol",
          "type": "string"
        },
        {
          "internalType": "contract ITokenMetadataResolver",
          "name": "metadataResolver",
          "type": "address"
        },
        {
          "internalType": "contract IOperatorFilterRegistry",
          "name": "filterRegistry",
          "type": "address"
        },
        {
          "internalType": "contract IForwarderRegistry",
          "name": "forwarderRegistry",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "ERC1155BalanceOfAddressZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "ERC1155BalanceOverflow",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "ERC1155InsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC1155MintToAddressZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "ERC1155NonApproved",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "ids",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        }
      ],
      "name": "ERC1155SafeBatchTransferRejected",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "ERC1155SafeTransferRejected",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "ERC1155SelfApprovalForAll",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC1155TransferToAddressZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "percentage",
          "type": "uint256"
        }
      ],
      "name": "ERC2981IncorrectRoyaltyPercentage",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC2981IncorrectRoyaltyReceiver",
      "type": "error"
    },
    {
      "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": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "NotContractOwner",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "NotMetadataResolver",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "NotRoleHolder",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "OperatorNotAllowed",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "SafeERC20FailedOperation",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "ApprovalForAll",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "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": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "ids",
          "type": "uint256[]"
        },
        {
          "indexed": false,
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        }
      ],
      "name": "TransferBatch",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "TransferSingle",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "value",
          "type": "string"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "URI",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "MINTER_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "ROYALTY_FEE_DENOMINATOR",
      "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": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "owners",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "ids",
          "type": "uint256[]"
        }
      ],
      "name": "balanceOfBatch",
      "outputs": [
        {
          "internalType": "uint256[]",
          "name": "balances",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256[]",
          "name": "tokenIds",
          "type": "uint256[]"
        },
        {
          "internalType": "string[]",
          "name": "tokenURIs",
          "type": "string[]"
        }
      ],
      "name": "batchSetTokenURI",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "approvedForAll",
          "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": "metadataResolver",
      "outputs": [
        {
          "internalType": "contract ITokenMetadataResolver",
          "name": "tokenMetadataResolver",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "tokenName",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "operatorFilterRegistry",
      "outputs": [
        {
          "internalType": "contract IOperatorFilterRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "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": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "salePrice",
          "type": "uint256"
        }
      ],
      "name": "royaltyInfo",
      "outputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "royaltyAmount",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "ids",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeBatchMint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "ids",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeBatchTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "recipients",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "ids",
          "type": "uint256[]"
        },
        {
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeDeliver",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeMint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "id",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "percentage",
          "type": "uint256"
        }
      ],
      "name": "setRoyaltyPercentage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "receiver",
          "type": "address"
        }
      ],
      "name": "setRoyaltyReceiver",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "string",
          "name": "tokenURI",
          "type": "string"
        }
      ],
      "name": "setTokenURI",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "tokenSymbol",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IOperatorFilterRegistry",
          "name": "registry",
          "type": "address"
        }
      ],
      "name": "updateOperatorFilterRegistry",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "uri",
      "outputs": [
        {
          "internalType": "string",
          "name": "metadataURI",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60a0604052346105e35761405480380380610019816105e8565b928339810160a0828203126105e35781516001600160401b0381116105e3578161004491840161060d565b602083015190916001600160401b0382116105e35761006491840161060d565b60408301519092906001600160a01b038116908190036105e35760608201516001600160a01b03811692908390036105e35760800151926001600160a01b03841684036105e35733610584575b7fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d60208190527fa53d5a615b1d5279f1a6647c5c0f31bf064b1e70af135676a4a96aeaeb691a2f805460ff199081166001908117909255636cdb3d1360e11b6000527f55f2baa086bcadb68563d14bf0ae4964705cc6bc8fd476a834dc8cb4e83cc92a805490911690911790557f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd3080546001600160a01b0319169094179093558051906001600160401b03821161045a576000805160206140148339815191525490600182811c9216801561057a575b602083101461043a5781601f8493116104fd575b50602090601f831160011461047b57600092610470575b50508160011b916000199060031b1c191617600080516020614014833981519152555b83516001600160401b03811161045a5760008051602061403483398151915254600181811c91168015610450575b602082101461043a57601f81116103c8575b50602094601f82116001146103475794819293949560009261033c575b50508160011b916000199060031b1c191617600080516020614034833981519152555b7f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a680546001600160a01b0319169190911790556303a24d0760e21b60009081526020919091526040808220805460ff199081166001908117909255631464324b60e21b84528284208054821683179055633a2ae73360e21b8452828420805482168317905563152a902d60e11b8452928290208054909316179091556080919091525161399b9081610679823960805181818161218801528181612d2f015281816132c401526138360152f35b01519050388061024c565b601f19821695600080516020614034833981519152600052806000209160005b8881106103b057508360019596979810610397575b505050811b016000805160206140348339815191525561026f565b015160001960f88460031b161c1916905538808061037c565b91926020600181928685015181550194019201610367565b6000805160206140348339815191526000527fc39bad3db5d56dccf839bc8a79759b3192b97757d993f7663c9998f4fbefc8a1601f830160051c81019160208410610430575b601f0160051c01905b818110610424575061022f565b60008155600101610417565b909150819061040e565b634e487b7160e01b600052602260045260246000fd5b90607f169061021d565b634e487b7160e01b600052604160045260246000fd5b0151905038806101cc565b60008051602061401483398151915260009081528281209350601f198516905b8181106104e557509084600195949392106104cc575b505050811b01600080516020614014833981519152556101ef565b015160001960f88460031b161c191690553880806104b1565b9293602060018192878601518155019501930161049b565b6000805160206140148339815191526000529091507f565de0cfbb8a3f70c938db1afc5562690ff7c55773c7234a649300f58e3b30bc601f840160051c81019160208510610570575b90601f859493920160051c01905b81811061056157506101b5565b60008155849350600101610554565b9091508190610546565b91607f16916101a1565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc80546001600160a01b0319163390811790915560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a36100b1565b600080fd5b6040519190601f01601f191682016001600160401b0381118382101761045a57604052565b81601f820112156105e3578051906001600160401b03821161045a5761063c601f8301601f19166020016105e8565b92828452602083830101116105e35760005b82811061066357505060206000918301015290565b8060208092840101518282870101520161064e56fe6080604052600436101561001257600080fd5b60003560e01c8062fdd58e146128e857806301ffc9a71461288257806306fdde03146128275780630d6a5bbb146125c55780630e89341c1461246e578063114ba8ee1461236f578063162094c41461229f5780632a55205a146121ac5780632b4c9f161461213d5780632eb2c2d614611cfe5780632f2ff15d14611b7257806331e66e1e14611b245780634e1273f414611a46578063572b6c05146119fb5780635cfa92971461193157806361ba27da146118155780636706467b146116a457806373c8a958146114f45780638bb9c5bf146113855780638da5cb5b146113145780638dc251e3146111e757806391d148541461114f57806395d89b41146110dc578063a0c76f621461106b578063a22cb46514610f0b578063b0ccc31e14610e9a578063c3666c3614610c5d578063d539139314610c04578063d547741f14610a7b578063e1a8bf2c14610a3f578063e8ab9ccc14610833578063e985e9c51461077f578063f242432a1461044d578063f2fde38b146103595763f7ba94bd1461019c57600080fd5b346102fd576101aa36612aa0565b90917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806101eb6132ad565b925416911690810361032c57508181036103025760005b81811061020b57005b610216818387612d77565b3573ffffffffffffffffffffffffffffffffffffffff81168091036102fd57610240828587612d77565b35908147106102cb57600080809381935af13d156102c3573d9061026382612ca7565b916102716040519384612bd3565b82523d6000602084013e5b1561028a5750600101610202565b80511561029957602081519101fd5b7fd6bda2750000000000000000000000000000000000000000000000000000000060005260046000fd5b60609061027c565b50477fcf4791810000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b600080fd5b7f658253360000000000000000000000000000000000000000000000000000000060005260046000fd5b7f2ef4875e0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b346102fd5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd57610390612956565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc906103ba6132ad565b9073ffffffffffffffffffffffffffffffffffffffff80845416921682810361032c575073ffffffffffffffffffffffffffffffffffffffff16918282036103fe57005b827fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b346102fd5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd57610484612956565b61048c612979565b604435906064359260843567ffffffffffffffff81116102fd576104b4903690600401612a33565b926104bd6132ad565b937f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd308573ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff82160361076f575b505073ffffffffffffffffffffffffffffffffffffffff8216947f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e86128615610745576105608287836135d8565b156106fb5773ffffffffffffffffffffffffffffffffffffffff916105898a8a878a8796613658565b169416918583867fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62604080518c81528d6020820152a43b6105c657005b6020926105d4913691612ce1565b9261062a60405194859384937ff23a6e610000000000000000000000000000000000000000000000000000000085526004850152602484015287604484015288606484015260a0608484015260a48301906129bf565b03816000865af19081156106ef577ff23a6e6100000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916106c0575b50160361068d57005b7f40f39d380000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b6106e2915060203d6020116106e8575b6106da8183612bd3565b8101906134b5565b86610684565b503d6106d0565b6040513d6000823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff8681847f05bbb9c400000000000000000000000000000000000000000000000000000000600052166004521660245260446000fd5b7fb5e890150000000000000000000000000000000000000000000000000000000060005260046000fd5b610778916134ed565b8785610514565b346102fd5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd576107b6612956565b73ffffffffffffffffffffffffffffffffffffffff6107d3612979565b91166000527f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e861360205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b346102fd5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd5760043567ffffffffffffffff81116102fd57610882903690600401612a02565b60243567ffffffffffffffff81116102fd576108a2903690600401612a02565b929060443567ffffffffffffffff81116102fd576108c4903690600401612a02565b93909160643567ffffffffffffffff81116102fd576108e7903690600401612a33565b9390916108f26132ad565b9761091d897fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22612fb6565b7f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e86129461094881612c43565b97610956604051998a612bd3565b818952602089019160051b8101903682116102fd57915b818310610a12575050509161098b6109939261099b95943691612c5b565b973691612c5b565b933691612ce1565b9183519480518614801590610a07575b6103025760005b8681106109bb57005b80610a018673ffffffffffffffffffffffffffffffffffffffff6109e16001958b613078565b51166109ed8487613078565b516109f88589613078565b51918d8a61312c565b016109b2565b5081518614156109ab565b823573ffffffffffffffffffffffffffffffffffffffff811681036102fd5781526020928301920161096d565b346102fd5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd576020604051620186a08152f35b346102fd5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd57600435610ab5612979565b610abd6132ad565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361032c57507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b228160005280602052604060002073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff60406000205416610b6f57005b60008281526020918252604080822073ffffffffffffffffffffffffffffffffffffffff9586168084529084529181902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905580519384529183015291909216908201527ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080606081015b0390a1005b346102fd5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd5760206040517f6d696e74657200000000000000000000000000000000000000000000000000008152f35b346102fd57610c6b36612b44565b9094929390917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610cb06132ad565b925416911690810361032c5750808214801590610e90575b6103025760005b828110610cd857005b73ffffffffffffffffffffffffffffffffffffffff610d00610cfb83858a612d77565b61310b565b166040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f80ac58cd000000000000000000000000000000000000000000000000000000006004820152602081602481855afa9081156106ef57600091610e62575b5015610e35575073ffffffffffffffffffffffffffffffffffffffff610d8f610cfb83858a612d77565b1690610d9f610cfb828689612d77565b91610dab82878b612d77565b3592813b156102fd57606473ffffffffffffffffffffffffffffffffffffffff916000809460405197889586947f42842e0e00000000000000000000000000000000000000000000000000000000865230600487015216602485015260448401525af19182156106ef57600192610e24575b5001610ccf565b6000610e2f91612bd3565b88610e1d565b7f986b9f1f0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b610e83915060203d8111610e89575b610e7b8183612bd3565b810190613295565b89610d65565b503d610e71565b5082821415610cc8565b346102fd5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd57602073ffffffffffffffffffffffffffffffffffffffff7f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd305416604051908152f35b346102fd5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd57610f42612956565b60243590811515918281036102fd5761103c575b73ffffffffffffffffffffffffffffffffffffffff80610f746132ad565b1691169181831461100e5760207f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3191836000527f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e86138252604060002085600052825260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff8316179055604051908152a3005b507ffb0fdf610000000000000000000000000000000000000000000000000000000060005260045260246000fd5b611066817f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd306134ed565b610f56565b346102fd5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd57602073ffffffffffffffffffffffffffffffffffffffff7f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a65416604051908152f35b346102fd5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd5761114b6111377f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a5612eaf565b6040519182916020835260208301906129bf565b0390f35b346102fd5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd57611186612979565b7fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b2260043560005260205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b346102fd5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd5761121e612956565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff8061125d6132ad565b925416911690810361032c57507f2c0cf10337caabbd02dcf226f05f5fd19a0919a41a8df8958c39b800078268579073ffffffffffffffffffffffffffffffffffffffff8116156112ea5773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055600080f35b7f16de0c800000000000000000000000000000000000000000000000000000000060005260046000fd5b346102fd5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd57602073ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc5416604051908152f35b346102fd5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd577fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b226004356113e06132ad565b908060005282602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff60406000205416156114ac5760008181526020938452604080822073ffffffffffffffffffffffffffffffffffffffff949094168083529385529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558051918252928101829052918201527ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b908060608101610bff565b73ffffffffffffffffffffffffffffffffffffffff92507f7aa72882000000000000000000000000000000000000000000000000000000006000526004521660245260446000fd5b346102fd5761150236612b44565b929392917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806115456132ad565b925416911690810361032c575080841480159061169a575b6103025760005b84811061156d57005b611578818388612d77565b3573ffffffffffffffffffffffffffffffffffffffff8116908181036102fd5760006020916115ab610cfb868b8e612d77565b826116156116416115bd898d8d612d77565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000089820190815273ffffffffffffffffffffffffffffffffffffffff9096166024820152903560448201529182906064820190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612bd3565b51925af1156106ef576000513d6116915750803b155b6116645750600101611564565b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b60011415611657565b508284141561155d565b346102fd576116b236612aa0565b8083949293036103025773ffffffffffffffffffffffffffffffffffffffff7f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a6541633036117e757916000907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301915b85811061172e57005b848110156117b8578060051b820135838112156102fd5782019081359167ffffffffffffffff83116102fd576020019180360383136102fd577f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b600193611796848b8a612d77565b35926117af604051928392602084526020840191612a61565b0390a201611725565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22060671000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b346102fd5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd576004357fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806118866132ad565b925416911690810361032c57507f2c0cf10337caabbd02dcf226f05f5fd19a0919a41a8df8958c39b8000782685790620186a0811161190457815473ffffffffffffffffffffffffffffffffffffffff1660a09190911b7fffffffffffffffffffffffff000000000000000000000000000000000000000016179055005b7fac0404080000000000000000000000000000000000000000000000000000000060005260045260246000fd5b346102fd5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd57611968612956565b6064359067ffffffffffffffff82116102fd5761198c6119f9923690600401612a33565b6119eb6119976132ad565b926119c2847fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22612fb6565b7f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e8612923691612ce1565b92604435926024359261312c565b005b346102fd5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd576020611a3c611a37612956565b612d18565b6040519015158152f35b346102fd57611a5436612aa0565b9192917f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e8612919080850361030257611a8a85612c43565b94611a986040519687612bd3565b8086527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611ac582612c43565b0136602088013760005b818110611aec576040516020808252819061114b9082018a612b10565b80611b13611b00610cfb600194868b612d77565b611b0b838789612d77565b359088612d87565b611b1d828a613078565b5201611acf565b346102fd5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd57611b5b61381f565b61114b604051928392602084526020840191612a61565b346102fd5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd57600435611bac612979565b611bb46132ad565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361032c57507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b228160005280602052604060002073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff6040600020541615611c6757005b60008281526020918252604080822073ffffffffffffffffffffffffffffffffffffffff9586168084529084529181902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580519384529183015291909216908201527f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d908060608101610bff565b346102fd5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd57611d35612956565b611d3d612979565b60443567ffffffffffffffff81116102fd57611d5d903690600401612a02565b929060643567ffffffffffffffff81116102fd57611d7f903690600401612a02565b9360843567ffffffffffffffff81116102fd57611da0903690600401612a33565b939091611dab6132ad565b957f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd308773ffffffffffffffffffffffffffffffffffffffff831673ffffffffffffffffffffffffffffffffffffffff82160361212d575b505073ffffffffffffffffffffffffffffffffffffffff8216967f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e8612881561074557898b0361030257611e558284836135d8565b156120e35760005b8b81106120b4575050928992888a8897947f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb73ffffffffffffffffffffffffffffffffffffffff809b99169a8b9216988993611ed960405192839260408452611ecb8d60408601908d6130ce565b9184830360208601526130ce565b0390a43b611ee357005b602094611ef8611f0092611f08953691612c5b565b993691612c5b565b953691612ce1565b92611fb860405194859384937fbc197c810000000000000000000000000000000000000000000000000000000085526004850152602484015260a06044840152611f88611f5860a485018b612b10565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc85820301606486015288612b10565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8483030160848501526129bf565b03816000875af19081156106ef577fbc197c8100000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091612095575b50160361201b57005b612091906120616040519485947fc287817e0000000000000000000000000000000000000000000000000000000086526004860152606060248601526064850190612b10565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc848303016044850152612b10565b0390fd5b6120ae915060203d6020116106e8576106da8183612bd3565b86612012565b806120dd8c6120d38f946120cb816001978d612d77565b35928d612d77565b3590888887613658565b01611e5d565b73ffffffffffffffffffffffffffffffffffffffff8381847f05bbb9c400000000000000000000000000000000000000000000000000000000600052166004521660245260446000fd5b612136916134ed565b8987611e02565b346102fd5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102fd5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd5773ffffffffffffffffffffffffffffffffffffffff6024357f2c0cf10337caabbd02dcf226f05f5fd19a0919a41a8df8958c39b8000782685754908160a01c9080158015612297575b1561226157505061114b60005b60405193849316836020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b61114b91620186a08210156122845761227e90620186a09261308c565b04612231565b620186a0612292920461308c565b612231565b508115612224565b346102fd5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd5760243567ffffffffffffffff81116102fd576122ee903690600401612a33565b9073ffffffffffffffffffffffffffffffffffffffff7f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a6541633036117e75761236a7f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b9160405191829160208352600435956020840191612a61565b0390a2005b346102fd5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd5760043573ffffffffffffffffffffffffffffffffffffffff811681036102fd577fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806123fd6132ad565b925416911690810361032c575073ffffffffffffffffffffffffffffffffffffffff7f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd3091167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055600080f35b346102fd5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd577f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a6546040517ff724dad700000000000000000000000000000000000000000000000000000000815230600480830191909152356024820152906000908290604490829073ffffffffffffffffffffffffffffffffffffffff165afa9081156106ef5760009161253d575b6040516020808252819061114b908201856129bf565b3d8083833e61254c8183612bd3565b8101906020818303126125bd5780519067ffffffffffffffff82116125c1570181601f820112156125bd5780519261258384612ca7565b926125916040519485612bd3565b848452602085840101116125ba575061114b926125b4916020808501910161299c565b90612527565b80fd5b8280fd5b8380fd5b346102fd5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd576125fc612956565b60243567ffffffffffffffff81116102fd5761261c903690600401612a02565b909160443567ffffffffffffffff81116102fd5761263e903690600401612a02565b93909160643567ffffffffffffffff81116102fd576126d2936126686126da923690600401612a33565b9590916126ca6126766132ad565b966126a1887fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22612fb6565b7f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e8612993691612c5b565b983691612c5b565b943691612ce1565b9173ffffffffffffffffffffffffffffffffffffffff82169485156127fd57865190855182036103025760005b8281106127d35750505073ffffffffffffffffffffffffffffffffffffffff1690846000837f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb60405160408152806127746127668d6040840190612b10565b82810360208401528b612b10565b0390a43b61277e57005b611fb89160209160405193849283927fbc197c8100000000000000000000000000000000000000000000000000000000845260048401526000602484015260a06044840152611f88611f5860a485018b612b10565b806127f76127e36001938c613078565b516127ee838b613078565b519088866133d8565b01612707565b7f021149bd0000000000000000000000000000000000000000000000000000000060005260046000fd5b346102fd5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd5761114b6111377f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a4612eaf565b346102fd5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036102fd57611a3c602091612e00565b346102fd5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd57602061294e612924612956565b602435907f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e8612612d87565b604051908152f35b6004359073ffffffffffffffffffffffffffffffffffffffff821682036102fd57565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036102fd57565b60005b8381106129af5750506000910152565b818101518382015260200161299f565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936129fb8151809281875287808801910161299c565b0116010190565b9181601f840112156102fd5782359167ffffffffffffffff83116102fd576020808501948460051b0101116102fd57565b9181601f840112156102fd5782359167ffffffffffffffff83116102fd57602083818601950101116102fd57565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102fd5760043567ffffffffffffffff81116102fd5781612ae991600401612a02565b929092916024359067ffffffffffffffff82116102fd57612b0c91600401612a02565b9091565b906020808351928381520192019060005b818110612b2e5750505090565b8251845260209384019390920191600101612b21565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102fd5760043567ffffffffffffffff81116102fd5781612b8d91600401612a02565b9290929160243567ffffffffffffffff81116102fd5781612bb091600401612a02565b929092916044359067ffffffffffffffff82116102fd57612b0c91600401612a02565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117612c1457604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff8111612c145760051b60200190565b929190612c6781612c43565b93612c756040519586612bd3565b602085838152019160051b81019283116102fd57905b828210612c9757505050565b8135815260209182019101612c8b565b67ffffffffffffffff8111612c1457601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192612ced82612ca7565b91612cfb6040519384612bd3565b8294818452818301116102fd578281602093846000960137010152565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908115612d705773ffffffffffffffffffffffffffffffffffffffff161490565b5050600090565b91908110156117b85760051b0190565b909173ffffffffffffffffffffffffffffffffffffffff831615612dd65760005260205273ffffffffffffffffffffffffffffffffffffffff6040600020911660005260205260406000205490565b7fca2434a50000000000000000000000000000000000000000000000000000000060005260046000fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167fffffffff000000000000000000000000000000000000000000000000000000008114612ea9577f01ffc9a7000000000000000000000000000000000000000000000000000000008114612ea3576000527fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d60205260ff6040600020541690565b50600190565b50600090565b906040519160008154918260011c92600181168015612fac575b602085108114612f7f57848752869392918115612f3f5750600114612ef8575b50612ef692500383612bd3565b565b90506000929192526020600020906000915b818310612f23575050906020612ef69282010138612ee9565b6020919350806001915483858901015201910190918492612f0a565b60209350612ef69592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138612ee9565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693612ec9565b7f6d696e7465720000000000000000000000000000000000000000000000000000600052602052604060002073ffffffffffffffffffffffffffffffffffffffff821660005260205260ff60406000205416156130105750565b73ffffffffffffffffffffffffffffffffffffffff907f7aa72882000000000000000000000000000000000000000000000000000000006000527f6d696e74657200000000000000000000000000000000000000000000000000006004521660245260446000fd5b80518210156117b85760209160051b010190565b8181029291811591840414171561309f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83116102fd5760209260051b809284830137010190565b3573ffffffffffffffffffffffffffffffffffffffff811681036102fd5790565b94919092939473ffffffffffffffffffffffffffffffffffffffff82169384156127fd5761317187878573ffffffffffffffffffffffffffffffffffffffff956133d8565b1690836000837fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62604080518a81528b6020820152a43b6131b3575b5050505050565b61320e9160209160405193849283927ff23a6e6100000000000000000000000000000000000000000000000000000000845260048401526000602484015287604484015288606484015260a0608484015260a48301906129bf565b03816000865af19081156106ef577ff23a6e6100000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091613276575b50160361068d5780806131ac565b61328f915060203d6020116106e8576106da8183612bd3565b38613268565b908160209103126102fd575180151581036102fd5790565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156133c95732331480156133ce575b6133c9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c90803314908115613338575b5061333557503390565b90565b6040517f019a202800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201523360248201523060448201529150602090829060649082905afa9081156106ef576000916133aa575b503861332b565b6133c3915060203d602011610e8957610e7b8183612bd3565b386133a3565b503390565b50601836106132f4565b9091836133e6575b50505050565b8060005281602052604060002073ffffffffffffffffffffffffffffffffffffffff841660005260205260406000205493808501948086111561345c57505060005260205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052604060002055388080806133e0565b6040517f42fb00bc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86166004820152602481019390935260448301526064820152608490fd5b908160209103126102fd57517fffffffff00000000000000000000000000000000000000000000000000000000811681036102fd5790565b5473ffffffffffffffffffffffffffffffffffffffff1690811515806135ce575b613516575050565b602073ffffffffffffffffffffffffffffffffffffffff916044604051809481937fc617113400000000000000000000000000000000000000000000000000000000835230600484015216958660248301525afa9081156106ef576000916135af575b50156135825750565b7fede71dcc0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6135c8915060203d602011610e8957610e7b8183612bd3565b38613579565b50813b151561350e565b73ffffffffffffffffffffffffffffffffffffffff8083169084161492918315613603575b50505090565b600192935073ffffffffffffffffffffffffffffffffffffffff166000520160205273ffffffffffffffffffffffffffffffffffffffff6040600020911660005260205260ff604060002054163880806135fd565b91929084613667575050505050565b8160005282602052604060002073ffffffffffffffffffffffffffffffffffffffff82166000526020526040600020549085820391808310156137c3575073ffffffffffffffffffffffffffffffffffffffff851673ffffffffffffffffffffffffffffffffffffffff8216036136df575b506131ac565b8260005283602052604060002073ffffffffffffffffffffffffffffffffffffffff861660005260205260406000205495808701968088111561376557505060009283526020938452604080842073ffffffffffffffffffffffffffffffffffffffff9283168552808652818520939093559416825290915220553880808080806136d9565b6040517f42fb00bc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff881660048201526024810186905260448101919091526064810191909152608490fd5b6040517f03dee4c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92909216600483015260248201849052604482015260648101869052608490fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016801561395357323314801561395b575b613953578033149081156138b2575b50613881576000903690565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec3601903682116102fd5760009190565b6040517f019a20280000000000000000000000000000000000000000000000000000000081527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c60048201523360248201523060448201529150602090829060649082905afa9081156106ef57600091613934575b5038613875565b61394d915060203d602011610e8957610e7b8183612bd3565b3861392d565b506000903690565b506018361061386656fea2646970667358221220ddfb3f399e37e2392720998d8e941bcc1aee18c592ae446c7cc10f4c5bdb027564736f6c634300081e00337ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a47ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a5",
  "deployedBytecode": "0x6080604052600436101561001257600080fd5b60003560e01c8062fdd58e146128e857806301ffc9a71461288257806306fdde03146128275780630d6a5bbb146125c55780630e89341c1461246e578063114ba8ee1461236f578063162094c41461229f5780632a55205a146121ac5780632b4c9f161461213d5780632eb2c2d614611cfe5780632f2ff15d14611b7257806331e66e1e14611b245780634e1273f414611a46578063572b6c05146119fb5780635cfa92971461193157806361ba27da146118155780636706467b146116a457806373c8a958146114f45780638bb9c5bf146113855780638da5cb5b146113145780638dc251e3146111e757806391d148541461114f57806395d89b41146110dc578063a0c76f621461106b578063a22cb46514610f0b578063b0ccc31e14610e9a578063c3666c3614610c5d578063d539139314610c04578063d547741f14610a7b578063e1a8bf2c14610a3f578063e8ab9ccc14610833578063e985e9c51461077f578063f242432a1461044d578063f2fde38b146103595763f7ba94bd1461019c57600080fd5b346102fd576101aa36612aa0565b90917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806101eb6132ad565b925416911690810361032c57508181036103025760005b81811061020b57005b610216818387612d77565b3573ffffffffffffffffffffffffffffffffffffffff81168091036102fd57610240828587612d77565b35908147106102cb57600080809381935af13d156102c3573d9061026382612ca7565b916102716040519384612bd3565b82523d6000602084013e5b1561028a5750600101610202565b80511561029957602081519101fd5b7fd6bda2750000000000000000000000000000000000000000000000000000000060005260046000fd5b60609061027c565b50477fcf4791810000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b600080fd5b7f658253360000000000000000000000000000000000000000000000000000000060005260046000fd5b7f2ef4875e0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b346102fd5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd57610390612956565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc906103ba6132ad565b9073ffffffffffffffffffffffffffffffffffffffff80845416921682810361032c575073ffffffffffffffffffffffffffffffffffffffff16918282036103fe57005b827fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b346102fd5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd57610484612956565b61048c612979565b604435906064359260843567ffffffffffffffff81116102fd576104b4903690600401612a33565b926104bd6132ad565b937f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd308573ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff82160361076f575b505073ffffffffffffffffffffffffffffffffffffffff8216947f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e86128615610745576105608287836135d8565b156106fb5773ffffffffffffffffffffffffffffffffffffffff916105898a8a878a8796613658565b169416918583867fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62604080518c81528d6020820152a43b6105c657005b6020926105d4913691612ce1565b9261062a60405194859384937ff23a6e610000000000000000000000000000000000000000000000000000000085526004850152602484015287604484015288606484015260a0608484015260a48301906129bf565b03816000865af19081156106ef577ff23a6e6100000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916106c0575b50160361068d57005b7f40f39d380000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b6106e2915060203d6020116106e8575b6106da8183612bd3565b8101906134b5565b86610684565b503d6106d0565b6040513d6000823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff8681847f05bbb9c400000000000000000000000000000000000000000000000000000000600052166004521660245260446000fd5b7fb5e890150000000000000000000000000000000000000000000000000000000060005260046000fd5b610778916134ed565b8785610514565b346102fd5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd576107b6612956565b73ffffffffffffffffffffffffffffffffffffffff6107d3612979565b91166000527f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e861360205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b346102fd5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd5760043567ffffffffffffffff81116102fd57610882903690600401612a02565b60243567ffffffffffffffff81116102fd576108a2903690600401612a02565b929060443567ffffffffffffffff81116102fd576108c4903690600401612a02565b93909160643567ffffffffffffffff81116102fd576108e7903690600401612a33565b9390916108f26132ad565b9761091d897fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22612fb6565b7f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e86129461094881612c43565b97610956604051998a612bd3565b818952602089019160051b8101903682116102fd57915b818310610a12575050509161098b6109939261099b95943691612c5b565b973691612c5b565b933691612ce1565b9183519480518614801590610a07575b6103025760005b8681106109bb57005b80610a018673ffffffffffffffffffffffffffffffffffffffff6109e16001958b613078565b51166109ed8487613078565b516109f88589613078565b51918d8a61312c565b016109b2565b5081518614156109ab565b823573ffffffffffffffffffffffffffffffffffffffff811681036102fd5781526020928301920161096d565b346102fd5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd576020604051620186a08152f35b346102fd5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd57600435610ab5612979565b610abd6132ad565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361032c57507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b228160005280602052604060002073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff60406000205416610b6f57005b60008281526020918252604080822073ffffffffffffffffffffffffffffffffffffffff9586168084529084529181902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905580519384529183015291909216908201527ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080606081015b0390a1005b346102fd5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd5760206040517f6d696e74657200000000000000000000000000000000000000000000000000008152f35b346102fd57610c6b36612b44565b9094929390917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610cb06132ad565b925416911690810361032c5750808214801590610e90575b6103025760005b828110610cd857005b73ffffffffffffffffffffffffffffffffffffffff610d00610cfb83858a612d77565b61310b565b166040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f80ac58cd000000000000000000000000000000000000000000000000000000006004820152602081602481855afa9081156106ef57600091610e62575b5015610e35575073ffffffffffffffffffffffffffffffffffffffff610d8f610cfb83858a612d77565b1690610d9f610cfb828689612d77565b91610dab82878b612d77565b3592813b156102fd57606473ffffffffffffffffffffffffffffffffffffffff916000809460405197889586947f42842e0e00000000000000000000000000000000000000000000000000000000865230600487015216602485015260448401525af19182156106ef57600192610e24575b5001610ccf565b6000610e2f91612bd3565b88610e1d565b7f986b9f1f0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b610e83915060203d8111610e89575b610e7b8183612bd3565b810190613295565b89610d65565b503d610e71565b5082821415610cc8565b346102fd5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd57602073ffffffffffffffffffffffffffffffffffffffff7f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd305416604051908152f35b346102fd5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd57610f42612956565b60243590811515918281036102fd5761103c575b73ffffffffffffffffffffffffffffffffffffffff80610f746132ad565b1691169181831461100e5760207f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3191836000527f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e86138252604060002085600052825260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff8316179055604051908152a3005b507ffb0fdf610000000000000000000000000000000000000000000000000000000060005260045260246000fd5b611066817f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd306134ed565b610f56565b346102fd5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd57602073ffffffffffffffffffffffffffffffffffffffff7f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a65416604051908152f35b346102fd5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd5761114b6111377f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a5612eaf565b6040519182916020835260208301906129bf565b0390f35b346102fd5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd57611186612979565b7fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b2260043560005260205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b346102fd5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd5761121e612956565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff8061125d6132ad565b925416911690810361032c57507f2c0cf10337caabbd02dcf226f05f5fd19a0919a41a8df8958c39b800078268579073ffffffffffffffffffffffffffffffffffffffff8116156112ea5773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055600080f35b7f16de0c800000000000000000000000000000000000000000000000000000000060005260046000fd5b346102fd5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd57602073ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc5416604051908152f35b346102fd5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd577fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b226004356113e06132ad565b908060005282602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff60406000205416156114ac5760008181526020938452604080822073ffffffffffffffffffffffffffffffffffffffff949094168083529385529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558051918252928101829052918201527ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b908060608101610bff565b73ffffffffffffffffffffffffffffffffffffffff92507f7aa72882000000000000000000000000000000000000000000000000000000006000526004521660245260446000fd5b346102fd5761150236612b44565b929392917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806115456132ad565b925416911690810361032c575080841480159061169a575b6103025760005b84811061156d57005b611578818388612d77565b3573ffffffffffffffffffffffffffffffffffffffff8116908181036102fd5760006020916115ab610cfb868b8e612d77565b826116156116416115bd898d8d612d77565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000089820190815273ffffffffffffffffffffffffffffffffffffffff9096166024820152903560448201529182906064820190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612bd3565b51925af1156106ef576000513d6116915750803b155b6116645750600101611564565b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b60011415611657565b508284141561155d565b346102fd576116b236612aa0565b8083949293036103025773ffffffffffffffffffffffffffffffffffffffff7f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a6541633036117e757916000907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301915b85811061172e57005b848110156117b8578060051b820135838112156102fd5782019081359167ffffffffffffffff83116102fd576020019180360383136102fd577f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b600193611796848b8a612d77565b35926117af604051928392602084526020840191612a61565b0390a201611725565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22060671000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b346102fd5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd576004357fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806118866132ad565b925416911690810361032c57507f2c0cf10337caabbd02dcf226f05f5fd19a0919a41a8df8958c39b8000782685790620186a0811161190457815473ffffffffffffffffffffffffffffffffffffffff1660a09190911b7fffffffffffffffffffffffff000000000000000000000000000000000000000016179055005b7fac0404080000000000000000000000000000000000000000000000000000000060005260045260246000fd5b346102fd5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd57611968612956565b6064359067ffffffffffffffff82116102fd5761198c6119f9923690600401612a33565b6119eb6119976132ad565b926119c2847fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22612fb6565b7f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e8612923691612ce1565b92604435926024359261312c565b005b346102fd5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd576020611a3c611a37612956565b612d18565b6040519015158152f35b346102fd57611a5436612aa0565b9192917f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e8612919080850361030257611a8a85612c43565b94611a986040519687612bd3565b8086527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611ac582612c43565b0136602088013760005b818110611aec576040516020808252819061114b9082018a612b10565b80611b13611b00610cfb600194868b612d77565b611b0b838789612d77565b359088612d87565b611b1d828a613078565b5201611acf565b346102fd5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd57611b5b61381f565b61114b604051928392602084526020840191612a61565b346102fd5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd57600435611bac612979565b611bb46132ad565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361032c57507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b228160005280602052604060002073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff6040600020541615611c6757005b60008281526020918252604080822073ffffffffffffffffffffffffffffffffffffffff9586168084529084529181902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580519384529183015291909216908201527f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d908060608101610bff565b346102fd5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd57611d35612956565b611d3d612979565b60443567ffffffffffffffff81116102fd57611d5d903690600401612a02565b929060643567ffffffffffffffff81116102fd57611d7f903690600401612a02565b9360843567ffffffffffffffff81116102fd57611da0903690600401612a33565b939091611dab6132ad565b957f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd308773ffffffffffffffffffffffffffffffffffffffff831673ffffffffffffffffffffffffffffffffffffffff82160361212d575b505073ffffffffffffffffffffffffffffffffffffffff8216967f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e8612881561074557898b0361030257611e558284836135d8565b156120e35760005b8b81106120b4575050928992888a8897947f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb73ffffffffffffffffffffffffffffffffffffffff809b99169a8b9216988993611ed960405192839260408452611ecb8d60408601908d6130ce565b9184830360208601526130ce565b0390a43b611ee357005b602094611ef8611f0092611f08953691612c5b565b993691612c5b565b953691612ce1565b92611fb860405194859384937fbc197c810000000000000000000000000000000000000000000000000000000085526004850152602484015260a06044840152611f88611f5860a485018b612b10565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc85820301606486015288612b10565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8483030160848501526129bf565b03816000875af19081156106ef577fbc197c8100000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091612095575b50160361201b57005b612091906120616040519485947fc287817e0000000000000000000000000000000000000000000000000000000086526004860152606060248601526064850190612b10565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc848303016044850152612b10565b0390fd5b6120ae915060203d6020116106e8576106da8183612bd3565b86612012565b806120dd8c6120d38f946120cb816001978d612d77565b35928d612d77565b3590888887613658565b01611e5d565b73ffffffffffffffffffffffffffffffffffffffff8381847f05bbb9c400000000000000000000000000000000000000000000000000000000600052166004521660245260446000fd5b612136916134ed565b8987611e02565b346102fd5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102fd5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd5773ffffffffffffffffffffffffffffffffffffffff6024357f2c0cf10337caabbd02dcf226f05f5fd19a0919a41a8df8958c39b8000782685754908160a01c9080158015612297575b1561226157505061114b60005b60405193849316836020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b61114b91620186a08210156122845761227e90620186a09261308c565b04612231565b620186a0612292920461308c565b612231565b508115612224565b346102fd5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd5760243567ffffffffffffffff81116102fd576122ee903690600401612a33565b9073ffffffffffffffffffffffffffffffffffffffff7f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a6541633036117e75761236a7f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b9160405191829160208352600435956020840191612a61565b0390a2005b346102fd5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd5760043573ffffffffffffffffffffffffffffffffffffffff811681036102fd577fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806123fd6132ad565b925416911690810361032c575073ffffffffffffffffffffffffffffffffffffffff7f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd3091167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055600080f35b346102fd5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd577f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a6546040517ff724dad700000000000000000000000000000000000000000000000000000000815230600480830191909152356024820152906000908290604490829073ffffffffffffffffffffffffffffffffffffffff165afa9081156106ef5760009161253d575b6040516020808252819061114b908201856129bf565b3d8083833e61254c8183612bd3565b8101906020818303126125bd5780519067ffffffffffffffff82116125c1570181601f820112156125bd5780519261258384612ca7565b926125916040519485612bd3565b848452602085840101116125ba575061114b926125b4916020808501910161299c565b90612527565b80fd5b8280fd5b8380fd5b346102fd5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd576125fc612956565b60243567ffffffffffffffff81116102fd5761261c903690600401612a02565b909160443567ffffffffffffffff81116102fd5761263e903690600401612a02565b93909160643567ffffffffffffffff81116102fd576126d2936126686126da923690600401612a33565b9590916126ca6126766132ad565b966126a1887fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22612fb6565b7f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e8612993691612c5b565b983691612c5b565b943691612ce1565b9173ffffffffffffffffffffffffffffffffffffffff82169485156127fd57865190855182036103025760005b8281106127d35750505073ffffffffffffffffffffffffffffffffffffffff1690846000837f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb60405160408152806127746127668d6040840190612b10565b82810360208401528b612b10565b0390a43b61277e57005b611fb89160209160405193849283927fbc197c8100000000000000000000000000000000000000000000000000000000845260048401526000602484015260a06044840152611f88611f5860a485018b612b10565b806127f76127e36001938c613078565b516127ee838b613078565b519088866133d8565b01612707565b7f021149bd0000000000000000000000000000000000000000000000000000000060005260046000fd5b346102fd5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd5761114b6111377f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a4612eaf565b346102fd5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036102fd57611a3c602091612e00565b346102fd5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102fd57602061294e612924612956565b602435907f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e8612612d87565b604051908152f35b6004359073ffffffffffffffffffffffffffffffffffffffff821682036102fd57565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036102fd57565b60005b8381106129af5750506000910152565b818101518382015260200161299f565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936129fb8151809281875287808801910161299c565b0116010190565b9181601f840112156102fd5782359167ffffffffffffffff83116102fd576020808501948460051b0101116102fd57565b9181601f840112156102fd5782359167ffffffffffffffff83116102fd57602083818601950101116102fd57565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102fd5760043567ffffffffffffffff81116102fd5781612ae991600401612a02565b929092916024359067ffffffffffffffff82116102fd57612b0c91600401612a02565b9091565b906020808351928381520192019060005b818110612b2e5750505090565b8251845260209384019390920191600101612b21565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102fd5760043567ffffffffffffffff81116102fd5781612b8d91600401612a02565b9290929160243567ffffffffffffffff81116102fd5781612bb091600401612a02565b929092916044359067ffffffffffffffff82116102fd57612b0c91600401612a02565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117612c1457604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff8111612c145760051b60200190565b929190612c6781612c43565b93612c756040519586612bd3565b602085838152019160051b81019283116102fd57905b828210612c9757505050565b8135815260209182019101612c8b565b67ffffffffffffffff8111612c1457601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192612ced82612ca7565b91612cfb6040519384612bd3565b8294818452818301116102fd578281602093846000960137010152565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908115612d705773ffffffffffffffffffffffffffffffffffffffff161490565b5050600090565b91908110156117b85760051b0190565b909173ffffffffffffffffffffffffffffffffffffffff831615612dd65760005260205273ffffffffffffffffffffffffffffffffffffffff6040600020911660005260205260406000205490565b7fca2434a50000000000000000000000000000000000000000000000000000000060005260046000fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167fffffffff000000000000000000000000000000000000000000000000000000008114612ea9577f01ffc9a7000000000000000000000000000000000000000000000000000000008114612ea3576000527fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d60205260ff6040600020541690565b50600190565b50600090565b906040519160008154918260011c92600181168015612fac575b602085108114612f7f57848752869392918115612f3f5750600114612ef8575b50612ef692500383612bd3565b565b90506000929192526020600020906000915b818310612f23575050906020612ef69282010138612ee9565b6020919350806001915483858901015201910190918492612f0a565b60209350612ef69592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138612ee9565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693612ec9565b7f6d696e7465720000000000000000000000000000000000000000000000000000600052602052604060002073ffffffffffffffffffffffffffffffffffffffff821660005260205260ff60406000205416156130105750565b73ffffffffffffffffffffffffffffffffffffffff907f7aa72882000000000000000000000000000000000000000000000000000000006000527f6d696e74657200000000000000000000000000000000000000000000000000006004521660245260446000fd5b80518210156117b85760209160051b010190565b8181029291811591840414171561309f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83116102fd5760209260051b809284830137010190565b3573ffffffffffffffffffffffffffffffffffffffff811681036102fd5790565b94919092939473ffffffffffffffffffffffffffffffffffffffff82169384156127fd5761317187878573ffffffffffffffffffffffffffffffffffffffff956133d8565b1690836000837fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62604080518a81528b6020820152a43b6131b3575b5050505050565b61320e9160209160405193849283927ff23a6e6100000000000000000000000000000000000000000000000000000000845260048401526000602484015287604484015288606484015260a0608484015260a48301906129bf565b03816000865af19081156106ef577ff23a6e6100000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091613276575b50160361068d5780806131ac565b61328f915060203d6020116106e8576106da8183612bd3565b38613268565b908160209103126102fd575180151581036102fd5790565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001680156133c95732331480156133ce575b6133c9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c90803314908115613338575b5061333557503390565b90565b6040517f019a202800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201523360248201523060448201529150602090829060649082905afa9081156106ef576000916133aa575b503861332b565b6133c3915060203d602011610e8957610e7b8183612bd3565b386133a3565b503390565b50601836106132f4565b9091836133e6575b50505050565b8060005281602052604060002073ffffffffffffffffffffffffffffffffffffffff841660005260205260406000205493808501948086111561345c57505060005260205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052604060002055388080806133e0565b6040517f42fb00bc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86166004820152602481019390935260448301526064820152608490fd5b908160209103126102fd57517fffffffff00000000000000000000000000000000000000000000000000000000811681036102fd5790565b5473ffffffffffffffffffffffffffffffffffffffff1690811515806135ce575b613516575050565b602073ffffffffffffffffffffffffffffffffffffffff916044604051809481937fc617113400000000000000000000000000000000000000000000000000000000835230600484015216958660248301525afa9081156106ef576000916135af575b50156135825750565b7fede71dcc0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6135c8915060203d602011610e8957610e7b8183612bd3565b38613579565b50813b151561350e565b73ffffffffffffffffffffffffffffffffffffffff8083169084161492918315613603575b50505090565b600192935073ffffffffffffffffffffffffffffffffffffffff166000520160205273ffffffffffffffffffffffffffffffffffffffff6040600020911660005260205260ff604060002054163880806135fd565b91929084613667575050505050565b8160005282602052604060002073ffffffffffffffffffffffffffffffffffffffff82166000526020526040600020549085820391808310156137c3575073ffffffffffffffffffffffffffffffffffffffff851673ffffffffffffffffffffffffffffffffffffffff8216036136df575b506131ac565b8260005283602052604060002073ffffffffffffffffffffffffffffffffffffffff861660005260205260406000205495808701968088111561376557505060009283526020938452604080842073ffffffffffffffffffffffffffffffffffffffff9283168552808652818520939093559416825290915220553880808080806136d9565b6040517f42fb00bc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff881660048201526024810186905260448101919091526064810191909152608490fd5b6040517f03dee4c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92909216600483015260248201849052604482015260648101869052608490fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016801561395357323314801561395b575b613953578033149081156138b2575b50613881576000903690565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec3601903682116102fd5760009190565b6040517f019a20280000000000000000000000000000000000000000000000000000000081527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c60048201523360248201523060448201529150602090829060649082905afa9081156106ef57600091613934575b5038613875565b61394d915060203d602011610e8957610e7b8183612bd3565b3861392d565b506000903690565b506018361061386656fea2646970667358221220ddfb3f399e37e2392720998d8e941bcc1aee18c592ae446c7cc10f4c5bdb027564736f6c634300081e0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
