{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC721Full",
  "sourceName": "contracts/token/ERC721/preset/ERC721Full.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": [
        {
          "internalType": "uint256",
          "name": "percentage",
          "type": "uint256"
        }
      ],
      "name": "ERC2981IncorrectRoyaltyPercentage",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC2981IncorrectRoyaltyReceiver",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC721BalanceOfAddressZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ERC721ExistingToken",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC721MintToAddressZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ERC721NonApprovedForApproval",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ERC721NonApprovedForTransfer",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ERC721NonExistingToken",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ERC721NonOwnedToken",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ERC721SafeTransferRejected",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "ERC721SelfApproval",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "ERC721SelfApprovalForAll",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC721TransferToAddressZero",
      "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": "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": "approved",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "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": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "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": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "tokenIds",
          "type": "uint256[]"
        }
      ],
      "name": "batchMint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256[]",
          "name": "tokenIds",
          "type": "uint256[]"
        }
      ],
      "name": "batchTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[]",
          "name": "recipients",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "tokenIds",
          "type": "uint256[]"
        }
      ],
      "name": "deliver",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "forwarderRegistry",
      "outputs": [
        {
          "internalType": "contract IForwarderRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "approved",
          "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": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "tokenOwner",
          "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": "tokenId",
          "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": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "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": "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": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "uri",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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"
    }
  ],
  "bytecode": "0x60a06040523461060457613f488038038061001981610609565b928339810160a0828203126106045781516001600160401b038111610604578161004491840161062e565b602083015190916001600160401b0382116106045761006491840161062e565b60408301519092906001600160a01b038116908190036106045760608201516001600160a01b03811692908390036106045760800151926001600160a01b038416840361060457336105a5575b7fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d60208190527fa53d5a615b1d5279f1a6647c5c0f31bf064b1e70af135676a4a96aeaeb691a2f805460ff1990811660019081179092557f8ed2355fc3f859d445b81332ba1875c675be71b9fe1bab0a25be6436696b0ec780548216831790557f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd3080546001600160a01b03191690961790955563f3993d1160e01b6000527f98ea984a1dd4b0fbb2764a2a70a93d7e6137ea3c70db196cc96460f50c0d1a1f8054909516179093558051906001600160401b03821161047b57600080516020613f088339815191525490600182811c9216801561059b575b602083101461045b5781601f84931161051e575b50602090601f831160011461049c57600092610491575b50508160011b916000199060031b1c191617600080516020613f08833981519152555b83516001600160401b03811161047b57600080516020613f2883398151915254600181811c91168015610471575b602082101461045b57601f81116103e9575b50602094601f82116001146103685794819293949560009261035d575b50508160011b916000199060031b1c191617600080516020613f28833981519152555b7f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a680546001600160a01b031916919091179055635b5e139f60e01b60009081526020919091526040808220805460ff199081166001908117909255638e773e1360e01b84528284208054821683179055634ed2f41960e11b8452828420805482168317905563152a902d60e11b8452928290208054909316179091556080919091525161386e908161069a823960805181818161230f01528181612ce6015261356a0152f35b015190503880610274565b601f19821695600080516020613f28833981519152600052806000209160005b8881106103d1575083600195969798106103b8575b505050811b01600080516020613f2883398151915255610297565b015160001960f88460031b161c1916905538808061039d565b91926020600181928685015181550194019201610388565b600080516020613f288339815191526000527fc39bad3db5d56dccf839bc8a79759b3192b97757d993f7663c9998f4fbefc8a1601f830160051c81019160208410610451575b601f0160051c01905b8181106104455750610257565b60008155600101610438565b909150819061042f565b634e487b7160e01b600052602260045260246000fd5b90607f1690610245565b634e487b7160e01b600052604160045260246000fd5b0151905038806101f4565b600080516020613f0883398151915260009081528281209350601f198516905b81811061050657509084600195949392106104ed575b505050811b01600080516020613f0883398151915255610217565b015160001960f88460031b161c191690553880806104d2565b929360206001819287860151815501950193016104bc565b600080516020613f088339815191526000529091507f565de0cfbb8a3f70c938db1afc5562690ff7c55773c7234a649300f58e3b30bc601f840160051c81019160208510610591575b90601f859493920160051c01905b81811061058257506101dd565b60008155849350600101610575565b9091508190610567565b91607f16916101c9565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc80546001600160a01b0319163390811790915560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a36100b1565b600080fd5b6040519190601f01601f191682016001600160401b0381118382101761047b57604052565b81601f82011215610604578051906001600160401b03821161047b5761065d601f8301601f1916602001610609565b92828452602083830101116106045760005b82811061068457505060206000918301015290565b8060208092840101518282870101520161066f56fe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a71461291957806306fdde03146128be578063081812fc14612861578063095ea7b3146125cd578063114ba8ee146124ce57806323b872dd146124265780632a55205a146123335780632b4c9f16146122c45780632f2ff15d1461213857806340c10f19146120a857806342842e0e14611fd85780634684d7e914611df8578063572b6c0514611dad57806361ba27da14611c915780636352211e14611c1657806370a0823114611b4c57806373c8a9581461199c5780638832e6e31461174e5780638bb9c5bf146115df5780638da5cb5b1461156e5780638dc251e31461144157806391d14854146113a957806395d89b411461133a5780639da5e83214611210578063a0c76f621461119f578063a22cb4651461103f578063b0ccc31e14610fce578063b88d4fde14610eac578063c3666c3614610c6f578063c87b56dd14610abc578063d539139314610a63578063d547741f146108da578063e1a8bf2c1461089e578063e985e9c5146107ea578063f2fde38b146106f6578063f3993d11146103705763f7ba94bd146101b357600080fd5b34610314576101c136612b8f565b90917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610202613553565b925416911690810361034357508181036103195760005b81811061022257005b61022d818387613318565b3573ffffffffffffffffffffffffffffffffffffffff811680910361031457610257828587613318565b35908147106102e257600080809381935af13d156102da573d9061027a82612d2e565b916102886040519384612bfb565b82523d6000602084013e5b156102a15750600101610219565b8051156102b057602081519101fd5b7fd6bda2750000000000000000000000000000000000000000000000000000000060005260046000fd5b606090610293565b50477fcf4791810000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b600080fd5b7f658253360000000000000000000000000000000000000000000000000000000060005260046000fd5b7f2ef4875e0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b346103145760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610314576103a76129e5565b6103af612a08565b9060443567ffffffffffffffff8111610314576103d0903690600401612a9d565b926103d9613553565b907f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd308273ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff8216036106e6575b505073ffffffffffffffffffffffffffffffffffffffff7fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c091169384156106bc5761047e8382849694613667565b9373ffffffffffffffffffffffffffffffffffffffff600095159216945b8781106105015787878781811415806104f8575b6104b657005b60009081527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c16020526040808220805485900390559181522080549091019055005b508215156104b0565b61050c818986613318565b35806000528260205260406000205473ffffffffffffffffffffffffffffffffffffffff8116801561068e57880361065c5784610585575b509081600192600052836020528860406000205588887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a40161049c565b74010000000000000000000000000000000000000000161580156105f9575b6105ae5789610544565b8673ffffffffffffffffffffffffffffffffffffffff877fa4a3018b000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b50806000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c260205273ffffffffffffffffffffffffffffffffffffffff6040600020541673ffffffffffffffffffffffffffffffffffffffff871614156105a4565b50867f14dbb5360000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b827fdd5604750000000000000000000000000000000000000000000000000000000060005260045260246000fd5b7f86c870670000000000000000000000000000000000000000000000000000000060005260046000fd5b6106ef91613468565b8582610430565b346103145760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103145761072d6129e5565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc90610757613553565b9073ffffffffffffffffffffffffffffffffffffffff808454169216828103610343575073ffffffffffffffffffffffffffffffffffffffff169182820361079b57005b827fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b346103145760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610314576108216129e5565b73ffffffffffffffffffffffffffffffffffffffff61083e612a08565b91166000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c360205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b346103145760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610314576020604051620186a08152f35b346103145760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031457600435610914612a08565b61091c613553565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361034357507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b228160005280602052604060002073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff604060002054166109ce57005b60008281526020918252604080822073ffffffffffffffffffffffffffffffffffffffff9586168084529084529181902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905580519384529183015291909216908201527ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080606081015b0390a1005b346103145760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103145760206040517f6d696e74657200000000000000000000000000000000000000000000000000008152f35b346103145760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031457610bae6000600435610b1d817fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c06132bd565b5073ffffffffffffffffffffffffffffffffffffffff7f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a6541660405180809581947ff724dad700000000000000000000000000000000000000000000000000000000835230600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03915afa908115610c6357600091610bdb575b60405160208082528190610bd7908201856129a2565b0390f35b3d8083833e610bea8183612bfb565b810190602081830312610c5b5780519067ffffffffffffffff8211610c5f570181601f82011215610c5b57805192610c2184612d2e565b92610c2f6040519485612bfb565b84845260208584010111610c585750610bd792610c52916020808501910161297f565b90610bc1565b80fd5b8280fd5b8380fd5b6040513d6000823e3d90fd5b3461031457610c7d36612ace565b9094929390917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610cc2613553565b92541691169081036103435750808214801590610ea2575b6103195760005b828110610cea57005b73ffffffffffffffffffffffffffffffffffffffff610d12610d0d83858a613318565b613328565b166040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f80ac58cd000000000000000000000000000000000000000000000000000000006004820152602081602481855afa908115610c6357600091610e74575b5015610e47575073ffffffffffffffffffffffffffffffffffffffff610da1610d0d83858a613318565b1690610db1610d0d828689613318565b91610dbd82878b613318565b3592813b1561031457606473ffffffffffffffffffffffffffffffffffffffff916000809460405197889586947f42842e0e00000000000000000000000000000000000000000000000000000000865230600487015216602485015260448401525af1918215610c6357600192610e36575b5001610ce1565b6000610e4191612bfb565b88610e2f565b7f986b9f1f0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b610e95915060203d8111610e9b575b610e8d8183612bfb565b810190613349565b89610d77565b503d610e83565b5082821415610cda565b346103145760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031457610ee36129e5565b610eeb612a08565b60443560643567ffffffffffffffff811161031457610f0e903690600401612b61565b929093610f19613553565b937f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd308573ffffffffffffffffffffffffffffffffffffffff841673ffffffffffffffffffffffffffffffffffffffff821603610fbe575b5050610f9f848484887fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c0612ebd565b823b610fa757005b610fbc95610fb6913691612d68565b936136e7565b005b610fc791613468565b8685610f70565b346103145760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031457602073ffffffffffffffffffffffffffffffffffffffff7f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd305416604051908152f35b346103145760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610314576110766129e5565b602435908115159182810361031457611170575b73ffffffffffffffffffffffffffffffffffffffff806110a8613553565b169116918183146111425760207f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3191836000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c38252604060002085600052825260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff8316179055604051908152a3005b507fe4215c6a0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b61119a817f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd30613468565b61108a565b346103145760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031457602073ffffffffffffffffffffffffffffffffffffffff7f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a65416604051908152f35b346103145761121e36612b8f565b6112507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b2261124a613553565b906130f6565b7fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c09261127b81612c6b565b946112896040519687612bfb565b818652602086019160051b81019036821161031457915b81831061130d57505050906112b6913691612c83565b91805191835183036103195760005b8381106112ce57005b8061130773ffffffffffffffffffffffffffffffffffffffff6112f36001948761327a565b51166112ff838961327a565b5190856131b8565b016112c5565b823573ffffffffffffffffffffffffffffffffffffffff81168103610314578152602092830192016112a0565b346103145760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031457610bd76113957f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a5613361565b6040519182916020835260208301906129a2565b346103145760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610314576113e0612a08565b7fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b2260043560005260205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b346103145760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610314576114786129e5565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806114b7613553565b925416911690810361034357507f2c0cf10337caabbd02dcf226f05f5fd19a0919a41a8df8958c39b800078268579073ffffffffffffffffffffffffffffffffffffffff8116156115445773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055600080f35b7f16de0c800000000000000000000000000000000000000000000000000000000060005260046000fd5b346103145760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031457602073ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc5416604051908152f35b346103145760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610314577fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b2260043561163a613553565b908060005282602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff60406000205416156117065760008181526020938452604080822073ffffffffffffffffffffffffffffffffffffffff949094168083529385529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558051918252928101829052918201527ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b908060608101610a5e565b73ffffffffffffffffffffffffffffffffffffffff92507f7aa72882000000000000000000000000000000000000000000000000000000006000526004521660245260446000fd5b346103145760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610314576117856129e5565b6024359060443567ffffffffffffffff8111610314576117a9903690600401612b61565b916117d67fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b2261124a613553565b61181684826118107fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c095611808613553565b973691612d68565b946131b8565b803b61181e57005b73ffffffffffffffffffffffffffffffffffffffff80602092169361188b60405194859384937f150b7a02000000000000000000000000000000000000000000000000000000008552166004840152600060248401528760448401526080606484015260848301906129a2565b03816000865af1908115610c635760009161191d575b507fffffffff000000000000000000000000000000000000000000000000000000007f150b7a02000000000000000000000000000000000000000000000000000000009116036118ed57005b7fc215a7a10000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b6020813d602011611994575b8161193660209383612bfb565b810103126119905751907fffffffff0000000000000000000000000000000000000000000000000000000082168203610c5857507fffffffff000000000000000000000000000000000000000000000000000000006118a1565b5080fd5b3d9150611929565b34610314576119aa36612ace565b929392917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806119ed613553565b92541691169081036103435750808414801590611b42575b6103195760005b848110611a1557005b611a20818388613318565b3573ffffffffffffffffffffffffffffffffffffffff811690818103610314576000602091611a53610d0d868b8e613318565b82611abd611ae9611a65898d8d613318565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000089820190815273ffffffffffffffffffffffffffffffffffffffff9096166024820152903560448201529182906064820190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612bfb565b51925af115610c63576000513d611b395750803b155b611b0c5750600101611a0c565b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b60011415611aff565b5082841415611a05565b346103145760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031457611b836129e5565b73ffffffffffffffffffffffffffffffffffffffff811615611bec5773ffffffffffffffffffffffffffffffffffffffff166000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c16020526020604060002054604051908152f35b7faefbce4e0000000000000000000000000000000000000000000000000000000060005260046000fd5b346103145760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610314576020611c736004357fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c06132bd565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346103145760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610314576004357fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80611d02613553565b925416911690810361034357507f2c0cf10337caabbd02dcf226f05f5fd19a0919a41a8df8958c39b8000782685790620186a08111611d8057815473ffffffffffffffffffffffffffffffffffffffff1660a09190911b7fffffffffffffffffffffffff000000000000000000000000000000000000000016179055005b7fac0404080000000000000000000000000000000000000000000000000000000060005260045260246000fd5b346103145760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610314576020611dee611de96129e5565b612ccf565b6040519015158152f35b346103145760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031457611e2f6129e5565b60243567ffffffffffffffff81116103145773ffffffffffffffffffffffffffffffffffffffff611e67611ebe923690600401612a9d565b9290611e957fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b2261124a613553565b7fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c0933691612c83565b9216908115611fae5782519260005b848110611f0e575050506000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c16020526040600020908154019055600080f35b611f18818361327a565b51806000528360205273ffffffffffffffffffffffffffffffffffffffff60406000205416611f8157908160019260005284602052856040600020558560007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a401611ecd565b7f753eceac0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b7f7851b9cd0000000000000000000000000000000000000000000000000000000060005260046000fd5b3461031457611fe636612a2b565b611fee613553565b917f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd308373ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff821603612098575b5050612074828286867fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c0612ebd565b803b61207c57005b610fbc936040519361208f602086612bfb565b600085526136e7565b6120a191613468565b8483612045565b346103145760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031457610fbc6120e26129e5565b61210e7fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b2261124a613553565b602435907fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c06131b8565b346103145760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031457600435612172612a08565b61217a613553565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361034357507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b228160005280602052604060002073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff604060002054161561222d57005b60008281526020918252604080822073ffffffffffffffffffffffffffffffffffffffff9586168084529084529181902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580519384529183015291909216908201527f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d908060608101610a5e565b346103145760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031457602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103145760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103145773ffffffffffffffffffffffffffffffffffffffff6024357f2c0cf10337caabbd02dcf226f05f5fd19a0919a41a8df8958c39b8000782685754908160a01c908015801561241e575b156123e8575050610bd760005b60405193849316836020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b610bd791620186a082101561240b5761240590620186a0926130b4565b046123b8565b620186a061241992046130b4565b6123b8565b5081156123ab565b3461031457610fbc61243736612a2b565b91612440613553565b7f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd308173ffffffffffffffffffffffffffffffffffffffff841673ffffffffffffffffffffffffffffffffffffffff8216036124be575b50507fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c0612ebd565b6124c791613468565b8581612496565b346103145760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103145760043573ffffffffffffffffffffffffffffffffffffffff81168103610314577fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff8061255c613553565b9254169116908103610343575073ffffffffffffffffffffffffffffffffffffffff7f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd3091167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055600080f35b346103145760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610314576126046129e5565b6024359073ffffffffffffffffffffffffffffffffffffffff8116908115908115612831575b507fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c0612654613553565b9184600052816020526040600020549073ffffffffffffffffffffffffffffffffffffffff8216938415612803578486146127d557612694818686613667565b156127895750156126f85774010000000000000000000000000000000000000000166126e4575b505b7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a4005b8360005260205280604060002055836126bb565b90740100000000000000000000000000000000000000008217809203612775575b5050826000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c26020526040600020827fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556126bd565b846000526020526040600020558380612719565b8473ffffffffffffffffffffffffffffffffffffffff88927fc7563a18000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b847fb7fdc0100000000000000000000000000000000000000000000000000000000060005260045260246000fd5b867fdd5604750000000000000000000000000000000000000000000000000000000060005260045260246000fd5b61285b907f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd30613468565b8361262a565b346103145760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610314576020611c736004357fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c0612e4e565b346103145760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031457610bd76113957f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a4613361565b346103145760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610314576004357fffffffff000000000000000000000000000000000000000000000000000000008116810361031457611dee602091612d9f565b60005b8381106129925750506000910152565b8181015183820152602001612982565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936129de8151809281875287808801910161297f565b0116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361031457565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361031457565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60609101126103145760043573ffffffffffffffffffffffffffffffffffffffff81168103610314579060243573ffffffffffffffffffffffffffffffffffffffff81168103610314579060443590565b9181601f840112156103145782359167ffffffffffffffff8311610314576020808501948460051b01011161031457565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126103145760043567ffffffffffffffff81116103145781612b1791600401612a9d565b9290929160243567ffffffffffffffff81116103145781612b3a91600401612a9d565b929092916044359067ffffffffffffffff821161031457612b5d91600401612a9d565b9091565b9181601f840112156103145782359167ffffffffffffffff8311610314576020838186019501011161031457565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126103145760043567ffffffffffffffff81116103145781612bd891600401612a9d565b929092916024359067ffffffffffffffff821161031457612b5d91600401612a9d565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117612c3c57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff8111612c3c5760051b60200190565b929190612c8f81612c6b565b93612c9d6040519586612bfb565b602085838152019160051b810192831161031457905b828210612cbf57505050565b8135815260209182019101612cb3565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908115612d275773ffffffffffffffffffffffffffffffffffffffff161490565b5050600090565b67ffffffffffffffff8111612c3c57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192612d7482612d2e565b91612d826040519384612bfb565b829481845281830111610314578281602093846000960137010152565b7fffffffff00000000000000000000000000000000000000000000000000000000167fffffffff000000000000000000000000000000000000000000000000000000008114612e48577f01ffc9a7000000000000000000000000000000000000000000000000000000008114612e42576000527fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d60205260ff6040600020541690565b50600190565b50600090565b816000528060205260406000205473ffffffffffffffffffffffffffffffffffffffff81161561068e57740100000000000000000000000000000000000000001615612d27576002916000520160205273ffffffffffffffffffffffffffffffffffffffff6040600020541690565b909273ffffffffffffffffffffffffffffffffffffffff169283156106bc57846000528160205260406000205473ffffffffffffffffffffffffffffffffffffffff81169384156128035773ffffffffffffffffffffffffffffffffffffffff81168095036130825782612f319185613667565b15612fc7575b5050836000528060205282604060002055828203612f78575b507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4565b600101816000528060205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81540190558260005260205260406000206001815401905538612f50565b740100000000000000000000000000000000000000001615801561303c575b612ff05780612f37565b8273ffffffffffffffffffffffffffffffffffffffff86927fa4a3018b000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b50846000526002820160205273ffffffffffffffffffffffffffffffffffffffff6040600020541673ffffffffffffffffffffffffffffffffffffffff82161415612fe6565b86857f14dbb5360000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b818102929181159184041417156130c757565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f6d696e7465720000000000000000000000000000000000000000000000000000600052602052604060002073ffffffffffffffffffffffffffffffffffffffff821660005260205260ff60406000205416156131505750565b73ffffffffffffffffffffffffffffffffffffffff907f7aa72882000000000000000000000000000000000000000000000000000000006000527f6d696e74657200000000000000000000000000000000000000000000000000006004521660245260446000fd5b9073ffffffffffffffffffffffffffffffffffffffff16908115611fae57826000528060205273ffffffffffffffffffffffffffffffffffffffff6040600020541661324c57600190836000528060205282604060002055826000520160205260406000206001815401905560007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4565b827f753eceac0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b805182101561328e5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8160005260205273ffffffffffffffffffffffffffffffffffffffff604060002054169081156132eb575090565b7fdd5604750000000000000000000000000000000000000000000000000000000060005260045260246000fd5b919081101561328e5760051b0190565b3573ffffffffffffffffffffffffffffffffffffffff811681036103145790565b90816020910312610314575180151581036103145790565b906040519160008154918260011c9260018116801561345e575b602085108114613431578487528693929181156133f157506001146133aa575b506133a892500383612bfb565b565b90506000929192526020600020906000915b8183106133d55750509060206133a8928201013861339b565b60209193508060019154838589010152019101909184926133bc565b602093506133a89592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201013861339b565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f169361337b565b5473ffffffffffffffffffffffffffffffffffffffff169081151580613549575b613491575050565b602073ffffffffffffffffffffffffffffffffffffffff916044604051809481937fc617113400000000000000000000000000000000000000000000000000000000835230600484015216958660248301525afa908115610c635760009161352a575b50156134fd5750565b7fede71dcc0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b613543915060203d602011610e9b57610e8d8183612bfb565b386134f4565b50813b1515613489565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016801561365857323314801561365d575b613658577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c908033149081156135de575b506135db57503390565b90565b60649150602090604051928380927f019a20280000000000000000000000000000000000000000000000000000000082528660048301523360248301523060448301525afa908115610c6357600091613639575b50386135d1565b613652915060203d602011610e9b57610e8d8183612bfb565b38613632565b503390565b506018361061359a565b73ffffffffffffffffffffffffffffffffffffffff8083169084161492918315613692575b50505090565b600392935073ffffffffffffffffffffffffffffffffffffffff166000520160205273ffffffffffffffffffffffffffffffffffffffff6040600020911660005260205260ff6040600020541638808061368c565b73ffffffffffffffffffffffffffffffffffffffff90613759826020949597969716958360405196879586957f150b7a020000000000000000000000000000000000000000000000000000000087521660048601521660248401528760448401526080606484015260848301906129a2565b03816000865af1908115610c63576000916137bd575b507fffffffff000000000000000000000000000000000000000000000000000000007f150b7a02000000000000000000000000000000000000000000000000000000009116036118ed575050565b6020813d602011613830575b816137d660209383612bfb565b810103126119905751907fffffffff0000000000000000000000000000000000000000000000000000000082168203610c5857507fffffffff0000000000000000000000000000000000000000000000000000000061376f565b3d91506137c956fea26469706673582212202f6f589b371e79312f588e4b1d310ce131f284754573908a730934082e6f4d0664736f6c634300081e00337ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a47ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a5",
  "deployedBytecode": "0x6080604052600436101561001257600080fd5b60003560e01c806301ffc9a71461291957806306fdde03146128be578063081812fc14612861578063095ea7b3146125cd578063114ba8ee146124ce57806323b872dd146124265780632a55205a146123335780632b4c9f16146122c45780632f2ff15d1461213857806340c10f19146120a857806342842e0e14611fd85780634684d7e914611df8578063572b6c0514611dad57806361ba27da14611c915780636352211e14611c1657806370a0823114611b4c57806373c8a9581461199c5780638832e6e31461174e5780638bb9c5bf146115df5780638da5cb5b1461156e5780638dc251e31461144157806391d14854146113a957806395d89b411461133a5780639da5e83214611210578063a0c76f621461119f578063a22cb4651461103f578063b0ccc31e14610fce578063b88d4fde14610eac578063c3666c3614610c6f578063c87b56dd14610abc578063d539139314610a63578063d547741f146108da578063e1a8bf2c1461089e578063e985e9c5146107ea578063f2fde38b146106f6578063f3993d11146103705763f7ba94bd146101b357600080fd5b34610314576101c136612b8f565b90917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610202613553565b925416911690810361034357508181036103195760005b81811061022257005b61022d818387613318565b3573ffffffffffffffffffffffffffffffffffffffff811680910361031457610257828587613318565b35908147106102e257600080809381935af13d156102da573d9061027a82612d2e565b916102886040519384612bfb565b82523d6000602084013e5b156102a15750600101610219565b8051156102b057602081519101fd5b7fd6bda2750000000000000000000000000000000000000000000000000000000060005260046000fd5b606090610293565b50477fcf4791810000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b600080fd5b7f658253360000000000000000000000000000000000000000000000000000000060005260046000fd5b7f2ef4875e0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b346103145760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610314576103a76129e5565b6103af612a08565b9060443567ffffffffffffffff8111610314576103d0903690600401612a9d565b926103d9613553565b907f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd308273ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff8216036106e6575b505073ffffffffffffffffffffffffffffffffffffffff7fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c091169384156106bc5761047e8382849694613667565b9373ffffffffffffffffffffffffffffffffffffffff600095159216945b8781106105015787878781811415806104f8575b6104b657005b60009081527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c16020526040808220805485900390559181522080549091019055005b508215156104b0565b61050c818986613318565b35806000528260205260406000205473ffffffffffffffffffffffffffffffffffffffff8116801561068e57880361065c5784610585575b509081600192600052836020528860406000205588887fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a40161049c565b74010000000000000000000000000000000000000000161580156105f9575b6105ae5789610544565b8673ffffffffffffffffffffffffffffffffffffffff877fa4a3018b000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b50806000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c260205273ffffffffffffffffffffffffffffffffffffffff6040600020541673ffffffffffffffffffffffffffffffffffffffff871614156105a4565b50867f14dbb5360000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b827fdd5604750000000000000000000000000000000000000000000000000000000060005260045260246000fd5b7f86c870670000000000000000000000000000000000000000000000000000000060005260046000fd5b6106ef91613468565b8582610430565b346103145760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103145761072d6129e5565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc90610757613553565b9073ffffffffffffffffffffffffffffffffffffffff808454169216828103610343575073ffffffffffffffffffffffffffffffffffffffff169182820361079b57005b827fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b346103145760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610314576108216129e5565b73ffffffffffffffffffffffffffffffffffffffff61083e612a08565b91166000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c360205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b346103145760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610314576020604051620186a08152f35b346103145760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031457600435610914612a08565b61091c613553565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361034357507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b228160005280602052604060002073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff604060002054166109ce57005b60008281526020918252604080822073ffffffffffffffffffffffffffffffffffffffff9586168084529084529181902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905580519384529183015291909216908201527ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9080606081015b0390a1005b346103145760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103145760206040517f6d696e74657200000000000000000000000000000000000000000000000000008152f35b346103145760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031457610bae6000600435610b1d817fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c06132bd565b5073ffffffffffffffffffffffffffffffffffffffff7f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a6541660405180809581947ff724dad700000000000000000000000000000000000000000000000000000000835230600484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b03915afa908115610c6357600091610bdb575b60405160208082528190610bd7908201856129a2565b0390f35b3d8083833e610bea8183612bfb565b810190602081830312610c5b5780519067ffffffffffffffff8211610c5f570181601f82011215610c5b57805192610c2184612d2e565b92610c2f6040519485612bfb565b84845260208584010111610c585750610bd792610c52916020808501910161297f565b90610bc1565b80fd5b8280fd5b8380fd5b6040513d6000823e3d90fd5b3461031457610c7d36612ace565b9094929390917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610cc2613553565b92541691169081036103435750808214801590610ea2575b6103195760005b828110610cea57005b73ffffffffffffffffffffffffffffffffffffffff610d12610d0d83858a613318565b613328565b166040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f80ac58cd000000000000000000000000000000000000000000000000000000006004820152602081602481855afa908115610c6357600091610e74575b5015610e47575073ffffffffffffffffffffffffffffffffffffffff610da1610d0d83858a613318565b1690610db1610d0d828689613318565b91610dbd82878b613318565b3592813b1561031457606473ffffffffffffffffffffffffffffffffffffffff916000809460405197889586947f42842e0e00000000000000000000000000000000000000000000000000000000865230600487015216602485015260448401525af1918215610c6357600192610e36575b5001610ce1565b6000610e4191612bfb565b88610e2f565b7f986b9f1f0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b610e95915060203d8111610e9b575b610e8d8183612bfb565b810190613349565b89610d77565b503d610e83565b5082821415610cda565b346103145760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031457610ee36129e5565b610eeb612a08565b60443560643567ffffffffffffffff811161031457610f0e903690600401612b61565b929093610f19613553565b937f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd308573ffffffffffffffffffffffffffffffffffffffff841673ffffffffffffffffffffffffffffffffffffffff821603610fbe575b5050610f9f848484887fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c0612ebd565b823b610fa757005b610fbc95610fb6913691612d68565b936136e7565b005b610fc791613468565b8685610f70565b346103145760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031457602073ffffffffffffffffffffffffffffffffffffffff7f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd305416604051908152f35b346103145760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610314576110766129e5565b602435908115159182810361031457611170575b73ffffffffffffffffffffffffffffffffffffffff806110a8613553565b169116918183146111425760207f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3191836000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c38252604060002085600052825260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0081541660ff8316179055604051908152a3005b507fe4215c6a0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b61119a817f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd30613468565b61108a565b346103145760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031457602073ffffffffffffffffffffffffffffffffffffffff7f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a65416604051908152f35b346103145761121e36612b8f565b6112507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b2261124a613553565b906130f6565b7fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c09261127b81612c6b565b946112896040519687612bfb565b818652602086019160051b81019036821161031457915b81831061130d57505050906112b6913691612c83565b91805191835183036103195760005b8381106112ce57005b8061130773ffffffffffffffffffffffffffffffffffffffff6112f36001948761327a565b51166112ff838961327a565b5190856131b8565b016112c5565b823573ffffffffffffffffffffffffffffffffffffffff81168103610314578152602092830192016112a0565b346103145760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031457610bd76113957f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a5613361565b6040519182916020835260208301906129a2565b346103145760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610314576113e0612a08565b7fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b2260043560005260205273ffffffffffffffffffffffffffffffffffffffff60406000209116600052602052602060ff604060002054166040519015158152f35b346103145760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610314576114786129e5565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806114b7613553565b925416911690810361034357507f2c0cf10337caabbd02dcf226f05f5fd19a0919a41a8df8958c39b800078268579073ffffffffffffffffffffffffffffffffffffffff8116156115445773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055600080f35b7f16de0c800000000000000000000000000000000000000000000000000000000060005260046000fd5b346103145760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031457602073ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc5416604051908152f35b346103145760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610314577fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b2260043561163a613553565b908060005282602052604060002073ffffffffffffffffffffffffffffffffffffffff831660005260205260ff60406000205416156117065760008181526020938452604080822073ffffffffffffffffffffffffffffffffffffffff949094168083529385529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690558051918252928101829052918201527ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b908060608101610a5e565b73ffffffffffffffffffffffffffffffffffffffff92507f7aa72882000000000000000000000000000000000000000000000000000000006000526004521660245260446000fd5b346103145760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610314576117856129e5565b6024359060443567ffffffffffffffff8111610314576117a9903690600401612b61565b916117d67fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b2261124a613553565b61181684826118107fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c095611808613553565b973691612d68565b946131b8565b803b61181e57005b73ffffffffffffffffffffffffffffffffffffffff80602092169361188b60405194859384937f150b7a02000000000000000000000000000000000000000000000000000000008552166004840152600060248401528760448401526080606484015260848301906129a2565b03816000865af1908115610c635760009161191d575b507fffffffff000000000000000000000000000000000000000000000000000000007f150b7a02000000000000000000000000000000000000000000000000000000009116036118ed57005b7fc215a7a10000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b6020813d602011611994575b8161193660209383612bfb565b810103126119905751907fffffffff0000000000000000000000000000000000000000000000000000000082168203610c5857507fffffffff000000000000000000000000000000000000000000000000000000006118a1565b5080fd5b3d9150611929565b34610314576119aa36612ace565b929392917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806119ed613553565b92541691169081036103435750808414801590611b42575b6103195760005b848110611a1557005b611a20818388613318565b3573ffffffffffffffffffffffffffffffffffffffff811690818103610314576000602091611a53610d0d868b8e613318565b82611abd611ae9611a65898d8d613318565b6040517fa9059cbb0000000000000000000000000000000000000000000000000000000089820190815273ffffffffffffffffffffffffffffffffffffffff9096166024820152903560448201529182906064820190565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612bfb565b51925af115610c63576000513d611b395750803b155b611b0c5750600101611a0c565b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b60011415611aff565b5082841415611a05565b346103145760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031457611b836129e5565b73ffffffffffffffffffffffffffffffffffffffff811615611bec5773ffffffffffffffffffffffffffffffffffffffff166000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c16020526020604060002054604051908152f35b7faefbce4e0000000000000000000000000000000000000000000000000000000060005260046000fd5b346103145760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610314576020611c736004357fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c06132bd565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346103145760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610314576004357fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80611d02613553565b925416911690810361034357507f2c0cf10337caabbd02dcf226f05f5fd19a0919a41a8df8958c39b8000782685790620186a08111611d8057815473ffffffffffffffffffffffffffffffffffffffff1660a09190911b7fffffffffffffffffffffffff000000000000000000000000000000000000000016179055005b7fac0404080000000000000000000000000000000000000000000000000000000060005260045260246000fd5b346103145760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610314576020611dee611de96129e5565b612ccf565b6040519015158152f35b346103145760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031457611e2f6129e5565b60243567ffffffffffffffff81116103145773ffffffffffffffffffffffffffffffffffffffff611e67611ebe923690600401612a9d565b9290611e957fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b2261124a613553565b7fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c0933691612c83565b9216908115611fae5782519260005b848110611f0e575050506000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c16020526040600020908154019055600080f35b611f18818361327a565b51806000528360205273ffffffffffffffffffffffffffffffffffffffff60406000205416611f8157908160019260005284602052856040600020558560007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a401611ecd565b7f753eceac0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b7f7851b9cd0000000000000000000000000000000000000000000000000000000060005260046000fd5b3461031457611fe636612a2b565b611fee613553565b917f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd308373ffffffffffffffffffffffffffffffffffffffff861673ffffffffffffffffffffffffffffffffffffffff821603612098575b5050612074828286867fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c0612ebd565b803b61207c57005b610fbc936040519361208f602086612bfb565b600085526136e7565b6120a191613468565b8483612045565b346103145760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031457610fbc6120e26129e5565b61210e7fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b2261124a613553565b602435907fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c06131b8565b346103145760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031457600435612172612a08565b61217a613553565b9173ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc541673ffffffffffffffffffffffffffffffffffffffff841690810361034357507fc8827d3282af6f37b64c3e9e6f3ac9df286ab0bb0fccd6f8661bf19adb368b228160005280602052604060002073ffffffffffffffffffffffffffffffffffffffff841660005260205260ff604060002054161561222d57005b60008281526020918252604080822073ffffffffffffffffffffffffffffffffffffffff9586168084529084529181902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580519384529183015291909216908201527f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d908060608101610a5e565b346103145760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031457602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346103145760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103145773ffffffffffffffffffffffffffffffffffffffff6024357f2c0cf10337caabbd02dcf226f05f5fd19a0919a41a8df8958c39b8000782685754908160a01c908015801561241e575b156123e8575050610bd760005b60405193849316836020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b610bd791620186a082101561240b5761240590620186a0926130b4565b046123b8565b620186a061241992046130b4565b6123b8565b5081156123ab565b3461031457610fbc61243736612a2b565b91612440613553565b7f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd308173ffffffffffffffffffffffffffffffffffffffff841673ffffffffffffffffffffffffffffffffffffffff8216036124be575b50507fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c0612ebd565b6124c791613468565b8581612496565b346103145760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103145760043573ffffffffffffffffffffffffffffffffffffffff81168103610314577fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff8061255c613553565b9254169116908103610343575073ffffffffffffffffffffffffffffffffffffffff7f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd3091167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055600080f35b346103145760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610314576126046129e5565b6024359073ffffffffffffffffffffffffffffffffffffffff8116908115908115612831575b507fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c0612654613553565b9184600052816020526040600020549073ffffffffffffffffffffffffffffffffffffffff8216938415612803578486146127d557612694818686613667565b156127895750156126f85774010000000000000000000000000000000000000000166126e4575b505b7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600080a4005b8360005260205280604060002055836126bb565b90740100000000000000000000000000000000000000008217809203612775575b5050826000527fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c26020526040600020827fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790556126bd565b846000526020526040600020558380612719565b8473ffffffffffffffffffffffffffffffffffffffff88927fc7563a18000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b847fb7fdc0100000000000000000000000000000000000000000000000000000000060005260045260246000fd5b867fdd5604750000000000000000000000000000000000000000000000000000000060005260045260246000fd5b61285b907f609b85bcafa81ecfaf3ff62cdde2c6c9082a68dbe4922f07399c706bdeb7cd30613468565b8361262a565b346103145760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610314576020611c736004357fddf3ee18ae6d688373c219468f8be446e7ae82215f4779d821c7ea5e8c13c0c0612e4e565b346103145760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261031457610bd76113957f7ea68fd2dcf1c056b94db6a0a537aa80d26fa9ab1eacd85da1ba0b61b7e7a8a4613361565b346103145760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610314576004357fffffffff000000000000000000000000000000000000000000000000000000008116810361031457611dee602091612d9f565b60005b8381106129925750506000910152565b8181015183820152602001612982565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936129de8151809281875287808801910161297f565b0116010190565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361031457565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361031457565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60609101126103145760043573ffffffffffffffffffffffffffffffffffffffff81168103610314579060243573ffffffffffffffffffffffffffffffffffffffff81168103610314579060443590565b9181601f840112156103145782359167ffffffffffffffff8311610314576020808501948460051b01011161031457565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126103145760043567ffffffffffffffff81116103145781612b1791600401612a9d565b9290929160243567ffffffffffffffff81116103145781612b3a91600401612a9d565b929092916044359067ffffffffffffffff821161031457612b5d91600401612a9d565b9091565b9181601f840112156103145782359167ffffffffffffffff8311610314576020838186019501011161031457565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126103145760043567ffffffffffffffff81116103145781612bd891600401612a9d565b929092916024359067ffffffffffffffff821161031457612b5d91600401612a9d565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117612c3c57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b67ffffffffffffffff8111612c3c5760051b60200190565b929190612c8f81612c6b565b93612c9d6040519586612bfb565b602085838152019160051b810192831161031457905b828210612cbf57505050565b8135815260209182019101612cb3565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016908115612d275773ffffffffffffffffffffffffffffffffffffffff161490565b5050600090565b67ffffffffffffffff8111612c3c57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192612d7482612d2e565b91612d826040519384612bfb565b829481845281830111610314578281602093846000960137010152565b7fffffffff00000000000000000000000000000000000000000000000000000000167fffffffff000000000000000000000000000000000000000000000000000000008114612e48577f01ffc9a7000000000000000000000000000000000000000000000000000000008114612e42576000527fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d60205260ff6040600020541690565b50600190565b50600090565b816000528060205260406000205473ffffffffffffffffffffffffffffffffffffffff81161561068e57740100000000000000000000000000000000000000001615612d27576002916000520160205273ffffffffffffffffffffffffffffffffffffffff6040600020541690565b909273ffffffffffffffffffffffffffffffffffffffff169283156106bc57846000528160205260406000205473ffffffffffffffffffffffffffffffffffffffff81169384156128035773ffffffffffffffffffffffffffffffffffffffff81168095036130825782612f319185613667565b15612fc7575b5050836000528060205282604060002055828203612f78575b507fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4565b600101816000528060205260406000207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81540190558260005260205260406000206001815401905538612f50565b740100000000000000000000000000000000000000001615801561303c575b612ff05780612f37565b8273ffffffffffffffffffffffffffffffffffffffff86927fa4a3018b000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b50846000526002820160205273ffffffffffffffffffffffffffffffffffffffff6040600020541673ffffffffffffffffffffffffffffffffffffffff82161415612fe6565b86857f14dbb5360000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b818102929181159184041417156130c757565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f6d696e7465720000000000000000000000000000000000000000000000000000600052602052604060002073ffffffffffffffffffffffffffffffffffffffff821660005260205260ff60406000205416156131505750565b73ffffffffffffffffffffffffffffffffffffffff907f7aa72882000000000000000000000000000000000000000000000000000000006000527f6d696e74657200000000000000000000000000000000000000000000000000006004521660245260446000fd5b9073ffffffffffffffffffffffffffffffffffffffff16908115611fae57826000528060205273ffffffffffffffffffffffffffffffffffffffff6040600020541661324c57600190836000528060205282604060002055826000520160205260406000206001815401905560007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4565b827f753eceac0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b805182101561328e5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8160005260205273ffffffffffffffffffffffffffffffffffffffff604060002054169081156132eb575090565b7fdd5604750000000000000000000000000000000000000000000000000000000060005260045260246000fd5b919081101561328e5760051b0190565b3573ffffffffffffffffffffffffffffffffffffffff811681036103145790565b90816020910312610314575180151581036103145790565b906040519160008154918260011c9260018116801561345e575b602085108114613431578487528693929181156133f157506001146133aa575b506133a892500383612bfb565b565b90506000929192526020600020906000915b8183106133d55750509060206133a8928201013861339b565b60209193508060019154838589010152019101909184926133bc565b602093506133a89592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201013861339b565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526022600452fd5b93607f169361337b565b5473ffffffffffffffffffffffffffffffffffffffff169081151580613549575b613491575050565b602073ffffffffffffffffffffffffffffffffffffffff916044604051809481937fc617113400000000000000000000000000000000000000000000000000000000835230600484015216958660248301525afa908115610c635760009161352a575b50156134fd5750565b7fede71dcc0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b613543915060203d602011610e9b57610e8d8183612bfb565b386134f4565b50813b1515613489565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016801561365857323314801561365d575b613658577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c908033149081156135de575b506135db57503390565b90565b60649150602090604051928380927f019a20280000000000000000000000000000000000000000000000000000000082528660048301523360248301523060448301525afa908115610c6357600091613639575b50386135d1565b613652915060203d602011610e9b57610e8d8183612bfb565b38613632565b503390565b506018361061359a565b73ffffffffffffffffffffffffffffffffffffffff8083169084161492918315613692575b50505090565b600392935073ffffffffffffffffffffffffffffffffffffffff166000520160205273ffffffffffffffffffffffffffffffffffffffff6040600020911660005260205260ff6040600020541638808061368c565b73ffffffffffffffffffffffffffffffffffffffff90613759826020949597969716958360405196879586957f150b7a020000000000000000000000000000000000000000000000000000000087521660048601521660248401528760448401526080606484015260848301906129a2565b03816000865af1908115610c63576000916137bd575b507fffffffff000000000000000000000000000000000000000000000000000000007f150b7a02000000000000000000000000000000000000000000000000000000009116036118ed575050565b6020813d602011613830575b816137d660209383612bfb565b810103126119905751907fffffffff0000000000000000000000000000000000000000000000000000000082168203610c5857507fffffffff0000000000000000000000000000000000000000000000000000000061376f565b3d91506137c956fea26469706673582212202f6f589b371e79312f588e4b1d310ce131f284754573908a730934082e6f4d0664736f6c634300081e0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
