@soma-finance/core-contracts
Version:
SOMA Finance core contracts
1,112 lines • 60.1 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.TemplateFactory__factory = void 0;
/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
const ethers_1 = require("ethers");
const _erc165InterfaceId = "0x7bcb715d";
const _erc1820InterfaceId = "0xa6629d2ad12fc5f252a02803127ced3ba2d49b4998ed20e8af8a55485ab4b15c";
const _abi = [
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "bytes32",
name: "templateId",
type: "bytes32",
},
{
indexed: false,
internalType: "bytes32",
name: "prevRole",
type: "bytes32",
},
{
indexed: false,
internalType: "bytes32",
name: "newRole",
type: "bytes32",
},
{
indexed: true,
internalType: "address",
name: "sender",
type: "address",
},
],
name: "DeployRoleUpdated",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "target",
type: "address",
},
{
indexed: false,
internalType: "bytes",
name: "data",
type: "bytes",
},
{
indexed: false,
internalType: "bytes",
name: "result",
type: "bytes",
},
{
indexed: true,
internalType: "address",
name: "sender",
type: "address",
},
],
name: "FunctionCalled",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "uint8",
name: "version",
type: "uint8",
},
],
name: "Initialized",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "address",
name: "account",
type: "address",
},
],
name: "Paused",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "instance",
type: "address",
},
{
indexed: true,
internalType: "bytes32",
name: "templateId",
type: "bytes32",
},
{
indexed: false,
internalType: "uint256",
name: "version",
type: "uint256",
},
{
indexed: false,
internalType: "bytes[]",
name: "functionCalls",
type: "bytes[]",
},
{
indexed: true,
internalType: "address",
name: "sender",
type: "address",
},
],
name: "TemplateCloned",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "instance",
type: "address",
},
{
indexed: true,
internalType: "bytes32",
name: "templateId",
type: "bytes32",
},
{
indexed: false,
internalType: "uint256",
name: "version",
type: "uint256",
},
{
indexed: false,
internalType: "bytes",
name: "args",
type: "bytes",
},
{
indexed: false,
internalType: "bytes[]",
name: "functionCalls",
type: "bytes[]",
},
{
indexed: true,
internalType: "address",
name: "sender",
type: "address",
},
],
name: "TemplateDeployed",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "bytes32",
name: "templateId",
type: "bytes32",
},
{
indexed: true,
internalType: "address",
name: "sender",
type: "address",
},
],
name: "TemplateDisabled",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "bytes32",
name: "templateId",
type: "bytes32",
},
{
indexed: true,
internalType: "address",
name: "sender",
type: "address",
},
],
name: "TemplateEnabled",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "bytes32",
name: "templateId",
type: "bytes32",
},
{
indexed: true,
internalType: "uint256",
name: "version",
type: "uint256",
},
{
indexed: false,
internalType: "address",
name: "implementation",
type: "address",
},
{
indexed: true,
internalType: "address",
name: "sender",
type: "address",
},
],
name: "TemplateVersionCreated",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "bytes32",
name: "templateId",
type: "bytes32",
},
{
indexed: true,
internalType: "uint256",
name: "version",
type: "uint256",
},
{
indexed: true,
internalType: "address",
name: "sender",
type: "address",
},
],
name: "TemplateVersionDeprecated",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "bytes32",
name: "templateId",
type: "bytes32",
},
{
indexed: true,
internalType: "uint256",
name: "version",
type: "uint256",
},
{
indexed: true,
internalType: "address",
name: "sender",
type: "address",
},
],
name: "TemplateVersionUndeprecated",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: true,
internalType: "address",
name: "token",
type: "address",
},
{
indexed: true,
internalType: "address",
name: "to",
type: "address",
},
{
indexed: false,
internalType: "uint256",
name: "amount",
type: "uint256",
},
{
indexed: true,
internalType: "address",
name: "sender",
type: "address",
},
],
name: "TokensRecovered",
type: "event",
},
{
anonymous: false,
inputs: [
{
indexed: false,
internalType: "address",
name: "account",
type: "address",
},
],
name: "Unpaused",
type: "event",
},
{
inputs: [],
name: "FUNCTION_CALL_ROLE",
outputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "MANAGE_TEMPLATE_ROLE",
outputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "PUBLIC_ROLE",
outputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "SOMA",
outputs: [
{
internalType: "contract ISOMA",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "TOKEN_RECOVERY_ROLE",
outputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "templateId",
type: "bytes32",
},
{
internalType: "uint256",
name: "_version",
type: "uint256",
},
{
internalType: "bytes[]",
name: "functionCalls",
type: "bytes[]",
},
{
internalType: "bytes32",
name: "salt",
type: "bytes32",
},
],
name: "cloneTemplate",
outputs: [
{
internalType: "address",
name: "instance",
type: "address",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "templateId",
type: "bytes32",
},
],
name: "deployRole",
outputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "templateId",
type: "bytes32",
},
{
internalType: "uint256",
name: "_version",
type: "uint256",
},
{
internalType: "bytes",
name: "args",
type: "bytes",
},
{
internalType: "bytes[]",
name: "functionCalls",
type: "bytes[]",
},
{
internalType: "bytes32",
name: "salt",
type: "bytes32",
},
],
name: "deployTemplate",
outputs: [
{
internalType: "address",
name: "instance",
type: "address",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "instance",
type: "address",
},
],
name: "deployedByFactory",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "instance",
type: "address",
},
],
name: "deploymentInfo",
outputs: [
{
components: [
{
internalType: "bool",
name: "exists",
type: "bool",
},
{
internalType: "uint64",
name: "block",
type: "uint64",
},
{
internalType: "uint64",
name: "timestamp",
type: "uint64",
},
{
internalType: "address",
name: "sender",
type: "address",
},
{
internalType: "bytes32",
name: "templateId",
type: "bytes32",
},
{
internalType: "uint256",
name: "version",
type: "uint256",
},
{
internalType: "bytes",
name: "args",
type: "bytes",
},
{
internalType: "bytes[]",
name: "functionCalls",
type: "bytes[]",
},
{
internalType: "bool",
name: "cloned",
type: "bool",
},
],
internalType: "struct ITemplateFactory.DeploymentInfo",
name: "",
type: "tuple",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "templateId",
type: "bytes32",
},
{
internalType: "uint256",
name: "_version",
type: "uint256",
},
],
name: "deprecateVersion",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "templateId",
type: "bytes32",
},
],
name: "disableTemplate",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "templateId",
type: "bytes32",
},
],
name: "enableTemplate",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "target",
type: "address",
},
{
internalType: "bytes",
name: "data",
type: "bytes",
},
],
name: "functionCall",
outputs: [
{
internalType: "bytes",
name: "result",
type: "bytes",
},
],
stateMutability: "nonpayable",
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: "address",
name: "account",
type: "address",
},
],
name: "hasRole",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "templateId",
type: "bytes32",
},
{
internalType: "uint256",
name: "_version",
type: "uint256",
},
{
internalType: "bytes",
name: "args",
type: "bytes",
},
],
name: "initCodeHash",
outputs: [
{
internalType: "bytes32",
name: "",
type: "bytes32",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "templateId",
type: "bytes32",
},
],
name: "latestVersion",
outputs: [
{
internalType: "uint256",
name: "",
type: "uint256",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "bytes[]",
name: "data",
type: "bytes[]",
},
],
name: "multicall",
outputs: [
{
internalType: "bytes[]",
name: "results",
type: "bytes[]",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "name",
outputs: [
{
internalType: "string",
name: "",
type: "string",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [],
name: "pause",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "paused",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "templateId",
type: "bytes32",
},
{
internalType: "uint256",
name: "_version",
type: "uint256",
},
{
internalType: "bytes32",
name: "salt",
type: "bytes32",
},
],
name: "predictCloneAddress",
outputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "templateId",
type: "bytes32",
},
{
internalType: "uint256",
name: "_version",
type: "uint256",
},
{
internalType: "bytes",
name: "args",
type: "bytes",
},
{
internalType: "bytes32",
name: "salt",
type: "bytes32",
},
],
name: "predictDeployAddress",
outputs: [
{
internalType: "address",
name: "",
type: "address",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "address",
name: "token",
type: "address",
},
{
internalType: "address",
name: "to",
type: "address",
},
{
internalType: "uint256",
name: "amount",
type: "uint256",
},
],
name: "recoverTokens",
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: [
{
internalType: "bytes32",
name: "templateId",
type: "bytes32",
},
],
name: "templateInstances",
outputs: [
{
internalType: "address[]",
name: "",
type: "address[]",
},
],
stateMutability: "view",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "templateId",
type: "bytes32",
},
{
internalType: "uint256",
name: "_version",
type: "uint256",
},
],
name: "undeprecateVersion",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [],
name: "unpause",
outputs: [],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "templateId",
type: "bytes32",
},
{
internalType: "bytes32",
name: "_deployRole",
type: "bytes32",
},
],
name: "updateDeployRole",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "templateId",
type: "bytes32",
},
{
internalType: "bytes",
name: "initialPart",
type: "bytes",
},
{
internalType: "uint256",
name: "totalParts",
type: "uint256",
},
{
internalType: "address",
name: "implementation",
type: "address",
},
],
name: "uploadTemplate",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "templateId",
type: "bytes32",
},
{
internalType: "uint256",
name: "_version",
type: "uint256",
},
{
internalType: "bytes",
name: "part",
type: "bytes",
},
],
name: "uploadTemplatePart",
outputs: [
{
internalType: "bool",
name: "",
type: "bool",
},
],
stateMutability: "nonpayable",
type: "function",
},
{
inputs: [
{
internalType: "bytes32",
name: "templateId",
type: "bytes32",
},
{
internalType: "uint256",
name: "_version",
type: "uint256",
},
],
name: "version",
outputs: [
{
components: [
{
internalType: "bool",
name: "deprecated",
type: "bool",
},
{
internalType: "address",
name: "implementation",
type: "address",
},
{
internalType: "bytes",
name: "creationCode",
type: "bytes",
},
{
internalType: "uint256",
name: "totalParts",
type: "uint256",
},
{
internalType: "uint256",
name: "partsUploaded",
type: "uint256",
},
{
internalType: "address[]",
name: "instances",
type: "address[]",
},
],
internalType: "struct ITemplateFactory.Version",
name: "version_",
type: "tuple",
},
],
stateMutability: "view",
type: "function",
},
];
const _bytecode = "0x60a0604052730f3dc00189dbcd1d0c574e48031270cae04c4adf60805234801561002857600080fd5b5060016000819055805460ff191681556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1608051613c7e6100b76000396000818161034c01528181610b2401528181610c2301528181610cbf01528181610da5015281816113ce0152818161146a01526116110152613c7e6000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063790f8a291161011a578063b594b23a116100ad578063d86975981161007c578063d8697598146104cd578063de87aeeb146104f4578063e9e1075214610520578063f3a284b014610533578063fd14bb1c1461054657600080fd5b8063b594b23a14610474578063b764b84214610487578063c9e8a64e1461049a578063ce3220f6146104ad57600080fd5b806391d14854116100e957806391d14854146104075780639e1557001461041a578063a0b5ffb014610441578063ac9650d81461045457600080fd5b8063790f8a29146103b75780638456cb59146103cc5780638bbb40bb146103d4578063906bc58a146103f457600080fd5b80633f4ba83a1161019257806363727fc21161016157806363727fc2146103475780636ed38b2b1461036e57806370caef0414610391578063778286dc146103a457600080fd5b80633f4ba83a1461030f5780635c975abb146103195780635f3e849f146103215780635f93ab281461033457600080fd5b8063129a97e0116101ce578063129a97e0146102895780631c9915ca146102b4578063248a9ca3146102c75780633ca7c02a146102e857600080fd5b806301ffc9a7146102005780630402634414610228578063068080291461023b57806306fdde031461024e575b600080fd5b61021361020e366004613071565b610566565b60405190151581526020015b60405180910390f35b610213610236366004613150565b610591565b61021361024936600461319f565b61071d565b61027c6040518060400160405280600f81526020016e54656d706c617465466163746f727960881b81525081565b60405161021f9190613211565b61029c6102973660046132c2565b610883565b6040516001600160a01b03909116815260200161021f565b6102136102c2366004613340565b6109fb565b6102da6102d5366004613340565b610b20565b60405190815260200161021f565b6102da7f40cb10054c68f3240d70878767de831b28590413f671187b1bbce7bc0ffff41481565b610317610c12565b005b610213610da1565b61031761032f36600461336e565b610e3a565b610213610342366004613340565b610f4a565b61029c7f000000000000000000000000000000000000000000000000000000000000000081565b6102da61037c366004613340565b60009081526004602052604090206001015490565b61021361039f3660046133af565b611087565b6102da6103b2366004613150565b6112f9565b6102da600080516020613c5283398151915281565b6103176113bd565b6103e76103e2366004613340565b611549565b60405161021f9190613455565b61029c610402366004613468565b6115b8565b610213610415366004613494565b61160d565b6102da7fd81aba235be7dff95323f326b8a2dc1f4a8245a944bd8a142fd9d1644b33c12381565b61027c61044f3660046134c4565b611704565b610467610462366004613513565b6117e2565b60405161021f91906135dc565b61029c6104823660046135ef565b6118cf565b61021361049536600461319f565b611a3e565b61029c6104a8366004613646565b611bc7565b6104c06104bb36600461368c565b611be7565b60405161021f91906136a9565b6102da7f0b8459b722d944f0580da74c767d2dcae280ce16527c19c825b302a24e208dfd81565b61021361050236600461368c565b6001600160a01b031660009081526005602052604090205460ff1690565b6102da61052e366004613340565b611e2e565b61021361054136600461319f565b611eb6565b61055961055436600461319f565b611ff9565b60405161021f9190613764565b60006001600160e01b031982166317a2c91960e31b148061058b575061058b826121cb565b92915050565b60006002600054036105be5760405162461bcd60e51b81526004016105b5906137cf565b60405180910390fd5b6002600055600080516020613c528339815191526105dc813361160d565b6105f85760405162461bcd60e51b81526004016105b590613806565b60008351116106195760405162461bcd60e51b81526004016105b59061386d565b600085815260046020526040812060020180548690811061063c5761063c6138b4565b9060005260206000209060050201905080600201548160030154106106be5760405162461bcd60e51b815260206004820152603260248201527f54656d706c617465466163746f72793a20746865726520617265206e6f206d6f6044820152711c99481c185c9d1cc81d1bc81d5c1b1bd85960721b60648201526084016105b5565b80600101846040516020016106d4929190613904565b6040516020818303038152906040528160010190816106f391906139d9565b5060038101805490600061070683613aae565b919050555060019250505060016000559392505050565b6000600080516020613c52833981519152610738813361160d565b6107545760405162461bcd60e51b81526004016105b590613806565b6000848152600460205260409020600201805484908110610777576107776138b4565b600091825260209091206005909102015460ff166108085760405162461bcd60e51b815260206004820152604260248201527f54656d706c617465466163746f72793a20746869732074656d706c617465207660448201527f657273696f6e206973206e6f742063757272656e746c79206465707265636174606482015261195960f21b608482015260a4016105b5565b600084815260046020526040812060020180548590811061082b5761082b6138b4565b60009182526020822060059190910201805460ff1916921515929092179091556040513391859187917f277c959cb53ff2e10a80711e02bf65fe5ed4a054615b80e65947f023ae6e943891a4600191505b5092915050565b60006002600054036108a75760405162461bcd60e51b81526004016105b5906137cf565b60026000908155868152600460205260408120906108c582886121f0565b60010180546108d3906138ca565b80601f01602080910402602001604051908101604052809291908181526020018280546108ff906138ca565b801561094c5780601f106109215761010080835404028352916020019161094c565b820191906000526020600020905b81548152906001019060200180831161092f57829003601f168201915b50505050509050600061095f8288612379565b905061097583600101546109703390565b612406565b61097f81866124db565b610989818661254e565b935061099a8989868a8a6000612567565b336001600160a01b031689856001600160a01b03167f955869ef2e98789df4043afecb08d095f8a52d1d2733300f010885cd1a5167548b8b8b6040516109e293929190613ac7565b60405180910390a4505060016000555095945050505050565b6000600080516020613c52833981519152610a16813361160d565b610a325760405162461bcd60e51b81526004016105b590613806565b600260005403610a545760405162461bcd60e51b81526004016105b5906137cf565b600260009081558381526004602052604090205460ff16610ad15760405162461bcd60e51b815260206004820152603160248201527f54656d706c617465466163746f72793a20746869732074656d706c61746520696044820152701cc8185b1c9958591e48195b98589b1959607a1b60648201526084016105b5565b600083815260046020526040808220805460ff1916905551339185917f2f6a0ce270fda2c3670958a1d837f56107759bfef259ae0a8b89d0a37581d7649190a360019150506001600055919050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba49190613af2565b6001600160a01b031663248a9ca3836040518263ffffffff1660e01b8152600401610bd191815260200190565b602060405180830381865afa158015610bee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058b9190613b0f565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca39190613af2565b6001600160a01b03161480610d4a5750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3f9190613af2565b6001600160a01b0316145b610d965760405162461bcd60e51b815260206004820152601f60248201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c790060448201526064016105b5565b610d9e6127ba565b50565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e259190613b28565b80610e3557505060015460ff1690565b905090565b7f0b8459b722d944f0580da74c767d2dcae280ce16527c19c825b302a24e208dfd610e65813361160d565b610e815760405162461bcd60e51b81526004016105b590613806565b610e8c60028561280c565b15610ed95760405162461bcd60e51b815260206004820152601c60248201527f546f6b656e5265636f766572793a20494e56414c49445f544f4b454e0000000060448201526064016105b5565b610eed6001600160a01b038516848461282e565b336001600160a01b0316836001600160a01b0316856001600160a01b03167fca574176b1d34032f40f7fb0c519eae468b4535ebf7b27f986a7b6e2fa53d53885604051610f3c91815260200190565b60405180910390a450505050565b6000600080516020613c52833981519152610f65813361160d565b610f815760405162461bcd60e51b81526004016105b590613806565b600260005403610fa35760405162461bcd60e51b81526004016105b5906137cf565b600260009081558381526004602052604090205460ff16156110225760405162461bcd60e51b815260206004820152603260248201527f54656d706c617465466163746f72793a20746869732074656d706c61746520696044820152711cc8185b1c9958591e48191a5cd8589b195960721b60648201526084016105b5565b6000838152600460205260409020805460ff191660011790556110423390565b6001600160a01b0316837faf8421cc83040c878d800a638cd1b00b40da363143624dabc5a4fb87810d6c7f60405160405180910390a360019150506001600055919050565b6000600080516020613c528339815191526110a2813361160d565b6110be5760405162461bcd60e51b81526004016105b590613806565b6002600054036110e05760405162461bcd60e51b81526004016105b5906137cf565b60026000558561113e5760405162461bcd60e51b8152602060048201526024808201527f54656d706c617465466163746f72793a20696e76616c69642074656d706c617460448201526319481a5960e21b60648201526084016105b5565b600085511161115f5760405162461bcd60e51b81526004016105b59061386d565b600084116111bb5760405162461bcd60e51b8152602060048201526024808201527f54656d706c617465466163746f72793a20746f74616c207061727473206973206044820152637a65726f60e01b60648201526084016105b5565b6111c3612f11565b60008781526004602081815260408084206002018054606087018b90529186018b81526001608088018190526001600160a01b038b8116898701908152968652818501845592875293909520865160058402909101805495516001600160a81b0319909616911515610100600160a81b031916919091176101009590921694909402178355925184929182019061125a90826139d9565b50606082015160028201556080820151600382015560a0820151805161128a916004840191602090910190612f52565b5050506112943390565b6001600160a01b031681897f11651dd2ce0c1a9c807d24371afed9e0ee575d95d30a90fc098949d7ac27fc26886040516112dd91906001600160a01b0391909116815260200190565b60405180910390a4600193505050506001600055949350505050565b6000838152600460205260408120819061131390856121f0565b90506113ab816001018054611327906138ca565b80601f0160208091040260200160405190810160405280929190818152602001828054611353906138ca565b80156113a05780601f10611375576101008083540402835291602001916113a0565b820191906000526020600020905b81548152906001019060200180831161138357829003601f168201915b505050505084612379565b805190602001209150505b9392505050565b6000339050806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ee97f7f36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561142a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144e9190613af2565b6001600160a01b031614806114f55750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632d37ead56040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ea9190613af2565b6001600160a01b0316145b6115415760405162461bcd60e51b815260206004820152601f60248201527f534f4d413a204d4153544552206f7220535542204d4153544552206f6e6c790060448201526064016105b5565b610d9e612880565b6000818152600460209081526040918290206003018054835181840281018401909452808452606093928301828280156115ac57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161158e575b50505050509050919050565b600083815260046020526040812060020180546116059190859081106115e0576115e06138b4565b600091825260209091206005909102015461010090046001600160a01b0316836128bb565b949350505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166371907f176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561166d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116919190613af2565b604051632474521560e21b8152600481018590526001600160a01b03848116602483015291909116906391d1485490604401602060405180830381865afa1580156116e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b69190613b28565b60607fd81aba235be7dff95323f326b8a2dc1f4a8245a944bd8a142fd9d1644b33c123611731813361160d565b61174d5760405162461bcd60e51b81526004016105b590613806565b60026000540361176f5760405162461bcd60e51b81526004016105b5906137cf565b60026000556117876001600160a01b03851684612921565b9150336001600160a01b0316846001600160a01b03167f2cc8b4c5abd40ee49f6b1aab242efad2c4d4f3d152004ccbdbf8876da1997d9185856040516117ce929190613b4a565b60405180910390a350600160005592915050565b6060816001600160401b038111156117fc576117fc61309b565b60405190808252806020026020018201604052801561182f57816020015b606081526020019060019003908161181a5790505b50905060005b8281101561087c5761189f30858584818110611853576118536138b4565b90506020028101906118659190613b6f565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061296392505050565b8282815181106118b1576118b16138b4565b602002602001018190525080806118c790613aae565b915050611835565b60006002600054036118f35760405162461bcd60e51b81526004016105b5906137cf565b600260009081558581526004602052604081209061191182876121f0565b5461010090046001600160a01b0316905061192c8185612988565b61193b82600101546109703390565b6001600160a01b0381166119b75760405162461bcd60e51b815260206004820152603960248201527f54656d706c617465466163746f72793a20696d706c656d656e746174696f6e2060448201527f6f722076657273696f6e20646f6573206e6f742065786973740000000000000060648201526084016105b5565b6119c18185612994565b92506119e187878560405180602001604052806000815250896001612567565b336001600160a01b031687846001600160a01b03167f4978d6d92141993d070e3e52cac7fdb87bee26122550b1288f4e3ee4e748c29e8989604051611a27929190613bbc565b60405180910390a450506001600055949350505050565b6000600080516020613c52833981519152611a59813361160d565b611a755760405162461bcd60e51b81526004016105b590613806565b600260005403611a975760405162461bcd60e51b81526004016105b5906137cf565b6002600081815585815260046020526040902001805484908110611abd57611abd6138b4565b600091825260209091206005909102015460ff1615611b445760405162461bcd60e51b815260206004820152603c60248201527f54656d706c617465466163746f72793a20746869732074656d706c617465207660448201527f657273696f6e20697320616c726561647920646570726563617465640000000060648201526084016105b5565b600084815260046020526040902060020180546001919085908110611b6b57611b6b6138b4565b60009182526020822060059190910201805460ff1916921515929092179091556040513391859187917f61a4e0ad556fee798d70321d08313b3c8bda6ff225ee2581cabef556f3c0e02591a46001915050600160005592915050565b6000611bde30611bd88787876112f9565b84612a34565b95945050505050565b604080516101208101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820181905260e08201526101008101919091526001600160a01b03808316600090815260056020908152604091829020825161012081018452815460ff8116151582526001600160401b036101008204811694830194909452600160481b9004909216928201929092526001820154909216606083015260028101546080830152600381015460a083015260048101805460c084019190611cbc906138ca565b80601f0160208091040260200160405190810160405280929190818152602001828054611ce8906138ca565b8015611d355780601f10611d0a57610100808354040283529160200191611d35565b820191906000526020600020905b815481529060010190602001808311611d1857829003601f168201915b5050505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b82821015611e0f578382906000526020600020018054611d82906138ca565b80601f0160208091040260200160405190810160405280929190818152602001828054611dae906138ca565b8015611dfb5780601f10611dd057610100808354040283529160200191611dfb565b820191906000526020600020905b815481529060010190602001808311611dde57829003601f168201915b505050505081526020019060010190611d63565b505050908252506006919091015460ff16151560209091015292915050565b600081815260046020526040812060020154611e985760405162461bcd60e51b8152602060048201526024808201527f54656d706c617465466163746f72793a20494e56414c49445f54454d504c41546044820152631157d25160e21b60648201526084016105b5565b60008281526004602052604090206002015461058b90600190613bd5565b6000600080516020613c52833981519152611ed1813361160d565b611eed5760405162461bcd60e51b81526004016105b590613806565b600260005403611f0f5760405162461bcd60e51b81526004016105b5906137cf565b6002600090815584815260046020526040902060010154839003611f895760405162461bcd60e51b815260206004820152602b60248201527f54656d706c617465466163746f72793a206465706c6f79526f6c65206861732060448201526a1b9bdd081d5c19185d195960aa1b60648201526084016105b5565b600084815260046020908152604091829020600101548251908152908101859052339186917f0ffb6b8e41f22281832640a7518d277550ab9001d9dc8e291d7a57b170ffcfbc910160405180910390a3505060009182526004602052604082206001908101919091559081905590565b612001612f11565b6000838152600460205260409020600281015483106120625760405162461bcd60e51b815260206004820181905260248201527f54656d706c617465466163746f72793a20494e56414c49445f56455253494f4e60448201526064016105b5565b806002018381548110612077576120776138b4565b60009182526020918290206040805160c0810182526005909302909101805460ff8116151584526001600160a01b036101009091041693830193909352600183018054929392918401916120ca906138ca565b80601f01602080910402602001604051908101604052809291908181526020018280546120f6906138ca565b80156121435780601f1061211857610100808354040283529160200191612143565b820191906000526020600020905b81548152906001019060200180831161212657829003601f168201915b505050505081526020016002820154815260200160038201548152602001600482018054806020026020016040519081016040528092919081815260200182805480156121b957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161219b575b50505050508152505091505092915050565b60006001600160e01b03198216638757f10760e01b148061058b575061058b82612a8e565b6000826002018281548110612207576122076138b4565b600091825260209091208454600590920201915060ff16156122845760405162461bcd60e51b815260206004820152603060248201527f54656d706c617465466163746f72793a20746869732074656d706c617465206860448201526f185cc81899595b88191a5cd8589b195960821b60648201526084016105b5565b805460ff16156122fc5760405162461bcd60e51b815260206004820152603a60248201527f54656d706c617465466163746f72793a20746869732074656d706c617465207660448201527f657273696f6e20686173206265656e206465707265636174656400000000000060648201526084016105b5565b806003015481600201541461058b5760405162461bcd60e51b815260206004820152603f60248201527f54656d706c617465466163746f72793a207468697320697320616e20696e636f60448201527f6d706c6574652076657273696f6e2e20286d697373696e67207061727473290060648201526084016105b5565b606060008351116123dc5760405162461bcd60e51b815260206004820152602760248201527f54656d706c617465466163746f72793a2056657273696f6e20646f6573206e6f6044820152661d08195e1a5cdd60ca1b60648201526084016105b5565b82826040516020016123ef929190613be8565b604051602081830303815290604052905092915050565b7f40cb10054c68f3240d70878767de831b28590413f671187b1bbce7bc0ffff4148214806124395750612439828261160d565b806124575750612457600080516020613c528339815191528261160d565b6124d75760405162461bcd60e51b815260206004820152604560248201527f54656d706c617465466163746f72793a206d697373696e67207265717569726560448201527f64207065726d697373696f6e7320746f206465706c6f7920746869732074656d606482015264706c61746560d81b608482015260a4016105b5565b5050565b60006124ef30848051906020012084612a34565b90506001600160a01b0381163b156125495760405162461bcd60e51b815260206004820152601f60248201527f54656d706c617465466163746f72793a206475706c69636174652073616c740060448201526064016105b5565b505050565b6000818351602085016000f59050803b61058b57600080fd5b6000868152600460209081526040822060038101805460018101825590845291832090910180546001600160a01b0319166001600160a01b038816179055908790526002018054869081106125be576125be6138b4565b600091825260208083206005929092029091016004018054600180820183559184529282902090920180546001600160a01b0319166001600160a01b038816179055604080516101208101909152918252810161261a43612ab3565b6001600160401b0316815260200161263142612ab3565b6001600160401b03168152602001336001600160a01b03908116825260208083018a905260408084018a90526060808501899052608080860189905287151560a0968701528a851660009081526005855283902087518154958901519489015168ffffffffffffffffff1990961690151568ffffffffffffffff001916176101006001600160401b03958616021770ffffffffffffffff0000000000000000001916600160481b94909516939093029390931782558501516001820180546001600160a01b0319169190941617909255830151600282015590820151600382015560c0820151600482019061272690826139d9565b5060e08201518051612742916005840191602090910190612fb3565b5061010091909101516006909101805460ff191691151591909117905560005b82518110156127b1576127a0838281518110612780576127806138b4565b6020026020010151866001600160a01b031661292190919063ffffffff16565b506127aa81613aae565b9050612762565b50505050505050565b6127c2612b1f565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b038116600090815260018301602052604081205415156113b6565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612549908490612b6c565b612888612c3e565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336127ef565b60006113b6838330604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b8152606093841b60148201526f5af43d82803e903d91602b57fd5bf3ff60801b6028820152921b6038830152604c8201526037808220606c830152605591012090565b60606113b683836040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250612c86565b60606113b68383604051806060016040528060278152602001613c2b60279139612c95565b60006124ef83836128bb565b6000604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81528360601b60148201526e5af43d82803e903d91602b57fd5bf360881b6028820152826037826000f59150506001600160a01b03811661058b5760405162461bcd60e51b815260206004820152601760248201527f455243313136373a2063726561746532206661696c656400000000000000000060448201526064016105b5565b604080516001600160f81b031960208083019190915260609590951b6bffffffffffffffffffffffff1916602182015260358101929092526055808301939093528051808303909301835260759091019052805191012090565b60006001600160e01b0319821663b55bd4f760e01b148061058b575061058b82612d72565b60006001600160401b03821115612b1b5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743