{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC1155Full",
  "sourceName": "contracts/token/ERC1155/preset/ERC1155Full.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": [
        {
          "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": "0x60a0604052346105dc57613e8c80380380610019816105e1565b928339810160a0828203126105dc5781516001600160401b0381116105dc5781610044918401610606565b602083015190916001600160401b0382116105dc57610064918401610606565b60408301519092906001600160a01b038116908190036105dc5760608201516001600160a01b03811692908390036105dc5760800151926001600160a01b03841684036105dc573361057d575b7fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d60208190527fa53d5a615b1d5279f1a6647c5c0f31bf064b1e70af135676a4a96aeaeb691a2f805460ff199081166001908117909255636cdb3d1360e11b6000527f55f2baa086bcadb68563d14bf0ae4964705cc6bc8fd476a834dc8cb4e83cc92a805490911690911790557f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd3080546001600160a01b0319169094179093558051906001600160401b03821161045357600080516020613e4c8339815191525490600182811c92168015610573575b60208310146104335781601f8493116104f6575b50602090601f831160011461047457600092610469575b50508160011b916000199060031b1c191617600080516020613e4c833981519152555b83516001600160401b03811161045357600080516020613e6c83398151915254600181811c91168015610449575b602082101461043357601f81116103c1575b50602094601f821160011461034057948192939495600092610335575b50508160011b916000199060031b1c191617600080516020613e6c833981519152555b7f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a680546001600160a01b0319169190911790556303a24d0760e21b60009081526020919091526040808220805460ff199081166001908117909255631464324b60e21b84528284208054821683179055633a2ae73360e21b8452828420805482168317905563152a902d60e11b845292829020805490931617909155608091909152516137da9081610672823960805181818161212601528181612ccb01526132600152f35b01519050388061024c565b601f19821695600080516020613e6c833981519152600052806000209160005b8881106103a957508360019596979810610390575b505050811b01600080516020613e6c8339815191525561026f565b015160001960f88460031b161c19169055388080610375565b91926020600181928685015181550194019201610360565b600080516020613e6c8339815191526000527fc39bad3db5d56dccf839bc8a79759b3192b97757d993f7663c9998f4fbefc8a1601f830160051c81019160208410610429575b601f0160051c01905b81811061041d575061022f565b60008155600101610410565b9091508190610407565b634e487b7160e01b600052602260045260246000fd5b90607f169061021d565b634e487b7160e01b600052604160045260246000fd5b0151905038806101cc565b600080516020613e4c83398151915260009081528281209350601f198516905b8181106104de57509084600195949392106104c5575b505050811b01600080516020613e4c833981519152556101ef565b015160001960f88460031b161c191690553880806104aa565b92936020600181928786015181550195019301610494565b600080516020613e4c8339815191526000529091507f565de0cfbb8a3f70c938db1afc5562690ff7c55773c7234a649300f58e3b30bc601f840160051c81019160208510610569575b90601f859493920160051c01905b81811061055a57506101b5565b6000815584935060010161054d565b909150819061053f565b91607f16916101a1565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc80546001600160a01b0319163390811790915560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a36100b1565b600080fd5b6040519190601f01601f191682016001600160401b0381118382101761045357604052565b81601f820112156105dc578051906001600160401b03821161045357610635601f8301601f19166020016105e1565b92828452602083830101116105dc5760005b82811061065c57505060206000918301015290565b8060208092840101518282870101520161064756fe6080604052600436101561001257600080fd5b60003560e01c8062fdd58e1461287d57806301ffc9a71461281757806306fdde03146127bc5780630d6a5bbb1461255a5780630e89341c14612403578063114ba8ee14612304578063162094c41461223d5780632a55205a1461214a5780632b4c9f16146120db5780632eb2c2d614611c9c5780632f2ff15d14611b105780634e1273f414611a32578063572b6c05146119e75780635cfa92971461191d57806361ba27da146118015780636706467b1461169957806373c8a958146114e95780638bb9c5bf1461137a5780638da5cb5b146113095780638dc251e3146111dc57806391d148541461114457806395d89b41146110d1578063a0c76f6214611060578063a22cb46514610f00578063b0ccc31e14610e8f578063c3666c3614610c52578063d539139314610bf9578063d547741f14610a70578063e1a8bf2c14610a34578063e8ab9ccc14610828578063e985e9c514610774578063f242432a14610442578063f2fde38b1461034e5763f7ba94bd1461019157600080fd5b346102f25761019f366129f6565b90917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806101e0613249565b925416911690810361032157508181036102f75760005b81811061020057005b61020b818387612d13565b3573ffffffffffffffffffffffffffffffffffffffff81168091036102f257610235828587612d13565b35908147106102c057600080809381935af13d156102b8573d9061025882612bfd565b916102666040519384612b29565b82523d6000602084013e5b1561027f57506001016101f7565b80511561028e57602081519101fd5b7fd6bda2750000000000000000000000000000000000000000000000000000000060005260046000fd5b606090610271565b50477fcf4791810000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b600080fd5b7f658253360000000000000000000000000000000000000000000000000000000060005260046000fd5b7f2ef4875e0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b346102f25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f2576103856128eb565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc906103af613249565b9073ffffffffffffffffffffffffffffffffffffffff808454169216828103610321575073ffffffffffffffffffffffffffffffffffffffff16918282036103f357005b827fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b346102f25760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f2576104796128eb565b61048161290e565b604435906064359260843567ffffffffffffffff81116102f2576104a99036906004016129c8565b926104b2613249565b937f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd308573ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff821603610764575b505073ffffffffffffffffffffffffffffffffffffffff8216947f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e8612861561073a5761055582878361355d565b156106f05773ffffffffffffffffffffffffffffffffffffffff9161057e8a8a878a87966135dd565b169416918583867fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62604080518c81528d6020820152a43b6105bb57005b6020926105c9913691612c37565b9261061f60405194859384937ff23a6e610000000000000000000000000000000000000000000000000000000085526004850152602484015287604484015288606484015260a0608484015260a4830190612954565b03816000865af19081156106e4577ff23a6e6100000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916106b5575b50160361068257005b7f40f39d380000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b6106d7915060203d6020116106dd575b6106cf8183612b29565b81019061343a565b86610679565b503d6106c5565b6040513d6000823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff8681847f05bbb9c400000000000000000000000000000000000000000000000000000000600052166004521660245260446000fd5b7fb5e890150000000000000000000000000000000000000000000000000000000060005260046000fd5b61076d91613472565b8785610509565b346102f25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f2576107ab6128eb565b73ffffffffffffffffffffffffffffffffffffffff6107c861290e565b91166000527f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e861360205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b346102f25760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f25760043567ffffffffffffffff81116102f257610877903690600401612997565b60243567ffffffffffffffff81116102f257610897903690600401612997565b929060443567ffffffffffffffff81116102f2576108b9903690600401612997565b93909160643567ffffffffffffffff81116102f2576108dc9036906004016129c8565b9390916108e7613249565b97610912897fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22612f52565b7f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e86129461093d81612b99565b9761094b604051998a612b29565b818952602089019160051b8101903682116102f257915b818310610a0757505050916109806109889261099095943691612bb1565b973691612bb1565b933691612c37565b91835194805186148015906109fc575b6102f75760005b8681106109b057005b806109f68673ffffffffffffffffffffffffffffffffffffffff6109d66001958b613014565b51166109e28487613014565b516109ed8589613014565b51918d8a6130c8565b016109a7565b5081518614156109a0565b823573ffffffffffffffffffffffffffffffffffffffff811681036102f257815260209283019201610962565b346102f25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f2576020604051620186a08152f35b346102f25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f257600435610aaa61290e565b610ab2613249565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361032157507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b228160005280602052604060002073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff60406000205416610b6457005b60008281526020918252604080822073ffffffffffffffffffffffffffffffffffffffff9586168084529084529181902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905580519384529183015291909216908201527ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080606081015b0390a1005b346102f25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f25760206040517f6d696e74657200000000000000000000000000000000000000000000000000008152f35b346102f257610c6036612a9a565b9094929390917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610ca5613249565b92541691169081036103215750808214801590610e85575b6102f75760005b828110610ccd57005b73ffffffffffffffffffffffffffffffffffffffff610cf5610cf083858a612d13565b6130a7565b166040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f80ac58cd000000000000000000000000000000000000000000000000000000006004820152602081602481855afa9081156106e457600091610e57575b5015610e2a575073ffffffffffffffffffffffffffffffffffffffff610d84610cf083858a612d13565b1690610d94610cf0828689612d13565b91610da082878b612d13565b3592813b156102f257606473ffffffffffffffffffffffffffffffffffffffff916000809460405197889586947f42842e0e00000000000000000000000000000000000000000000000000000000865230600487015216602485015260448401525af19182156106e457600192610e19575b5001610cc4565b6000610e2491612b29565b88610e12565b7f986b9f1f0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b610e78915060203d8111610e7e575b610e708183612b29565b810190613231565b89610d5a565b503d610e66565b5082821415610cbd565b346102f25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f257602073ffffffffffffffffffffffffffffffffffffffff7f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd305416604051908152f35b346102f25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f257610f376128eb565b60243590811515918281036102f257611031575b73ffffffffffffffffffffffffffffffffffffffff80610f69613249565b169116918183146110035760207f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3191836000527f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e86138252604060002085600052825260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff8316179055604051908152a3005b507ffb0fdf610000000000000000000000000000000000000000000000000000000060005260045260246000fd5b61105b817f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd30613472565b610f4b565b346102f25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f257602073ffffffffffffffffffffffffffffffffffffffff7f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a65416604051908152f35b346102f25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f25761114061112c7f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a5612e4b565b604051918291602083526020830190612954565b0390f35b346102f25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f25761117b61290e565b7fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b2260043560005260205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b346102f25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f2576112136128eb565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80611252613249565b925416911690810361032157507f2c0cf10337caabbd02dcf226f05f5fd19a0919a41a8df8958c39b800078268579073ffffffffffffffffffffffffffffffffffffffff8116156112df5773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055600080f35b7f16de0c800000000000000000000000000000000000000000000000000000000060005260046000fd5b346102f25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f257602073ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc5416604051908152f35b346102f25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f2577fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b226004356113d5613249565b908060005282602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff60406000205416156114a15760008181526020938452604080822073ffffffffffffffffffffffffffffffffffffffff949094168083529385529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558051918252928101829052918201527ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b908060608101610bf4565b73ffffffffffffffffffffffffffffffffffffffff92507f7aa72882000000000000000000000000000000000000000000000000000000006000526004521660245260446000fd5b346102f2576114f736612a9a565b929392917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff8061153a613249565b9254169116908103610321575080841480159061168f575b6102f75760005b84811061156257005b61156d818388612d13565b3573ffffffffffffffffffffffffffffffffffffffff8116908181036102f25760006020916115a0610cf0868b8e612d13565b8261160a6116366115b2898d8d612d13565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000089820190815273ffffffffffffffffffffffffffffffffffffffff9096166024820152903560448201529182906064820190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612b29565b51925af1156106e4576000513d6116865750803b155b6116595750600101611559565b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6001141561164c565b5082841415611552565b346102f2576116a7366129f6565b8083949293036102f75773ffffffffffffffffffffffffffffffffffffffff7f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a6541633036117d357916000907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301915b85811061172357005b848110156117a4578060051b820135838112156102f25782019081359167ffffffffffffffff83116102f25760200182360381136102f2577f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b60019361178a848b8a612d13565b359261179b60405192839283612c6e565b0390a20161171a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22060671000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b346102f25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f2576004357fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80611872613249565b925416911690810361032157507f2c0cf10337caabbd02dcf226f05f5fd19a0919a41a8df8958c39b8000782685790620186a081116118f057815473ffffffffffffffffffffffffffffffffffffffff1660a09190911b7fffffffffffffffffffffffff000000000000000000000000000000000000000016179055005b7fac0404080000000000000000000000000000000000000000000000000000000060005260045260246000fd5b346102f25760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f2576119546128eb565b6064359067ffffffffffffffff82116102f2576119786119e59236906004016129c8565b6119d7611983613249565b926119ae847fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22612f52565b7f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e8612923691612c37565b9260443592602435926130c8565b005b346102f25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f2576020611a28611a236128eb565b612cb4565b6040519015158152f35b346102f257611a40366129f6565b9192917f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e861291908085036102f757611a7685612b99565b94611a846040519687612b29565b8086527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611ab182612b99565b0136602088013760005b818110611ad857604051602080825281906111409082018a612a66565b80611aff611aec610cf0600194868b612d13565b611af7838789612d13565b359088612d23565b611b09828a613014565b5201611abb565b346102f25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f257600435611b4a61290e565b611b52613249565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361032157507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b228160005280602052604060002073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff6040600020541615611c0557005b60008281526020918252604080822073ffffffffffffffffffffffffffffffffffffffff9586168084529084529181902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580519384529183015291909216908201527f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d908060608101610bf4565b346102f25760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f257611cd36128eb565b611cdb61290e565b60443567ffffffffffffffff81116102f257611cfb903690600401612997565b929060643567ffffffffffffffff81116102f257611d1d903690600401612997565b9360843567ffffffffffffffff81116102f257611d3e9036906004016129c8565b939091611d49613249565b957f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd308773ffffffffffffffffffffffffffffffffffffffff831673ffffffffffffffffffffffffffffffffffffffff8216036120cb575b505073ffffffffffffffffffffffffffffffffffffffff8216967f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e8612881561073a57898b036102f757611df382848361355d565b156120815760005b8b8110612052575050928992888a8897947f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb73ffffffffffffffffffffffffffffffffffffffff809b99169a8b9216988993611e7760405192839260408452611e698d60408601908d61306a565b91848303602086015261306a565b0390a43b611e8157005b602094611e96611e9e92611ea6953691612bb1565b993691612bb1565b953691612c37565b92611f5660405194859384937fbc197c810000000000000000000000000000000000000000000000000000000085526004850152602484015260a06044840152611f26611ef660a485018b612a66565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc85820301606486015288612a66565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc848303016084850152612954565b03816000875af19081156106e4577fbc197c8100000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091612033575b501603611fb957005b61202f90611fff6040519485947fc287817e0000000000000000000000000000000000000000000000000000000086526004860152606060248601526064850190612a66565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc848303016044850152612a66565b0390fd5b61204c915060203d6020116106dd576106cf8183612b29565b86611fb0565b8061207b8c6120718f94612069816001978d612d13565b35928d612d13565b35908888876135dd565b01611dfb565b73ffffffffffffffffffffffffffffffffffffffff8381847f05bbb9c400000000000000000000000000000000000000000000000000000000600052166004521660245260446000fd5b6120d491613472565b8987611da0565b346102f25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102f25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f25773ffffffffffffffffffffffffffffffffffffffff6024357f2c0cf10337caabbd02dcf226f05f5fd19a0919a41a8df8958c39b8000782685754908160a01c9080158015612235575b156121ff57505061114060005b60405193849316836020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b61114091620186a08210156122225761221c90620186a092613028565b046121cf565b620186a06122309204613028565b6121cf565b5081156121c2565b346102f25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f25760243567ffffffffffffffff81116102f25761228c9036906004016129c8565b73ffffffffffffffffffffffffffffffffffffffff7f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a6541633036117d3576122ff7f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b916040519182916004359583612c6e565b0390a2005b346102f25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f25760043573ffffffffffffffffffffffffffffffffffffffff811681036102f2577fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80612392613249565b9254169116908103610321575073ffffffffffffffffffffffffffffffffffffffff7f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd3091167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055600080f35b346102f25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f2577f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a6546040517ff724dad700000000000000000000000000000000000000000000000000000000815230600480830191909152356024820152906000908290604490829073ffffffffffffffffffffffffffffffffffffffff165afa9081156106e4576000916124d2575b6040516020808252819061114090820185612954565b3d8083833e6124e18183612b29565b8101906020818303126125525780519067ffffffffffffffff8211612556570181601f820112156125525780519261251884612bfd565b926125266040519485612b29565b8484526020858401011161254f5750611140926125499160208085019101612931565b906124bc565b80fd5b8280fd5b8380fd5b346102f25760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f2576125916128eb565b60243567ffffffffffffffff81116102f2576125b1903690600401612997565b909160443567ffffffffffffffff81116102f2576125d3903690600401612997565b93909160643567ffffffffffffffff81116102f257612667936125fd61266f9236906004016129c8565b95909161265f61260b613249565b96612636887fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22612f52565b7f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e8612993691612bb1565b983691612bb1565b943691612c37565b9173ffffffffffffffffffffffffffffffffffffffff821694851561279257865190855182036102f75760005b8281106127685750505073ffffffffffffffffffffffffffffffffffffffff1690846000837f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb60405160408152806127096126fb8d6040840190612a66565b82810360208401528b612a66565b0390a43b61271357005b611f569160209160405193849283927fbc197c8100000000000000000000000000000000000000000000000000000000845260048401526000602484015260a06044840152611f26611ef660a485018b612a66565b8061278c6127786001938c613014565b51612783838b613014565b5190888661335d565b0161269c565b7f021149bd0000000000000000000000000000000000000000000000000000000060005260046000fd5b346102f25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f25761114061112c7f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a4612e4b565b346102f25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f2576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036102f257611a28602091612d9c565b346102f25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f25760206128e36128b96128eb565b602435907f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e8612612d23565b604051908152f35b6004359073ffffffffffffffffffffffffffffffffffffffff821682036102f257565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036102f257565b60005b8381106129445750506000910152565b8181015183820152602001612934565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361299081518092818752878088019101612931565b0116010190565b9181601f840112156102f25782359167ffffffffffffffff83116102f2576020808501948460051b0101116102f257565b9181601f840112156102f25782359167ffffffffffffffff83116102f257602083818601950101116102f257565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102f25760043567ffffffffffffffff81116102f25781612a3f91600401612997565b929092916024359067ffffffffffffffff82116102f257612a6291600401612997565b9091565b906020808351928381520192019060005b818110612a845750505090565b8251845260209384019390920191600101612a77565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102f25760043567ffffffffffffffff81116102f25781612ae391600401612997565b9290929160243567ffffffffffffffff81116102f25781612b0691600401612997565b929092916044359067ffffffffffffffff82116102f257612a6291600401612997565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117612b6a57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff8111612b6a5760051b60200190565b929190612bbd81612b99565b93612bcb6040519586612b29565b602085838152019160051b81019283116102f257905b828210612bed57505050565b8135815260209182019101612be1565b67ffffffffffffffff8111612b6a57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192612c4382612bfd565b91612c516040519384612b29565b8294818452818301116102f2578281602093846000960137010152565b90601f836040947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093602086528160208701528686013760008582860101520116010190565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908115612d0c5773ffffffffffffffffffffffffffffffffffffffff161490565b5050600090565b91908110156117a45760051b0190565b909173ffffffffffffffffffffffffffffffffffffffff831615612d725760005260205273ffffffffffffffffffffffffffffffffffffffff6040600020911660005260205260406000205490565b7fca2434a50000000000000000000000000000000000000000000000000000000060005260046000fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167fffffffff000000000000000000000000000000000000000000000000000000008114612e45577f01ffc9a7000000000000000000000000000000000000000000000000000000008114612e3f576000527fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d60205260ff6040600020541690565b50600190565b50600090565b906040519160008154918260011c92600181168015612f48575b602085108114612f1b57848752869392918115612edb5750600114612e94575b50612e9292500383612b29565b565b90506000929192526020600020906000915b818310612ebf575050906020612e929282010138612e85565b6020919350806001915483858901015201910190918492612ea6565b60209350612e929592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138612e85565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693612e65565b7f6d696e7465720000000000000000000000000000000000000000000000000000600052602052604060002073ffffffffffffffffffffffffffffffffffffffff821660005260205260ff6040600020541615612fac5750565b73ffffffffffffffffffffffffffffffffffffffff907f7aa72882000000000000000000000000000000000000000000000000000000006000527f6d696e74657200000000000000000000000000000000000000000000000000006004521660245260446000fd5b80518210156117a45760209160051b010190565b8181029291811591840414171561303b57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83116102f25760209260051b809284830137010190565b3573ffffffffffffffffffffffffffffffffffffffff811681036102f25790565b94919092939473ffffffffffffffffffffffffffffffffffffffff82169384156127925761310d87878573ffffffffffffffffffffffffffffffffffffffff9561335d565b1690836000837fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62604080518a81528b6020820152a43b61314f575b5050505050565b6131aa9160209160405193849283927ff23a6e6100000000000000000000000000000000000000000000000000000000845260048401526000602484015287604484015288606484015260a0608484015260a4830190612954565b03816000865af19081156106e4577ff23a6e6100000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091613212575b501603610682578080613148565b61322b915060203d6020116106dd576106cf8183612b29565b38613204565b908160209103126102f2575180151581036102f25790565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016801561334e573233148015613353575b61334e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c908033149081156132d4575b506132d157503390565b90565b60649150602090604051928380927f019a20280000000000000000000000000000000000000000000000000000000082528660048301523360248301523060448301525afa9081156106e45760009161332f575b50386132c7565b613348915060203d602011610e7e57610e708183612b29565b38613328565b503390565b5060183610613290565b90918361336b575b50505050565b8060005281602052604060002073ffffffffffffffffffffffffffffffffffffffff84166000526020526040600020549380850194808611156133e157505060005260205273ffffffffffffffffffffffffffffffffffffffff6040600020911660005260205260406000205538808080613365565b6040517f42fb00bc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86166004820152602481019390935260448301526064820152608490fd5b908160209103126102f257517fffffffff00000000000000000000000000000000000000000000000000000000811681036102f25790565b5473ffffffffffffffffffffffffffffffffffffffff169081151580613553575b61349b575050565b602073ffffffffffffffffffffffffffffffffffffffff916044604051809481937fc617113400000000000000000000000000000000000000000000000000000000835230600484015216958660248301525afa9081156106e457600091613534575b50156135075750565b7fede71dcc0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b61354d915060203d602011610e7e57610e708183612b29565b386134fe565b50813b1515613493565b73ffffffffffffffffffffffffffffffffffffffff8083169084161492918315613588575b50505090565b600192935073ffffffffffffffffffffffffffffffffffffffff166000520160205273ffffffffffffffffffffffffffffffffffffffff6040600020911660005260205260ff60406000205416388080613582565b919290846135ec575050505050565b8160005282602052604060002073ffffffffffffffffffffffffffffffffffffffff8216600052602052604060002054908582039180831015613748575073ffffffffffffffffffffffffffffffffffffffff851673ffffffffffffffffffffffffffffffffffffffff821603613664575b50613148565b8260005283602052604060002073ffffffffffffffffffffffffffffffffffffffff86166000526020526040600020549580870196808811156136ea57505060009283526020938452604080842073ffffffffffffffffffffffffffffffffffffffff92831685528086528185209390935594168252909152205538808080808061365e565b6040517f42fb00bc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff881660048201526024810186905260448101919091526064810191909152608490fd5b6040517f03dee4c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92909216600483015260248201849052604482015260648101869052608490fdfea2646970667358221220700e169b9c84a0ba115ffd0797eed8dc9cf976fac40512724debf4b8220dd9b964736f6c634300081e00337ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a47ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a5",
  "deployedBytecode": "0x6080604052600436101561001257600080fd5b60003560e01c8062fdd58e1461287d57806301ffc9a71461281757806306fdde03146127bc5780630d6a5bbb1461255a5780630e89341c14612403578063114ba8ee14612304578063162094c41461223d5780632a55205a1461214a5780632b4c9f16146120db5780632eb2c2d614611c9c5780632f2ff15d14611b105780634e1273f414611a32578063572b6c05146119e75780635cfa92971461191d57806361ba27da146118015780636706467b1461169957806373c8a958146114e95780638bb9c5bf1461137a5780638da5cb5b146113095780638dc251e3146111dc57806391d148541461114457806395d89b41146110d1578063a0c76f6214611060578063a22cb46514610f00578063b0ccc31e14610e8f578063c3666c3614610c52578063d539139314610bf9578063d547741f14610a70578063e1a8bf2c14610a34578063e8ab9ccc14610828578063e985e9c514610774578063f242432a14610442578063f2fde38b1461034e5763f7ba94bd1461019157600080fd5b346102f25761019f366129f6565b90917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806101e0613249565b925416911690810361032157508181036102f75760005b81811061020057005b61020b818387612d13565b3573ffffffffffffffffffffffffffffffffffffffff81168091036102f257610235828587612d13565b35908147106102c057600080809381935af13d156102b8573d9061025882612bfd565b916102666040519384612b29565b82523d6000602084013e5b1561027f57506001016101f7565b80511561028e57602081519101fd5b7fd6bda2750000000000000000000000000000000000000000000000000000000060005260046000fd5b606090610271565b50477fcf4791810000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b600080fd5b7f658253360000000000000000000000000000000000000000000000000000000060005260046000fd5b7f2ef4875e0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b346102f25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f2576103856128eb565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc906103af613249565b9073ffffffffffffffffffffffffffffffffffffffff808454169216828103610321575073ffffffffffffffffffffffffffffffffffffffff16918282036103f357005b827fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b346102f25760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f2576104796128eb565b61048161290e565b604435906064359260843567ffffffffffffffff81116102f2576104a99036906004016129c8565b926104b2613249565b937f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd308573ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff821603610764575b505073ffffffffffffffffffffffffffffffffffffffff8216947f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e8612861561073a5761055582878361355d565b156106f05773ffffffffffffffffffffffffffffffffffffffff9161057e8a8a878a87966135dd565b169416918583867fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62604080518c81528d6020820152a43b6105bb57005b6020926105c9913691612c37565b9261061f60405194859384937ff23a6e610000000000000000000000000000000000000000000000000000000085526004850152602484015287604484015288606484015260a0608484015260a4830190612954565b03816000865af19081156106e4577ff23a6e6100000000000000000000000000000000000000000000000000000000917fffffffff00000000000000000000000000000000000000000000000000000000916000916106b5575b50160361068257005b7f40f39d380000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b6106d7915060203d6020116106dd575b6106cf8183612b29565b81019061343a565b86610679565b503d6106c5565b6040513d6000823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff8681847f05bbb9c400000000000000000000000000000000000000000000000000000000600052166004521660245260446000fd5b7fb5e890150000000000000000000000000000000000000000000000000000000060005260046000fd5b61076d91613472565b8785610509565b346102f25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f2576107ab6128eb565b73ffffffffffffffffffffffffffffffffffffffff6107c861290e565b91166000527f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e861360205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b346102f25760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f25760043567ffffffffffffffff81116102f257610877903690600401612997565b60243567ffffffffffffffff81116102f257610897903690600401612997565b929060443567ffffffffffffffff81116102f2576108b9903690600401612997565b93909160643567ffffffffffffffff81116102f2576108dc9036906004016129c8565b9390916108e7613249565b97610912897fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22612f52565b7f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e86129461093d81612b99565b9761094b604051998a612b29565b818952602089019160051b8101903682116102f257915b818310610a0757505050916109806109889261099095943691612bb1565b973691612bb1565b933691612c37565b91835194805186148015906109fc575b6102f75760005b8681106109b057005b806109f68673ffffffffffffffffffffffffffffffffffffffff6109d66001958b613014565b51166109e28487613014565b516109ed8589613014565b51918d8a6130c8565b016109a7565b5081518614156109a0565b823573ffffffffffffffffffffffffffffffffffffffff811681036102f257815260209283019201610962565b346102f25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f2576020604051620186a08152f35b346102f25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f257600435610aaa61290e565b610ab2613249565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361032157507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b228160005280602052604060002073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff60406000205416610b6457005b60008281526020918252604080822073ffffffffffffffffffffffffffffffffffffffff9586168084529084529181902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905580519384529183015291909216908201527ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080606081015b0390a1005b346102f25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f25760206040517f6d696e74657200000000000000000000000000000000000000000000000000008152f35b346102f257610c6036612a9a565b9094929390917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610ca5613249565b92541691169081036103215750808214801590610e85575b6102f75760005b828110610ccd57005b73ffffffffffffffffffffffffffffffffffffffff610cf5610cf083858a612d13565b6130a7565b166040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f80ac58cd000000000000000000000000000000000000000000000000000000006004820152602081602481855afa9081156106e457600091610e57575b5015610e2a575073ffffffffffffffffffffffffffffffffffffffff610d84610cf083858a612d13565b1690610d94610cf0828689612d13565b91610da082878b612d13565b3592813b156102f257606473ffffffffffffffffffffffffffffffffffffffff916000809460405197889586947f42842e0e00000000000000000000000000000000000000000000000000000000865230600487015216602485015260448401525af19182156106e457600192610e19575b5001610cc4565b6000610e2491612b29565b88610e12565b7f986b9f1f0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b610e78915060203d8111610e7e575b610e708183612b29565b810190613231565b89610d5a565b503d610e66565b5082821415610cbd565b346102f25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f257602073ffffffffffffffffffffffffffffffffffffffff7f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd305416604051908152f35b346102f25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f257610f376128eb565b60243590811515918281036102f257611031575b73ffffffffffffffffffffffffffffffffffffffff80610f69613249565b169116918183146110035760207f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3191836000527f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e86138252604060002085600052825260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff8316179055604051908152a3005b507ffb0fdf610000000000000000000000000000000000000000000000000000000060005260045260246000fd5b61105b817f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd30613472565b610f4b565b346102f25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f257602073ffffffffffffffffffffffffffffffffffffffff7f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a65416604051908152f35b346102f25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f25761114061112c7f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a5612e4b565b604051918291602083526020830190612954565b0390f35b346102f25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f25761117b61290e565b7fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b2260043560005260205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b346102f25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f2576112136128eb565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80611252613249565b925416911690810361032157507f2c0cf10337caabbd02dcf226f05f5fd19a0919a41a8df8958c39b800078268579073ffffffffffffffffffffffffffffffffffffffff8116156112df5773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055600080f35b7f16de0c800000000000000000000000000000000000000000000000000000000060005260046000fd5b346102f25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f257602073ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc5416604051908152f35b346102f25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f2577fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b226004356113d5613249565b908060005282602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff60406000205416156114a15760008181526020938452604080822073ffffffffffffffffffffffffffffffffffffffff949094168083529385529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558051918252928101829052918201527ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b908060608101610bf4565b73ffffffffffffffffffffffffffffffffffffffff92507f7aa72882000000000000000000000000000000000000000000000000000000006000526004521660245260446000fd5b346102f2576114f736612a9a565b929392917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff8061153a613249565b9254169116908103610321575080841480159061168f575b6102f75760005b84811061156257005b61156d818388612d13565b3573ffffffffffffffffffffffffffffffffffffffff8116908181036102f25760006020916115a0610cf0868b8e612d13565b8261160a6116366115b2898d8d612d13565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000089820190815273ffffffffffffffffffffffffffffffffffffffff9096166024820152903560448201529182906064820190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612b29565b51925af1156106e4576000513d6116865750803b155b6116595750600101611559565b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6001141561164c565b5082841415611552565b346102f2576116a7366129f6565b8083949293036102f75773ffffffffffffffffffffffffffffffffffffffff7f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a6541633036117d357916000907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301915b85811061172357005b848110156117a4578060051b820135838112156102f25782019081359167ffffffffffffffff83116102f25760200182360381136102f2577f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b60019361178a848b8a612d13565b359261179b60405192839283612c6e565b0390a20161171a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f22060671000000000000000000000000000000000000000000000000000000006000523360045260246000fd5b346102f25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f2576004357fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80611872613249565b925416911690810361032157507f2c0cf10337caabbd02dcf226f05f5fd19a0919a41a8df8958c39b8000782685790620186a081116118f057815473ffffffffffffffffffffffffffffffffffffffff1660a09190911b7fffffffffffffffffffffffff000000000000000000000000000000000000000016179055005b7fac0404080000000000000000000000000000000000000000000000000000000060005260045260246000fd5b346102f25760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f2576119546128eb565b6064359067ffffffffffffffff82116102f2576119786119e59236906004016129c8565b6119d7611983613249565b926119ae847fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22612f52565b7f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e8612923691612c37565b9260443592602435926130c8565b005b346102f25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f2576020611a28611a236128eb565b612cb4565b6040519015158152f35b346102f257611a40366129f6565b9192917f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e861291908085036102f757611a7685612b99565b94611a846040519687612b29565b8086527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611ab182612b99565b0136602088013760005b818110611ad857604051602080825281906111409082018a612a66565b80611aff611aec610cf0600194868b612d13565b611af7838789612d13565b359088612d23565b611b09828a613014565b5201611abb565b346102f25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f257600435611b4a61290e565b611b52613249565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361032157507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b228160005280602052604060002073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff6040600020541615611c0557005b60008281526020918252604080822073ffffffffffffffffffffffffffffffffffffffff9586168084529084529181902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580519384529183015291909216908201527f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d908060608101610bf4565b346102f25760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f257611cd36128eb565b611cdb61290e565b60443567ffffffffffffffff81116102f257611cfb903690600401612997565b929060643567ffffffffffffffff81116102f257611d1d903690600401612997565b9360843567ffffffffffffffff81116102f257611d3e9036906004016129c8565b939091611d49613249565b957f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd308773ffffffffffffffffffffffffffffffffffffffff831673ffffffffffffffffffffffffffffffffffffffff8216036120cb575b505073ffffffffffffffffffffffffffffffffffffffff8216967f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e8612881561073a57898b036102f757611df382848361355d565b156120815760005b8b8110612052575050928992888a8897947f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb73ffffffffffffffffffffffffffffffffffffffff809b99169a8b9216988993611e7760405192839260408452611e698d60408601908d61306a565b91848303602086015261306a565b0390a43b611e8157005b602094611e96611e9e92611ea6953691612bb1565b993691612bb1565b953691612c37565b92611f5660405194859384937fbc197c810000000000000000000000000000000000000000000000000000000085526004850152602484015260a06044840152611f26611ef660a485018b612a66565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc85820301606486015288612a66565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc848303016084850152612954565b03816000875af19081156106e4577fbc197c8100000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091612033575b501603611fb957005b61202f90611fff6040519485947fc287817e0000000000000000000000000000000000000000000000000000000086526004860152606060248601526064850190612a66565b907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc848303016044850152612a66565b0390fd5b61204c915060203d6020116106dd576106cf8183612b29565b86611fb0565b8061207b8c6120718f94612069816001978d612d13565b35928d612d13565b35908888876135dd565b01611dfb565b73ffffffffffffffffffffffffffffffffffffffff8381847f05bbb9c400000000000000000000000000000000000000000000000000000000600052166004521660245260446000fd5b6120d491613472565b8987611da0565b346102f25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102f25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f25773ffffffffffffffffffffffffffffffffffffffff6024357f2c0cf10337caabbd02dcf226f05f5fd19a0919a41a8df8958c39b8000782685754908160a01c9080158015612235575b156121ff57505061114060005b60405193849316836020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b61114091620186a08210156122225761221c90620186a092613028565b046121cf565b620186a06122309204613028565b6121cf565b5081156121c2565b346102f25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f25760243567ffffffffffffffff81116102f25761228c9036906004016129c8565b73ffffffffffffffffffffffffffffffffffffffff7f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a6541633036117d3576122ff7f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b916040519182916004359583612c6e565b0390a2005b346102f25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f25760043573ffffffffffffffffffffffffffffffffffffffff811681036102f2577fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80612392613249565b9254169116908103610321575073ffffffffffffffffffffffffffffffffffffffff7f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd3091167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055600080f35b346102f25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f2577f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a6546040517ff724dad700000000000000000000000000000000000000000000000000000000815230600480830191909152356024820152906000908290604490829073ffffffffffffffffffffffffffffffffffffffff165afa9081156106e4576000916124d2575b6040516020808252819061114090820185612954565b3d8083833e6124e18183612b29565b8101906020818303126125525780519067ffffffffffffffff8211612556570181601f820112156125525780519261251884612bfd565b926125266040519485612b29565b8484526020858401011161254f5750611140926125499160208085019101612931565b906124bc565b80fd5b8280fd5b8380fd5b346102f25760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f2576125916128eb565b60243567ffffffffffffffff81116102f2576125b1903690600401612997565b909160443567ffffffffffffffff81116102f2576125d3903690600401612997565b93909160643567ffffffffffffffff81116102f257612667936125fd61266f9236906004016129c8565b95909161265f61260b613249565b96612636887fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b22612f52565b7f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e8612993691612bb1565b983691612bb1565b943691612c37565b9173ffffffffffffffffffffffffffffffffffffffff821694851561279257865190855182036102f75760005b8281106127685750505073ffffffffffffffffffffffffffffffffffffffff1690846000837f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb60405160408152806127096126fb8d6040840190612a66565b82810360208401528b612a66565b0390a43b61271357005b611f569160209160405193849283927fbc197c8100000000000000000000000000000000000000000000000000000000845260048401526000602484015260a06044840152611f26611ef660a485018b612a66565b8061278c6127786001938c613014565b51612783838b613014565b5190888661335d565b0161269c565b7f021149bd0000000000000000000000000000000000000000000000000000000060005260046000fd5b346102f25760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f25761114061112c7f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a4612e4b565b346102f25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f2576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036102f257611a28602091612d9c565b346102f25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f25760206128e36128b96128eb565b602435907f5ccf5846fa27a68fafc8e588671a68f5e67c2f9b56af4263806a4d71735e8612612d23565b604051908152f35b6004359073ffffffffffffffffffffffffffffffffffffffff821682036102f257565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036102f257565b60005b8381106129445750506000910152565b8181015183820152602001612934565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209361299081518092818752878088019101612931565b0116010190565b9181601f840112156102f25782359167ffffffffffffffff83116102f2576020808501948460051b0101116102f257565b9181601f840112156102f25782359167ffffffffffffffff83116102f257602083818601950101116102f257565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102f25760043567ffffffffffffffff81116102f25781612a3f91600401612997565b929092916024359067ffffffffffffffff82116102f257612a6291600401612997565b9091565b906020808351928381520192019060005b818110612a845750505090565b8251845260209384019390920191600101612a77565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102f25760043567ffffffffffffffff81116102f25781612ae391600401612997565b9290929160243567ffffffffffffffff81116102f25781612b0691600401612997565b929092916044359067ffffffffffffffff82116102f257612a6291600401612997565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117612b6a57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff8111612b6a5760051b60200190565b929190612bbd81612b99565b93612bcb6040519586612b29565b602085838152019160051b81019283116102f257905b828210612bed57505050565b8135815260209182019101612be1565b67ffffffffffffffff8111612b6a57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192612c4382612bfd565b91612c516040519384612b29565b8294818452818301116102f2578281602093846000960137010152565b90601f836040947fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093602086528160208701528686013760008582860101520116010190565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908115612d0c5773ffffffffffffffffffffffffffffffffffffffff161490565b5050600090565b91908110156117a45760051b0190565b909173ffffffffffffffffffffffffffffffffffffffff831615612d725760005260205273ffffffffffffffffffffffffffffffffffffffff6040600020911660005260205260406000205490565b7fca2434a50000000000000000000000000000000000000000000000000000000060005260046000fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167fffffffff000000000000000000000000000000000000000000000000000000008114612e45577f01ffc9a7000000000000000000000000000000000000000000000000000000008114612e3f576000527fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d60205260ff6040600020541690565b50600190565b50600090565b906040519160008154918260011c92600181168015612f48575b602085108114612f1b57848752869392918115612edb5750600114612e94575b50612e9292500383612b29565b565b90506000929192526020600020906000915b818310612ebf575050906020612e929282010138612e85565b6020919350806001915483858901015201910190918492612ea6565b60209350612e929592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138612e85565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f1693612e65565b7f6d696e7465720000000000000000000000000000000000000000000000000000600052602052604060002073ffffffffffffffffffffffffffffffffffffffff821660005260205260ff6040600020541615612fac5750565b73ffffffffffffffffffffffffffffffffffffffff907f7aa72882000000000000000000000000000000000000000000000000000000006000527f6d696e74657200000000000000000000000000000000000000000000000000006004521660245260446000fd5b80518210156117a45760209160051b010190565b8181029291811591840414171561303b57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b90918281527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83116102f25760209260051b809284830137010190565b3573ffffffffffffffffffffffffffffffffffffffff811681036102f25790565b94919092939473ffffffffffffffffffffffffffffffffffffffff82169384156127925761310d87878573ffffffffffffffffffffffffffffffffffffffff9561335d565b1690836000837fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62604080518a81528b6020820152a43b61314f575b5050505050565b6131aa9160209160405193849283927ff23a6e6100000000000000000000000000000000000000000000000000000000845260048401526000602484015287604484015288606484015260a0608484015260a4830190612954565b03816000865af19081156106e4577ff23a6e6100000000000000000000000000000000000000000000000000000000917fffffffff0000000000000000000000000000000000000000000000000000000091600091613212575b501603610682578080613148565b61322b915060203d6020116106dd576106cf8183612b29565b38613204565b908160209103126102f2575180151581036102f25790565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016801561334e573233148015613353575b61334e577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c908033149081156132d4575b506132d157503390565b90565b60649150602090604051928380927f019a20280000000000000000000000000000000000000000000000000000000082528660048301523360248301523060448301525afa9081156106e45760009161332f575b50386132c7565b613348915060203d602011610e7e57610e708183612b29565b38613328565b503390565b5060183610613290565b90918361336b575b50505050565b8060005281602052604060002073ffffffffffffffffffffffffffffffffffffffff84166000526020526040600020549380850194808611156133e157505060005260205273ffffffffffffffffffffffffffffffffffffffff6040600020911660005260205260406000205538808080613365565b6040517f42fb00bc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff86166004820152602481019390935260448301526064820152608490fd5b908160209103126102f257517fffffffff00000000000000000000000000000000000000000000000000000000811681036102f25790565b5473ffffffffffffffffffffffffffffffffffffffff169081151580613553575b61349b575050565b602073ffffffffffffffffffffffffffffffffffffffff916044604051809481937fc617113400000000000000000000000000000000000000000000000000000000835230600484015216958660248301525afa9081156106e457600091613534575b50156135075750565b7fede71dcc0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b61354d915060203d602011610e7e57610e708183612b29565b386134fe565b50813b1515613493565b73ffffffffffffffffffffffffffffffffffffffff8083169084161492918315613588575b50505090565b600192935073ffffffffffffffffffffffffffffffffffffffff166000520160205273ffffffffffffffffffffffffffffffffffffffff6040600020911660005260205260ff60406000205416388080613582565b919290846135ec575050505050565b8160005282602052604060002073ffffffffffffffffffffffffffffffffffffffff8216600052602052604060002054908582039180831015613748575073ffffffffffffffffffffffffffffffffffffffff851673ffffffffffffffffffffffffffffffffffffffff821603613664575b50613148565b8260005283602052604060002073ffffffffffffffffffffffffffffffffffffffff86166000526020526040600020549580870196808811156136ea57505060009283526020938452604080842073ffffffffffffffffffffffffffffffffffffffff92831685528086528185209390935594168252909152205538808080808061365e565b6040517f42fb00bc00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff881660048201526024810186905260448101919091526064810191909152608490fd5b6040517f03dee4c500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff92909216600483015260248201849052604482015260648101869052608490fdfea2646970667358221220700e169b9c84a0ba115ffd0797eed8dc9cf976fac40512724debf4b8220dd9b964736f6c634300081e0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
