{
  "_format": "hh-sol-artifact-1",
  "contractName": "ERC20FixedSupplyProxied",
  "sourceName": "contracts/token/ERC20/preset/proxied/ERC20FixedSupplyProxied.sol",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "contract IForwarderRegistry",
          "name": "forwarderRegistry",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "allowance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "increment",
          "type": "uint256"
        }
      ],
      "name": "ERC20AllowanceOverflow",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "ERC20ApprovalToAddressZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC20BatchMintValuesOverflow",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC20BatchTransferValuesOverflow",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "allowance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "decrement",
          "type": "uint256"
        }
      ],
      "name": "ERC20InsufficientAllowance",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "balance",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "ERC20InsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC20MintToAddressZero",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        }
      ],
      "name": "ERC20PermitExpired",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC20PermitFromAddressZero",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ERC20PermitInvalidSignature",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "ERC20SafeTransferRejected",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "supply",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "ERC20TotalSupplyOverflow",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "ERC20TransferToAddressZero",
      "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": "currentPhase",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "newPhase",
          "type": "uint256"
        }
      ],
      "name": "InitializationPhaseAlreadyReached",
      "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": "token",
          "type": "address"
        }
      ],
      "name": "SafeERC20FailedOperation",
      "type": "error"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Transfer",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "result",
          "type": "bool"
        }
      ],
      "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": "recipients",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        }
      ],
      "name": "batchTransfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "recipients",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "values",
          "type": "uint256[]"
        }
      ],
      "name": "batchTransferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "result",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "forwarderRegistry",
      "outputs": [
        {
          "internalType": "contract IForwarderRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "result",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "tokenName",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "tokenSymbol",
          "type": "string"
        },
        {
          "internalType": "uint8",
          "name": "tokenDecimals",
          "type": "uint8"
        },
        {
          "internalType": "address[]",
          "name": "holders",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "allocations",
          "type": "uint256[]"
        }
      ],
      "name": "init",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "forwarder",
          "type": "address"
        }
      ],
      "name": "isTrustedForwarder",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "deadline",
          "type": "uint256"
        },
        {
          "internalType": "uint8",
          "name": "v",
          "type": "uint8"
        },
        {
          "internalType": "bytes32",
          "name": "r",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "permit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "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": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeTransfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "uri",
          "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": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "supply",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "result",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "result",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a034607457601f6136c538819003918201601f19168301916001600160401b03831184841017607957808492602094604052833981010312607457516001600160a01b038116810360745760805260405161363590816100908239608051818181612014015281816124bb01526133810152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6080604052600436101561001257600080fd5b60003560e01c806301ffc9a71461221a57806306fdde03146121bf578063095ea7b31461215257806318160ddd146120f757806323b872dd146120385780632b4c9f1614611fc9578063313ce56714611f6b5780633644e51514611f2a5780633950935114611cfa5780633c130d9014611c9f5780634885b25414611bf1578063572b6c0514611ba657806370a0823114611b2157806373c8a9581461199e5780637ecebe001461191957806388d695b2146118d55780638a6d57b614610f495780638da5cb5b14610ed857806395d89b4114610e65578063a457c2d714610df8578063a9059cbb14610d8b578063b88d4fde14610c7b578063c3666c3614610a3e578063d505accf146107cb578063dd62ed3e1461071c578063e0df5b6f146104d1578063eb7955491461040c578063f2fde38b146103185763f7ba94bd1461015b57600080fd5b346102bc576101693661240a565b90917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806101aa61336a565b92541691169081036102eb57508181036102c15760005b8181106101ca57005b6101d5818387612867565b3573ffffffffffffffffffffffffffffffffffffffff81168091036102bc576101ff828587612867565b359081471061028a57600080809381935af13d15610282573d90610222826132e1565b916102306040519384612503565b82523d6000602084013e5b1561024957506001016101c1565b80511561025857602081519101fd5b7fd6bda2750000000000000000000000000000000000000000000000000000000060005260046000fd5b60609061023b565b50477fcf4791810000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b600080fd5b7f658253360000000000000000000000000000000000000000000000000000000060005260046000fd5b7f2ef4875e0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b346102bc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc5761034f612300565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc9061037961336a565b9073ffffffffffffffffffffffffffffffffffffffff8084541692168281036102eb575073ffffffffffffffffffffffffffffffffffffffff16918282036103bd57005b827fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b346102bc5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc57610443612300565b60243560443567ffffffffffffffff81116102bc57610466903690600401612476565b9190927f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee9261049f838361049861336a565b8097613140565b813b6104b1575b602060405160018152f35b6104c7946104c091369161331b565b928061347e565b80808080806104a6565b346102bc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc5760043567ffffffffffffffff81116102bc57610520903690600401612476565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff8061055f61336a565b92541691169081036102eb57507ff41bf6a5db26bffdfab174dcf66b31fbba8fdb7e3db040721ce1e62d61839cea9067ffffffffffffffff81116106ed576105a782546125e6565b601f81116106a5575b506000601f821160011461060a578192936000926105ff575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179055600080f35b0135905083806105c9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216938382526020822091805b86811061068d5750836001959610610655575b505050811b019055005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c1991013516905583808061064b565b90926020600181928686013581550194019101610638565b826000526020600020601f830160051c810191602084106106e3575b601f0160051c01905b8181106106d757506105b0565b600081556001016106ca565b90915081906106c1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b346102bc5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc57610753612300565b73ffffffffffffffffffffffffffffffffffffffff610770612323565b91166000527f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbef60205273ffffffffffffffffffffffffffffffffffffffff604060002091166000526020526020604060002054604051908152f35b346102bc5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc57610802612300565b61080a612323565b6044359060643560843560ff81168091036102bc5773ffffffffffffffffffffffffffffffffffffffff8516917f93fe0ff7226b064a4a8f0b09910762afb4bc2441835792c021ffd78cd513011d8315610a14578142116109e6576020926000926080928685528552604084209081549160018301905560405190868201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9845288604084015273ffffffffffffffffffffffffffffffffffffffff8a1660608401528a8684015260a083015260c082015260c081526108ec60e082612503565b5190206108f76127c0565b9060405190868201927f19010000000000000000000000000000000000000000000000000000000000008452602283015260428201526042815261093c606282612503565b519020906040519182528482015260a435604082015260c435606082015282805260015afa156109da5773ffffffffffffffffffffffffffffffffffffffff60005116036109b0576109ae927f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee6126fb565b005b7f822a64c80000000000000000000000000000000000000000000000000000000060005260046000fd5b6040513d6000823e3d90fd5b507fea2b6f580000000000000000000000000000000000000000000000000000000060005260045260246000fd5b7fa97469760000000000000000000000000000000000000000000000000000000060005260046000fd5b346102bc57610a4c36612377565b9094929390917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610a9161336a565b92541691169081036102eb5750808214801590610c71575b6102c15760005b828110610ab957005b73ffffffffffffffffffffffffffffffffffffffff610ae1610adc83858a612867565b6128a6565b166040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f80ac58cd000000000000000000000000000000000000000000000000000000006004820152602081602481855afa9081156109da57600091610c43575b5015610c16575073ffffffffffffffffffffffffffffffffffffffff610b70610adc83858a612867565b1690610b80610adc828689612867565b91610b8c82878b612867565b3592813b156102bc57606473ffffffffffffffffffffffffffffffffffffffff916000809460405197889586947f42842e0e00000000000000000000000000000000000000000000000000000000865230600487015216602485015260448401525af19182156109da57600192610c05575b5001610ab0565b6000610c1091612503565b88610bfe565b7f986b9f1f0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b610c64915060203d8111610c6a575b610c5c8183612503565b810190613352565b89610b46565b503d610c52565b5082821415610aa9565b346102bc5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc57610cb2612300565b610cba612323565b60443560643567ffffffffffffffff81116102bc57610cdd903690600401612476565b9290937f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee93610d49848484610d1061336a565b9873ffffffffffffffffffffffffffffffffffffffff8a1673ffffffffffffffffffffffffffffffffffffffff831603610d7a57613140565b823b610d5a57602060405160018152f35b610d6f95610d6991369161331b565b9361347e565b8080808080806104a6565b610d86848b8484612f62565b613140565b346102bc5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc576104a6610dc5612300565b602435907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee610df261336a565b90613140565b346102bc5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc576104a6610e32612300565b602435907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee610e5f61336a565b90612f62565b346102bc5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc57610ed4610ec07f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a82612639565b6040519182916020835260208301906122a1565b0390f35b346102bc5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc57602073ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc5416604051908152f35b346102bc5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc5760043567ffffffffffffffff81116102bc57610f98903690600401612476565b9060243567ffffffffffffffff81116102bc57610fb9903690600401612476565b90926044359060ff82168092036102bc5760643567ffffffffffffffff81116102bc57610fea903690600401612346565b92909360843567ffffffffffffffff81116102bc5761100d903690600401612346565b9790967fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc61103961336a565b7f5b388d90dc1312ba799f321972f13311234fa1163bcabec7cf66101c4876eb8354600181101561184e575060017f5b388d90dc1312ba799f321972f13311234fa1163bcabec7cf66101c4876eb835573ffffffffffffffffffffffffffffffffffffffff169081611880575b50507fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d60208190527fa53d5a615b1d5279f1a6647c5c0f31bf064b1e70af135676a4a96aeaeb691a2f805460017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091821681179092557f9aed5868410a44d2b2b5afc971a20f888382428fa3391cbfac5b1840d2aa352f80548216831790557fc6b5f03b0da98290ffa91f37e0f0b8e2702961697d46a1f6b2d24c3136073a6680548216831790557f27d9344430097694b44c54daae5d82db951e70f450202e98a31fb7e512b2167480548216831790557f53f41a97000000000000000000000000000000000000000000000000000000006000527f56711464edcafe4e82a7e7542dffa87959622899ee5b1c678e1763c8a0b334a98054909116821790557fd217496980d1cb14720b20a80af36676bbece8e5feeb5d8970a9681a2c76bb745491967f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a81939092909181101561184e575060017fd217496980d1cb14720b20a80af36676bbece8e5feeb5d8970a9681a2c76bb745567ffffffffffffffff82116106ed57819061127684546125e6565b601f81116117fb575b50600090601f83116001146117595760009261174e575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790555b67ffffffffffffffff82116106ed5781906113037f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a82546125e6565b601f81116116bf575b50600090601f83116001146115c0576000926115b5575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916177f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a82555b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a835416177f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a83557fa219a0250000000000000000000000000000000000000000000000000000000060005280602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f3c130d900000000000000000000000000000000000000000000000000000000060005280602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f9d8ff7da00000000000000000000000000000000000000000000000000000000600052602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee9061150881612544565b926115166040519485612503565b818452602084019160051b8101903682116102bc57915b8183106115885750505061154084612544565b9261154e6040519485612503565b848452602084019460051b8101903682116102bc57945b8186106115785750506109ae9350612de8565b8535815260209586019501611565565b823573ffffffffffffffffffffffffffffffffffffffff811681036102bc5781526020928301920161152d565b013590508880611323565b7f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a8282527f38f29baf5b4f1132a8b8d899467148f866f7b7a6d08f3c484abb8c5467292cef929091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016815b8181106116a7575090846001959493921061166f575b505050811b017f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a8255611375565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c19910135169055888080611642565b9193602060018192878701358155019501920161162c565b7f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a826000529091507f38f29baf5b4f1132a8b8d899467148f866f7b7a6d08f3c484abb8c5467292cef601f840160051c81019160208510611744575b90601f859493920160051c01905b818110611735575061130c565b60008155849350600101611728565b909150819061171a565b013590508b80611296565b90917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016918481526020812092815b8181106117e357509084600195949392106117ab575b505050811b0190556112c8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c199101351690558b808061179e565b91936020600181928787013581550195019201611788565b909150836000526020600020601f840160051c81019160208510611844575b90601f859493920160051c01905b818110611835575061127f565b60008155849350600101611828565b909150819061181a565b7fbf0c18ec00000000000000000000000000000000000000000000000000000000600052600452600160245260446000fd5b817fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a389806110a6565b346102bc576104a66118e63661240a565b929091907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee61191361336a565b90612b73565b346102bc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc57611950612300565b73ffffffffffffffffffffffffffffffffffffffff7f93fe0ff7226b064a4a8f0b09910762afb4bc2441835792c021ffd78cd513011d91166000526020526020604060002054604051908152f35b346102bc576119ac36612377565b949293917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806119ef61336a565b92541691169081036102eb5750808314801590611b17575b6102c15760005b838110611a1757005b611a22818388612867565b3573ffffffffffffffffffffffffffffffffffffffff8116908181036102bc5760006020918a82611a6387611a5c610adc828f8f90612867565b938b612867565b356040519073ffffffffffffffffffffffffffffffffffffffff878301947fa9059cbb000000000000000000000000000000000000000000000000000000008652166024830152604482015260448152611abe606482612503565b51925af1156109da576000513d611b0e5750803b155b611ae15750600101611a0e565b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b60011415611ad4565b5085831415611a07565b346102bc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc57611b58612300565b73ffffffffffffffffffffffffffffffffffffffff7f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee91166000526020526020604060002054604051908152f35b346102bc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc576020611be7611be2612300565b6124a4565b6040519015158152f35b346102bc5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc57611c28612300565b60243567ffffffffffffffff81116102bc57611c48903690600401612346565b916044359267ffffffffffffffff84116102bc57611c6d6104a6943690600401612346565b9390927f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee611c9961336a565b906128c7565b346102bc5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc57610ed4610ec07ff41bf6a5db26bffdfab174dcf66b31fbba8fdb7e3db040721ce1e62d61839cea612639565b346102bc5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc57611d31612300565b602435611d3c61336a565b9073ffffffffffffffffffffffffffffffffffffffff8316928315611ee65773ffffffffffffffffffffffffffffffffffffffff83166000527f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbef6020526040600020846000526020526040600020549180611e01575b84837f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925602073ffffffffffffffffffffffffffffffffffffffff886040519485521692a3602060405160018152f35b8083019280841115611e8b57505050602073ffffffffffffffffffffffffffffffffffffffff7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928185166000527f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbef83526040600020866000528352806040600020559250611db2565b6040517f93bc2ff100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015293909316602484015260448301526064820152608490fd5b73ffffffffffffffffffffffffffffffffffffffff837ff7e1ac0f000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b346102bc5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc576020611f636127c0565b604051908152f35b346102bc5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc57602060ff7f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a835416604051908152f35b346102bc5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102bc5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc576104a6612072612300565b61207a612323565b7f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee916120a461336a565b92604435938473ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff8516036120e5575b5050613140565b6120f0918484612f62565b85846120de565b346102bc5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc5760207f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbf054604051908152f35b346102bc5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc576104a661218c612300565b602435907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee6121b961336a565b906126fb565b346102bc5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc57610ed4610ec07f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a81612639565b346102bc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036102bc57611be76020917fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d61255c565b919082519283825260005b8481106122eb5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b806020809284010151828286010152016122ac565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036102bc57565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036102bc57565b9181601f840112156102bc5782359167ffffffffffffffff83116102bc576020808501948460051b0101116102bc57565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102bc5760043567ffffffffffffffff81116102bc57816123c091600401612346565b9290929160243567ffffffffffffffff81116102bc57816123e391600401612346565b929092916044359067ffffffffffffffff82116102bc5761240691600401612346565b9091565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102bc5760043567ffffffffffffffff81116102bc578161245391600401612346565b929092916024359067ffffffffffffffff82116102bc5761240691600401612346565b9181601f840112156102bc5782359167ffffffffffffffff83116102bc57602083818601950101116102bc57565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169081156124fc5773ffffffffffffffffffffffffffffffffffffffff161490565b5050600090565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106ed57604052565b67ffffffffffffffff81116106ed5760051b60200190565b907fffffffff00000000000000000000000000000000000000000000000000000000167fffffffff0000000000000000000000000000000000000000000000000000000081146124fc577f01ffc9a70000000000000000000000000000000000000000000000000000000081146125df5760005260205260ff6040600020541690565b5050600190565b90600182811c9216801561262f575b602083101461260057565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f16916125f5565b906040519182600082549261264d846125e6565b80845293600181169081156126bb5750600114612674575b5061267292500383612503565b565b90506000929192526020600020906000915b81831061269f5750509060206126729282010138612665565b6020919350806001915483858901015201910190918492612686565b602093506126729592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138612665565b929173ffffffffffffffffffffffffffffffffffffffff1692831561277c5773ffffffffffffffffffffffffffffffffffffffff7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259260016020938383166000520183526040600020866000528352846040600020556040519485521692a3565b73ffffffffffffffffffffffffffffffffffffffff827ff7e1ac0f000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b6127e97f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a81612639565b6020815191012060405160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260408201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260a0815261286160c082612503565b51902090565b91908110156128775760051b0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3573ffffffffffffffffffffffffffffffffffffffff811681036102bc5790565b959490939291928581036102c1578015612b6a5773ffffffffffffffffffffffffffffffffffffffff8416600052866020526040600020549160009660009260005b818110612963575050505050505073ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff821603612951575b50505050565b61295a93612f62565b3880808061294b565b73ffffffffffffffffffffffffffffffffffffffff612986610adc83858b612867565b168015612b2657612998828587612867565b3580612a62575b906020917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef73ffffffffffffffffffffffffffffffffffffffff8c16938492604051908152a38a151580612a58575b6129fc575b50600101612909565b8a87039087821015612a2257600090815260208d905260409020908601905560016129f3565b878c917fe450d38c0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b50858b14156129ee565b9a8b810190811115612afc579a8c73ffffffffffffffffffffffffffffffffffffffff8b16838114612aae5750906040602093926000908482528552208181540190555b90915061299f565b90508882989211612ac6575090866020920196612aa6565b8888917fe450d38c0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b7fdedd83410000000000000000000000000000000000000000000000000000000060005260046000fd5b73ffffffffffffffffffffffffffffffffffffffff897f754f425b000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b50505050505050565b92939490918185036102c1578415612dcc5773ffffffffffffffffffffffffffffffffffffffff8316600052836020526040600020549560009260009660005b818110612c6557505050505080151580612c5b575b612bd4575b5050505050565b8085039480861015612c1157505073ffffffffffffffffffffffffffffffffffffffff166000526020526040600020910190553880808080612bcd565b73ffffffffffffffffffffffffffffffffffffffff837fe450d38c000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b5083811415612bc8565b73ffffffffffffffffffffffffffffffffffffffff612c88610adc838589612867565b168015612d8857612c9a828587612867565b3580612cee575b90600192916040519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602073ffffffffffffffffffffffffffffffffffffffff8c1692a301612bb3565b9687810190811115612afc579673ffffffffffffffffffffffffffffffffffffffff8916828114612d3b57509060019291604060008381528c602052208181540190555b90919250612ca1565b8c829c9211612d525750908a60019392019a612d32565b8c8c917fe450d38c0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b73ffffffffffffffffffffffffffffffffffffffff887f754f425b000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b505050505050565b80518210156128775760209160051b010190565b9091825190805182036102c157811561294b5760009360005b838110612e5c575050505081612e15575050565b6002018054918083019280841115612e2c57505055565b7f0366a5f60000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b73ffffffffffffffffffffffffffffffffffffffff612e7b8284612dd4565b51168015612f3857612e8d8285612dd4565b5180612ecb575b9060007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602060019594604051908152a301612e01565b96919087830192831115612f0e5773ffffffffffffffffffffffffffffffffffffffff811660009081526020889052604090208054890190559196909190612e94565b7f5542ae7c0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f92fd9c8f0000000000000000000000000000000000000000000000000000000060005260046000fd5b92909173ffffffffffffffffffffffffffffffffffffffff81169384156130fc576001019073ffffffffffffffffffffffffffffffffffffffff841660005281602052604060002085600052602052604060002054927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841415806130f3575b61302f575b50505090602073ffffffffffffffffffffffffffffffffffffffff7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925926040519485521692a3565b80840393808510156130985750505073ffffffffffffffffffffffffffffffffffffffff7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92592602092828616600052835260406000208660005283528060406000205592612fe7565b6040517f137ad6ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015293909316602484015260448301526064820152608490fd5b50801515612fe2565b73ffffffffffffffffffffffffffffffffffffffff847ff7e1ac0f000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b929173ffffffffffffffffffffffffffffffffffffffff1692831561329d57826131aa575b50602073ffffffffffffffffffffffffffffffffffffffff7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef926040519485521692a3565b73ffffffffffffffffffffffffffffffffffffffff821660005280602052604060002054838103908082101561325157508260209273ffffffffffffffffffffffffffffffffffffffff9287847fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef97160361322a575b5050925050613165565b83831660005281855260406000205586600052835260406000208581540190553880613220565b849073ffffffffffffffffffffffffffffffffffffffff857fe450d38c000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b73ffffffffffffffffffffffffffffffffffffffff827f754f425b000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b67ffffffffffffffff81116106ed57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192613327826132e1565b916133356040519384612503565b8294818452818301116102bc578281602093846000960137010152565b908160209103126102bc575180151581036102bc5790565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016801561346f573233148015613474575b61346f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c908033149081156133f5575b506133f257503390565b90565b60649150602090604051928380927f019a20280000000000000000000000000000000000000000000000000000000082528660048301523360248301523060448301525afa9081156109da57600091613450575b50386133e8565b613469915060203d602011610c6a57610c5c8183612503565b38613449565b503390565b50601836106133b1565b6134ed73ffffffffffffffffffffffffffffffffffffffff9294958360209516968460405197889687967f4fc3585900000000000000000000000000000000000000000000000000000000885216600487015216602485015260448401526080606484015260848301906122a1565b03816000865af19081156109da5760009161357d575b507fffffffff000000000000000000000000000000000000000000000000000000007f4fc35859000000000000000000000000000000000000000000000000000000009116036135505750565b7f6d4497360000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6020813d6020116135f7575b8161359660209383612503565b810103126135f35751907fffffffff00000000000000000000000000000000000000000000000000000000821682036135f057507fffffffff00000000000000000000000000000000000000000000000000000000613503565b80fd5b5080fd5b3d915061358956fea26469706673582212202b373a0a64729ebfb47856a51d39afcf726f2a6e3ede5c5b8538b3bdd3c2d2bc64736f6c634300081e0033",
  "deployedBytecode": "0x6080604052600436101561001257600080fd5b60003560e01c806301ffc9a71461221a57806306fdde03146121bf578063095ea7b31461215257806318160ddd146120f757806323b872dd146120385780632b4c9f1614611fc9578063313ce56714611f6b5780633644e51514611f2a5780633950935114611cfa5780633c130d9014611c9f5780634885b25414611bf1578063572b6c0514611ba657806370a0823114611b2157806373c8a9581461199e5780637ecebe001461191957806388d695b2146118d55780638a6d57b614610f495780638da5cb5b14610ed857806395d89b4114610e65578063a457c2d714610df8578063a9059cbb14610d8b578063b88d4fde14610c7b578063c3666c3614610a3e578063d505accf146107cb578063dd62ed3e1461071c578063e0df5b6f146104d1578063eb7955491461040c578063f2fde38b146103185763f7ba94bd1461015b57600080fd5b346102bc576101693661240a565b90917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806101aa61336a565b92541691169081036102eb57508181036102c15760005b8181106101ca57005b6101d5818387612867565b3573ffffffffffffffffffffffffffffffffffffffff81168091036102bc576101ff828587612867565b359081471061028a57600080809381935af13d15610282573d90610222826132e1565b916102306040519384612503565b82523d6000602084013e5b1561024957506001016101c1565b80511561025857602081519101fd5b7fd6bda2750000000000000000000000000000000000000000000000000000000060005260046000fd5b60609061023b565b50477fcf4791810000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b600080fd5b7f658253360000000000000000000000000000000000000000000000000000000060005260046000fd5b7f2ef4875e0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b346102bc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc5761034f612300565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc9061037961336a565b9073ffffffffffffffffffffffffffffffffffffffff8084541692168281036102eb575073ffffffffffffffffffffffffffffffffffffffff16918282036103bd57005b827fffffffffffffffffffffffff00000000000000000000000000000000000000008254161790557f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3005b346102bc5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc57610443612300565b60243560443567ffffffffffffffff81116102bc57610466903690600401612476565b9190927f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee9261049f838361049861336a565b8097613140565b813b6104b1575b602060405160018152f35b6104c7946104c091369161331b565b928061347e565b80808080806104a6565b346102bc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc5760043567ffffffffffffffff81116102bc57610520903690600401612476565b7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff8061055f61336a565b92541691169081036102eb57507ff41bf6a5db26bffdfab174dcf66b31fbba8fdb7e3db040721ce1e62d61839cea9067ffffffffffffffff81116106ed576105a782546125e6565b601f81116106a5575b506000601f821160011461060a578192936000926105ff575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916179055600080f35b0135905083806105c9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08216938382526020822091805b86811061068d5750836001959610610655575b505050811b019055005b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c1991013516905583808061064b565b90926020600181928686013581550194019101610638565b826000526020600020601f830160051c810191602084106106e3575b601f0160051c01905b8181106106d757506105b0565b600081556001016106ca565b90915081906106c1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b346102bc5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc57610753612300565b73ffffffffffffffffffffffffffffffffffffffff610770612323565b91166000527f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbef60205273ffffffffffffffffffffffffffffffffffffffff604060002091166000526020526020604060002054604051908152f35b346102bc5760e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc57610802612300565b61080a612323565b6044359060643560843560ff81168091036102bc5773ffffffffffffffffffffffffffffffffffffffff8516917f93fe0ff7226b064a4a8f0b09910762afb4bc2441835792c021ffd78cd513011d8315610a14578142116109e6576020926000926080928685528552604084209081549160018301905560405190868201927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9845288604084015273ffffffffffffffffffffffffffffffffffffffff8a1660608401528a8684015260a083015260c082015260c081526108ec60e082612503565b5190206108f76127c0565b9060405190868201927f19010000000000000000000000000000000000000000000000000000000000008452602283015260428201526042815261093c606282612503565b519020906040519182528482015260a435604082015260c435606082015282805260015afa156109da5773ffffffffffffffffffffffffffffffffffffffff60005116036109b0576109ae927f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee6126fb565b005b7f822a64c80000000000000000000000000000000000000000000000000000000060005260046000fd5b6040513d6000823e3d90fd5b507fea2b6f580000000000000000000000000000000000000000000000000000000060005260045260246000fd5b7fa97469760000000000000000000000000000000000000000000000000000000060005260046000fd5b346102bc57610a4c36612377565b9094929390917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff80610a9161336a565b92541691169081036102eb5750808214801590610c71575b6102c15760005b828110610ab957005b73ffffffffffffffffffffffffffffffffffffffff610ae1610adc83858a612867565b6128a6565b166040517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f80ac58cd000000000000000000000000000000000000000000000000000000006004820152602081602481855afa9081156109da57600091610c43575b5015610c16575073ffffffffffffffffffffffffffffffffffffffff610b70610adc83858a612867565b1690610b80610adc828689612867565b91610b8c82878b612867565b3592813b156102bc57606473ffffffffffffffffffffffffffffffffffffffff916000809460405197889586947f42842e0e00000000000000000000000000000000000000000000000000000000865230600487015216602485015260448401525af19182156109da57600192610c05575b5001610ab0565b6000610c1091612503565b88610bfe565b7f986b9f1f0000000000000000000000000000000000000000000000000000000060005260045260246000fd5b610c64915060203d8111610c6a575b610c5c8183612503565b810190613352565b89610b46565b503d610c52565b5082821415610aa9565b346102bc5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc57610cb2612300565b610cba612323565b60443560643567ffffffffffffffff81116102bc57610cdd903690600401612476565b9290937f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee93610d49848484610d1061336a565b9873ffffffffffffffffffffffffffffffffffffffff8a1673ffffffffffffffffffffffffffffffffffffffff831603610d7a57613140565b823b610d5a57602060405160018152f35b610d6f95610d6991369161331b565b9361347e565b8080808080806104a6565b610d86848b8484612f62565b613140565b346102bc5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc576104a6610dc5612300565b602435907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee610df261336a565b90613140565b346102bc5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc576104a6610e32612300565b602435907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee610e5f61336a565b90612f62565b346102bc5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc57610ed4610ec07f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a82612639565b6040519182916020835260208301906122a1565b0390f35b346102bc5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc57602073ffffffffffffffffffffffffffffffffffffffff7fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc5416604051908152f35b346102bc5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc5760043567ffffffffffffffff81116102bc57610f98903690600401612476565b9060243567ffffffffffffffff81116102bc57610fb9903690600401612476565b90926044359060ff82168092036102bc5760643567ffffffffffffffff81116102bc57610fea903690600401612346565b92909360843567ffffffffffffffff81116102bc5761100d903690600401612346565b9790967fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc61103961336a565b7f5b388d90dc1312ba799f321972f13311234fa1163bcabec7cf66101c4876eb8354600181101561184e575060017f5b388d90dc1312ba799f321972f13311234fa1163bcabec7cf66101c4876eb835573ffffffffffffffffffffffffffffffffffffffff169081611880575b50507fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d60208190527fa53d5a615b1d5279f1a6647c5c0f31bf064b1e70af135676a4a96aeaeb691a2f805460017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091821681179092557f9aed5868410a44d2b2b5afc971a20f888382428fa3391cbfac5b1840d2aa352f80548216831790557fc6b5f03b0da98290ffa91f37e0f0b8e2702961697d46a1f6b2d24c3136073a6680548216831790557f27d9344430097694b44c54daae5d82db951e70f450202e98a31fb7e512b2167480548216831790557f53f41a97000000000000000000000000000000000000000000000000000000006000527f56711464edcafe4e82a7e7542dffa87959622899ee5b1c678e1763c8a0b334a98054909116821790557fd217496980d1cb14720b20a80af36676bbece8e5feeb5d8970a9681a2c76bb745491967f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a81939092909181101561184e575060017fd217496980d1cb14720b20a80af36676bbece8e5feeb5d8970a9681a2c76bb745567ffffffffffffffff82116106ed57819061127684546125e6565b601f81116117fb575b50600090601f83116001146117595760009261174e575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790555b67ffffffffffffffff82116106ed5781906113037f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a82546125e6565b601f81116116bf575b50600090601f83116001146115c0576000926115b5575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916177f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a82555b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a835416177f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a83557fa219a0250000000000000000000000000000000000000000000000000000000060005280602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f3c130d900000000000000000000000000000000000000000000000000000000060005280602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f9d8ff7da00000000000000000000000000000000000000000000000000000000600052602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee9061150881612544565b926115166040519485612503565b818452602084019160051b8101903682116102bc57915b8183106115885750505061154084612544565b9261154e6040519485612503565b848452602084019460051b8101903682116102bc57945b8186106115785750506109ae9350612de8565b8535815260209586019501611565565b823573ffffffffffffffffffffffffffffffffffffffff811681036102bc5781526020928301920161152d565b013590508880611323565b7f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a8282527f38f29baf5b4f1132a8b8d899467148f866f7b7a6d08f3c484abb8c5467292cef929091907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016815b8181106116a7575090846001959493921061166f575b505050811b017f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a8255611375565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c19910135169055888080611642565b9193602060018192878701358155019501920161162c565b7f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a826000529091507f38f29baf5b4f1132a8b8d899467148f866f7b7a6d08f3c484abb8c5467292cef601f840160051c81019160208510611744575b90601f859493920160051c01905b818110611735575061130c565b60008155849350600101611728565b909150819061171a565b013590508b80611296565b90917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016918481526020812092815b8181106117e357509084600195949392106117ab575b505050811b0190556112c8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88560031b161c199101351690558b808061179e565b91936020600181928787013581550195019201611788565b909150836000526020600020601f840160051c81019160208510611844575b90601f859493920160051c01905b818110611835575061127f565b60008155849350600101611828565b909150819061181a565b7fbf0c18ec00000000000000000000000000000000000000000000000000000000600052600452600160245260446000fd5b817fffffffffffffffffffffffff000000000000000000000000000000000000000082541617905560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a389806110a6565b346102bc576104a66118e63661240a565b929091907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee61191361336a565b90612b73565b346102bc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc57611950612300565b73ffffffffffffffffffffffffffffffffffffffff7f93fe0ff7226b064a4a8f0b09910762afb4bc2441835792c021ffd78cd513011d91166000526020526020604060002054604051908152f35b346102bc576119ac36612377565b949293917fc9ed16f33ab3a66c84bfd83099ccb2a8845871e2e1c1928f63797152f0fd54cc73ffffffffffffffffffffffffffffffffffffffff806119ef61336a565b92541691169081036102eb5750808314801590611b17575b6102c15760005b838110611a1757005b611a22818388612867565b3573ffffffffffffffffffffffffffffffffffffffff8116908181036102bc5760006020918a82611a6387611a5c610adc828f8f90612867565b938b612867565b356040519073ffffffffffffffffffffffffffffffffffffffff878301947fa9059cbb000000000000000000000000000000000000000000000000000000008652166024830152604482015260448152611abe606482612503565b51925af1156109da576000513d611b0e5750803b155b611ae15750600101611a0e565b7f5274afe70000000000000000000000000000000000000000000000000000000060005260045260246000fd5b60011415611ad4565b5085831415611a07565b346102bc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc57611b58612300565b73ffffffffffffffffffffffffffffffffffffffff7f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee91166000526020526020604060002054604051908152f35b346102bc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc576020611be7611be2612300565b6124a4565b6040519015158152f35b346102bc5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc57611c28612300565b60243567ffffffffffffffff81116102bc57611c48903690600401612346565b916044359267ffffffffffffffff84116102bc57611c6d6104a6943690600401612346565b9390927f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee611c9961336a565b906128c7565b346102bc5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc57610ed4610ec07ff41bf6a5db26bffdfab174dcf66b31fbba8fdb7e3db040721ce1e62d61839cea612639565b346102bc5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc57611d31612300565b602435611d3c61336a565b9073ffffffffffffffffffffffffffffffffffffffff8316928315611ee65773ffffffffffffffffffffffffffffffffffffffff83166000527f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbef6020526040600020846000526020526040600020549180611e01575b84837f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925602073ffffffffffffffffffffffffffffffffffffffff886040519485521692a3602060405160018152f35b8083019280841115611e8b57505050602073ffffffffffffffffffffffffffffffffffffffff7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925928185166000527f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbef83526040600020866000528352806040600020559250611db2565b6040517f93bc2ff100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015293909316602484015260448301526064820152608490fd5b73ffffffffffffffffffffffffffffffffffffffff837ff7e1ac0f000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b346102bc5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc576020611f636127c0565b604051908152f35b346102bc5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc57602060ff7f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a835416604051908152f35b346102bc5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346102bc5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc576104a6612072612300565b61207a612323565b7f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee916120a461336a565b92604435938473ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff8516036120e5575b5050613140565b6120f0918484612f62565b85846120de565b346102bc5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc5760207f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbf054604051908152f35b346102bc5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc576104a661218c612300565b602435907f1da92899d3da68bf9787824388a37ea2bfa79780bcef91b9716c390eec8ecbee6121b961336a565b906126fb565b346102bc5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc57610ed4610ec07f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a81612639565b346102bc5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102bc576004357fffffffff00000000000000000000000000000000000000000000000000000000811681036102bc57611be76020917fca9d3e17f264b0f3984e2634e94adb37fa3e6a8103f06aeae6fa59e21c769f5d61255c565b919082519283825260005b8481106122eb5750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8460006020809697860101520116010190565b806020809284010151828286010152016122ac565b6004359073ffffffffffffffffffffffffffffffffffffffff821682036102bc57565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036102bc57565b9181601f840112156102bc5782359167ffffffffffffffff83116102bc576020808501948460051b0101116102bc57565b60607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102bc5760043567ffffffffffffffff81116102bc57816123c091600401612346565b9290929160243567ffffffffffffffff81116102bc57816123e391600401612346565b929092916044359067ffffffffffffffff82116102bc5761240691600401612346565b9091565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126102bc5760043567ffffffffffffffff81116102bc578161245391600401612346565b929092916024359067ffffffffffffffff82116102bc5761240691600401612346565b9181601f840112156102bc5782359167ffffffffffffffff83116102bc57602083818601950101116102bc57565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169081156124fc5773ffffffffffffffffffffffffffffffffffffffff161490565b5050600090565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176106ed57604052565b67ffffffffffffffff81116106ed5760051b60200190565b907fffffffff00000000000000000000000000000000000000000000000000000000167fffffffff0000000000000000000000000000000000000000000000000000000081146124fc577f01ffc9a70000000000000000000000000000000000000000000000000000000081146125df5760005260205260ff6040600020541690565b5050600190565b90600182811c9216801561262f575b602083101461260057565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b91607f16916125f5565b906040519182600082549261264d846125e6565b80845293600181169081156126bb5750600114612674575b5061267292500383612503565b565b90506000929192526020600020906000915b81831061269f5750509060206126729282010138612665565b6020919350806001915483858901015201910190918492612686565b602093506126729592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b82010138612665565b929173ffffffffffffffffffffffffffffffffffffffff1692831561277c5773ffffffffffffffffffffffffffffffffffffffff7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259260016020938383166000520183526040600020866000528352846040600020556040519485521692a3565b73ffffffffffffffffffffffffffffffffffffffff827ff7e1ac0f000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b6127e97f335df4119bbb04f056b33eba33b826d3529129e458faf6daa9924b5a8f3b6a81612639565b6020815191012060405160208101917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260408201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260a0815261286160c082612503565b51902090565b91908110156128775760051b0190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b3573ffffffffffffffffffffffffffffffffffffffff811681036102bc5790565b959490939291928581036102c1578015612b6a5773ffffffffffffffffffffffffffffffffffffffff8416600052866020526040600020549160009660009260005b818110612963575050505050505073ffffffffffffffffffffffffffffffffffffffff821673ffffffffffffffffffffffffffffffffffffffff821603612951575b50505050565b61295a93612f62565b3880808061294b565b73ffffffffffffffffffffffffffffffffffffffff612986610adc83858b612867565b168015612b2657612998828587612867565b3580612a62575b906020917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef73ffffffffffffffffffffffffffffffffffffffff8c16938492604051908152a38a151580612a58575b6129fc575b50600101612909565b8a87039087821015612a2257600090815260208d905260409020908601905560016129f3565b878c917fe450d38c0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b50858b14156129ee565b9a8b810190811115612afc579a8c73ffffffffffffffffffffffffffffffffffffffff8b16838114612aae5750906040602093926000908482528552208181540190555b90915061299f565b90508882989211612ac6575090866020920196612aa6565b8888917fe450d38c0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b7fdedd83410000000000000000000000000000000000000000000000000000000060005260046000fd5b73ffffffffffffffffffffffffffffffffffffffff897f754f425b000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b50505050505050565b92939490918185036102c1578415612dcc5773ffffffffffffffffffffffffffffffffffffffff8316600052836020526040600020549560009260009660005b818110612c6557505050505080151580612c5b575b612bd4575b5050505050565b8085039480861015612c1157505073ffffffffffffffffffffffffffffffffffffffff166000526020526040600020910190553880808080612bcd565b73ffffffffffffffffffffffffffffffffffffffff837fe450d38c000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b5083811415612bc8565b73ffffffffffffffffffffffffffffffffffffffff612c88610adc838589612867565b168015612d8857612c9a828587612867565b3580612cee575b90600192916040519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602073ffffffffffffffffffffffffffffffffffffffff8c1692a301612bb3565b9687810190811115612afc579673ffffffffffffffffffffffffffffffffffffffff8916828114612d3b57509060019291604060008381528c602052208181540190555b90919250612ca1565b8c829c9211612d525750908a60019392019a612d32565b8c8c917fe450d38c0000000000000000000000000000000000000000000000000000000060005260045260245260445260646000fd5b73ffffffffffffffffffffffffffffffffffffffff887f754f425b000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b505050505050565b80518210156128775760209160051b010190565b9091825190805182036102c157811561294b5760009360005b838110612e5c575050505081612e15575050565b6002018054918083019280841115612e2c57505055565b7f0366a5f60000000000000000000000000000000000000000000000000000000060005260045260245260446000fd5b73ffffffffffffffffffffffffffffffffffffffff612e7b8284612dd4565b51168015612f3857612e8d8285612dd4565b5180612ecb575b9060007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602060019594604051908152a301612e01565b96919087830192831115612f0e5773ffffffffffffffffffffffffffffffffffffffff811660009081526020889052604090208054890190559196909190612e94565b7f5542ae7c0000000000000000000000000000000000000000000000000000000060005260046000fd5b7f92fd9c8f0000000000000000000000000000000000000000000000000000000060005260046000fd5b92909173ffffffffffffffffffffffffffffffffffffffff81169384156130fc576001019073ffffffffffffffffffffffffffffffffffffffff841660005281602052604060002085600052602052604060002054927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff841415806130f3575b61302f575b50505090602073ffffffffffffffffffffffffffffffffffffffff7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925926040519485521692a3565b80840393808510156130985750505073ffffffffffffffffffffffffffffffffffffffff7f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92592602092828616600052835260406000208660005283528060406000205592612fe7565b6040517f137ad6ab00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015293909316602484015260448301526064820152608490fd5b50801515612fe2565b73ffffffffffffffffffffffffffffffffffffffff847ff7e1ac0f000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b929173ffffffffffffffffffffffffffffffffffffffff1692831561329d57826131aa575b50602073ffffffffffffffffffffffffffffffffffffffff7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef926040519485521692a3565b73ffffffffffffffffffffffffffffffffffffffff821660005280602052604060002054838103908082101561325157508260209273ffffffffffffffffffffffffffffffffffffffff9287847fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef97160361322a575b5050925050613165565b83831660005281855260406000205586600052835260406000208581540190553880613220565b849073ffffffffffffffffffffffffffffffffffffffff857fe450d38c000000000000000000000000000000000000000000000000000000006000521660045260245260445260646000fd5b73ffffffffffffffffffffffffffffffffffffffff827f754f425b000000000000000000000000000000000000000000000000000000006000521660045260246000fd5b67ffffffffffffffff81116106ed57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192613327826132e1565b916133356040519384612503565b8294818452818301116102bc578281602093846000960137010152565b908160209103126102bc575180151581036102bc5790565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016801561346f573233148015613474575b61346f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36013560601c908033149081156133f5575b506133f257503390565b90565b60649150602090604051928380927f019a20280000000000000000000000000000000000000000000000000000000082528660048301523360248301523060448301525afa9081156109da57600091613450575b50386133e8565b613469915060203d602011610c6a57610c5c8183612503565b38613449565b503390565b50601836106133b1565b6134ed73ffffffffffffffffffffffffffffffffffffffff9294958360209516968460405197889687967f4fc3585900000000000000000000000000000000000000000000000000000000885216600487015216602485015260448401526080606484015260848301906122a1565b03816000865af19081156109da5760009161357d575b507fffffffff000000000000000000000000000000000000000000000000000000007f4fc35859000000000000000000000000000000000000000000000000000000009116036135505750565b7f6d4497360000000000000000000000000000000000000000000000000000000060005260045260246000fd5b6020813d6020116135f7575b8161359660209383612503565b810103126135f35751907fffffffff00000000000000000000000000000000000000000000000000000000821682036135f057507fffffffff00000000000000000000000000000000000000000000000000000000613503565b80fd5b5080fd5b3d915061358956fea26469706673582212202b373a0a64729ebfb47856a51d39afcf726f2a6e3ede5c5b8538b3bdd3c2d2bc64736f6c634300081e0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
