0g-storage-node/storage-contracts-abis/PoraMineTest.json
peilun-conflux 45fa344564
Check the local flow root against the contract state. (#229)
* Check the local flow root against the contract state.

* Check zero contract root.

* Fix wrong root before the first segment.

* Update contracts.

* Fix proof insertion.
2024-10-12 16:50:31 +08:00

1179 lines
82 KiB
JSON

{
"_format": "hh-sol-artifact-1",
"contractName": "PoraMineTest",
"sourceName": "contracts/test/PoraMineTest.sol",
"abi": [
{
"inputs": [
{
"internalType": "uint256",
"name": "settings",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "minerId",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "beneficiary",
"type": "address"
}
],
"name": "NewMinerId",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "epoch",
"type": "uint256"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "minerId",
"type": "bytes32"
},
{
"indexed": false,
"internalType": "uint256",
"name": "epochIndex",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "recallPosition",
"type": "uint256"
}
],
"name": "NewSubmission",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "previousAdminRole",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "newAdminRole",
"type": "bytes32"
}
],
"name": "RoleAdminChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleGranted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleRevoked",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "minerId",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
}
],
"name": "UpdateMinerId",
"type": "event"
},
{
"inputs": [],
"name": "DEFAULT_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "PARAMS_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "bytes32",
"name": "contextDigest",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "nonce",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "minerId",
"type": "bytes32"
},
{
"components": [
{
"internalType": "uint256",
"name": "startPosition",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "mineLength",
"type": "uint256"
},
{
"internalType": "uint64",
"name": "shardId",
"type": "uint64"
},
{
"internalType": "uint64",
"name": "shardMask",
"type": "uint64"
}
],
"internalType": "struct RecallRange",
"name": "range",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "recallPosition",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "sealOffset",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "sealedContextDigest",
"type": "bytes32"
},
{
"internalType": "bytes32[128]",
"name": "sealedData",
"type": "bytes32[128]"
},
{
"internalType": "bytes32[]",
"name": "merkleProof",
"type": "bytes32[]"
}
],
"internalType": "struct MineLib.PoraAnswer",
"name": "answer",
"type": "tuple"
},
{
"components": [
{
"internalType": "uint256",
"name": "epoch",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "mineStart",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "flowRoot",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "flowLength",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "blockDigest",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "digest",
"type": "bytes32"
}
],
"internalType": "struct MineContext",
"name": "context",
"type": "tuple"
}
],
"name": "basicCheck",
"outputs": [],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"name": "beneficiaries",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "canSubmit",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "currentSubmissions",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "dataProofEnabled",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "difficultyAdjustRatio",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "fixedDifficulty",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "flow",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
}
],
"name": "getRoleAdmin",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "getRoleMember",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
}
],
"name": "getRoleMemberCount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "grantRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "hasRole",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "difficulty",
"type": "uint256"
},
{
"internalType": "address",
"name": "flow_",
"type": "address"
},
{
"internalType": "address",
"name": "reward_",
"type": "address"
}
],
"name": "initialize",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "initialized",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "lastMinedEpoch",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "maxShards",
"outputs": [
{
"internalType": "uint64",
"name": "",
"type": "uint64"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "bytes32",
"name": "contextDigest",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "nonce",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "minerId",
"type": "bytes32"
},
{
"components": [
{
"internalType": "uint256",
"name": "startPosition",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "mineLength",
"type": "uint256"
},
{
"internalType": "uint64",
"name": "shardId",
"type": "uint64"
},
{
"internalType": "uint64",
"name": "shardMask",
"type": "uint64"
}
],
"internalType": "struct RecallRange",
"name": "range",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "recallPosition",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "sealOffset",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "sealedContextDigest",
"type": "bytes32"
},
{
"internalType": "bytes32[128]",
"name": "sealedData",
"type": "bytes32[128]"
},
{
"internalType": "bytes32[]",
"name": "merkleProof",
"type": "bytes32[]"
}
],
"internalType": "struct MineLib.PoraAnswer",
"name": "answer",
"type": "tuple"
}
],
"name": "pora",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "poraTarget",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "bytes32",
"name": "contextDigest",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "nonce",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "minerId",
"type": "bytes32"
},
{
"components": [
{
"internalType": "uint256",
"name": "startPosition",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "mineLength",
"type": "uint256"
},
{
"internalType": "uint64",
"name": "shardId",
"type": "uint64"
},
{
"internalType": "uint64",
"name": "shardMask",
"type": "uint64"
}
],
"internalType": "struct RecallRange",
"name": "range",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "recallPosition",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "sealOffset",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "sealedContextDigest",
"type": "bytes32"
},
{
"internalType": "bytes32[128]",
"name": "sealedData",
"type": "bytes32[128]"
},
{
"internalType": "bytes32[]",
"name": "merkleProof",
"type": "bytes32[]"
}
],
"internalType": "struct MineLib.PoraAnswer",
"name": "answer",
"type": "tuple"
},
{
"internalType": "bytes32[128]",
"name": "unsealedData",
"type": "bytes32[128]"
}
],
"name": "recoverMerkleRoot",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "renounceRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "beneficiary",
"type": "address"
},
{
"internalType": "uint64",
"name": "seed",
"type": "uint64"
}
],
"name": "requestMinerId",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "revokeRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "reward",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "sealDataEnabled",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "difficultyAdjustRatio_",
"type": "uint256"
}
],
"name": "setDifficultyAdjustRatio",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint64",
"name": "maxShards_",
"type": "uint64"
}
],
"name": "setMaxShards",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "minerId",
"type": "bytes32"
}
],
"name": "setMiner",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_targetQuality",
"type": "uint256"
}
],
"name": "setQuality",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "targetMineBlocks_",
"type": "uint256"
}
],
"name": "setTargetMineBlocks",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "targetSubmissions_",
"type": "uint256"
}
],
"name": "setTargetSubmissions",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "bytes32",
"name": "contextDigest",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "nonce",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "minerId",
"type": "bytes32"
},
{
"components": [
{
"internalType": "uint256",
"name": "startPosition",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "mineLength",
"type": "uint256"
},
{
"internalType": "uint64",
"name": "shardId",
"type": "uint64"
},
{
"internalType": "uint64",
"name": "shardMask",
"type": "uint64"
}
],
"internalType": "struct RecallRange",
"name": "range",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "recallPosition",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "sealOffset",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "sealedContextDigest",
"type": "bytes32"
},
{
"internalType": "bytes32[128]",
"name": "sealedData",
"type": "bytes32[128]"
},
{
"internalType": "bytes32[]",
"name": "merkleProof",
"type": "bytes32[]"
}
],
"internalType": "struct MineLib.PoraAnswer",
"name": "answer",
"type": "tuple"
}
],
"name": "submit",
"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": "targetMineBlocks",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "targetSubmissions",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "targetSubmissionsNextEpoch",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "bytes32",
"name": "minerId",
"type": "bytes32"
}
],
"name": "transferBeneficial",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "bytes32",
"name": "contextDigest",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "nonce",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "minerId",
"type": "bytes32"
},
{
"components": [
{
"internalType": "uint256",
"name": "startPosition",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "mineLength",
"type": "uint256"
},
{
"internalType": "uint64",
"name": "shardId",
"type": "uint64"
},
{
"internalType": "uint64",
"name": "shardMask",
"type": "uint64"
}
],
"internalType": "struct RecallRange",
"name": "range",
"type": "tuple"
},
{
"internalType": "uint256",
"name": "recallPosition",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "sealOffset",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "sealedContextDigest",
"type": "bytes32"
},
{
"internalType": "bytes32[128]",
"name": "sealedData",
"type": "bytes32[128]"
},
{
"internalType": "bytes32[]",
"name": "merkleProof",
"type": "bytes32[]"
}
],
"internalType": "struct MineLib.PoraAnswer",
"name": "answer",
"type": "tuple"
}
],
"name": "unseal",
"outputs": [
{
"internalType": "bytes32[128]",
"name": "unsealedData",
"type": "bytes32[128]"
}
],
"stateMutability": "pure",
"type": "function"
}
],
"bytecode": "0x60e06040523480156200001157600080fd5b506040516200377a3803806200377a833981016040819052620000349162000052565b60016004909117818116156080526002161560a05260c0526200006c565b6000602082840312156200006557600080fd5b5051919050565b60805160a05160c0516136c2620000b860003960008181610433015281816111cb01526115670152600081816104630152610efd0152600081816104c10152610ec001526136c26000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c80637bba7d611161013b578063b0628ee0116100b8578063ca15c8731161007c578063ca15c8731461057b578063d547741f1461058e578063dddc61a8146105a1578063e1498cf9146105aa578063ffbc9bd0146105bd57600080fd5b8063b0628ee014610509578063b15d20da1461051c578063b4988fd014610531578063b51e039714610544578063b776a5121461057257600080fd5b8063a217fddf116100ff578063a217fddf146104ab578063a8279182146104b3578063adaa7a0f146104bc578063ae722e82146104e3578063aed75224146104f657600080fd5b80637bba7d611461042e5780637eca56881461045557806382975fe71461045e5780639010d07c1461048557806391d148541461049857600080fd5b8063331f3b9c116101c957806348f614411161018d57806348f61441146103cc57806359e7b5be146103d55780635bdca855146103f55780636e9bb60b14610408578063704d3c961461041b57600080fd5b8063331f3b9c14610361578063343aad821461036a57806336568abe1461037d57806339cd53ee146103905780633baebb75146103b957600080fd5b8063228cb73311610210578063228cb733146102d5578063248a9ca3146103005780632a02573b146103325780632f2ff15d1461034557806331223ba71461035857600080fd5b806301ffc9a71461024d578063047c13f514610275578063158ef93e1461028a5780631600c6241461029757806316a4be6f146102aa575b600080fd5b61026061025b366004612e40565b6105c5565b60405190151581526020015b60405180910390f35b610288610283366004612e98565b6105f0565b005b6000546102609060ff1681565b6102886102a5366004612ecb565b61070c565b600a546102bd906001600160401b031681565b6040516001600160401b03909116815260200161026c565b6004546102e8906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b61032461030e366004612ecb565b6000908152600160208190526040909120015490565b60405190815260200161026c565b610288610340366004612ee4565b61072a565b610288610353366004612eff565b610830565b610324600b5481565b61032460065481565b6003546102e8906001600160a01b031681565b61028861038b366004612eff565b61085b565b6102e861039e366004612ecb565b600e602052600090815260409020546001600160a01b031681565b6102886103c736600461319f565b6108d9565b610324600d5481565b6103e86103e3366004613237565b610b70565b60405161026c9190613273565b610288610403366004612ecb565b610b81565b6103246104163660046132a5565b610bae565b610288610429366004612ecb565b610bc1565b6102607f000000000000000000000000000000000000000000000000000000000000000081565b61032460085481565b6102607f000000000000000000000000000000000000000000000000000000000000000081565b6102e86104933660046132eb565b610c2f565b6102606104a6366004612eff565b610c47565b610324600081565b610324600c5481565b6102607f000000000000000000000000000000000000000000000000000000000000000081565b6102886104f1366004613237565b610c72565b610324610504366004613237565b6111ff565b61028861051736600461330d565b611402565b61032460008051602061366d83398151915281565b61028861053f366004613337565b6114c2565b610288610552366004612ecb565b6000908152600e6020526040902080546001600160a01b03191633179055565b61032460075481565b610324610589366004612ecb565b6115e9565b61028861059c366004612eff565b611600565b61032460095481565b6102886105b8366004612ecb565b600d55565b610260611626565b60006001600160e01b03198216635a05180f60e01b14806105ea57506105ea826116c1565b92915050565b60006105fd600143613389565b60408051914060208301526bffffffffffffffffffffffff193360601b16908201526001600160c01b031960c084901b166054820152605c0160408051601f1981840301815291815281516020928301206000818152600e9093529120549091506001600160a01b0316156106b25760405162461bcd60e51b8152602060048201526016602482015275135a5b995c9259081a185cc81c9959da5cdd195c995960521b60448201526064015b60405180910390fd5b6000818152600e602052604080822080546001600160a01b0319166001600160a01b0387169081179091559051909183917fbfeb006f16aca8eb3d9953cf44db6b11b6f3041a313875dfa18f2e9d71bd309e9190a3505050565b60008051602061366d833981519152610724816116f6565b50600655565b60008051602061366d833981519152610742816116f6565b6000826001600160401b03161161079b5760405162461bcd60e51b815260206004820152601f60248201527f4d6178207368617264206e756d6265722063616e6e6f74206265207a65726f0060448201526064016106a9565b6107a660018361339c565b82166001600160401b031660001461080c5760405162461bcd60e51b815260206004820152602360248201527f4d6178207368617264206e756d626572206d75737420626520706f776572206f60448201526233101960e91b60648201526084016106a9565b50600a805467ffffffffffffffff19166001600160401b0392909216919091179055565b6000828152600160208190526040909120015461084c816116f6565b6108568383611703565b505050565b6001600160a01b03811633146108cb5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016106a9565b6108d58282611725565b5050565b815160a08201511461092d5760405162461bcd60e51b815260206004820152601a60248201527f496e636f6e73697374656e74206d696e696e672064696765737400000000000060448201526064016106a9565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708160a00151036109a05760405162461bcd60e51b815260206004820152601960248201527f456d707479206469676573742063616e206e6f74206d696e650000000000000060448201526064016106a9565b600754600c54106109f35760405162461bcd60e51b815260206004820152601c60248201527f45706f63682068617320656e6f756768207375626d697373696f6e730000000060448201526064016106a9565b6000610100610a04610400826133bc565b610a0e91906133f1565b610100610a1d610400826133bc565b610a2791906133f1565b8360600151610a3691906133f1565b610a4091906133bc565b6060840151909150610a529082611747565b60035460c0840151604051630fab20e160e31b815260048101919091526000916001600160a01b031690637d590708906024016040805180830381865afa158015610aa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac5919061341c565b90506000610100610ad961040060046133bc565b610ae391906133f1565b8560800151610af29190613476565b90508082600001516001600160801b0316108015610b1d57508082602001516001600160801b031610155b610b695760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964207365616c656420636f6e746578742064696765737400000060448201526064016106a9565b5050505050565b610b78612e03565b6105ea8261198b565b60008051602061366d833981519152610b99816116f6565b6008829055600b546000036108d55750600755565b6000610bba8383611a9f565b9392505050565b60008051602061366d833981519152610bd9816116f6565b60008211610c295760405162461bcd60e51b815260206004820152601d60248201527f41646a75737420726174696f206d757374206265206e6f6e2d7a65726f00000060448201526064016106a9565b50600955565b6000828152600260205260408120610bba9083611d12565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6040810151610cbc5760405162461bcd60e51b81526020600482015260166024820152754d696e657249642063616e6e6f74206265207a65726f60501b60448201526064016106a9565b6040808201516000908152600e60205220546001600160a01b031680610d245760405162461bcd60e51b815260206004820152601b60248201527f4d696e6572496420646f6573206e6f742072656769737465726564000000000060448201526064016106a9565b60035460408051635a325a9f60e11b815290516000926001600160a01b03169163b464b53e9160048083019260c0929190829003018187875af1158015610d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d939190613489565b9050600b5481600001511015610df95760405162461bcd60e51b815260206004820152602560248201527f496e7465726e616c206572726f723a2065706f6368206e756d62657220646563604482015264726561736560d81b60648201526084016106a9565b600b548151118015610e0d57506000600b54115b15610e3257600754600c541015610e2657610e26611d1e565b6000600c556008546007555b610e3c83826108d9565b600a5460608401516001600160401b0390911690610e5990611d30565b1115610eb65760405162461bcd60e51b815260206004820152602660248201527f457863656564696e672074686520616c6c6f776564206e756d626572206f662060448201526573686172647360d01b60648201526084016106a9565b610ebe612e03565b7f000000000000000000000000000000000000000000000000000000000000000015610ef457610eed8461198b565b9050610efb565b5060e08301515b7f000000000000000000000000000000000000000000000000000000000000000015610f84576000610f2d8583611a9f565b905082604001518114610f825760405162461bcd60e51b815260206004820152601860248201527f496e636f6e73697374656e74206d65726b6c6520726f6f74000000000000000060448201526064016106a9565b505b610f8c612e03565b90506000610f99856111ff565b90506000610fb884606001518760600151611d7a90919063ffffffff16565b9050604081600d54610fca91906133f1565b901b82111561101b5760405162461bcd60e51b815260206004820152601b60248201527f446f206e6f7420726561636820746172676574207175616c697479000000000060448201526064016106a9565b60008281526005602052604090205460ff161561107a5760405162461bcd60e51b815260206004820152601960248201527f416e7377657220686173206265656e207375626d69747465640000000000000060448201526064016106a9565b6000828152600560205260409020805460ff191660011790556004546001600160a01b031663b7a3c04c6101006110b3610400806133bc565b6110bf906104006133bc565b6110ca9060086133bc565b6110d491906133f1565b88608001516110e391906133f1565b6040808a015190516001600160e01b031960e085901b16815260048101929092526001600160a01b03891660248301526044820152606401600060405180830381600087803b15801561113557600080fd5b505af1158015611149573d6000803e3d6000fd5b5050506040808801518651600c5460808b015184519182526020820152919350917ffedd8f58059af8fd54b4394c01ea8d07cac041988be3b5a822fb779f9c8de3a4910160405180910390a38351600b55600c8054600191906000906111b0908490613476565b9091555050600754600c5410156111c957505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006111f7576111f784611eba565b505050505050565b60408101516000906112535760405162461bcd60e51b815260206004820152601860248201527f4d696e65722049442063616e6e6f7420626520656d707479000000000000000060448201526064016106a9565b6000604051806080016040528084604001518152602001846020015181526020018460000151815260200161128b8560600151611ef3565b90529050600061129a82611f5b565b905060006112ab61040060406133bc565b6112b96104006101006133bc565b6112c391906133f1565b6112d061040060046133bc565b6112de6104006101006133bc565b6112e891906133f1565b6112f291906133f1565b8560a001516113019190613502565b905061130b612e03565b611313612e22565b6113228760e001518486611fd3565b9250905061010061133661040060046133bc565b61134091906133f1565b8760a0015161134f91906133bc565b61138c826040516020016113639190613516565b6040516020818303038152906040528051906020012089606001516121c990919063ffffffff16565b6113969190613476565b8760800151146113e85760405162461bcd60e51b815260206004820152601960248201527f496e636f727265637420726563616c6c20706f736974696f6e0000000000000060448201526064016106a9565b6113f78760a0015185846122cf565b979650505050505050565b6000818152600e60205260409020546001600160a01b031633146114685760405162461bcd60e51b815260206004820152601b60248201527f53656e64657220646f6573206e6f74206f776e206d696e65724964000000000060448201526064016106a9565b6000818152600e602052604080822080546001600160a01b0319166001600160a01b03861690811790915590519091339184917f9a26a8e7fd42c501b452c02016def8048e3ea28c2bf15127a9b5e2029d989bf191a45050565b60005460ff16156115215760405162461bcd60e51b8152602060048201526024808201527f5a67496e697469616c697a61626c653a20616c726561647920696e697469616c6044820152631a5e995960e21b60648201526084016106a9565b6000805460ff1916600117815561153e906115393390565b611703565b61155660008051602061366d83398151915233611703565b611562836000196133f1565b600d557f00000000000000000000000000000000000000000000000000000000000000001561159257600019600d555b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055506064600655600a600781905560088190556014600955805467ffffffffffffffff19166020179055565b60008181526002602052604081206105ea90612551565b6000828152600160208190526040909120015461161c816116f6565b6108568383611725565b600080600360009054906101000a90046001600160a01b03166001600160a01b031663b464b53e6040518163ffffffff1660e01b815260040160c0604051808303816000875af115801561167e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a29190613489565b9050600b54816000015111806116bb5750600754600c54105b91505090565b60006001600160e01b03198216637965db0b60e01b14806105ea57506301ffc9a760e01b6001600160e01b03198316146105ea565b611700813361255b565b50565b61170d82826125b4565b6000828152600260205260409020610856908261261f565b61172f8282612634565b6000828152600260205260409020610856908261269b565b610100611756610400806133bc565b611762906104006133bc565b61176d9060086133bc565b61177791906133f1565b82516117839190613502565b156117d05760405162461bcd60e51b815260206004820152601d60248201527f537461727420706f736974696f6e206973206e6f7420616c69676e656400000060448201526064016106a9565b6020820151825182916117e291613476565b11156118285760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e6765206f766572666c6f7760581b60448201526064016106a9565b600061183383611d30565b610100611842610400806133bc565b61184e906104006133bc565b61185a906104006133bc565b6118659060086133bc565b61186f91906133f1565b61187991906133bc565b905080836020015111156118c75760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e676520746f6f206c6f6e6760581b60448201526064016106a9565b60006118d383836126b0565b905080846020015110156119225760405162461bcd60e51b8152602060048201526016602482015275135a5b9a5b99c81c985b99d9481d1bdbc81cda1bdc9d60521b60448201526064016106a9565b83606001518460400151166001600160401b03166000146119855760405162461bcd60e51b815260206004820152601a60248201527f4d61736b656420626974732073686f756c64206265207a65726f00000000000060448201526064016106a9565b50505050565b611993612e03565b60408083015160c0840151608085015192516119c393906020019283526020830191909152604082015260600190565b60408051808303601f19018152919052805160209091012060e08301515118815260015b60206119f661040060046133bc565b611a0091906133f1565b811015611a995760e0830151611a17600183613389565b60808110611a2757611a2761353e565b6020020151604051602001611a3e91815260200190565b604051602081830303815290604052805190602001208360e001518260808110611a6a57611a6a61353e565b602002015118828260808110611a8257611a8261353e565b6020020152611a92600182613476565b90506119e7565b50919050565b6000805b6020611ab261040060046133bc565b611abc91906133f1565b811015611b0a576101006020820284012080848360808110611ae057611ae061353e565b602002018181525050506020610100611af991906133f1565b611b039082613476565b9050611aa3565b506000611b1a60206101006133f1565b90505b6020611b2c61040060046133bc565b611b3691906133f1565b811015611c095760005b6020611b4f61040060046133bc565b611b5991906133f1565b811015611c00576000848260808110611b7457611b7461353e565b60200201519050600085611b888585613476565b60808110611b9857611b9861353e565b602002015190508181604051602001611bbb929190918252602082015260400190565b60405160208183030381529060405280519060200120868460808110611be357611be361353e565b602002015250611bf99050600183901b82613476565b9050611b40565b5060011b611b1d565b508151611c14612e03565b92506000610100611c2861040060046133bc565b611c3291906133f1565b8560800151611c4191906133f1565b905060005b85610100015151811015611d0857600080611c62600285613502565b600003611c92578491508761010001518381518110611c8357611c8361353e565b60200260200101519050611cb7565b8761010001518381518110611ca957611ca961353e565b602002602001015191508490505b6040805160208101849052908101829052606001604051602081830303815290604052805190602001209450600284611cf091906133f1565b93505050600181611d019190613476565b9050611c46565b5090949350505050565b6000610bba83836126c6565b611d2e6001600160f01b036126f0565b565b606081015160009019815b6001600160401b03821615611d6b57611d5560018361339c565b9091169080611d6381613554565b915050611d3b565b600160ff9091161b9392505050565b600080610100611d8c610400806133bc565b611d98906104006133bc565b611da4906104006133bc565b611daf9060086133bc565b611db991906133f1565b8311611dc55782611e01565b610100611dd4610400806133bc565b611de0906104006133bc565b611dec906104006133bc565b611df79060086133bc565b611e0191906133f1565b90506000611e0e85611d30565b611e1890856133f1565b90506000610100611e2b610400806133bc565b611e37906104006133bc565b611e43906104006133bc565b611e4e9060086133bc565b611e5891906133f1565b8211611e645781611ea0565b610100611e73610400806133bc565b611e7f906104006133bc565b611e8b906104006133bc565b611e969060086133bc565b611ea091906133f1565b9050611eb081604085901b6133f1565b9695505050505050565b6000816020015143611ecc9190613389565b905060006010600d54901c90506000611ee88284600654612790565b9050611985816126f0565b60008160000151826020015183604001518460600151604051602001611f3e949392919093845260208401929092526001600160401b03908116604084015216606082015260800190565b604051602081830303815290604052805190602001209050919050565b611f63612e22565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b602080830191909152825190830151604084015160608501516105ea938593909290916080600161283f565b611fdb612e22565b611fe3612e03565b60005b848110156120415760005b604061200061040060046133bc565b61200a91906133f1565b81101561202e5761201a856128fe565b9450612027600182613476565b9050611ff1565b5061203a600182613476565b9050611fe6565b5060005b602061205461040060046133bc565b61205e91906133f1565b8110156120fe5761206e846128fe565b93508581608081106120825761208261353e565b602002015184511882826080811061209c5761209c61353e565b6020020152856120ad826001613476565b608081106120bd576120bd61353e565b6020020151846001602002015118826120d7836001613476565b608081106120e7576120e761353e565b60200201526120f7600282613476565b9050612045565b50600061210c856001613476565b90505b61211c61040060406133bc565b61212a6104006101006133bc565b61213491906133f1565b61214161040060046133bc565b61214f6104006101006133bc565b61215991906133f1565b61216391906133f1565b8110156121bd5760005b604061217c61040060046133bc565b61218691906133f1565b8110156121aa57612196856128fe565b94506121a3600182613476565b905061216d565b506121b6600182613476565b905061210f565b50829150935093915050565b6000806101006121db610400826133bc565b6121e591906133f1565b84602001516121f491906133f1565b6121fe9084613502565b60408501516060860151602087015192935083161790610100612223610400826133bc565b61222d91906133f1565b612240906001600160401b0384166133bc565b111561228e5760405162461bcd60e51b815260206004820152601c60248201527f526563616c6c20706f736974696f6e206f7574206f6620626f756e640000000060448201526064016106a9565b61010061229d610400826133bc565b6122a791906133f1565b6122ba906001600160401b0383166133bc565b85516122c69190613476565b95945050505050565b60006122d9612e22565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b60208083019190915284519085015161233f918391889190600060808161283f565b905060005b60046020612354610400836133bc565b61235e91906133f1565b6123689190613389565b811015612419576000816004016020026080019050612403838684608081106123935761239361353e565b6020020151876123a4866001613476565b608081106123b4576123b461353e565b6020020151886123c5876002613476565b608081106123d5576123d561353e565b6020020151896123e6886003613476565b608081106123f6576123f661353e565b602002015186600061283f565b92506124129050600482613476565b9050612344565b5061254781846004602061242f610400836133bc565b61243991906133f1565b6124439190613389565b608081106124535761245361353e565b60200201518560036020610400600461246c91906133bc565b61247691906133f1565b6124809190613389565b608081106124905761249061353e565b6020020151866002602061040060046124a991906133bc565b6124b391906133f1565b6124bd9190613389565b608081106124cd576124cd61353e565b6020020151876001602061040060046124e691906133bc565b6124f091906133f1565b6124fa9190613389565b6080811061250a5761250a61353e565b60200201516020610400600461252091906133bc565b61252a91906133f1565b6125359060206133bc565b612540906080613476565b600161283f565b5195945050505050565b60006105ea825490565b6125658282610c47565b6108d5576125728161296b565b61257d83602061297d565b60405160200161258e929190613597565b60408051601f198184030181529082905262461bcd60e51b82526106a99160040161360c565b6125be8282610c47565b6108d55760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610bba836001600160a01b038416612b18565b61263e8282610c47565b156108d55760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610bba836001600160a01b038416612b67565b60008183106126bf5781610bba565b5090919050565b60008260000182815481106126dd576126dd61353e565b9060005260206000200154905092915050565b600d5460095460109190911c906000818461270c600183613389565b61271690866133bc565b6127209190613476565b61272a91906133f1565b90506127378360026133bc565b81111561274c576127498360026133bc565b90505b6127576002846133f1565b81101561276c576127696002846133f1565b90505b6001600160f01b0381111561278557506001600160f01b035b60101b600d55505050565b60008080600019858709858702925082811083820303915050806000036127ca578382816127c0576127c06133db565b0492505050610bba565b8084116127d657600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b612847612e22565b600c600061285485612c61565b8a516020808d0151835184830151604080516001600160e01b031960e08b901b168187015260248101969096526044860193909352606485018f9052608485018e905260a485018d905260c485018c90526001600160c01b031991821660e48601521660ec84015287151560f81b60f4840152805160d58185038101825260f5909401825293945091869184016009600019fa6128f057600080fd5b505050979650505050505050565b612906612e22565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6020808301919091528251908301516105ea9183916000806040600161283f565b60606105ea6001600160a01b03831660145b6060600061298c8360026133bc565b612997906002613476565b6001600160401b038111156129ae576129ae612f22565b6040519080825280601f01601f1916602001820160405280156129d8576020820181803683370190505b509050600360fc1b816000815181106129f3576129f361353e565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612a2257612a2261353e565b60200101906001600160f81b031916908160001a9053506000612a468460026133bc565b612a51906001613476565b90505b6001811115612ac9576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612a8557612a8561353e565b1a60f81b828281518110612a9b57612a9b61353e565b60200101906001600160f81b031916908160001a90535060049490941c93612ac28161363f565b9050612a54565b508315610bba5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106a9565b6000818152600183016020526040812054612b5f575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105ea565b5060006105ea565b60008181526001830160205260408120548015612c50576000612b8b600183613389565b8554909150600090612b9f90600190613389565b9050818114612c04576000866000018281548110612bbf57612bbf61353e565b9060005260206000200154905080876000018481548110612be257612be261353e565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612c1557612c15613656565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506105ea565b60009150506105ea565b5092915050565b612c69612e22565b62010000821015612cad57600882811c66ffffffffffffff169083901b67ffffffffffffff00161760f01b5b6001600160c01b031916815260006020820152919050565b640100000000821015612ced57600882811b63ff00ff001662ff00ff9184901c9190911617601081811b91901c1760e01b6001600160e01b031916612c95565b68010000000000000000821015612d0757612c9582612d9d565b600160801b821015612d57576001600160401b038216604083901c612d2b82612d9d565b6001600160c01b0319168352612d4081612d9d565b6001600160c01b031916602084015250612d989050565b60405162461bcd60e51b8152602060048201526016602482015275626c616b65326220696e70757420746f6f206c6f6e6760501b60448201526064016106a9565b919050565b65ff000000ff00600882811b91821664ff000000ff9390911c92831617601090811b67ff000000ff0000009290921666ff000000ff0000939093169290921790911c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b90565b6040518061100001604052806080906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b600060208284031215612e5257600080fd5b81356001600160e01b031981168114610bba57600080fd5b80356001600160a01b0381168114612d9857600080fd5b80356001600160401b0381168114612d9857600080fd5b60008060408385031215612eab57600080fd5b612eb483612e6a565b9150612ec260208401612e81565b90509250929050565b600060208284031215612edd57600080fd5b5035919050565b600060208284031215612ef657600080fd5b610bba82612e81565b60008060408385031215612f1257600080fd5b82359150612ec260208401612e6a565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715612f5b57612f5b612f22565b60405290565b60405160c081016001600160401b0381118282101715612f5b57612f5b612f22565b600060808284031215612f9557600080fd5b604051608081018181106001600160401b0382111715612fb757612fb7612f22565b80604052508091508235815260208301356020820152612fd960408401612e81565b6040820152612fea60608401612e81565b60608201525092915050565b600082601f83011261300757600080fd5b6040516110008082018281106001600160401b038211171561302b5761302b612f22565b6040528301818582111561303e57600080fd5b845b82811015613058578035825260209182019101613040565b509195945050505050565b600082601f83011261307457600080fd5b813560206001600160401b038083111561309057613090612f22565b8260051b604051601f19603f830116810181811084821117156130b5576130b5612f22565b6040529384528581018301938381019250878511156130d357600080fd5b83870191505b848210156113f7578135835291830191908301906130d9565b6000611160828403121561310557600080fd5b61310d612f38565b90508135815260208201356020820152604082013560408201526131348360608401612f83565b606082015260e082013560808201526101008083013560a083015261012083013560c0830152613168846101408501612ff6565b60e08301526111408301356001600160401b0381111561318757600080fd5b61319385828601613063565b82840152505092915050565b60008082840360e08112156131b357600080fd5b83356001600160401b038111156131c957600080fd5b6131d5868287016130f2565b93505060c0601f19820112156131ea57600080fd5b506131f3612f61565b6020840135815260408401356020820152606084013560408201526080840135606082015260a0840135608082015260c084013560a0820152809150509250929050565b60006020828403121561324957600080fd5b81356001600160401b0381111561325f57600080fd5b61326b848285016130f2565b949350505050565b6110008101818360005b608081101561329c57815183526020928301929091019060010161327d565b50505092915050565b60008061102083850312156132b957600080fd5b82356001600160401b038111156132cf57600080fd5b6132db858286016130f2565b925050612ec28460208501612ff6565b600080604083850312156132fe57600080fd5b50508035926020909101359150565b6000806040838503121561332057600080fd5b61332983612e6a565b946020939093013593505050565b60008060006060848603121561334c57600080fd5b8335925061335c60208501612e6a565b915061336a60408501612e6a565b90509250925092565b634e487b7160e01b600052601160045260246000fd5b818103818111156105ea576105ea613373565b6001600160401b03828116828216039080821115612c5a57612c5a613373565b60008160001904831182151516156133d6576133d6613373565b500290565b634e487b7160e01b600052601260045260246000fd5b600082613400576134006133db565b500490565b80516001600160801b0381168114612d9857600080fd5b60006040828403121561342e57600080fd5b604051604081018181106001600160401b038211171561345057613450612f22565b60405261345c83613405565b815261346a60208401613405565b60208201529392505050565b808201808211156105ea576105ea613373565b600060c0828403121561349b57600080fd5b60405160c081018181106001600160401b03821117156134bd576134bd612f22565b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b600082613511576135116133db565b500690565b60408101818360005b600281101561329c57815183526020928301929091019060010161351f565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff810361356a5761356a613373565b60010192915050565b60005b8381101561358e578181015183820152602001613576565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516135cf816017850160208801613573565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613600816028840160208801613573565b01602801949350505050565b602081526000825180602084015261362b816040850160208701613573565b601f01601f19169190910160400192915050565b60008161364e5761364e613373565b506000190190565b634e487b7160e01b600052603160045260246000fdfeb9d69e0ca90be54a40811e436234a7f7908b87ff2bec27e64f878b166da8e8e5a264697066735822122024859dec62734dcc20503a6c21ec7450d9c03dfed0952916061296933657f8ed64736f6c63430008100033",
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106102485760003560e01c80637bba7d611161013b578063b0628ee0116100b8578063ca15c8731161007c578063ca15c8731461057b578063d547741f1461058e578063dddc61a8146105a1578063e1498cf9146105aa578063ffbc9bd0146105bd57600080fd5b8063b0628ee014610509578063b15d20da1461051c578063b4988fd014610531578063b51e039714610544578063b776a5121461057257600080fd5b8063a217fddf116100ff578063a217fddf146104ab578063a8279182146104b3578063adaa7a0f146104bc578063ae722e82146104e3578063aed75224146104f657600080fd5b80637bba7d611461042e5780637eca56881461045557806382975fe71461045e5780639010d07c1461048557806391d148541461049857600080fd5b8063331f3b9c116101c957806348f614411161018d57806348f61441146103cc57806359e7b5be146103d55780635bdca855146103f55780636e9bb60b14610408578063704d3c961461041b57600080fd5b8063331f3b9c14610361578063343aad821461036a57806336568abe1461037d57806339cd53ee146103905780633baebb75146103b957600080fd5b8063228cb73311610210578063228cb733146102d5578063248a9ca3146103005780632a02573b146103325780632f2ff15d1461034557806331223ba71461035857600080fd5b806301ffc9a71461024d578063047c13f514610275578063158ef93e1461028a5780631600c6241461029757806316a4be6f146102aa575b600080fd5b61026061025b366004612e40565b6105c5565b60405190151581526020015b60405180910390f35b610288610283366004612e98565b6105f0565b005b6000546102609060ff1681565b6102886102a5366004612ecb565b61070c565b600a546102bd906001600160401b031681565b6040516001600160401b03909116815260200161026c565b6004546102e8906001600160a01b031681565b6040516001600160a01b03909116815260200161026c565b61032461030e366004612ecb565b6000908152600160208190526040909120015490565b60405190815260200161026c565b610288610340366004612ee4565b61072a565b610288610353366004612eff565b610830565b610324600b5481565b61032460065481565b6003546102e8906001600160a01b031681565b61028861038b366004612eff565b61085b565b6102e861039e366004612ecb565b600e602052600090815260409020546001600160a01b031681565b6102886103c736600461319f565b6108d9565b610324600d5481565b6103e86103e3366004613237565b610b70565b60405161026c9190613273565b610288610403366004612ecb565b610b81565b6103246104163660046132a5565b610bae565b610288610429366004612ecb565b610bc1565b6102607f000000000000000000000000000000000000000000000000000000000000000081565b61032460085481565b6102607f000000000000000000000000000000000000000000000000000000000000000081565b6102e86104933660046132eb565b610c2f565b6102606104a6366004612eff565b610c47565b610324600081565b610324600c5481565b6102607f000000000000000000000000000000000000000000000000000000000000000081565b6102886104f1366004613237565b610c72565b610324610504366004613237565b6111ff565b61028861051736600461330d565b611402565b61032460008051602061366d83398151915281565b61028861053f366004613337565b6114c2565b610288610552366004612ecb565b6000908152600e6020526040902080546001600160a01b03191633179055565b61032460075481565b610324610589366004612ecb565b6115e9565b61028861059c366004612eff565b611600565b61032460095481565b6102886105b8366004612ecb565b600d55565b610260611626565b60006001600160e01b03198216635a05180f60e01b14806105ea57506105ea826116c1565b92915050565b60006105fd600143613389565b60408051914060208301526bffffffffffffffffffffffff193360601b16908201526001600160c01b031960c084901b166054820152605c0160408051601f1981840301815291815281516020928301206000818152600e9093529120549091506001600160a01b0316156106b25760405162461bcd60e51b8152602060048201526016602482015275135a5b995c9259081a185cc81c9959da5cdd195c995960521b60448201526064015b60405180910390fd5b6000818152600e602052604080822080546001600160a01b0319166001600160a01b0387169081179091559051909183917fbfeb006f16aca8eb3d9953cf44db6b11b6f3041a313875dfa18f2e9d71bd309e9190a3505050565b60008051602061366d833981519152610724816116f6565b50600655565b60008051602061366d833981519152610742816116f6565b6000826001600160401b03161161079b5760405162461bcd60e51b815260206004820152601f60248201527f4d6178207368617264206e756d6265722063616e6e6f74206265207a65726f0060448201526064016106a9565b6107a660018361339c565b82166001600160401b031660001461080c5760405162461bcd60e51b815260206004820152602360248201527f4d6178207368617264206e756d626572206d75737420626520706f776572206f60448201526233101960e91b60648201526084016106a9565b50600a805467ffffffffffffffff19166001600160401b0392909216919091179055565b6000828152600160208190526040909120015461084c816116f6565b6108568383611703565b505050565b6001600160a01b03811633146108cb5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016106a9565b6108d58282611725565b5050565b815160a08201511461092d5760405162461bcd60e51b815260206004820152601a60248201527f496e636f6e73697374656e74206d696e696e672064696765737400000000000060448201526064016106a9565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708160a00151036109a05760405162461bcd60e51b815260206004820152601960248201527f456d707479206469676573742063616e206e6f74206d696e650000000000000060448201526064016106a9565b600754600c54106109f35760405162461bcd60e51b815260206004820152601c60248201527f45706f63682068617320656e6f756768207375626d697373696f6e730000000060448201526064016106a9565b6000610100610a04610400826133bc565b610a0e91906133f1565b610100610a1d610400826133bc565b610a2791906133f1565b8360600151610a3691906133f1565b610a4091906133bc565b6060840151909150610a529082611747565b60035460c0840151604051630fab20e160e31b815260048101919091526000916001600160a01b031690637d590708906024016040805180830381865afa158015610aa1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac5919061341c565b90506000610100610ad961040060046133bc565b610ae391906133f1565b8560800151610af29190613476565b90508082600001516001600160801b0316108015610b1d57508082602001516001600160801b031610155b610b695760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964207365616c656420636f6e746578742064696765737400000060448201526064016106a9565b5050505050565b610b78612e03565b6105ea8261198b565b60008051602061366d833981519152610b99816116f6565b6008829055600b546000036108d55750600755565b6000610bba8383611a9f565b9392505050565b60008051602061366d833981519152610bd9816116f6565b60008211610c295760405162461bcd60e51b815260206004820152601d60248201527f41646a75737420726174696f206d757374206265206e6f6e2d7a65726f00000060448201526064016106a9565b50600955565b6000828152600260205260408120610bba9083611d12565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6040810151610cbc5760405162461bcd60e51b81526020600482015260166024820152754d696e657249642063616e6e6f74206265207a65726f60501b60448201526064016106a9565b6040808201516000908152600e60205220546001600160a01b031680610d245760405162461bcd60e51b815260206004820152601b60248201527f4d696e6572496420646f6573206e6f742072656769737465726564000000000060448201526064016106a9565b60035460408051635a325a9f60e11b815290516000926001600160a01b03169163b464b53e9160048083019260c0929190829003018187875af1158015610d6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d939190613489565b9050600b5481600001511015610df95760405162461bcd60e51b815260206004820152602560248201527f496e7465726e616c206572726f723a2065706f6368206e756d62657220646563604482015264726561736560d81b60648201526084016106a9565b600b548151118015610e0d57506000600b54115b15610e3257600754600c541015610e2657610e26611d1e565b6000600c556008546007555b610e3c83826108d9565b600a5460608401516001600160401b0390911690610e5990611d30565b1115610eb65760405162461bcd60e51b815260206004820152602660248201527f457863656564696e672074686520616c6c6f776564206e756d626572206f662060448201526573686172647360d01b60648201526084016106a9565b610ebe612e03565b7f000000000000000000000000000000000000000000000000000000000000000015610ef457610eed8461198b565b9050610efb565b5060e08301515b7f000000000000000000000000000000000000000000000000000000000000000015610f84576000610f2d8583611a9f565b905082604001518114610f825760405162461bcd60e51b815260206004820152601860248201527f496e636f6e73697374656e74206d65726b6c6520726f6f74000000000000000060448201526064016106a9565b505b610f8c612e03565b90506000610f99856111ff565b90506000610fb884606001518760600151611d7a90919063ffffffff16565b9050604081600d54610fca91906133f1565b901b82111561101b5760405162461bcd60e51b815260206004820152601b60248201527f446f206e6f7420726561636820746172676574207175616c697479000000000060448201526064016106a9565b60008281526005602052604090205460ff161561107a5760405162461bcd60e51b815260206004820152601960248201527f416e7377657220686173206265656e207375626d69747465640000000000000060448201526064016106a9565b6000828152600560205260409020805460ff191660011790556004546001600160a01b031663b7a3c04c6101006110b3610400806133bc565b6110bf906104006133bc565b6110ca9060086133bc565b6110d491906133f1565b88608001516110e391906133f1565b6040808a015190516001600160e01b031960e085901b16815260048101929092526001600160a01b03891660248301526044820152606401600060405180830381600087803b15801561113557600080fd5b505af1158015611149573d6000803e3d6000fd5b5050506040808801518651600c5460808b015184519182526020820152919350917ffedd8f58059af8fd54b4394c01ea8d07cac041988be3b5a822fb779f9c8de3a4910160405180910390a38351600b55600c8054600191906000906111b0908490613476565b9091555050600754600c5410156111c957505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006111f7576111f784611eba565b505050505050565b60408101516000906112535760405162461bcd60e51b815260206004820152601860248201527f4d696e65722049442063616e6e6f7420626520656d707479000000000000000060448201526064016106a9565b6000604051806080016040528084604001518152602001846020015181526020018460000151815260200161128b8560600151611ef3565b90529050600061129a82611f5b565b905060006112ab61040060406133bc565b6112b96104006101006133bc565b6112c391906133f1565b6112d061040060046133bc565b6112de6104006101006133bc565b6112e891906133f1565b6112f291906133f1565b8560a001516113019190613502565b905061130b612e03565b611313612e22565b6113228760e001518486611fd3565b9250905061010061133661040060046133bc565b61134091906133f1565b8760a0015161134f91906133bc565b61138c826040516020016113639190613516565b6040516020818303038152906040528051906020012089606001516121c990919063ffffffff16565b6113969190613476565b8760800151146113e85760405162461bcd60e51b815260206004820152601960248201527f496e636f727265637420726563616c6c20706f736974696f6e0000000000000060448201526064016106a9565b6113f78760a0015185846122cf565b979650505050505050565b6000818152600e60205260409020546001600160a01b031633146114685760405162461bcd60e51b815260206004820152601b60248201527f53656e64657220646f6573206e6f74206f776e206d696e65724964000000000060448201526064016106a9565b6000818152600e602052604080822080546001600160a01b0319166001600160a01b03861690811790915590519091339184917f9a26a8e7fd42c501b452c02016def8048e3ea28c2bf15127a9b5e2029d989bf191a45050565b60005460ff16156115215760405162461bcd60e51b8152602060048201526024808201527f5a67496e697469616c697a61626c653a20616c726561647920696e697469616c6044820152631a5e995960e21b60648201526084016106a9565b6000805460ff1916600117815561153e906115393390565b611703565b61155660008051602061366d83398151915233611703565b611562836000196133f1565b600d557f00000000000000000000000000000000000000000000000000000000000000001561159257600019600d555b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055506064600655600a600781905560088190556014600955805467ffffffffffffffff19166020179055565b60008181526002602052604081206105ea90612551565b6000828152600160208190526040909120015461161c816116f6565b6108568383611725565b600080600360009054906101000a90046001600160a01b03166001600160a01b031663b464b53e6040518163ffffffff1660e01b815260040160c0604051808303816000875af115801561167e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116a29190613489565b9050600b54816000015111806116bb5750600754600c54105b91505090565b60006001600160e01b03198216637965db0b60e01b14806105ea57506301ffc9a760e01b6001600160e01b03198316146105ea565b611700813361255b565b50565b61170d82826125b4565b6000828152600260205260409020610856908261261f565b61172f8282612634565b6000828152600260205260409020610856908261269b565b610100611756610400806133bc565b611762906104006133bc565b61176d9060086133bc565b61177791906133f1565b82516117839190613502565b156117d05760405162461bcd60e51b815260206004820152601d60248201527f537461727420706f736974696f6e206973206e6f7420616c69676e656400000060448201526064016106a9565b6020820151825182916117e291613476565b11156118285760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e6765206f766572666c6f7760581b60448201526064016106a9565b600061183383611d30565b610100611842610400806133bc565b61184e906104006133bc565b61185a906104006133bc565b6118659060086133bc565b61186f91906133f1565b61187991906133bc565b905080836020015111156118c75760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e676520746f6f206c6f6e6760581b60448201526064016106a9565b60006118d383836126b0565b905080846020015110156119225760405162461bcd60e51b8152602060048201526016602482015275135a5b9a5b99c81c985b99d9481d1bdbc81cda1bdc9d60521b60448201526064016106a9565b83606001518460400151166001600160401b03166000146119855760405162461bcd60e51b815260206004820152601a60248201527f4d61736b656420626974732073686f756c64206265207a65726f00000000000060448201526064016106a9565b50505050565b611993612e03565b60408083015160c0840151608085015192516119c393906020019283526020830191909152604082015260600190565b60408051808303601f19018152919052805160209091012060e08301515118815260015b60206119f661040060046133bc565b611a0091906133f1565b811015611a995760e0830151611a17600183613389565b60808110611a2757611a2761353e565b6020020151604051602001611a3e91815260200190565b604051602081830303815290604052805190602001208360e001518260808110611a6a57611a6a61353e565b602002015118828260808110611a8257611a8261353e565b6020020152611a92600182613476565b90506119e7565b50919050565b6000805b6020611ab261040060046133bc565b611abc91906133f1565b811015611b0a576101006020820284012080848360808110611ae057611ae061353e565b602002018181525050506020610100611af991906133f1565b611b039082613476565b9050611aa3565b506000611b1a60206101006133f1565b90505b6020611b2c61040060046133bc565b611b3691906133f1565b811015611c095760005b6020611b4f61040060046133bc565b611b5991906133f1565b811015611c00576000848260808110611b7457611b7461353e565b60200201519050600085611b888585613476565b60808110611b9857611b9861353e565b602002015190508181604051602001611bbb929190918252602082015260400190565b60405160208183030381529060405280519060200120868460808110611be357611be361353e565b602002015250611bf99050600183901b82613476565b9050611b40565b5060011b611b1d565b508151611c14612e03565b92506000610100611c2861040060046133bc565b611c3291906133f1565b8560800151611c4191906133f1565b905060005b85610100015151811015611d0857600080611c62600285613502565b600003611c92578491508761010001518381518110611c8357611c8361353e565b60200260200101519050611cb7565b8761010001518381518110611ca957611ca961353e565b602002602001015191508490505b6040805160208101849052908101829052606001604051602081830303815290604052805190602001209450600284611cf091906133f1565b93505050600181611d019190613476565b9050611c46565b5090949350505050565b6000610bba83836126c6565b611d2e6001600160f01b036126f0565b565b606081015160009019815b6001600160401b03821615611d6b57611d5560018361339c565b9091169080611d6381613554565b915050611d3b565b600160ff9091161b9392505050565b600080610100611d8c610400806133bc565b611d98906104006133bc565b611da4906104006133bc565b611daf9060086133bc565b611db991906133f1565b8311611dc55782611e01565b610100611dd4610400806133bc565b611de0906104006133bc565b611dec906104006133bc565b611df79060086133bc565b611e0191906133f1565b90506000611e0e85611d30565b611e1890856133f1565b90506000610100611e2b610400806133bc565b611e37906104006133bc565b611e43906104006133bc565b611e4e9060086133bc565b611e5891906133f1565b8211611e645781611ea0565b610100611e73610400806133bc565b611e7f906104006133bc565b611e8b906104006133bc565b611e969060086133bc565b611ea091906133f1565b9050611eb081604085901b6133f1565b9695505050505050565b6000816020015143611ecc9190613389565b905060006010600d54901c90506000611ee88284600654612790565b9050611985816126f0565b60008160000151826020015183604001518460600151604051602001611f3e949392919093845260208401929092526001600160401b03908116604084015216606082015260800190565b604051602081830303815290604052805190602001209050919050565b611f63612e22565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b602080830191909152825190830151604084015160608501516105ea938593909290916080600161283f565b611fdb612e22565b611fe3612e03565b60005b848110156120415760005b604061200061040060046133bc565b61200a91906133f1565b81101561202e5761201a856128fe565b9450612027600182613476565b9050611ff1565b5061203a600182613476565b9050611fe6565b5060005b602061205461040060046133bc565b61205e91906133f1565b8110156120fe5761206e846128fe565b93508581608081106120825761208261353e565b602002015184511882826080811061209c5761209c61353e565b6020020152856120ad826001613476565b608081106120bd576120bd61353e565b6020020151846001602002015118826120d7836001613476565b608081106120e7576120e761353e565b60200201526120f7600282613476565b9050612045565b50600061210c856001613476565b90505b61211c61040060406133bc565b61212a6104006101006133bc565b61213491906133f1565b61214161040060046133bc565b61214f6104006101006133bc565b61215991906133f1565b61216391906133f1565b8110156121bd5760005b604061217c61040060046133bc565b61218691906133f1565b8110156121aa57612196856128fe565b94506121a3600182613476565b905061216d565b506121b6600182613476565b905061210f565b50829150935093915050565b6000806101006121db610400826133bc565b6121e591906133f1565b84602001516121f491906133f1565b6121fe9084613502565b60408501516060860151602087015192935083161790610100612223610400826133bc565b61222d91906133f1565b612240906001600160401b0384166133bc565b111561228e5760405162461bcd60e51b815260206004820152601c60248201527f526563616c6c20706f736974696f6e206f7574206f6620626f756e640000000060448201526064016106a9565b61010061229d610400826133bc565b6122a791906133f1565b6122ba906001600160401b0383166133bc565b85516122c69190613476565b95945050505050565b60006122d9612e22565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b60208083019190915284519085015161233f918391889190600060808161283f565b905060005b60046020612354610400836133bc565b61235e91906133f1565b6123689190613389565b811015612419576000816004016020026080019050612403838684608081106123935761239361353e565b6020020151876123a4866001613476565b608081106123b4576123b461353e565b6020020151886123c5876002613476565b608081106123d5576123d561353e565b6020020151896123e6886003613476565b608081106123f6576123f661353e565b602002015186600061283f565b92506124129050600482613476565b9050612344565b5061254781846004602061242f610400836133bc565b61243991906133f1565b6124439190613389565b608081106124535761245361353e565b60200201518560036020610400600461246c91906133bc565b61247691906133f1565b6124809190613389565b608081106124905761249061353e565b6020020151866002602061040060046124a991906133bc565b6124b391906133f1565b6124bd9190613389565b608081106124cd576124cd61353e565b6020020151876001602061040060046124e691906133bc565b6124f091906133f1565b6124fa9190613389565b6080811061250a5761250a61353e565b60200201516020610400600461252091906133bc565b61252a91906133f1565b6125359060206133bc565b612540906080613476565b600161283f565b5195945050505050565b60006105ea825490565b6125658282610c47565b6108d5576125728161296b565b61257d83602061297d565b60405160200161258e929190613597565b60408051601f198184030181529082905262461bcd60e51b82526106a99160040161360c565b6125be8282610c47565b6108d55760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610bba836001600160a01b038416612b18565b61263e8282610c47565b156108d55760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610bba836001600160a01b038416612b67565b60008183106126bf5781610bba565b5090919050565b60008260000182815481106126dd576126dd61353e565b9060005260206000200154905092915050565b600d5460095460109190911c906000818461270c600183613389565b61271690866133bc565b6127209190613476565b61272a91906133f1565b90506127378360026133bc565b81111561274c576127498360026133bc565b90505b6127576002846133f1565b81101561276c576127696002846133f1565b90505b6001600160f01b0381111561278557506001600160f01b035b60101b600d55505050565b60008080600019858709858702925082811083820303915050806000036127ca578382816127c0576127c06133db565b0492505050610bba565b8084116127d657600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b612847612e22565b600c600061285485612c61565b8a516020808d0151835184830151604080516001600160e01b031960e08b901b168187015260248101969096526044860193909352606485018f9052608485018e905260a485018d905260c485018c90526001600160c01b031991821660e48601521660ec84015287151560f81b60f4840152805160d58185038101825260f5909401825293945091869184016009600019fa6128f057600080fd5b505050979650505050505050565b612906612e22565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6020808301919091528251908301516105ea9183916000806040600161283f565b60606105ea6001600160a01b03831660145b6060600061298c8360026133bc565b612997906002613476565b6001600160401b038111156129ae576129ae612f22565b6040519080825280601f01601f1916602001820160405280156129d8576020820181803683370190505b509050600360fc1b816000815181106129f3576129f361353e565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612a2257612a2261353e565b60200101906001600160f81b031916908160001a9053506000612a468460026133bc565b612a51906001613476565b90505b6001811115612ac9576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612a8557612a8561353e565b1a60f81b828281518110612a9b57612a9b61353e565b60200101906001600160f81b031916908160001a90535060049490941c93612ac28161363f565b9050612a54565b508315610bba5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106a9565b6000818152600183016020526040812054612b5f575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556105ea565b5060006105ea565b60008181526001830160205260408120548015612c50576000612b8b600183613389565b8554909150600090612b9f90600190613389565b9050818114612c04576000866000018281548110612bbf57612bbf61353e565b9060005260206000200154905080876000018481548110612be257612be261353e565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612c1557612c15613656565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506105ea565b60009150506105ea565b5092915050565b612c69612e22565b62010000821015612cad57600882811c66ffffffffffffff169083901b67ffffffffffffff00161760f01b5b6001600160c01b031916815260006020820152919050565b640100000000821015612ced57600882811b63ff00ff001662ff00ff9184901c9190911617601081811b91901c1760e01b6001600160e01b031916612c95565b68010000000000000000821015612d0757612c9582612d9d565b600160801b821015612d57576001600160401b038216604083901c612d2b82612d9d565b6001600160c01b0319168352612d4081612d9d565b6001600160c01b031916602084015250612d989050565b60405162461bcd60e51b8152602060048201526016602482015275626c616b65326220696e70757420746f6f206c6f6e6760501b60448201526064016106a9565b919050565b65ff000000ff00600882811b91821664ff000000ff9390911c92831617601090811b67ff000000ff0000009290921666ff000000ff0000939093169290921790911c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b90565b6040518061100001604052806080906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b600060208284031215612e5257600080fd5b81356001600160e01b031981168114610bba57600080fd5b80356001600160a01b0381168114612d9857600080fd5b80356001600160401b0381168114612d9857600080fd5b60008060408385031215612eab57600080fd5b612eb483612e6a565b9150612ec260208401612e81565b90509250929050565b600060208284031215612edd57600080fd5b5035919050565b600060208284031215612ef657600080fd5b610bba82612e81565b60008060408385031215612f1257600080fd5b82359150612ec260208401612e6a565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715612f5b57612f5b612f22565b60405290565b60405160c081016001600160401b0381118282101715612f5b57612f5b612f22565b600060808284031215612f9557600080fd5b604051608081018181106001600160401b0382111715612fb757612fb7612f22565b80604052508091508235815260208301356020820152612fd960408401612e81565b6040820152612fea60608401612e81565b60608201525092915050565b600082601f83011261300757600080fd5b6040516110008082018281106001600160401b038211171561302b5761302b612f22565b6040528301818582111561303e57600080fd5b845b82811015613058578035825260209182019101613040565b509195945050505050565b600082601f83011261307457600080fd5b813560206001600160401b038083111561309057613090612f22565b8260051b604051601f19603f830116810181811084821117156130b5576130b5612f22565b6040529384528581018301938381019250878511156130d357600080fd5b83870191505b848210156113f7578135835291830191908301906130d9565b6000611160828403121561310557600080fd5b61310d612f38565b90508135815260208201356020820152604082013560408201526131348360608401612f83565b606082015260e082013560808201526101008083013560a083015261012083013560c0830152613168846101408501612ff6565b60e08301526111408301356001600160401b0381111561318757600080fd5b61319385828601613063565b82840152505092915050565b60008082840360e08112156131b357600080fd5b83356001600160401b038111156131c957600080fd5b6131d5868287016130f2565b93505060c0601f19820112156131ea57600080fd5b506131f3612f61565b6020840135815260408401356020820152606084013560408201526080840135606082015260a0840135608082015260c084013560a0820152809150509250929050565b60006020828403121561324957600080fd5b81356001600160401b0381111561325f57600080fd5b61326b848285016130f2565b949350505050565b6110008101818360005b608081101561329c57815183526020928301929091019060010161327d565b50505092915050565b60008061102083850312156132b957600080fd5b82356001600160401b038111156132cf57600080fd5b6132db858286016130f2565b925050612ec28460208501612ff6565b600080604083850312156132fe57600080fd5b50508035926020909101359150565b6000806040838503121561332057600080fd5b61332983612e6a565b946020939093013593505050565b60008060006060848603121561334c57600080fd5b8335925061335c60208501612e6a565b915061336a60408501612e6a565b90509250925092565b634e487b7160e01b600052601160045260246000fd5b818103818111156105ea576105ea613373565b6001600160401b03828116828216039080821115612c5a57612c5a613373565b60008160001904831182151516156133d6576133d6613373565b500290565b634e487b7160e01b600052601260045260246000fd5b600082613400576134006133db565b500490565b80516001600160801b0381168114612d9857600080fd5b60006040828403121561342e57600080fd5b604051604081018181106001600160401b038211171561345057613450612f22565b60405261345c83613405565b815261346a60208401613405565b60208201529392505050565b808201808211156105ea576105ea613373565b600060c0828403121561349b57600080fd5b60405160c081018181106001600160401b03821117156134bd576134bd612f22565b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b600082613511576135116133db565b500690565b60408101818360005b600281101561329c57815183526020928301929091019060010161351f565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff810361356a5761356a613373565b60010192915050565b60005b8381101561358e578181015183820152602001613576565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516135cf816017850160208801613573565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613600816028840160208801613573565b01602801949350505050565b602081526000825180602084015261362b816040850160208701613573565b601f01601f19169190910160400192915050565b60008161364e5761364e613373565b506000190190565b634e487b7160e01b600052603160045260246000fdfeb9d69e0ca90be54a40811e436234a7f7908b87ff2bec27e64f878b166da8e8e5a264697066735822122024859dec62734dcc20503a6c21ec7450d9c03dfed0952916061296933657f8ed64736f6c63430008100033",
"linkReferences": {},
"deployedLinkReferences": {}
}