From 4ad94e9965d06c0b7e7ac328bd909cf089f91eb3 Mon Sep 17 00:00:00 2001 From: Javier Gonzalez Date: Tue, 19 Apr 2022 16:05:46 -0500 Subject: [PATCH] #22: bump solidity version --- contracts/Deployer.sol | 107 ++++++++++++++++++ contracts/curves/BondingCurve.sol | 2 +- contracts/curves/Power.sol | 2 +- contracts/testHelpers/ExposedTimedMint.sol | 2 +- contracts/tokens/CreatorToken.sol | 2 +- contracts/tokens/SimpleToken.sol | 2 +- contracts/tokens/TimedMintToken.sol | 2 +- contracts/tokens/standards/ERC20TimedMint.sol | 2 +- contracts/utils/Airdroppable.sol | 2 +- hardhat.config.ts | 2 +- package.json | 4 + test/Deployer.ts | 47 ++++++++ test/constants/contractBytecodes.ts | 4 + 13 files changed, 171 insertions(+), 9 deletions(-) create mode 100644 contracts/Deployer.sol create mode 100644 test/Deployer.ts create mode 100644 test/constants/contractBytecodes.ts diff --git a/contracts/Deployer.sol b/contracts/Deployer.sol new file mode 100644 index 0000000..0dce3f7 --- /dev/null +++ b/contracts/Deployer.sol @@ -0,0 +1,107 @@ +//SPDX-License-Identifier: MIT + +pragma solidity 0.8.13; + +import "@openzeppelin/contracts/access/AccessControl.sol"; +import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol"; + +contract Deployer is AccessControl{ + struct ContractInfo { + address deploymentAddress; + string contractType; + } + mapping(string => bytes) contractByteCodesByKey; + mapping(address => ContractInfo[]) contractsDeloyedByEOA; + uint256 public contractDeployPrice; + uint256 discountPercentage; + address NFTDiscountContract; + + /* + * @dev Deploys a contract and returns the address of the deployed contract + * @param _contractDeployPrice The price (in wei) that users must pay to deploy a contract + * @param _admin The address that can call the admin functions + * @return The address of the deployed contract + */ + constructor(uint256 _contractDeployPrice, address admin) { + contractDeployPrice = _contractDeployPrice; + _setupRole(DEFAULT_ADMIN_ROLE, admin); + } + + /* + * @dev Deploys a contract and returns the address of the deployed contract + * @param contractKey The key to get the bytecode of the contract + * @param salt A parameter to make the contract deploy unique + */ + function deploySimpleTokenContract( + string calldata contractType, + bytes32 salt, + uint256 _freeSupply, + uint256 _airdropSupply, + address vault, + string memory name, + string memory symbol, + address[] memory admins + ) public payable { + require( + msg.value >= contractDeployPrice, + "Insufficient payment to deploy" + ); + if(salt == 0) salt = keccak256(abi.encode(getChildren(msg.sender).length)); + bytes memory bytecode = getContractByteCode(contractType); + address c; + assembly { + c := create2(0, add(bytecode, 0x20), mload(bytecode), salt) + } + ContractInfo memory ci = ContractInfo(msg.sender, contractType); + contractsDeloyedByEOA[msg.sender].push(ci); + } + + /* + * @dev Returns contract info deployed by the given address + * @param deployer address to lookup + * @return array of contracts deployed by deployer + */ + function getChildren(address deployer) + public + view + returns (ContractInfo[] memory contractsDeployed) + { + contractsDeployed = contractsDeloyedByEOA[deployer]; + } + + /* + * @dev Sets the price to deploy a contract + * @param newPrice The new price (in wei) + */ + function setContractDeployPrice(uint256 newPrice) external { + contractDeployPrice = newPrice; + } + + /* + * @dev Gets the bytecode of a contract by name + * @param contractKey The key used to reference the contract + */ + function getContractByteCode(string calldata contractKey) + public + view + returns (bytes memory) + { + return contractByteCodesByKey[contractKey]; + } + + /* + * @dev Sets the bytecode of a contract by name + * @param contractKey The key which must be used to access the bytecode + * @param bytecode The bytecode to store + */ + function setContractByteCode( + string calldata contractKey, + bytes calldata byteCode + ) external onlyRole(DEFAULT_ADMIN_ROLE) { + contractByteCodesByKey[contractKey] = byteCode; + } + + function withdraw() external onlyRole(DEFAULT_ADMIN_ROLE) { + payable(address(msg.sender)).transfer(address(this).balance); + } +} diff --git a/contracts/curves/BondingCurve.sol b/contracts/curves/BondingCurve.sol index 5f8f5ca..ebecd30 100644 --- a/contracts/curves/BondingCurve.sol +++ b/contracts/curves/BondingCurve.sol @@ -1,5 +1,5 @@ //SPDX-License-Identifier: Unlicense -pragma solidity 0.8.6; +pragma solidity 0.8.13; import "./Power.sol"; // import "hardhat/console.sol"; diff --git a/contracts/curves/Power.sol b/contracts/curves/Power.sol index f0cf645..4c682d0 100644 --- a/contracts/curves/Power.sol +++ b/contracts/curves/Power.sol @@ -1,5 +1,5 @@ //SPDX-License-Identifier: Unlicense -pragma solidity 0.8.6; +pragma solidity 0.8.13; /** * @title Power function by Bancor diff --git a/contracts/testHelpers/ExposedTimedMint.sol b/contracts/testHelpers/ExposedTimedMint.sol index ff33b79..b325b16 100644 --- a/contracts/testHelpers/ExposedTimedMint.sol +++ b/contracts/testHelpers/ExposedTimedMint.sol @@ -1,6 +1,6 @@ //SPDX-License-Identifier: Unlicense -pragma solidity ^0.8.6; +pragma solidity ^0.8.13; import "../tokens/standards/ERC20TimedMint.sol"; diff --git a/contracts/tokens/CreatorToken.sol b/contracts/tokens/CreatorToken.sol index 4dfe545..922342b 100644 --- a/contracts/tokens/CreatorToken.sol +++ b/contracts/tokens/CreatorToken.sol @@ -1,5 +1,5 @@ //SPDX-License-Identifier: Unlicense -pragma solidity 0.8.6; +pragma solidity 0.8.13; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; diff --git a/contracts/tokens/SimpleToken.sol b/contracts/tokens/SimpleToken.sol index 00fd700..9e4bd86 100644 --- a/contracts/tokens/SimpleToken.sol +++ b/contracts/tokens/SimpleToken.sol @@ -1,5 +1,5 @@ //SPDX-License-Identifier: Unlicense -pragma solidity 0.8.6; +pragma solidity 0.8.13; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/access/AccessControl.sol"; diff --git a/contracts/tokens/TimedMintToken.sol b/contracts/tokens/TimedMintToken.sol index 090a3ec..a319204 100644 --- a/contracts/tokens/TimedMintToken.sol +++ b/contracts/tokens/TimedMintToken.sol @@ -1,5 +1,5 @@ //SPDX-License-Identifier: Unlicense -pragma solidity 0.8.6; +pragma solidity 0.8.13; import "@openzeppelin/contracts/access/AccessControl.sol"; import "./standards/ERC20TimedMint.sol"; diff --git a/contracts/tokens/standards/ERC20TimedMint.sol b/contracts/tokens/standards/ERC20TimedMint.sol index 58b4695..b3eb6b4 100644 --- a/contracts/tokens/standards/ERC20TimedMint.sol +++ b/contracts/tokens/standards/ERC20TimedMint.sol @@ -1,6 +1,6 @@ //SPDX-License-Identifier: Unlicensed -pragma solidity ^0.8.6; +pragma solidity ^0.8.13; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; diff --git a/contracts/utils/Airdroppable.sol b/contracts/utils/Airdroppable.sol index 3fd5bea..074457e 100644 --- a/contracts/utils/Airdroppable.sol +++ b/contracts/utils/Airdroppable.sol @@ -1,5 +1,5 @@ //SPDX-License-Identifier: Unlicense -pragma solidity 0.8.6; +pragma solidity 0.8.13; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/access/AccessControl.sol"; diff --git a/hardhat.config.ts b/hardhat.config.ts index 6916c13..6c7b444 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -21,6 +21,6 @@ task("accounts", "Prints the list of accounts", async (taskArgs, hre) => { * @type import('hardhat/config').HardhatUserConfig */ export default { - solidity: "0.8.6", + solidity: "0.8.13", }; diff --git a/package.json b/package.json index 4d886f6..cd86d58 100644 --- a/package.json +++ b/package.json @@ -1,4 +1,8 @@ { + "scripts": { + "compile": "npx hardhat compile", + "test": "npx hardhat test" + }, "devDependencies": { "@nomiclabs/hardhat-ethers": "^2.0.4", "@nomiclabs/hardhat-waffle": "^2.0.1", diff --git a/test/Deployer.ts b/test/Deployer.ts new file mode 100644 index 0000000..3ad1b14 --- /dev/null +++ b/test/Deployer.ts @@ -0,0 +1,47 @@ +import { contractByteCode } from './constants/contractBytecodes'; +import { Deployer } from './../typechain/Deployer.d'; +import { DeployerFactory } from './../typechain/DeployerFactory'; +import { ethers } from "hardhat" +import { BigNumber, Contract, Signer } from "ethers"; +import chai from "chai"; +import { solidity } from "ethereum-waffle"; +import { getAddress } from "@ethersproject/address"; + +chai.use(solidity); + +const { expect } = chai; +const INITIAL_DEPLOY_PRICE = BigNumber.from("1000000000000000000"); +const bytecodeForSimpleMintToken = + +describe.only("Deployer", () => { + let deployerContract: Deployer, + deployerAddress: Signer, + admin: Signer, + addresses: Signer[]; + + const setupDeployer = async () => { + [deployerAddress, admin, ...addresses] = await ethers.getSigners(); + deployerContract = await new DeployerFactory(deployerAddress).deploy( + INITIAL_DEPLOY_PRICE, + await admin.getAddress(), + ); + await deployerContract.deployed(); + }; + + describe("Deployment", async () => { + beforeEach(setupDeployer) + + it("should deploy", async () => { + expect(deployerAddress).to.be.ok; + }); + }) + describe("Setting Contract Type", async () => { + beforeEach(setupDeployer) + it("should deploy", async () => { + const expectedBytecode = ethers.utils.defaultAbiCoder.encode([ "string" ], contractByteCode.simpleToken); + await deployerContract.setContractByteCode("test_contract_1", expectedBytecode); + const givenBytecode = await deployerContract.getContractByteCode("test_contract_1"); + console.log(givenBytecode) + }); + }) +}) diff --git a/test/constants/contractBytecodes.ts b/test/constants/contractBytecodes.ts new file mode 100644 index 0000000..71164fb --- /dev/null +++ b/test/constants/contractBytecodes.ts @@ -0,0 +1,4 @@ +export const contractByteCode = { + simpleToken: "0x60a060405260006006553480156200001657600080fd5b5060405162003c1138038062003c1183398181016040528101906200003c9190620007d2565b82828160039080519060200190620000569291906200040a565b5080600490805190602001906200006f9291906200040a565b5050506200008484876200010d60201b60201c565b6200009630866200010d60201b60201c565b8486620000a49190620008fa565b6080818152505060005b81518110156200010057620000ea6000801b838381518110620000d657620000d562000957565b5b60200260200101516200028560201b60201c565b8080620000f79062000986565b915050620000ae565b5050505050505062000ae8565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200017f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001769062000a34565b60405180910390fd5b62000193600083836200029b60201b60201c565b8060026000828254620001a79190620008fa565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620001fe9190620008fa565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000265919062000a67565b60405180910390a36200028160008383620002a060201b60201c565b5050565b620002978282620002a560201b60201c565b5050565b505050565b505050565b620002b782826200039760201b60201c565b620003935760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620003386200040260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b828054620004189062000ab3565b90600052602060002090601f0160209004810192826200043c576000855562000488565b82601f106200045757805160ff191683800117855562000488565b8280016001018555821562000488579182015b82811115620004875782518255916020019190600101906200046a565b5b5090506200049791906200049b565b5090565b5b80821115620004b65760008160009055506001016200049c565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b620004e381620004ce565b8114620004ef57600080fd5b50565b6000815190506200050381620004d8565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620005368262000509565b9050919050565b620005488162000529565b81146200055457600080fd5b50565b60008151905062000568816200053d565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620005c38262000578565b810181811067ffffffffffffffff82111715620005e557620005e462000589565b5b80604052505050565b6000620005fa620004ba565b9050620006088282620005b8565b919050565b600067ffffffffffffffff8211156200062b576200062a62000589565b5b620006368262000578565b9050602081019050919050565b60005b838110156200066357808201518184015260208101905062000646565b8381111562000673576000848401525b50505050565b6000620006906200068a846200060d565b620005ee565b905082815260208101848484011115620006af57620006ae62000573565b5b620006bc84828562000643565b509392505050565b600082601f830112620006dc57620006db6200056e565b5b8151620006ee84826020860162000679565b91505092915050565b600067ffffffffffffffff82111562000715576200071462000589565b5b602082029050602081019050919050565b600080fd5b6000620007426200073c84620006f7565b620005ee565b9050808382526020820190506020840283018581111562000768576200076762000726565b5b835b8181101562000795578062000780888262000557565b8452602084019350506020810190506200076a565b5050509392505050565b600082601f830112620007b757620007b66200056e565b5b8151620007c98482602086016200072b565b91505092915050565b60008060008060008060c08789031215620007f257620007f1620004c4565b5b60006200080289828a01620004f2565b96505060206200081589828a01620004f2565b95505060406200082889828a0162000557565b945050606087015167ffffffffffffffff8111156200084c576200084b620004c9565b5b6200085a89828a01620006c4565b935050608087015167ffffffffffffffff8111156200087e576200087d620004c9565b5b6200088c89828a01620006c4565b92505060a087015167ffffffffffffffff811115620008b057620008af620004c9565b5b620008be89828a016200079f565b9150509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200090782620004ce565b91506200091483620004ce565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200094c576200094b620008cb565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006200099382620004ce565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620009c857620009c7620008cb565b5b600182019050919050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000a1c601f83620009d3565b915062000a2982620009e4565b602082019050919050565b6000602082019050818103600083015262000a4f8162000a0d565b9050919050565b62000a6181620004ce565b82525050565b600060208201905062000a7e600083018462000a56565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000acc57607f821691505b60208210810362000ae25762000ae162000a84565b5b50919050565b60805161310662000b0b600039600081816108c901526109e301526131066000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806381a4a6d8116100f9578063ac68c56a11610097578063d547741f11610071578063d547741f1461050e578063dd62ed3e1461052a578063f364c90c1461055a578063f5f6d3af1461058a576101a9565b8063ac68c56a1461048e578063b297aa47146104be578063cb33fad1146104dc576101a9565b80639a114cb2116100d35780639a114cb2146103f4578063a217fddf14610410578063a457c2d71461042e578063a9059cbb1461045e576101a9565b806381a4a6d81461038857806391d14854146103a657806395d89b41146103d6576101a9565b80632f2ff15d1161016657806336568abe1161014057806336568abe146102ee578063378dc3dc1461030a578063395093511461032857806370a0823114610358576101a9565b80632f2ff15d146102aa578063313ce567146102c6578063318bdf82146102e4576101a9565b806301ffc9a7146101ae57806306fdde03146101de578063095ea7b3146101fc57806318160ddd1461022c57806323b872dd1461024a578063248a9ca31461027a575b600080fd5b6101c860048036038101906101c39190611df9565b6105a6565b6040516101d59190611e41565b60405180910390f35b6101e6610620565b6040516101f39190611ef5565b60405180910390f35b61021660048036038101906102119190611fab565b6106b2565b6040516102239190611e41565b60405180910390f35b6102346106d0565b6040516102419190611ffa565b60405180910390f35b610264600480360381019061025f9190612015565b6106da565b6040516102719190611e41565b60405180910390f35b610294600480360381019061028f919061209e565b6107d2565b6040516102a191906120da565b60405180910390f35b6102c460048036038101906102bf91906120f5565b6107f2565b005b6102ce61081b565b6040516102db9190612151565b60405180910390f35b6102ec610824565b005b610308600480360381019061030391906120f5565b610844565b005b6103126108c7565b60405161031f9190611ffa565b60405180910390f35b610342600480360381019061033d9190611fab565b6108eb565b60405161034f9190611e41565b60405180910390f35b610372600480360381019061036d919061216c565b610997565b60405161037f9190611ffa565b60405180910390f35b6103906109df565b60405161039d9190611ffa565b60405180910390f35b6103c060048036038101906103bb91906120f5565b610a07565b6040516103cd9190611e41565b60405180910390f35b6103de610a72565b6040516103eb9190611ef5565b60405180910390f35b61040e600480360381019061040991906121fe565b610b04565b005b610418610cab565b60405161042591906120da565b60405180910390f35b61044860048036038101906104439190611fab565b610cb2565b6040516104559190611e41565b60405180910390f35b61047860048036038101906104739190611fab565b610d9d565b6040516104859190611e41565b60405180910390f35b6104a860048036038101906104a3919061225e565b610dbb565b6040516104b59190611ffa565b60405180910390f35b6104c6610de5565b6040516104d39190611ffa565b60405180910390f35b6104f660048036038101906104f1919061229e565b610deb565b604051610505939291906122cb565b60405180910390f35b610528600480360381019061052391906120f5565b610e4f565b005b610544600480360381019061053f9190612302565b610e78565b6040516105519190611ffa565b60405180910390f35b610574600480360381019061056f9190612342565b610eff565b6040516105819190611e41565b60405180910390f35b6105a4600480360381019061059f919061216c565b610f31565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610619575061061882610f5c565b5b9050919050565b60606003805461062f906123b1565b80601f016020809104026020016040519081016040528092919081815260200182805461065b906123b1565b80156106a85780601f1061067d576101008083540402835291602001916106a8565b820191906000526020600020905b81548152906001019060200180831161068b57829003601f168201915b5050505050905090565b60006106c66106bf610fc6565b8484610fce565b6001905092915050565b6000600254905090565b60006106e7848484611197565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610732610fc6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156107b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a990612454565b60405180910390fd5b6107c6856107be610fc6565b858403610fce565b60019150509392505050565b600060056000838152602001908152602001600020600101549050919050565b6107fb826107d2565b61080c81610807610fc6565b611416565b61081683836114b3565b505050565b60006012905090565b6000801b61083981610834610fc6565b611416565b610841611594565b50565b61084c610fc6565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146108b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b0906124e6565b60405180910390fd5b6108c382826116c9565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061098d6108f8610fc6565b848460016000610906610fc6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109889190612535565b610fce565b6001905092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b60006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060048054610a81906123b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610aad906123b1565b8015610afa5780601f10610acf57610100808354040283529160200191610afa565b820191906000526020600020905b815481529060010190602001808311610add57829003601f168201915b5050505050905090565b60006001600654610b15919061258b565b905060003385604051602001610b2c929190612628565b604051602081830303815290604052805190602001209050600080610ba9868680806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506007600087815260200190815260200160002060000154856117ab565b9150915081610bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be4906126a0565b60405180910390fd5b610bf78482610eff565b15610c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2e90612732565b60405180910390fd5b610c5f816007600087815260200190815260200160002060030161188790919063ffffffff16565b7fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a3388604051610c90929190612761565b60405180910390a1610ca233886118d8565b50505050505050565b6000801b81565b60008060016000610cc1610fc6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d75906127fc565b60405180910390fd5b610d92610d89610fc6565b85858403610fce565b600191505092915050565b6000610db1610daa610fc6565b8484611197565b6001905092915050565b60008060001b610dd281610dcd610fc6565b611416565b610ddc84846118e7565b91505092915050565b60065481565b6000806000600760008581526020019081526020016000206000015492506007600085815260200190815260200160002060010160009054906101000a900460ff169050600760008581526020019081526020016000206002015491509193909250565b610e58826107d2565b610e6981610e64610fc6565b611416565b610e7383836116c9565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000610f2982600760008681526020019081526020016000206003016119ff90919063ffffffff16565b905092915050565b6000801b610f4681610f41610fc6565b611416565b610f5882610f5330610997565b611a4e565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361103d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110349061288e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a390612920565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161118a9190611ffa565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fd906129b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126c90612a44565b60405180910390fd5b611280838383611b51565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd90612ad6565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113999190612535565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516113fd9190611ffa565b60405180910390a3611410848484611b56565b50505050565b6114208282610a07565b6114af576114458173ffffffffffffffffffffffffffffffffffffffff166014611b5b565b6114538360001c6020611b5b565b604051602001611464929190612bca565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a69190611ef5565b60405180910390fd5b5050565b6114bd8282610a07565b6115905760016005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611535610fc6565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000600654116115d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d090612c50565b60405180910390fd5b60006007600060016006546115ee919061258b565b8152602001908152602001600020600201549050804211611644576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163b90612ce2565b60405180910390fd5b6001600760006001600654611659919061258b565b815260200190815260200160002060010160006101000a81548160ff0219169083151502179055507f96f2927ce74aa9968e629ed09ae43492f0303c3c814367c1f9d147a20be577b860016006546116b1919061258b565b6040516116be9190611ffa565b60405180910390a150565b6116d38282610a07565b156117a75760006005600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061174c610fc6565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b60008060008390506000805b8751811015611874576002826117cd9190612d02565b915060008882815181106117e4576117e3612d5c565b5b60200260200101519050808411611825578381604051602001611808929190612dac565b604051602081830303815290604052805190602001209350611860565b8084604051602001611838929190612dac565b60405160208183030381529060405280519060200120935060018361185d9190612535565b92505b50808061186c90612dd8565b9150506117b7565b5085821481935093505050935093915050565b6000610100826118979190612e4f565b90506000610100836118a99190612e80565b6001901b9050808460000160008481526020019081526020016000206000828254179250508190555050505050565b6118e3308383611197565b5050565b600060065490506000600654111561196b5760076000600160065461190c919061258b565b815260200190815260200160002060010160009054906101000a900460ff1661196a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196190612f23565b60405180910390fd5b5b600060076000838152602001908152602001600020905083816000018190555082426119979190612535565b81600201819055507f82a2300fd126ecf7b5c9a90b42f34bf55f665b1a2dc419b056b79b68d43b01f1828583600201546040516119d693929190612f43565b60405180910390a16001600660008282546119f19190612535565b925050819055505092915050565b60008061010083611a109190612e4f565b9050600061010084611a229190612e80565b6001901b9050600081866000016000858152602001908152602001600020541614159250505092915050565b600060065411611a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8a90612c50565b60405180910390fd5b600760006001600654611aa6919061258b565b815260200190815260200160002060010160009054906101000a900460ff16611b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afb90612fec565b60405180910390fd5b6000819050611b1383826118d8565b7fab2246061d7b0dd3631d037e3f6da75782ae489eeb9f6af878a4b25df9b07c778382604051611b44929190612761565b60405180910390a1505050565b505050565b505050565b606060006002836002611b6e9190612d02565b611b789190612535565b67ffffffffffffffff811115611b9157611b9061300c565b5b6040519080825280601f01601f191660200182016040528015611bc35781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611bfb57611bfa612d5c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110611c5f57611c5e612d5c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002611c9f9190612d02565b611ca99190612535565b90505b6001811115611d49577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110611ceb57611cea612d5c565b5b1a60f81b828281518110611d0257611d01612d5c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080611d429061303b565b9050611cac565b5060008414611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d84906130b0565b60405180910390fd5b8091505092915050565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611dd681611da1565b8114611de157600080fd5b50565b600081359050611df381611dcd565b92915050565b600060208284031215611e0f57611e0e611d97565b5b6000611e1d84828501611de4565b91505092915050565b60008115159050919050565b611e3b81611e26565b82525050565b6000602082019050611e566000830184611e32565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611e96578082015181840152602081019050611e7b565b83811115611ea5576000848401525b50505050565b6000601f19601f8301169050919050565b6000611ec782611e5c565b611ed18185611e67565b9350611ee1818560208601611e78565b611eea81611eab565b840191505092915050565b60006020820190508181036000830152611f0f8184611ebc565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611f4282611f17565b9050919050565b611f5281611f37565b8114611f5d57600080fd5b50565b600081359050611f6f81611f49565b92915050565b6000819050919050565b611f8881611f75565b8114611f9357600080fd5b50565b600081359050611fa581611f7f565b92915050565b60008060408385031215611fc257611fc1611d97565b5b6000611fd085828601611f60565b9250506020611fe185828601611f96565b9150509250929050565b611ff481611f75565b82525050565b600060208201905061200f6000830184611feb565b92915050565b60008060006060848603121561202e5761202d611d97565b5b600061203c86828701611f60565b935050602061204d86828701611f60565b925050604061205e86828701611f96565b9150509250925092565b6000819050919050565b61207b81612068565b811461208657600080fd5b50565b60008135905061209881612072565b92915050565b6000602082840312156120b4576120b3611d97565b5b60006120c284828501612089565b91505092915050565b6120d481612068565b82525050565b60006020820190506120ef60008301846120cb565b92915050565b6000806040838503121561210c5761210b611d97565b5b600061211a85828601612089565b925050602061212b85828601611f60565b9150509250929050565b600060ff82169050919050565b61214b81612135565b82525050565b60006020820190506121666000830184612142565b92915050565b60006020828403121561218257612181611d97565b5b600061219084828501611f60565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126121be576121bd612199565b5b8235905067ffffffffffffffff8111156121db576121da61219e565b5b6020830191508360208202830111156121f7576121f66121a3565b5b9250929050565b60008060006040848603121561221757612216611d97565b5b600061222586828701611f96565b935050602084013567ffffffffffffffff81111561224657612245611d9c565b5b612252868287016121a8565b92509250509250925092565b6000806040838503121561227557612274611d97565b5b600061228385828601612089565b925050602061229485828601611f96565b9150509250929050565b6000602082840312156122b4576122b3611d97565b5b60006122c284828501611f96565b91505092915050565b60006060820190506122e060008301866120cb565b6122ed6020830185611feb565b6122fa6040830184611e32565b949350505050565b6000806040838503121561231957612318611d97565b5b600061232785828601611f60565b925050602061233885828601611f60565b9150509250929050565b6000806040838503121561235957612358611d97565b5b600061236785828601611f96565b925050602061237885828601611f96565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806123c957607f821691505b6020821081036123dc576123db612382565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061243e602883611e67565b9150612449826123e2565b604082019050919050565b6000602082019050818103600083015261246d81612431565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b60006124d0602f83611e67565b91506124db82612474565b604082019050919050565b600060208201905081810360008301526124ff816124c3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061254082611f75565b915061254b83611f75565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156125805761257f612506565b5b828201905092915050565b600061259682611f75565b91506125a183611f75565b9250828210156125b4576125b3612506565b5b828203905092915050565b60008160601b9050919050565b60006125d7826125bf565b9050919050565b60006125e9826125cc565b9050919050565b6126016125fc82611f37565b6125de565b82525050565b6000819050919050565b61262261261d82611f75565b612607565b82525050565b600061263482856125f0565b6014820191506126448284612611565b6020820191508190509392505050565b7f4661696c656420746f207665726966792070726f6f6600000000000000000000600082015250565b600061268a601683611e67565b915061269582612654565b602082019050919050565b600060208201905081810360008301526126b98161267d565b9050919050565b7f546f6b656e7320616c726561647920636c61696d656420666f7220746869732060008201527f61697264726f7000000000000000000000000000000000000000000000000000602082015250565b600061271c602783611e67565b9150612727826126c0565b604082019050919050565b6000602082019050818103600083015261274b8161270f565b9050919050565b61275b81611f37565b82525050565b60006040820190506127766000830185612752565b6127836020830184611feb565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006127e6602583611e67565b91506127f18261278a565b604082019050919050565b60006020820190508181036000830152612815816127d9565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612878602483611e67565b91506128838261281c565b604082019050919050565b600060208201905081810360008301526128a78161286b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061290a602283611e67565b9150612915826128ae565b604082019050919050565b60006020820190508181036000830152612939816128fd565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061299c602583611e67565b91506129a782612940565b604082019050919050565b600060208201905081810360008301526129cb8161298f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612a2e602383611e67565b9150612a39826129d2565b604082019050919050565b60006020820190508181036000830152612a5d81612a21565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612ac0602683611e67565b9150612acb82612a64565b604082019050919050565b60006020820190508181036000830152612aef81612ab3565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000612b37601783612af6565b9150612b4282612b01565b601782019050919050565b6000612b5882611e5c565b612b628185612af6565b9350612b72818560208601611e78565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000612bb4601183612af6565b9150612bbf82612b7e565b601182019050919050565b6000612bd582612b2a565b9150612be18285612b4d565b9150612bec82612ba7565b9150612bf88284612b4d565b91508190509392505050565b7f4e6f2061697264726f7073206163746976650000000000000000000000000000600082015250565b6000612c3a601283611e67565b9150612c4582612c04565b602082019050919050565b60006020820190508181036000830152612c6981612c2d565b9050919050565b7f41697264726f7020636c61696d20706572696f64207374696c6c20616374697660008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b6000612ccc602183611e67565b9150612cd782612c70565b604082019050919050565b60006020820190508181036000830152612cfb81612cbf565b9050919050565b6000612d0d82611f75565b9150612d1883611f75565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612d5157612d50612506565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b612da6612da182612068565b612d8b565b82525050565b6000612db88285612d95565b602082019150612dc88284612d95565b6020820191508190509392505050565b6000612de382611f75565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612e1557612e14612506565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612e5a82611f75565b9150612e6583611f75565b925082612e7557612e74612e20565b5b828204905092915050565b6000612e8b82611f75565b9150612e9683611f75565b925082612ea657612ea5612e20565b5b828206905092915050565b7f41697264726f702063757272656e746c79206163746976652c2063726561746960008201527f6f6e206661696c65640000000000000000000000000000000000000000000000602082015250565b6000612f0d602983611e67565b9150612f1882612eb1565b604082019050919050565b60006020820190508181036000830152612f3c81612f00565b9050919050565b6000606082019050612f586000830186611feb565b612f6560208301856120cb565b612f726040830184611feb565b949350505050565b7f43616e6e6f7420737765657020756e74696c2061697264726f7020697320666960008201527f6e69736865640000000000000000000000000000000000000000000000000000602082015250565b6000612fd6602683611e67565b9150612fe182612f7a565b604082019050919050565b6000602082019050818103600083015261300581612fc9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600061304682611f75565b91506000820361305957613058612506565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b600061309a602083611e67565b91506130a582613064565b602082019050919050565b600060208201905081810360008301526130c98161308d565b905091905056fea2646970667358221220791d6b18def933e53a65b39eaa0a1d036326b84a664a88da6f989a066278b34764736f6c634300080d0033", + timedMintToken: "0x60a06040526000600960006101000a81548160ff0219169083151502179055506000600b553480156200003157600080fd5b5060405162004ebe38038062004ebe833981810160405281019062000057919062000b7b565b8683838181816003908051906020019062000074929190620007b3565b5080600490805190602001906200008d929190620007b3565b50505060008303620000c6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600581905550620000ce565b826005819055505b505050620000e3868a6200019260201b60201c565b620000f530896200019260201b60201c565b878962000103919062000ce6565b608081815250506200011c8585620002cd60201b60201c565b6200012d866200033060201b60201c565b60005b815181101562000182576200016c6000801b83838151811062000158576200015762000d43565b5b6020026020010151620003f960201b60201c565b8080620001799062000d72565b91505062000130565b5050505050505050505062001153565b60055481620001ab6200040f60201b620008c11760201c565b620001b7919062000ce6565b1115620001fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001f29062000e20565b60405180910390fd5b600960009054906101000a900460ff1615620002b25760065442101562000259576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002509062000e92565b60405180910390fd5b600754811115620002a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002989062000f2a565b60405180910390fd5b620002b16200041960201b60201c565b5b620002c982826200043160201b620013a21760201c565b5050565b620002de82620005a960201b60201c565b620002ef816200063a60201b60201c565b7fc25b585cf1d210cf63cfb4430dcb0c724fc9d4fac6a3695304320e82ecedebf7600654826040516200032492919062000f5d565b60405180910390a15050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f483bdedaaf23706a9800ac1af0d852b34927780d79f9d6ba60a80c7cad75ea3981600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051620003ed92919062000f9b565b60405180910390a15050565b6200040b82826200064460201b60201c565b5050565b6000600254905090565b6008544262000429919062000ce6565b600681905550565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200049a9062001018565b60405180910390fd5b620004b7600083836200073660201b60201c565b8060026000828254620004cb919062000ce6565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000522919062000ce6565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200058991906200103a565b60405180910390a3620005a5600083836200073b60201b60201c565b5050565b60008111620005ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005e690620010cd565b60405180910390fd5b80600881905550620006066200041960201b60201c565b600960009054906101000a900460ff1662000637576001600960006101000a81548160ff0219169083151502179055505b50565b8060078190555050565b6200065682826200074060201b60201c565b62000732576001600a600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006d7620007ab60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b505050565b505050565b6000600a600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b828054620007c1906200111e565b90600052602060002090601f016020900481019282620007e5576000855562000831565b82601f106200080057805160ff191683800117855562000831565b8280016001018555821562000831579182015b828111156200083057825182559160200191906001019062000813565b5b50905062000840919062000844565b5090565b5b808211156200085f57600081600090555060010162000845565b5090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6200088c8162000877565b81146200089857600080fd5b50565b600081519050620008ac8162000881565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620008df82620008b2565b9050919050565b620008f181620008d2565b8114620008fd57600080fd5b50565b6000815190506200091181620008e6565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200096c8262000921565b810181811067ffffffffffffffff821117156200098e576200098d62000932565b5b80604052505050565b6000620009a362000863565b9050620009b1828262000961565b919050565b600067ffffffffffffffff821115620009d457620009d362000932565b5b620009df8262000921565b9050602081019050919050565b60005b8381101562000a0c578082015181840152602081019050620009ef565b8381111562000a1c576000848401525b50505050565b600062000a3962000a3384620009b6565b62000997565b90508281526020810184848401111562000a585762000a576200091c565b5b62000a65848285620009ec565b509392505050565b600082601f83011262000a855762000a8462000917565b5b815162000a9784826020860162000a22565b91505092915050565b600067ffffffffffffffff82111562000abe5762000abd62000932565b5b602082029050602081019050919050565b600080fd5b600062000aeb62000ae58462000aa0565b62000997565b9050808382526020820190506020840283018581111562000b115762000b1062000acf565b5b835b8181101562000b3e578062000b29888262000900565b84526020840193505060208101905062000b13565b5050509392505050565b600082601f83011262000b605762000b5f62000917565b5b815162000b7284826020860162000ad4565b91505092915050565b60008060008060008060008060006101208a8c03121562000ba15762000ba06200086d565b5b600062000bb18c828d016200089b565b995050602062000bc48c828d016200089b565b985050604062000bd78c828d016200089b565b975050606062000bea8c828d0162000900565b965050608062000bfd8c828d016200089b565b95505060a062000c108c828d016200089b565b94505060c08a015167ffffffffffffffff81111562000c345762000c3362000872565b5b62000c428c828d0162000a6d565b93505060e08a015167ffffffffffffffff81111562000c665762000c6562000872565b5b62000c748c828d0162000a6d565b9250506101008a015167ffffffffffffffff81111562000c995762000c9862000872565b5b62000ca78c828d0162000b48565b9150509295985092959850929598565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cf38262000877565b915062000d008362000877565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d385762000d3762000cb7565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600062000d7f8262000877565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362000db45762000db362000cb7565b5b600182019050919050565b600082825260208201905092915050565b7f455243323054696d65644d696e743a2063617020657863656564656400000000600082015250565b600062000e08601c8362000dbf565b915062000e158262000dd0565b602082019050919050565b6000602082019050818103600083015262000e3b8162000df9565b9050919050565b7f455243323054696d65644d696e743a2043616e6e6f74206d696e742079657400600082015250565b600062000e7a601f8362000dbf565b915062000e878262000e42565b602082019050919050565b6000602082019050818103600083015262000ead8162000e6b565b9050919050565b7f455243323054696d65644d696e743a204d696e742065786365656473206d617860008201527f696d756d20616d6f756e74000000000000000000000000000000000000000000602082015250565b600062000f12602b8362000dbf565b915062000f1f8262000eb4565b604082019050919050565b6000602082019050818103600083015262000f458162000f03565b9050919050565b62000f578162000877565b82525050565b600060408201905062000f74600083018562000f4c565b62000f83602083018462000f4c565b9392505050565b62000f9581620008d2565b82525050565b600060408201905062000fb2600083018562000f8a565b62000fc1602083018462000f8a565b9392505050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001000601f8362000dbf565b91506200100d8262000fc8565b602082019050919050565b60006020820190508181036000830152620010338162000ff1565b9050919050565b600060208201905062001051600083018462000f4c565b92915050565b7f74696d652064656c6179206d7573742062652067726561746572207468616e2060008201527f7a65726f00000000000000000000000000000000000000000000000000000000602082015250565b6000620010b560248362000dbf565b9150620010c28262001057565b604082019050919050565b60006020820190508181036000830152620010e881620010a6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200113757607f821691505b6020821081036200114d576200114c620010ef565b5b50919050565b608051613d486200117660003960008181610aba0152610c550152613d486000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c806391d1485411610130578063c9dec361116100b8578063e7563f3f1161007c578063e7563f3f146106cf578063f364c90c146106eb578063f5f6d3af1461071b578063fbfa77cf14610737578063fca3b5aa1461075557610232565b8063c9dec36114610615578063cb33fad114610633578063d547741f14610665578063dd62ed3e14610681578063e0d96a14146106b157610232565b8063a217fddf116100ff578063a217fddf14610549578063a457c2d714610567578063a9059cbb14610597578063ac68c56a146105c7578063b297aa47146105f757610232565b806391d14854146104c357806395d89b41146104f35780639a114cb214610511578063a0712d681461052d57610232565b8063318bdf82116101be578063615a7abd11610182578063615a7abd1461041d57806370a082311461043957806376c71ca11461046957806381a4a6d8146104875780638f770ad0146104a557610232565b8063318bdf821461038b57806336568abe14610395578063378dc3dc146103b157806339509351146103cf5780633cefc15a146103ff57610232565b806318160ddd1161020557806318160ddd146102d357806323b872dd146102f1578063248a9ca3146103215780632f2ff15d14610351578063313ce5671461036d57610232565b806301ffc9a71461023757806306fdde03146102675780630754617214610285578063095ea7b3146102a3575b600080fd5b610251600480360381019061024c9190612668565b610771565b60405161025e91906126b0565b60405180910390f35b61026f6107eb565b60405161027c9190612764565b60405180910390f35b61028d61087d565b60405161029a91906127c7565b60405180910390f35b6102bd60048036038101906102b89190612844565b6108a3565b6040516102ca91906126b0565b60405180910390f35b6102db6108c1565b6040516102e89190612893565b60405180910390f35b61030b600480360381019061030691906128ae565b6108cb565b60405161031891906126b0565b60405180910390f35b61033b60048036038101906103369190612937565b6109c3565b6040516103489190612973565b60405180910390f35b61036b6004803603810190610366919061298e565b6109e3565b005b610375610a0c565b60405161038291906129ea565b60405180910390f35b610393610a15565b005b6103af60048036038101906103aa919061298e565b610a35565b005b6103b9610ab8565b6040516103c69190612893565b60405180910390f35b6103e960048036038101906103e49190612844565b610adc565b6040516103f691906126b0565b60405180910390f35b610407610b88565b60405161041491906126b0565b60405180910390f35b61043760048036038101906104329190612a05565b610b9b565b005b610453600480360381019061044e9190612a45565b610c03565b6040516104609190612893565b60405180910390f35b610471610c4b565b60405161047e9190612893565b60405180910390f35b61048f610c51565b60405161049c9190612893565b60405180910390f35b6104ad610c79565b6040516104ba9190612893565b60405180910390f35b6104dd60048036038101906104d8919061298e565b610c7f565b6040516104ea91906126b0565b60405180910390f35b6104fb610cea565b6040516105089190612764565b60405180910390f35b61052b60048036038101906105269190612ad7565b610d7c565b005b61054760048036038101906105429190612b37565b610f23565b005b610551610fe2565b60405161055e9190612973565b60405180910390f35b610581600480360381019061057c9190612844565b610fe9565b60405161058e91906126b0565b60405180910390f35b6105b160048036038101906105ac9190612844565b6110d4565b6040516105be91906126b0565b60405180910390f35b6105e160048036038101906105dc9190612b64565b6110f2565b6040516105ee9190612893565b60405180910390f35b6105ff61111c565b60405161060c9190612893565b60405180910390f35b61061d611122565b60405161062a9190612893565b60405180910390f35b61064d60048036038101906106489190612b37565b611128565b60405161065c93929190612ba4565b60405180910390f35b61067f600480360381019061067a919061298e565b61118c565b005b61069b60048036038101906106969190612bdb565b6111b5565b6040516106a89190612893565b60405180910390f35b6106b961123c565b6040516106c69190612893565b60405180910390f35b6106e960048036038101906106e49190612a45565b611242565b005b61070560048036038101906107009190612a05565b611264565b60405161071291906126b0565b60405180910390f35b61073560048036038101906107309190612a45565b611296565b005b61073f6112c1565b60405161074c91906127c7565b60405180910390f35b61076f600480360381019061076a9190612a45565b6112e7565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107e457506107e382611501565b5b9050919050565b6060600380546107fa90612c4a565b80601f016020809104026020016040519081016040528092919081815260200182805461082690612c4a565b80156108735780601f1061084857610100808354040283529160200191610873565b820191906000526020600020905b81548152906001019060200180831161085657829003601f168201915b5050505050905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006108b76108b061156b565b8484611573565b6001905092915050565b6000600254905090565b60006108d884848461173c565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061092361156b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156109a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099a90612ced565b60405180910390fd5b6109b7856109af61156b565b858403611573565b60019150509392505050565b6000600a6000838152602001908152602001600020600101549050919050565b6109ec826109c3565b6109fd816109f861156b565b6119bb565b610a078383611a58565b505050565b60006012905090565b6000801b610a2a81610a2561156b565b6119bb565b610a32611b39565b50565b610a3d61156b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa190612d7f565b60405180910390fd5b610ab48282611c6e565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610b7e610ae961156b565b848460016000610af761156b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b799190612dce565b611573565b6001905092915050565b600960009054906101000a900460ff1681565b6000801b610bb081610bab61156b565b6119bb565b6006544211610bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610beb90612e96565b60405180910390fd5b610bfe8383611d50565b505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60075481565b60007f0000000000000000000000000000000000000000000000000000000000000000905090565b60055481565b6000600a600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060048054610cf990612c4a565b80601f0160208091040260200160405190810160405280929190818152602001828054610d2590612c4a565b8015610d725780601f10610d4757610100808354040283529160200191610d72565b820191906000526020600020905b815481529060010190602001808311610d5557829003601f168201915b5050505050905090565b60006001600b54610d8d9190612eb6565b905060003385604051602001610da4929190612f53565b604051602081830303815290604052805190602001209050600080610e21868680806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600c60008781526020019081526020016000206000015485611da1565b9150915081610e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5c90612fcb565b60405180910390fd5b610e6f8482611264565b15610eaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea69061305d565b60405180910390fd5b610ed781600c6000878152602001908152602001600020600301611e7d90919063ffffffff16565b7fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a3388604051610f0892919061307d565b60405180910390a1610f1a3388611ece565b50505050505050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faa906130f2565b60405180910390fd5b610fdf600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611edd565b50565b6000801b81565b60008060016000610ff861156b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156110b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ac90613184565b60405180910390fd5b6110c96110c061156b565b85858403611573565b600191505092915050565b60006110e86110e161156b565b848461173c565b6001905092915050565b60008060001b6111098161110461156b565b6119bb565b6111138484611fea565b91505092915050565b600b5481565b60085481565b6000806000600c6000858152602001908152602001600020600001549250600c600085815260200190815260200160002060010160009054906101000a900460ff169050600c60008581526020019081526020016000206002015491509193909250565b611195826109c3565b6111a6816111a161156b565b6119bb565b6111b08383611c6e565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60065481565b6000801b6112578161125261156b565b6119bb565b61126082612102565b5050565b600061128e82600c60008681526020019081526020016000206003016121c990919063ffffffff16565b905092915050565b6000801b6112ab816112a661156b565b6119bb565b6112bd826112b830610c03565b612218565b5050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000801b6112fc816112f761156b565b6119bb565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905082600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1cf2de25c5bf439ac0287061c3a0fa69b3b02867d0ccfd2ded34e42577050b7381846040516113959291906131a4565b60405180910390a1505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611411576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140890613219565b60405180910390fd5b61141d6000838361231b565b806002600082825461142f9190612dce565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114849190612dce565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516114e99190612893565b60405180910390a36114fd60008383612320565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036115e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d9906132ab565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611651576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116489061333d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161172f9190612893565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a2906133cf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361181a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181190613461565b60405180910390fd5b61182583838361231b565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156118ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a2906134f3565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461193e9190612dce565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516119a29190612893565b60405180910390a36119b5848484612320565b50505050565b6119c58282610c7f565b611a54576119ea8173ffffffffffffffffffffffffffffffffffffffff166014612325565b6119f88360001c6020612325565b604051602001611a099291906135e7565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4b9190612764565b60405180910390fd5b5050565b611a628282610c7f565b611b35576001600a600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611ada61156b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000600b5411611b7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b759061366d565b60405180910390fd5b6000600c60006001600b54611b939190612eb6565b8152602001908152602001600020600201549050804211611be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be0906136ff565b60405180910390fd5b6001600c60006001600b54611bfe9190612eb6565b815260200190815260200160002060010160006101000a81548160ff0219169083151502179055507f96f2927ce74aa9968e629ed09ae43492f0303c3c814367c1f9d147a20be577b86001600b54611c569190612eb6565b604051611c639190612893565b60405180910390a150565b611c788282610c7f565b15611d4c576000600a600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611cf161156b565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b611d5982612561565b611d62816125e6565b7fc25b585cf1d210cf63cfb4430dcb0c724fc9d4fac6a3695304320e82ecedebf760065482604051611d9592919061371f565b60405180910390a15050565b60008060008390506000805b8751811015611e6a57600282611dc39190613748565b91506000888281518110611dda57611dd96137a2565b5b60200260200101519050808411611e1b578381604051602001611dfe9291906137f2565b604051602081830303815290604052805190602001209350611e56565b8084604051602001611e2e9291906137f2565b604051602081830303815290604052805190602001209350600183611e539190612dce565b92505b508080611e629061381e565b915050611dad565b5085821481935093505050935093915050565b600061010082611e8d9190613895565b9050600061010083611e9f91906138c6565b6001901b9050808460000160008481526020019081526020016000206000828254179250508190555050505050565b611ed930838361173c565b5050565b60055481611ee96108c1565b611ef39190612dce565b1115611f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2b90613943565b60405180910390fd5b600960009054906101000a900460ff1615611fdc57600654421015611f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f85906139af565b60405180910390fd5b600754811115611fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fca90613a41565b60405180910390fd5b611fdb6125f0565b5b611fe682826113a2565b5050565b6000600b5490506000600b54111561206e57600c60006001600b5461200f9190612eb6565b815260200190815260200160002060010160009054906101000a900460ff1661206d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206490613ad3565b60405180910390fd5b5b6000600c60008381526020019081526020016000209050838160000181905550824261209a9190612dce565b81600201819055507f82a2300fd126ecf7b5c9a90b42f34bf55f665b1a2dc419b056b79b68d43b01f1828583600201546040516120d993929190613af3565b60405180910390a16001600b60008282546120f49190612dce565b925050819055505092915050565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f483bdedaaf23706a9800ac1af0d852b34927780d79f9d6ba60a80c7cad75ea3981600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516121bd9291906131a4565b60405180910390a15050565b600080610100836121da9190613895565b90506000610100846121ec91906138c6565b6001901b9050600081866000016000858152602001908152602001600020541614159250505092915050565b6000600b541161225d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122549061366d565b60405180910390fd5b600c60006001600b546122709190612eb6565b815260200190815260200160002060010160009054906101000a900460ff166122ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c590613b9c565b60405180910390fd5b60008190506122dd8382611ece565b7fab2246061d7b0dd3631d037e3f6da75782ae489eeb9f6af878a4b25df9b07c77838260405161230e92919061307d565b60405180910390a1505050565b505050565b505050565b6060600060028360026123389190613748565b6123429190612dce565b67ffffffffffffffff81111561235b5761235a613bbc565b5b6040519080825280601f01601f19166020018201604052801561238d5781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106123c5576123c46137a2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612429576124286137a2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026124699190613748565b6124739190612dce565b90505b6001811115612513577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106124b5576124b46137a2565b5b1a60f81b8282815181106124cc576124cb6137a2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061250c90613beb565b9050612476565b5060008414612557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254e90613c60565b60405180910390fd5b8091505092915050565b600081116125a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259b90613cf2565b60405180910390fd5b806008819055506125b36125f0565b600960009054906101000a900460ff166125e3576001600960006101000a81548160ff0219169083151502179055505b50565b8060078190555050565b600854426125fe9190612dce565b600681905550565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61264581612610565b811461265057600080fd5b50565b6000813590506126628161263c565b92915050565b60006020828403121561267e5761267d612606565b5b600061268c84828501612653565b91505092915050565b60008115159050919050565b6126aa81612695565b82525050565b60006020820190506126c560008301846126a1565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156127055780820151818401526020810190506126ea565b83811115612714576000848401525b50505050565b6000601f19601f8301169050919050565b6000612736826126cb565b61274081856126d6565b93506127508185602086016126e7565b6127598161271a565b840191505092915050565b6000602082019050818103600083015261277e818461272b565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006127b182612786565b9050919050565b6127c1816127a6565b82525050565b60006020820190506127dc60008301846127b8565b92915050565b6127eb816127a6565b81146127f657600080fd5b50565b600081359050612808816127e2565b92915050565b6000819050919050565b6128218161280e565b811461282c57600080fd5b50565b60008135905061283e81612818565b92915050565b6000806040838503121561285b5761285a612606565b5b6000612869858286016127f9565b925050602061287a8582860161282f565b9150509250929050565b61288d8161280e565b82525050565b60006020820190506128a86000830184612884565b92915050565b6000806000606084860312156128c7576128c6612606565b5b60006128d5868287016127f9565b93505060206128e6868287016127f9565b92505060406128f78682870161282f565b9150509250925092565b6000819050919050565b61291481612901565b811461291f57600080fd5b50565b6000813590506129318161290b565b92915050565b60006020828403121561294d5761294c612606565b5b600061295b84828501612922565b91505092915050565b61296d81612901565b82525050565b60006020820190506129886000830184612964565b92915050565b600080604083850312156129a5576129a4612606565b5b60006129b385828601612922565b92505060206129c4858286016127f9565b9150509250929050565b600060ff82169050919050565b6129e4816129ce565b82525050565b60006020820190506129ff60008301846129db565b92915050565b60008060408385031215612a1c57612a1b612606565b5b6000612a2a8582860161282f565b9250506020612a3b8582860161282f565b9150509250929050565b600060208284031215612a5b57612a5a612606565b5b6000612a69848285016127f9565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612a9757612a96612a72565b5b8235905067ffffffffffffffff811115612ab457612ab3612a77565b5b602083019150836020820283011115612ad057612acf612a7c565b5b9250929050565b600080600060408486031215612af057612aef612606565b5b6000612afe8682870161282f565b935050602084013567ffffffffffffffff811115612b1f57612b1e61260b565b5b612b2b86828701612a81565b92509250509250925092565b600060208284031215612b4d57612b4c612606565b5b6000612b5b8482850161282f565b91505092915050565b60008060408385031215612b7b57612b7a612606565b5b6000612b8985828601612922565b9250506020612b9a8582860161282f565b9150509250929050565b6000606082019050612bb96000830186612964565b612bc66020830185612884565b612bd360408301846126a1565b949350505050565b60008060408385031215612bf257612bf1612606565b5b6000612c00858286016127f9565b9250506020612c11858286016127f9565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612c6257607f821691505b602082108103612c7557612c74612c1b565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612cd76028836126d6565b9150612ce282612c7b565b604082019050919050565b60006020820190508181036000830152612d0681612cca565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000612d69602f836126d6565b9150612d7482612d0d565b604082019050919050565b60006020820190508181036000830152612d9881612d5c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612dd98261280e565b9150612de48361280e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612e1957612e18612d9f565b5b828201905092915050565b7f455243323054696d65644d696e743a2043616e6e6f742063616c6c20756e746960008201527f6c206e657874416c6c6f7765644d696e7454696d652068617320706173736564602082015250565b6000612e806040836126d6565b9150612e8b82612e24565b604082019050919050565b60006020820190508181036000830152612eaf81612e73565b9050919050565b6000612ec18261280e565b9150612ecc8361280e565b925082821015612edf57612ede612d9f565b5b828203905092915050565b60008160601b9050919050565b6000612f0282612eea565b9050919050565b6000612f1482612ef7565b9050919050565b612f2c612f27826127a6565b612f09565b82525050565b6000819050919050565b612f4d612f488261280e565b612f32565b82525050565b6000612f5f8285612f1b565b601482019150612f6f8284612f3c565b6020820191508190509392505050565b7f4661696c656420746f207665726966792070726f6f6600000000000000000000600082015250565b6000612fb56016836126d6565b9150612fc082612f7f565b602082019050919050565b60006020820190508181036000830152612fe481612fa8565b9050919050565b7f546f6b656e7320616c726561647920636c61696d656420666f7220746869732060008201527f61697264726f7000000000000000000000000000000000000000000000000000602082015250565b60006130476027836126d6565b915061305282612feb565b604082019050919050565b600060208201905081810360008301526130768161303a565b9050919050565b600060408201905061309260008301856127b8565b61309f6020830184612884565b9392505050565b7f4f6e6c79204d696e7465722063616e2063616c6c000000000000000000000000600082015250565b60006130dc6014836126d6565b91506130e7826130a6565b602082019050919050565b6000602082019050818103600083015261310b816130cf565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061316e6025836126d6565b915061317982613112565b604082019050919050565b6000602082019050818103600083015261319d81613161565b9050919050565b60006040820190506131b960008301856127b8565b6131c660208301846127b8565b9392505050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000613203601f836126d6565b915061320e826131cd565b602082019050919050565b60006020820190508181036000830152613232816131f6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006132956024836126d6565b91506132a082613239565b604082019050919050565b600060208201905081810360008301526132c481613288565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006133276022836126d6565b9150613332826132cb565b604082019050919050565b600060208201905081810360008301526133568161331a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006133b96025836126d6565b91506133c48261335d565b604082019050919050565b600060208201905081810360008301526133e8816133ac565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061344b6023836126d6565b9150613456826133ef565b604082019050919050565b6000602082019050818103600083015261347a8161343e565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006134dd6026836126d6565b91506134e882613481565b604082019050919050565b6000602082019050818103600083015261350c816134d0565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000613554601783613513565b915061355f8261351e565b601782019050919050565b6000613575826126cb565b61357f8185613513565b935061358f8185602086016126e7565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b60006135d1601183613513565b91506135dc8261359b565b601182019050919050565b60006135f282613547565b91506135fe828561356a565b9150613609826135c4565b9150613615828461356a565b91508190509392505050565b7f4e6f2061697264726f7073206163746976650000000000000000000000000000600082015250565b60006136576012836126d6565b915061366282613621565b602082019050919050565b600060208201905081810360008301526136868161364a565b9050919050565b7f41697264726f7020636c61696d20706572696f64207374696c6c20616374697660008201527f6500000000000000000000000000000000000000000000000000000000000000602082015250565b60006136e96021836126d6565b91506136f48261368d565b604082019050919050565b60006020820190508181036000830152613718816136dc565b9050919050565b60006040820190506137346000830185612884565b6137416020830184612884565b9392505050565b60006137538261280e565b915061375e8361280e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561379757613796612d9f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6137ec6137e782612901565b6137d1565b82525050565b60006137fe82856137db565b60208201915061380e82846137db565b6020820191508190509392505050565b60006138298261280e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361385b5761385a612d9f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006138a08261280e565b91506138ab8361280e565b9250826138bb576138ba613866565b5b828204905092915050565b60006138d18261280e565b91506138dc8361280e565b9250826138ec576138eb613866565b5b828206905092915050565b7f455243323054696d65644d696e743a2063617020657863656564656400000000600082015250565b600061392d601c836126d6565b9150613938826138f7565b602082019050919050565b6000602082019050818103600083015261395c81613920565b9050919050565b7f455243323054696d65644d696e743a2043616e6e6f74206d696e742079657400600082015250565b6000613999601f836126d6565b91506139a482613963565b602082019050919050565b600060208201905081810360008301526139c88161398c565b9050919050565b7f455243323054696d65644d696e743a204d696e742065786365656473206d617860008201527f696d756d20616d6f756e74000000000000000000000000000000000000000000602082015250565b6000613a2b602b836126d6565b9150613a36826139cf565b604082019050919050565b60006020820190508181036000830152613a5a81613a1e565b9050919050565b7f41697264726f702063757272656e746c79206163746976652c2063726561746960008201527f6f6e206661696c65640000000000000000000000000000000000000000000000602082015250565b6000613abd6029836126d6565b9150613ac882613a61565b604082019050919050565b60006020820190508181036000830152613aec81613ab0565b9050919050565b6000606082019050613b086000830186612884565b613b156020830185612964565b613b226040830184612884565b949350505050565b7f43616e6e6f7420737765657020756e74696c2061697264726f7020697320666960008201527f6e69736865640000000000000000000000000000000000000000000000000000602082015250565b6000613b866026836126d6565b9150613b9182613b2a565b604082019050919050565b60006020820190508181036000830152613bb581613b79565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000613bf68261280e565b915060008203613c0957613c08612d9f565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000613c4a6020836126d6565b9150613c5582613c14565b602082019050919050565b60006020820190508181036000830152613c7981613c3d565b9050919050565b7f74696d652064656c6179206d7573742062652067726561746572207468616e2060008201527f7a65726f00000000000000000000000000000000000000000000000000000000602082015250565b6000613cdc6024836126d6565b9150613ce782613c80565b604082019050919050565b60006020820190508181036000830152613d0b81613ccf565b905091905056fea2646970667358221220218000a3ef45b57ee8cf57ff282eaf7354ba43bada90800a7373eee40285962564736f6c634300080d0033" +} \ No newline at end of file