ETH Price: $2,182.93 (+5.65%)

Bibos (BIBO)
 

Overview

TokenID

765

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Floating. Hypnotizing. Divine? Bibos are 1111 friendly spirits for your wallet. Join the billions of people who love and adore bibos today.

# Exchange Pair Price  24H Volume % Volume
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.

Contract Source Code Verified (Exact Match)

Contract Name:
Bibos

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion
File 1 of 26 : Bibos.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: Unlicense
pragma solidity 0.8.13;
/* solhint-disable */
// -╖╖╖╖╖╖╖╖╖╖╖»─ ─┬╖╖╖╖─~ -╖╖╖╖╖╖╖╖╖╖╖»─ -╖╖╖╖╖╖╖╖╖╖»─ ~─╖╖╖╖╖╖╖╖╖╖╖~
// ███ `███ ███▌ ███ `███ ┌▓██^ █ ╙██╗ á███^ ╔██
// █B█ ███▌ █I█Γ █B█ ███▌ █O█ █ ███▄ █S█▌ ███
// ███ ╒███ ███Γ ███ ╒███ ███ █ ███ ▀██▓ ██
// ███ á██▀ ███Γ ███ #██╜ ╞███ █ ███ `███▄ '█╕
// ███▄▓██▄ ███Γ ███▄▓██▄ ╞██▌ █ ███ ╙██╗ `
// ███ "██▌ ███Γ ███ "██▌ '██▌ █' ███ ,╗█" ▀██w
// ▓███ ▓██ ████ ▓███ ███ ███ █ ┌██ ██ ███▓
// ███ ▐███ ^╙███ └███ ╞███ ██╕ ╫ ██▌ ██ ███
// █B█ â██▌ I▐█ █B█ ║██▌ █O┐ ║ █▀ ██ █S█
// ███ #██` ╓▓█ ███ #██` └█▌ ║ ╣█ ║█ε ╒███
// ╔██▓╗╗@▀╝^ "╙██┐ á██▓╗╗@▀╨^ `▀██ '█╗ ,Æ██`
// "▀≥»- ╞ ^╙▀▀╜"
/* solhint-enable */
import {ERC721} from "solmate/tokens/ERC721.sol";
import {Owned} from "solmate/auth/Owned.sol";
import {Render} from "libraries/Render.sol";
error InsufficentValue();
error MintedOut();
error InvalidTokenId();
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 2 of 26 : ERC721.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;
/// @notice Modern, minimalist, and gas efficient ERC-721 implementation.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC721.sol)
abstract contract ERC721 {
/*//////////////////////////////////////////////////////////////
EVENTS
//////////////////////////////////////////////////////////////*/
event Transfer(address indexed from, address indexed to, uint256 indexed id);
event Approval(address indexed owner, address indexed spender, uint256 indexed id);
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/*//////////////////////////////////////////////////////////////
METADATA STORAGE/LOGIC
//////////////////////////////////////////////////////////////*/
string public name;
string public symbol;
function tokenURI(uint256 id) public view virtual returns (string memory);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 3 of 26 : Owned.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;
/// @notice Simple single owner authorization mixin.
/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/auth/Owned.sol)
abstract contract Owned {
/*//////////////////////////////////////////////////////////////
EVENTS
//////////////////////////////////////////////////////////////*/
event OwnerUpdated(address indexed user, address indexed newOwner);
/*//////////////////////////////////////////////////////////////
OWNERSHIP STORAGE
//////////////////////////////////////////////////////////////*/
address public owner;
modifier onlyOwner() virtual {
require(msg.sender == owner, "UNAUTHORIZED");
_;
}
/*//////////////////////////////////////////////////////////////
CONSTRUCTOR
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 4 of 26 : Render.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: Unlicense
pragma solidity >=0.8.0;
import {Metadata} from "libraries/Metadata.sol";
import {Util} from "libraries/Util.sol";
import {Traits} from "libraries/Traits.sol";
import {Data} from "./Data.sol";
import {Palette} from "libraries/Palette.sol";
import {Background} from "./Background.sol";
import {Body} from "./Body.sol";
import {Face} from "./Face.sol";
import {Motes} from "./Motes.sol";
import {Glints} from "./Glints.sol";
import {Traits} from "./Traits.sol";
import {SVG} from "./SVG.sol";
library Render {
string public constant description =
"Floating. Hypnotizing. Divine? Bibos are 1111 friendly spirits for your wallet. Join the billions of people who love and adore bibos today.";
/*//////////////////////////////////////////////////////////////
TOKENURI
//////////////////////////////////////////////////////////////*/
function tokenURI(uint256 _tokenId, bytes32 _seed) internal pure returns (string memory) {
return
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 5 of 26 : Metadata.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.8.0;
import {Base64} from "./Base64.sol";
import {Util} from "./Util.sol";
library Metadata {
string constant JSON_BASE64_HEADER = "data:application/json;base64,";
string constant SVG_XML_BASE64_HEADER = "data:image/svg+xml;base64,";
function encodeMetadata(
uint256 _tokenId,
string memory _name,
string memory _description,
string memory _attributes,
string memory _backgroundColor,
string memory _svg
) internal pure returns (string memory) {
string memory metadata = string.concat(
"{",
Util.keyValue("tokenId", Util.uint256ToString(_tokenId)),
",",
Util.keyValue("name", _name),
",",
Util.keyValue("description", _description),
",",
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 6 of 26 : Util.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: UNLICENSED
pragma solidity >=0.8.0;
import {Test, console2} from "forge-std/Test.sol";
/// @title the bibos utility library
/// @notice utility functions
library Util {
error NumberHasTooManyDigits();
/// @notice wraps a string in quotes and adds a space after
function quote(string memory value) internal pure returns (string memory) {
return string.concat('"', value, '" ');
}
function keyValue(string memory _key, string memory _value) internal pure returns (string memory) {
return string.concat('"', _key, '":"', _value, '"');
}
function keyValueNoQuotes(string memory _key, string memory _value) internal pure returns (string memory) {
return string.concat('"', _key, '":', _value);
}
/// @notice converts a tokenId to string and pads to _digits digits
/// @dev tokenId must be less than 10**_digits
/// @param _tokenId, uint256, the tokenId
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 7 of 26 : Traits.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: Unlicense
pragma solidity >=0.8.0;
import {DensityType, PolarityType} from "./Palette.sol";
import {MoteType} from "./Motes.sol";
import {EyeType} from "./Eyes.sol";
import {CheekType} from "./Cheeks.sol";
import {MouthType} from "./Mouth.sol";
import {Glints} from "./Glints.sol";
import {Util} from "./Util.sol";
library Traits {
/*//////////////////////////////////////////////////////////////
TRAITS
//////////////////////////////////////////////////////////////*/
function attributes(bytes32 _seed, uint256 _tokenId) internal pure returns (string memory) {
string memory result = "[";
result = string.concat(result, _attribute("Density", densityTrait(_seed, _tokenId)));
result = string.concat(result, ",", _attribute("Polarity", polarityTrait(_seed, _tokenId)));
result = string.concat(result, ",", _attribute("Glints", glintTrait(_seed)));
result = string.concat(result, ",", _attribute("Motes", moteTrait(_seed)));
result = string.concat(result, ",", _attribute("Eyes", eyeTrait(_seed)));
result = string.concat(result, ",", _attribute("Mouth", mouthTrait(_seed)));
result = string.concat(result, ",", _attribute("Cheeks", cheekTrait(_seed)));
result = string.concat(result, ",", _attribute("Virtue", virtueTrait(_seed)));
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 8 of 26 : Data.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: Unlicense
pragma solidity >=0.8.0;
import {Util} from "src/libraries/Util.sol";
library Data {
/*//////////////////////////////////////////////////////////////
POINTS
//////////////////////////////////////////////////////////////*/
function bodyPoints(uint256 _i) external pure returns (string[2] memory) {
uint256 pos = (_i % length) * 2;
string memory x = Util.bytes1ToString(bodyPointsBytes[pos]);
string memory y = Util.bytes1ToString(bodyPointsBytes[pos + 1]);
return [x, y];
}
function motePoints(uint256 _i) external pure returns (string[2] memory) {
uint256 pos = (_i % length) * 2;
string memory x = Util.bytes1ToString(motesPointsBytes[pos]);
string memory y = Util.bytes1ToString(motesPointsBytes[pos + 1]);
return [x, y];
}
function glintPoints(uint256 _i) external pure returns (string[2][3] memory) {
uint256 pos = (_i % length) * 6;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 9 of 26 : Palette.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: Unlicense
pragma solidity >=0.8.0;
import {Traits} from "libraries/Traits.sol";
import {Data} from "libraries/Data.sol";
enum DensityType {
HIGH,
LOW
}
enum PolarityType {
POSITIVE,
NEGATIVE
}
library Palette {
uint256 constant length = 64;
uint256 constant opacityLength = 5;
/*//////////////////////////////////////////////////////////////
FILL
//////////////////////////////////////////////////////////////*/
function bodyFill(
bytes32 _seed,
uint256 _i,
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 10 of 26 : Background.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// SPDX-License-Identifier: Unlicense
pragma solidity >=0.8.0;
import {Palette} from "./Palette.sol";
import {SVG} from "./SVG.sol";
library Background {
/*//////////////////////////////////////////////////////////////
RENDER
//////////////////////////////////////////////////////////////*/
function render(bytes32 _seed, uint256 _tokenId) internal pure returns (string memory) {
return
SVG.element(
"rect",
SVG.rectAttributes({
_width: "100%",
_height: "100%",
_fill: Palette.backgroundFill(_seed, _tokenId),
_attributes: ""
})
);
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 11 of 26 : Body.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: Unlicense
pragma solidity >=0.8.0;
import {Palette, DensityType, PolarityType} from "./Palette.sol";
import {Traits} from "./Traits.sol";
import {Data} from "./Data.sol";
import {Util} from "./Util.sol";
import {SVG} from "./SVG.sol";
library Body {
uint256 constant circlesCount = 7;
/*//////////////////////////////////////////////////////////////
RENDER
//////////////////////////////////////////////////////////////*/
function render(bytes32 _seed, uint256 _tokenId) internal pure returns (string memory) {
string[7] memory radii = ["64", "64", "64", "56", "48", "32", "24"];
string memory backgroundFill = Palette.backgroundFill(_seed, _tokenId);
string memory mixBlendMode = Traits.polarityType(_seed, _tokenId) == PolarityType.POSITIVE
? "lighten"
: "multiply";
string memory bodyGroupChildren = _bodyBackground(backgroundFill);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 12 of 26 : Face.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: Unlicense
pragma solidity >=0.8.0;
import {SVG} from "./SVG.sol";
import {Eyes} from "./Eyes.sol";
import {Mouth} from "./Mouth.sol";
import {Cheeks} from "./Cheeks.sol";
import {Data} from "./Data.sol";
library Face {
/*//////////////////////////////////////////////////////////////
RENDER
//////////////////////////////////////////////////////////////*/
function render(bytes32 _seed) internal pure returns (string memory) {
uint256 faceSeed = uint256(keccak256(abi.encodePacked(_seed, "face")));
bool reverse = (faceSeed /= 2) % 2 == 0;
string memory rotation = ["1", "2", "4", "6", "-1", "-2", "-4", "-6"][faceSeed % 8];
string memory circleAttributes = SVG.circleAttributes({
_radius: "80",
_coords: ["100", "100"],
_fill: "white",
_opacity: "0.2",
_mixMode: "lighten",
_attributes: SVG.filterAttribute("bibo-blur-lg")
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 13 of 26 : Motes.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: Unlicense
pragma solidity >=0.8.0;
import {Palette} from "./Palette.sol";
import {Data} from "./Data.sol";
import {Util} from "./Util.sol";
import {SVG} from "./SVG.sol";
import {Traits} from "./Traits.sol";
enum MoteType {
NONE,
FLOATING,
RISING,
FALLING,
GLISTENING
}
library Motes {
uint256 constant GLINT_COUNT = 20;
/*//////////////////////////////////////////////////////////////
RENDER
//////////////////////////////////////////////////////////////*/
function render(bytes32 _seed, uint256 _tokenId) external pure returns (string memory) {
string memory motesChildren;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 14 of 26 : Glints.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: Unlicense
pragma solidity >=0.8.0;
import {Traits} from "libraries/Traits.sol";
import {Palette} from "./Palette.sol";
import {Data} from "./Data.sol";
import {Util} from "./Util.sol";
import {SVG} from "./SVG.sol";
library Glints {
/*//////////////////////////////////////////////////////////////
RENDER
//////////////////////////////////////////////////////////////*/
function render(bytes32 _seed) external pure returns (string memory) {
string memory glintsGroupChildren;
uint256 glintCount = Traits.glintCount(_seed);
uint256 glintSeed = uint256(keccak256(abi.encodePacked(_seed, "glint")));
bool reverseRotate = glintSeed % 2 == 0;
glintSeed /= 2;
bool reverse = glintSeed % 2 == 0;
glintSeed /= 2;
string[2][3] memory coords = Data.glintPoints(glintSeed);
glintSeed /= Data.length;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 15 of 26 : SVG.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: Unlicense
pragma solidity >=0.8.0;
import {Util} from "./Util.sol";
library SVG {
/*//////////////////////////////////////////////////////////////
ELEMENT
//////////////////////////////////////////////////////////////*/
function element(string memory _type, string memory _attributes) internal pure returns (string memory) {
return string.concat("<", _type, " ", _attributes, "/>");
}
function element(
string memory _type,
string memory _attributes,
string memory _children
) internal pure returns (string memory) {
return string.concat("<", _type, " ", _attributes, ">", _children, "</", _type, ">");
}
function element(
string memory _type,
string memory _attributes,
string memory _child1,
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 16 of 26 : Base64.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;
/// @title Base64
/// @author Brecht Devos - <brecht@loopring.org>
/// @notice Provides a function for encoding some bytes in base64
library Base64 {
string internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
function encode(string memory _data) internal pure returns (string memory) {
return encode(bytes(_data));
}
function encode(bytes memory _data) internal pure returns (string memory) {
if (_data.length == 0) return "";
// load the table into memory
string memory table = TABLE;
// multiply by 4/3 rounded up
uint256 encodedLen = 4 * ((_data.length + 2) / 3);
// add some extra buffer at the end required for the writing
string memory result = new string(encodedLen + 32);
assembly {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 17 of 26 : Test.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;
import "./Script.sol";
import "ds-test/test.sol";
// Wrappers around Cheatcodes to avoid footguns
abstract contract Test is DSTest, Script {
using stdStorage for StdStorage;
uint256 internal constant UINT256_MAX =
115792089237316195423570985008687907853269984665640564039457584007913129639935;
StdStorage internal stdstore;
/*//////////////////////////////////////////////////////////////////////////
STD-LOGS
//////////////////////////////////////////////////////////////////////////*/
event log_array(uint256[] val);
event log_array(int256[] val);
event log_array(address[] val);
event log_named_array(string key, uint256[] val);
event log_named_array(string key, int256[] val);
event log_named_array(string key, address[] val);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 18 of 26 : Eyes.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: Unlicense
pragma solidity >=0.8.0;
import {Palette} from "libraries/Palette.sol";
import {Util} from "libraries/Util.sol";
import {SVG} from "libraries/SVG.sol";
import {Traits} from "libraries/Traits.sol";
import {Eyes2} from "libraries/Eyes2.sol";
enum EyeType {
OVAL,
SMILEY,
WINK,
ROUND,
SLEEPY,
CLOVER,
DIZZY,
STAR,
HEART,
HAHA,
CYCLOPS,
OPALINE
}
library Eyes {
string constant fill = "black";
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 19 of 26 : Cheeks.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: Unlicense
pragma solidity >=0.8.0;
import {Util} from "./Util.sol";
import {SVG} from "./SVG.sol";
import {Traits} from "./Traits.sol";
enum CheekType {
NONE,
CIRCULAR,
FRECKLES,
BIG
}
library Cheeks {
/*//////////////////////////////////////////////////////////////
RENDER
//////////////////////////////////////////////////////////////*/
function render(bytes32 _seed) external pure returns (string memory) {
CheekType cheekType = Traits.cheekType(_seed);
if (cheekType == CheekType.CIRCULAR) return _circular();
if (cheekType == CheekType.FRECKLES) return _freckles();
if (cheekType == CheekType.BIG) return _big();
return "";
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 20 of 26 : Mouth.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: Unlicense
pragma solidity >=0.8.0;
import {Palette} from "./Palette.sol";
import {Traits} from "./Traits.sol";
enum MouthType {
SMILE,
GRATIFIED,
POLITE,
HMM,
OOO,
GRIN,
SMOOCH,
TOOTHY,
SMIRK,
VEE,
CAT,
BLEP
}
library Mouth {
string constant fill = "black";
/*//////////////////////////////////////////////////////////////
RENDER
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 21 of 26 : Script.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;
import "./Vm.sol";
import "./console.sol";
import "./console2.sol";
abstract contract Script {
bool public IS_SCRIPT = true;
address constant private VM_ADDRESS =
address(bytes20(uint160(uint256(keccak256('hevm cheat code')))));
Vm public constant vm = Vm(VM_ADDRESS);
/// @dev Compute the address a contract will be deployed at for a given deployer address and nonce
/// @notice adapated from Solmate implementation (https://github.com/transmissions11/solmate/blob/main/src/utils/LibRLP.sol)
function computeCreateAddress(address deployer, uint256 nonce) internal pure returns (address) {
// The integer zero is treated as an empty byte string, and as a result it only has a length prefix, 0x80, computed via 0x80 + 0.
// A one byte integer uses its own value as its length prefix, there is no additional "0x80 + length" prefix that comes before it.
if (nonce == 0x00) return addressFromLast20Bytes(keccak256(abi.encodePacked(bytes1(0xd6), bytes1(0x94), deployer, bytes1(0x80))));
if (nonce <= 0x7f) return addressFromLast20Bytes(keccak256(abi.encodePacked(bytes1(0xd6), bytes1(0x94), deployer, uint8(nonce))));
// Nonces greater than 1 byte all follow a consistent encoding scheme, where each value is preceded by a prefix of 0x80 + length.
if (nonce <= 2**8 - 1) return addressFromLast20Bytes(keccak256(abi.encodePacked(bytes1(0xd7), bytes1(0x94), deployer, bytes1(0x81), uint8
            (nonce))));
if (nonce <= 2**16 - 1) return addressFromLast20Bytes(keccak256(abi.encodePacked(bytes1(0xd8), bytes1(0x94), deployer, bytes1(0x82), uint16
            (nonce))));
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 22 of 26 : test.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: GPL-3.0-or-later
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
pragma solidity >=0.5.0;
contract DSTest {
event log (string);
event logs (bytes);
event log_address (address);
event log_bytes32 (bytes32);
event log_int (int);
event log_uint (uint);
event log_bytes (bytes);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 23 of 26 : Eyes2.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// SPDX-License-Identifier: Unlicense
pragma solidity >=0.8.0;
library Eyes2 {
function opaline(string memory _fill) external pure returns (string memory) {
return
string.concat(
'<circle cx="58" cy="79" r="22" fill="',
_fill,
'"/>',
'<circle cx="142" cy="79" r="22" fill="',
_fill,
'"/>',
'<path d="M45.6829 86.5051C45.615 86.0823 45.8239 85.6632 46.2023 85.4628L48.3117 84.3458C48.6981 84.1411 49.1727 84.2113 49.4834 84
                    .5191L51.1522 86.1722C51.4589 86.476 51.536 86.9422 51.3435 87.3286L50.2685 89.486C50.076 89.8724 49.6573 90.0916 49.2301 90
                    .0297L46.9054 89.6929C46.4726 89.6302 46.1308 89.2936 46.0614 88.8618L45.6829 86.5051Z" fill="white" fill-opacity="0.9"/>',
'<path d="M49.0832 72.1223C49.0972 72.4245 48.962 72.5987 48.6777 72.6448C48.5583 72.6642 48.4466 72.6413 48.3427 72.5762C48.2387 72
                    .511 48.1685 72.4199 48.132 72.3028C47.975 71.766 47.8354 71.3552 47.7134 71.0705C47.5961 70.7791 47.4453 70.5692 47.2611 70
                    .441C47.0826 70.3118 46.8215 70.2311 46.4779 70.199C46.1389 70.1602 45.6664 70.1256 45.0604 70.095C44.7782 70.0822 44.6158 69.9445
                    44.5733 69.682C44.5538 69.5621 44.5765 69.4501 44.6413 69.3459C44.7061 69.2417 44.7968 69.1713 44.9135 69.1348C45.4814 68.9666 45
                    .9215 68.8191 46.2336 68.6924C46.5456 68.5656 46.7683 68.4094 46.9016 68.2238C47.0349 68.0382 47.1098 67.7801 47.1262 67.4494C47
                    .1483 67.1179 47.1477 66.6641 47.1243 66.088C47.1169 65.7905 47.2525 65.6192 47.5312 65.574C47.8155 65.5279 47.9988 65.6504 48.081
                    65.9417C48.2371 66.4728 48.3738 66.884 48.4911 67.1754C48.6075 67.4611 48.7573 67.6652 48.9406 67.7878C49.1238 67.9104 49.3878 67
                    .9906 49.7324 68.0284C50.0761 68.0605 50.5481 68.0923 51.1485 68.1238C51.4373 68.1414 51.6025 68.2786 51.6441 68.5355C51.6885 68
                    .8094 51.5581 68.9945 51.2527 69.0909C50.698 69.2687 50.2679 69.4234 49.9624 69.5549C49.6569 69.6864 49.4375 69.845 49.3042 70
                    .0306C49.1709 70.2162 49.0956 70.4715 49.0783 70.7964C49.0609 71.1214 49.0626 71.5633 49.0832 72.1223Z" fill="white" fill-opacity
                    ="0.9"/>',
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 24 of 26 : Vm.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity >=0.6.0 <0.9.0;
pragma experimental ABIEncoderV2;
interface Vm {
struct Log {
bytes32[] topics;
bytes data;
}
// Sets block.timestamp (newTimestamp)
function warp(uint256) external;
// Sets block.height (newHeight)
function roll(uint256) external;
// Sets block.basefee (newBasefee)
function fee(uint256) external;
// Sets block.chainid
function chainId(uint256) external;
// Loads a storage slot from an address (who, slot)
function load(address,bytes32) external returns (bytes32);
// Stores a value to an address' storage slot, (who, slot, value)
function store(address,bytes32,bytes32) external;
// Signs data, (privateKey, digest) => (v, r, s)
function sign(uint256,bytes32) external returns (uint8,bytes32,bytes32);
// Gets the address for a given private key, (privateKey) => (address)
function addr(uint256) external returns (address);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 25 of 26 : console.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;
library console {
address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);
function _sendLogPayload(bytes memory payload) private view {
uint256 payloadLength = payload.length;
address consoleAddress = CONSOLE_ADDRESS;
/// @solidity memory-safe-assembly
assembly {
let payloadStart := add(payload, 32)
let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)
}
}
function log() internal view {
_sendLogPayload(abi.encodeWithSignature("log()"));
}
function logInt(int p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(int)", p0));
}
function logUint(uint p0) internal view {
_sendLogPayload(abi.encodeWithSignature("log(uint)", p0));
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 26 of 26 : console2.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;
// The orignal console.sol uses `int` and `uint` for computing function selectors, but it should
// use `int256` and `uint256`. This modified version fixes that. This version is recommended
// over `console.sol` if you don't need compatibility with Hardhat as the logs will show up in
// forge stack traces. If you do need compatibility with Hardhat, you must use `console.sol`.
// Reference: https://github.com/NomicFoundation/hardhat/issues/2178
library console2 {
address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);
function _sendLogPayload(bytes memory payload) private view {
uint256 payloadLength = payload.length;
address consoleAddress = CONSOLE_ADDRESS;
assembly {
let payloadStart := add(payload, 32)
let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)
}
}
function log() internal view {
_sendLogPayload(abi.encodeWithSignature("log()"));
}
function logInt(int256 p0) internal view {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Settings
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
"remappings": [
"dev/=src/dev/",
"ds-test/=lib/solmate/lib/ds-test/src/",
"forge-std/=lib/forge-std/src/",
"libraries/=src/libraries/",
"solmate/=lib/solmate/src/",
"util/=src/util/",
"src/=src/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"bytecodeHash": "ipfs"
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AmountNotAvailable","type":"error"},{"inputs":[],"name":"InsufficentValue","type":"error"},{"inputs":[],"name":"InvalidTokenId","type":"error"},{"inputs":[],"name":"MintedOut","type":"error"},{"inputs":[],"name":"NumberHasTooManyDigits","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"seeds","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060408051808201825260058152644269626f7360d81b6020808301918252835180850190945260048452634249424f60e01b9084015281513393916200005c9160009190620000c7565b50805162000072906001906020840190620000c7565b5050600680546001600160a01b0319166001600160a01b0384169081179091556040519091506000907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d76908290a350620001a9565b828054620000d5906200016d565b90600052602060002090601f016020900481019282620000f9576000855562000144565b82601f106200011457805160ff191683800117855562000144565b8280016001018555821562000144579182015b828111156200014457825182559160200191906001019062000127565b506200015292915062000156565b5090565b5b8082111562000152576000815560010162000157565b600181811c908216806200018257607f821691505b602082108103620001a357634e487b7160e01b600052602260045260246000fd5b50919050565b614a1680620001b96000396000f3fe6080604052600436106101355760003560e01c806370a08231116100ab578063a22cb4651161006f578063a22cb46514610351578063b88d4fde14610371578063c87b56dd14610391578063d5abeb01146103b1578063e985e9c5146103c7578063f0503e801461040257600080fd5b806370a08231146102cd5780638da5cb5b146102ed57806395d89b411461030d578063a035b1fe14610322578063a0712d681461033e57600080fd5b806313af4035116100fd57806313af40351461020957806318160ddd1461022957806323b872dd1461024d57806342842e0e1461026d57806351cff8d91461028d5780636352211e146102ad57600080fd5b806301ffc9a71461013a57806306fdde031461016f578063081812fc14610191578063095ea7b3146101df5780631249c58b14610201575b600080fd5b34801561014657600080fd5b5061015a6101553660046139a7565b61042f565b60405190151581526020015b60405180910390f35b34801561017b57600080fd5b50610184610481565b60405161016691906139f4565b34801561019d57600080fd5b506101c76101ac366004613a27565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610166565b3480156101eb57600080fd5b506101ff6101fa366004613a55565b61050f565b005b6101ff6105f6565b34801561021557600080fd5b506101ff610224366004613a81565b610659565b34801561023557600080fd5b5061023f60075481565b604051908152602001610166565b34801561025957600080fd5b506101ff610268366004613a9e565b6106ee565b34801561027957600080fd5b506101ff610288366004613a9e565b6108b5565b34801561029957600080fd5b506101ff6102a8366004613a81565b6109ad565b3480156102b957600080fd5b506101c76102c8366004613a27565b610a2f565b3480156102d957600080fd5b5061023f6102e8366004613a81565b610a86565b3480156102f957600080fd5b506006546101c7906001600160a01b031681565b34801561031957600080fd5b50610184610ae9565b34801561032e57600080fd5b5061023f67016345785d8a000081565b6101ff61034c366004613a27565b610af6565b34801561035d57600080fd5b506101ff61036c366004613adf565b610b9c565b34801561037d57600080fd5b506101ff61038c366004613b1d565b610c08565b34801561039d57600080fd5b506101846103ac366004613a27565b610cf0565b3480156103bd57600080fd5b5061023f61045781565b3480156103d357600080fd5b5061015a6103e2366004613bbc565b600560209081526000928352604080842090915290825290205460ff1681565b34801561040e57600080fd5b5061023f61041d366004613a27565b60086020526000908152604090205481565b60006301ffc9a760e01b6001600160e01b03198316148061046057506380ac58cd60e01b6001600160e01b03198316145b8061047b5750635b5e139f60e01b6001600160e01b03198316145b92915050565b6000805461048e90613bea565b80601f01602080910402602001604051908101604052809291908181526020018280546104ba90613bea565b80156105075780601f106104dc57610100808354040283529160200191610507565b820191906000526020600020905b8154815290600101906020018083116104ea57829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b03163381148061055857506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b61059a5760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6104576007541061061a57604051634237dcf160e11b815260040160405180910390fd5b600161062e67016345785d8a000082613c3a565b341461064d5760405163b31557c360e01b815260040160405180910390fd5b61065633610d34565b50565b6006546001600160a01b031633146106a25760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610591565b600680546001600160a01b0319166001600160a01b03831690811790915560405133907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a350565b6000818152600260205260409020546001600160a01b038481169116146107445760405162461bcd60e51b815260206004820152600a60248201526957524f4e475f46524f4d60b01b6044820152606401610591565b6001600160a01b03821661078e5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610591565b336001600160a01b03841614806107c857506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b806107e957506000818152600460205260409020546001600160a01b031633145b6108265760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610591565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6108c08383836106ee565b6001600160a01b0382163b15806109695750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015610939573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095d9190613c59565b6001600160e01b031916145b6109a85760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610591565b505050565b6006546001600160a01b031633146109f65760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610591565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610a2b573d6000803e3d6000fd5b5050565b6000818152600260205260409020546001600160a01b031680610a815760405162461bcd60e51b815260206004820152600a6024820152691393d517d3525395115160b21b6044820152606401610591565b919050565b60006001600160a01b038216610acd5760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610591565b506001600160a01b031660009081526003602052604090205490565b6001805461048e90613bea565b61045760075410610b1a57604051634237dcf160e11b815260040160405180910390fd5b8061045760075482610b2c9190613c76565b1115610b4b576040516347747fa960e01b815260040160405180910390fd5b81610b5e67016345785d8a000082613c3a565b3414610b7d5760405163b31557c360e01b815260040160405180910390fd5b82156109a857610b8c33610d34565b610b9583613c8e565b9250610b7d565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610c138585856106ee565b6001600160a01b0384163b1580610caa5750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290610c5b9033908a90899089908990600401613ca5565b6020604051808303816000875af1158015610c7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9e9190613c59565b6001600160e01b031916145b610ce95760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610591565b5050505050565b60606007548210610d14576040516307ed98ed60e31b815260040160405180910390fd5b600082815260086020526040902054610d2d8382610db3565b9392505050565b6007805460009182610d4583613cf9565b919050559050610d9a816040516bffffffffffffffffffffffff193360601b16602082015242603482015260548101829052600090607401604051602081830303815290604052805190602001209050919050565b600082815260086020526040902055610a2b8282610dfe565b6060610d2d83610dc285610f09565b6040518060c00160405280608b81526020016148f0608b9139610de58688610f3c565b610def87896111d1565b610df9888a61127f565b611432565b6001600160a01b038216610e485760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610591565b6000818152600260205260409020546001600160a01b031615610e9e5760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b6044820152606401610591565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6060610f1682600461157c565b604051602001610f269190613d2e565b6040516020818303038152906040529050919050565b60606000604051806040016040528060018152602001605b60f81b815250905080610f8f6040518060400160405280600781526020016644656e7369747960c81b815250610f8a87876115cd565b61163d565b604051602001610fa0929190613d5b565b60408051601f198184030181528282019091526008825267506f6c617269747960c01b602083015291508190610fda90610f8a87876116ba565b604051602001610feb929190613d8a565b60408051601f198184030181528282019091526006825265476c696e747360d01b60208301529150819061102290610f8a87611730565b604051602001611033929190613d8a565b60408051601f1981840301815282820190915260058252644d6f74657360d81b60208301529150819061106990610f8a87611748565b60405160200161107a929190613d8a565b60408051601f1981840301815282820190915260048252634579657360e01b6020830152915081906110af90610f8a87611874565b6040516020016110c0929190613d8a565b60408051601f19818403018152828201909152600582526409adeeae8d60db1b6020830152915081906110f690610f8a87611b3d565b604051602001611107929190613d8a565b60408051601f198184030181528282019091526006825265436865656b7360d01b60208301529150819061113e90610f8a87611e00565b60405160200161114f929190613d8a565b60408051601f19818403018152828201909152600682526556697274756560d01b60208301529150819061118690610f8a87611ee9565b604051602001611197929190613d8a565b6040516020818303038152906040529050806040516020016111b99190613dc6565b60405160208183030381529060405291505092915050565b60606000836040516020016111ff9181526d189858dad9dc9bdd5b99119a5b1b60921b6020820152602e0190565b60408051601f198184030181529190528051602090910120905060006112258585611ef4565b600181111561123657611236613deb565b036112785760005b6112488585611f51565b600181111561125957611259613deb565b0361126f5761126781611f7e565b91505061047b565b61126781612008565b600061123e565b6060610d2d6040518060400160405280600381526020016273766760e81b8152506112a8612043565b7304fb77f7006f1c2e7152cf33e199d2dcd0c0c01363938bfc8e6040518163ffffffff1660e01b8152600401600060405180830381865af41580156112f1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113199190810190613ec8565b6113238787612146565b61132d88886121c9565b604051633701d24b60e11b8152600481018a90526024810189905273176a00344e819430136be71b66a0e7853885342f90636e03a49690604401600060405180830381865af4158015611384573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113ac9190810190613ec8565b6040516316166e1560e31b8152600481018b9052732073341d0ac112a0bc159482d7619929d4ba34569063b0b370a890602401600060405180830381865af41580156113fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526114249190810190613ec8565b61142d8b6123f3565b61290c565b60606000611467604051806040016040528060078152602001661d1bdad95b925960ca1b8152506114628a61294f565b6129b9565b61148d604051806040016040528060048152602001636e616d6560e01b815250896129b9565b6114ba6040518060400160405280600b81526020016a3232b9b1b934b83a34b7b760a91b815250896129b9565b6114e66040518060400160405280600a8152602001696174747269627574657360b01b815250896129ce565b6115176040518060400160405280600f81526020016e3130b1b5b3b937bab73221b7b637b960891b815250896129b9565b61154160405180604001604052806005815260200164696d61676560d81b8152506114628a6129e3565b60405160200161155696959493929190613efd565b604051602081830303815290604052905061157081612a35565b98975050505050505050565b6060600061158b83600a6140aa565b90508084106115ad57604051630146a8e760e61b815260040160405180910390fd5b6115bf6115ba8286613c76565b61294f565b600101928352509092915050565b606060006115db8484611ef4565b905060008160018111156115f1576115f1613deb565b1461161757604051806040016040528060038152602001624c6f7760e81b815250611635565b60405180604001604052806004815260200163090d2ced60e31b8152505b949350505050565b606061166b6040518060400160405280600a81526020016974726169745f7479706560b01b815250846129b9565b6116926040518060400160405280600581526020016476616c756560d81b815250846129b9565b6040516020016116a39291906140b9565b604051602081830303815290604052905092915050565b606060006116c88484611f51565b905060008160018111156116de576116de613deb565b1461170957604051806040016040528060088152602001674e6567617469766560c01b815250611635565b5050604080518082019091526008815267506f73697469766560c01b602082015292915050565b6060600061173d83612a76565b9050610d2d8161294f565b6060600061175583612ae1565b9050600181600481111561176b5761176b613deb565b03611796575050604080518082019091526008815267466c6f6174696e6760c01b6020820152919050565b60028160048111156117aa576117aa613deb565b036117d3575050604080518082019091526006815265526973696e6760d01b6020820152919050565b60038160048111156117e7576117e7613deb565b0361181157505060408051808201909152600781526646616c6c696e6760c81b6020820152919050565b600481600481111561182557611825613deb565b0361185257505060408051808201909152600a815269476c697374656e696e6760b01b6020820152919050565b50506040805180820190915260048152634e6f6e6560e01b6020820152919050565b6060600061188183612b54565b9050600081600b81111561189757611897613deb565b036118be57505060408051808201909152600481526313dd985b60e21b6020820152919050565b600181600b8111156118d2576118d2613deb565b036118fb575050604080518082019091526006815265536d696c657960d01b6020820152919050565b600281600b81111561190f5761190f613deb565b0361193657505060408051808201909152600481526357696e6b60e01b6020820152919050565b600381600b81111561194a5761194a613deb565b03611972575050604080518082019091526005815264149bdd5b9960da1b6020820152919050565b600481600b81111561198657611986613deb565b036119af575050604080518082019091526006815265536c6565707960d01b6020820152919050565b600581600b8111156119c3576119c3613deb565b036119ec57505060408051808201909152600681526521b637bb32b960d11b6020820152919050565b600781600b811115611a0057611a00613deb565b03611a2757505060408051808201909152600481526329ba30b960e11b6020820152919050565b600681600b811115611a3b57611a3b613deb565b03611a6357505060408051808201909152600581526444697a7a7960d81b6020820152919050565b600881600b811115611a7757611a77613deb565b03611a9f5750506040805180820190915260058152641219585c9d60da1b6020820152919050565b600981600b811115611ab357611ab3613deb565b03611ada5750506040805180820190915260048152634861686160e01b6020820152919050565b600a81600b811115611aee57611aee613deb565b03611b185750506040805180820190915260078152664379636c6f707360c81b6020820152919050565b50506040805180820190915260078152664f70616c696e6560c81b6020820152919050565b60606000611b4a83612c4d565b9050600081600b811115611b6057611b60613deb565b03611b88575050604080518082019091526005815264536d696c6560d81b6020820152919050565b600881600b811115611b9c57611b9c613deb565b03611bc4575050604080518082019091526005815264536d69726b60d81b6020820152919050565b600181600b811115611bd857611bd8613deb565b03611c0457505060408051808201909152600981526811dc985d1a599a595960ba1b6020820152919050565b600281600b811115611c1857611c18613deb565b03611c41575050604080518082019091526006815265506f6c69746560d01b6020820152919050565b600381600b811115611c5557611c55613deb565b03611c7b575050604080518082019091526003815262486d6d60e81b6020820152919050565b600481600b811115611c8f57611c8f613deb565b03611cb55750506040805180820190915260038152624f6f6f60e81b6020820152919050565b600781600b811115611cc957611cc9613deb565b03611cf2575050604080518082019091526006815265546f6f74687960d01b6020820152919050565b600981600b811115611d0657611d06613deb565b03611d2c57505060408051808201909152600381526256656560e81b6020820152919050565b600581600b811115611d4057611d40613deb565b03611d6757505060408051808201909152600481526323b934b760e11b6020820152919050565b600b81600b811115611d7b57611d7b613deb565b03611da25750506040805180820190915260048152630426c65760e41b6020820152919050565b600681600b811115611db657611db6613deb565b03611ddf5750506040805180820190915260068152650a6dadedec6d60d31b6020820152919050565b505060408051808201909152600381526210d85d60ea1b6020820152919050565b60606000611e0d83612d48565b90506000816003811115611e2357611e23613deb565b03611e4a5750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b6001816003811115611e5e57611e5e613deb565b03611e8957505060408051808201909152600881526721b4b931bab630b960c11b6020820152919050565b6003816003811115611e9d57611e9d613deb565b03611ec357505060408051808201909152600381526242696760e81b6020820152919050565b5050604080518082019091526008815267467265636b6c657360c01b6020820152919050565b606061047b82612db4565b600080611f20846040518060400160405280600781526020016664656e7369747960c81b815250613093565b905082600003611f3457600091505061047b565b6050811015611f4757600091505061047b565b5060019392505050565b600080611f208460405180604001604052806008815260200167706f6c617269747960c01b815250613093565b60607304fb77f7006f1c2e7152cf33e199d2dcd0c0c013638c4e98a9611fa5604085614126565b6040518263ffffffff1660e01b8152600401611fc391815260200190565b600060405180830381865af4158015611fe0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261047b9190810190613ec8565b6040516315e62d3b60e01b8152600481018290526060907304fb77f7006f1c2e7152cf33e199d2dcd0c0c013906315e62d3b90602401611fc3565b6060604051602001612132907f786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737681527f672220786d6c6e733a786c696e6b3d22687474703a2f2f7777772e77332e6f7260208201527f672f313939392f786c696e6b222077696474683d22313030252220686569676860408201527f743d2231303025222076696577426f783d22302030203330302033303022200060608201527f7072657365727665417370656374526174696f3d22784d6964594d6964206d65607f82015263032ba11160e51b609f8201526b03334b6361e913737b73291160a51b60a382015260af0190565b604051602081830303815290604052905090565b6060610d2d604051806040016040528060048152602001631c9958dd60e21b8152506121c4604051806040016040528060048152602001633130302560e01b815250604051806040016040528060048152602001633130302560e01b8152506121af88886111d1565b604051806020016040528060008152506130cd565b613117565b6040805161012081018252600260e08201818152610d8d60f21b61010084018190529083528351808501855282815260208181018390528085019190915284518086018652838152808201929092528385019190915283518085018552828152611a9b60f11b818301526060848101919091528451808601865283815261068760f31b8184015260808501528451808601865283815261199960f11b8184015260a08501528451808601909552918452610c8d60f21b9084015260c0820192909252600061229785856111d1565b90506000806122a68787611f51565b60018111156122b7576122b7613deb565b146122e257604051806040016040528060088152602001676d756c7469706c7960c01b815250612303565b604051806040016040528060078152602001663634b3b43a32b760c91b8152505b905060006123108361312c565b905060005b60078160ff16101561237b57816123488960ff84168a89826007811061233d5761233d61413a565b6020020151886131a1565b604051602001612359929190613d5b565b60405160208183030381529060405291508061237490614150565b9050612315565b506123e8604051806040016040528060018152602001606760f81b8152506123c3604051806040016040528060098152602001683134b13796b1363ab960b91b81525061347d565b6040516020016123d3919061416f565b60405160208183030381529060405283613490565b979650505050505050565b6060600082604051602001612417918152636661636560e01b602082015260240190565b60408051601f19818403018152919052805160209091012090506000600261243f81846141b0565b925061244b9083614126565b604080516101408101825260016101008201818152603160f81b610120840152825282518084018452818152601960f91b6020828101919091528084019190915283518085018552828152600d60fa1b818301528385015283518085018552918252601b60f91b828201526060830191909152825180840184526002808252612d3160f01b8284015260808401919091528351808501855281815261169960f11b8184015260a084015283518085018552818152610b4d60f21b8184015260c08401528351808501909452835261169b60f11b9083015260e08101919091529015915060009061253c600885614126565b6008811061254c5761254c61413a565b60200201519050600061264a60405180604001604052806002815260200161038360f41b81525060405180604001604052806040518060400160405280600381526020016203130360ec1b81525081526020016040518060400160405280600381526020016203130360ec1b81525081525060405180604001604052806005815260200164776869746560d81b8152506040518060400160405280600381526020016218171960e91b815250604051806040016040528060078152602001663634b3b43a32b760c91b8152506126456040518060400160405280600c81526020016b6269626f2d626c75722d6c6760a01b81525061347d565b6134c1565b905060008260405160200161265f91906141c4565b60408051601f19818403018152828201825260018352606760f81b6020848101919091528251808401845260048152631c9958dd60e21b818301528351808501855260038082526203230360ec1b828501819052865180880188529182528185015285518087018752600981526802330303030303030360bc1b818601528651948501909652600084529396506123e895948794612702946121c49392906130cd565b61272a60405180604001604052806006815260200165636972636c6560d01b81525087613117565b6040516316166e1560e31b8152600481018d905273fd61aff6cc3abc7339946f233f182dd17ef97b129063b0b370a890602401600060405180830381865af415801561277a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127a29190810190613ec8565b6040516316166e1560e31b8152600481018e90527340ccf25fc4c7e37a7aaaf58dbaf6b1f3996e478c9063b0b370a890602401600060405180830381865af41580156127f2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261281a9190810190613ec8565b6040516316166e1560e31b8152600481018f9052735a56533924d6694c617172592cfa7d8c63de4b4f9063b0b370a890602401600060405180830381865af415801561286a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128929190810190613ec8565b61142d6040518060400160405280600d81526020016c30b734b6b0ba32a6b7ba34b7b760991b8152506128ff8e6040518060400160405280600381526020016231317360e81b815250604051806040016040528060068152602001653634b732b0b960d11b815250613554565b61290761360f565b613490565b6060612942898989898989898960405160200161292e96959493929190614247565b604051602081830303815290604052613490565b9998505050505050505050565b6060816000036129765750506040805180820190915260018152600360fc1b602082015290565b606e6040510190508060405260005b82156129ab5760001990910190600101600a830660300180835350600a83049250612985565b601f19909101908152919050565b606082826040516020016116a39291906142c6565b606082826040516020016116a392919061431a565b60606040518060400160405280601a81526020017f646174613a696d6167652f7376672b786d6c3b6261736536342c000000000000815250612a248361362f565b604051602001610f26929190613d5b565b60606040518060400160405280601d81526020017f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815250612a2483613796565b600080612aa0836040518060400160405280600581526020016419db1a5b9d60da1b815250613093565b90506001811015612ab45750600392915050565b6005811015612ac65750600292915050565b6023811015612ad85750600192915050565b50600092915050565b600080612b0a83604051806040016040528060048152602001636d6f746560e01b815250613093565b90506014811015612b1e5750600192915050565b6023811015612b305750600292915050565b6032811015612b425750600392915050565b603b811015612ad85750600492915050565b600080612b7c836040518060400160405280600381526020016265796560e81b815250613093565b90506014811015612b905750600092915050565b6028811015612ba25750600392915050565b6032811015612bb45750600192915050565b603c811015612bc65750600492915050565b6046811015612bd85750600292915050565b6050811015612bea5750600992915050565b6054811015612bfc5750600592915050565b6058811015612c0e5750600792915050565b605c811015612c205750600692915050565b6060811015612c325750600892915050565b6063811015612c445750600a92915050565b50600b92915050565b600080612c7783604051806040016040528060058152602001640dadeeae8d60db1b815250613093565b90506014811015612c8b5750600092915050565b6028811015612c9d5750600192915050565b603c811015612caf5750600292915050565b6046811015612cc15750600592915050565b6050811015612cd35750600892915050565b6059811015612ce55750600992915050565b605c811015612cf75750600492915050565b605e811015612d095750600392915050565b605f811015612d1b5750600792915050565b6061811015612d2d5750600b92915050565b6062811015612d3f5750600692915050565b50600a92915050565b600080612d738360405180604001604052806006815260200165636865656b7360d01b815250613093565b90506032811015612d875750600092915050565b604b811015612d995750600192915050565b6055811015612dab5750600392915050565b50600292915050565b60606000612de0836040518060400160405280600681526020016576697274756560d01b815250613093565b9050600f811015612e1357505060408051808201909152600a81526947656e746c656e65737360b01b6020820152919050565b601e811015612e415750506040805180820190915260078152664272617665727960c81b6020820152919050565b602d811015612e6f5750506040805180820190915260078152664d6f646573747960c81b6020820152919050565b603c811015612ea057505060408051808201909152600a81526954656d706572616e636560b01b6020820152919050565b6046811015612edb5750506040805180820190915260148152732934b3b43a37bab99024b73234b3b730ba34b7b760611b6020820152919050565b6050811015612f095750506040805180820190915260078152664a75737469636560c81b6020820152919050565b6055811015612f3957505060408051808201909152600981526853696e63657269747960b81b6020820152919050565b6058811015612f6c57505060408051808201909152600c81526b467269656e646c696e65737360a01b6020820152919050565b605c811015612f9a5750506040805180820190915260078152664469676e69747960c81b6020820152919050565b605e811015612fca575050604080518082019091526009815268456e647572616e636560b81b6020820152919050565b606081101561300457505060408051808201909152601381527211dc99585d1b995cdcc81bd98814dc1a5c9a5d606a1b6020820152919050565b606281101561303757505060408051808201909152600c81526b4d61676e69666963656e636560a01b6020820152919050565b6063811015613064575050604080518082019091526006815265576973646f6d60d01b6020820152919050565b505060408051808201909152601181527045787472656d652054617264696e65737360781b6020820152919050565b6000606483836040516020016130aa929190614365565b6040516020818303038152906040528051906020012060001c610d2d9190614126565b60606130d8856137a1565b6130e1856137a1565b6130ea856137a1565b846040516020016130fe949392919061438b565b6040516020818303038152906040529050949350505050565b606082826040516020016116a3929190614432565b606061047b604051806040016040528060048152602001631c9958dd60e21b8152506121c4604051806040016040528060048152602001633130302560e01b815250604051806040016040528060048152602001633130302560e01b81525086604051806020016040528060008152506130cd565b6060600086866040516020016131ce92919091825263626f647960e01b6020830152602482015260440190565b6040516020818303038152906040528051906020012060001c905060006131f68888886137b4565b9050600061320f8961320960078b613c76565b896137b4565b905060007304fb77f7006f1c2e7152cf33e199d2dcd0c0c013636f40b6756132386040876141b0565b9550856040518263ffffffff1660e01b815260040161325991815260200190565b600060405180830381865af4158015613276573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261329e9190810190613ec8565b905060008915613338577304fb77f7006f1c2e7152cf33e199d2dcd0c0c01363e927751f6132cd6002886141b0565b9650866040518263ffffffff1660e01b81526004016132ee91815260200190565b600060405180830381865af415801561330b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613333919081019061448a565b613384565b60405180604001604052806040518060400160405280600381526020016203135360ec1b81525081526020016040518060400160405280600381526020016203135360ec1b8152508152505b90506000613393600287614126565b600014905061346d60405180604001604052806006815260200165636972636c6560d01b8152506133f08b8589604051806040016040528060018152602001603160f81b8152508e604051806020016040528060008152506134c1565b6134426040518060400160405280600d81526020016c30b734b6b0ba32a6b7ba34b7b760991b8152506128ff8689604051806040016040528060068152602001653634b732b0b960d11b815250613554565b8d1561345d57604051806020016040528060008152506138aa565b613468898989613891565b6138aa565b9c9b505050505050505050505050565b606081604051602001610f269190614525565b6060838383866040516020016134a99493929190614583565b60405160208183030381529060405290509392505050565b60606134cc876137a1565b6134dd8760005b60200201516137a1565b6134e88860016134d3565b6134f1886137a1565b6134fa886137a1565b6135228860405160200161350e919061461c565b6040516020818303038152906040526137a1565b876040516020016135399796959493929190614653565b60405160208183030381529060405290509695505050505050565b6060600084613598576040518060400160405280601e81526020017f6b6579506f696e74733d27303b3127206b657954696d65733d27303b312700008152506135cf565b6040518060400160405280601e81526020017f6b6579506f696e74733d27313b3027206b657954696d65733d27303b312700008152505b9050806135db856137a1565b6135e4856137a1565b6040516020016135f69392919061473d565b6040516020818303038152906040529150509392505050565b606060405180606001604052806026815260200161497b60269139905090565b6060815160000361364e57505060408051602081019091526000815290565b60006040518060600160405280604081526020016149a1604091399050600060038451600261367d9190613c76565b61368791906141b0565b613692906004613c3a565b905060006136a1826020613c76565b67ffffffffffffffff8111156136b9576136b9613e01565b6040519080825280601f01601f1916602001820160405280156136e3576020820181803683370190505b509050818152600183018586518101602084015b818310156137515760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b938201939093526004016136f7565b60038951066001811461376b576002811461377c57613788565b613d3d60f01b600119830152613788565b603d60f81b6000198301525b509398975050505050505050565b606061047b8261362f565b606081604051602001610f2691906147d7565b6060600084846040516020016137e592919091825267189bd91e519a5b1b60c21b6020830152602882015260480190565b60408051601f1981840301815291905280516020909101209050600061380b8685611ef4565b600181111561381c5761381c613deb565b0361385d57600061382d8685611f51565b600181111561383e5761383e613deb565b036138545761384c816138cd565b915050610d2d565b61384c816138f4565b60006138698685611f51565b600181111561387a5761387a613deb565b036138885761384c8161392f565b61384c81613956565b6060838385846040516020016134a9949392919061480d565b60606138c48585858560405160200161292e929190613d5b565b95945050505050565b60607304fb77f7006f1c2e7152cf33e199d2dcd0c0c013632f0caf42611fa5604085614126565b6040516358e1eccb60e11b8152600481018290526060907304fb77f7006f1c2e7152cf33e199d2dcd0c0c0139063b1c3d99690602401611fc3565b60607304fb77f7006f1c2e7152cf33e199d2dcd0c0c0136328dbedf9611fa5604085614126565b604051638f629b2b60e01b8152600481018290526060907304fb77f7006f1c2e7152cf33e199d2dcd0c0c01390638f629b2b90602401611fc3565b6001600160e01b03198116811461065657600080fd5b6000602082840312156139b957600080fd5b8135610d2d81613991565b60005b838110156139df5781810151838201526020016139c7565b838111156139ee576000848401525b50505050565b6020815260008251806020840152613a138160408501602087016139c4565b601f01601f19169190910160400192915050565b600060208284031215613a3957600080fd5b5035919050565b6001600160a01b038116811461065657600080fd5b60008060408385031215613a6857600080fd5b8235613a7381613a40565b946020939093013593505050565b600060208284031215613a9357600080fd5b8135610d2d81613a40565b600080600060608486031215613ab357600080fd5b8335613abe81613a40565b92506020840135613ace81613a40565b929592945050506040919091013590565b60008060408385031215613af257600080fd5b8235613afd81613a40565b915060208301358015158114613b1257600080fd5b809150509250929050565b600080600080600060808688031215613b3557600080fd5b8535613b4081613a40565b94506020860135613b5081613a40565b935060408601359250606086013567ffffffffffffffff80821115613b7457600080fd5b818801915088601f830112613b8857600080fd5b813581811115613b9757600080fd5b896020828501011115613ba957600080fd5b9699959850939650602001949392505050565b60008060408385031215613bcf57600080fd5b8235613bda81613a40565b91506020830135613b1281613a40565b600181811c90821680613bfe57607f821691505b602082108103613c1e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613c5457613c54613c24565b500290565b600060208284031215613c6b57600080fd5b8151610d2d81613991565b60008219821115613c8957613c89613c24565b500190565b600081613c9d57613c9d613c24565b506000190190565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b600060018201613d0b57613d0b613c24565b5060010190565b60008151613d248185602086016139c4565b9290920192915050565b6402134b137960dd1b815260008251613d4e8160058501602087016139c4565b9190910160050192915050565b60008351613d6d8184602088016139c4565b835190830190613d818183602088016139c4565b01949350505050565b60008351613d9c8184602088016139c4565b600b60fa1b9083019081528351613dba8160018401602088016139c4565b01600101949350505050565b60008251613dd88184602087016139c4565b605d60f81b920191825250600101919050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715613e3a57613e3a613e01565b60405290565b600082601f830112613e5157600080fd5b815167ffffffffffffffff80821115613e6c57613e6c613e01565b604051601f8301601f19908116603f01168101908282118183101715613e9457613e94613e01565b81604052838152866020858801011115613ead57600080fd5b613ebe8460208301602089016139c4565b9695505050505050565b600060208284031215613eda57600080fd5b815167ffffffffffffffff811115613ef157600080fd5b61163584828501613e40565b607b60f81b815260008751613f19816001850160208c016139c4565b8083019050600b60fa1b8060018301528851613f3c816002850160208d016139c4565b600292019182018190528751613f59816003850160208c016139c4565b600392019182018190528651613f76816004850160208b016139c4565b60049201918201528451613f918160058401602089016139c4565b01613fa260058201600b60fa1b9052565b613faf6006820185613d12565b607d60f81b81526001019998505050505050505050565b600181815b80851115614001578160001904821115613fe757613fe7613c24565b80851615613ff457918102915b93841c9390800290613fcb565b509250929050565b6000826140185750600161047b565b816140255750600061047b565b816001811461403b576002811461404557614061565b600191505061047b565b60ff84111561405657614056613c24565b50506001821b61047b565b5060208310610133831016604e8410600b8410161715614084575081810a61047b565b61408e8383613fc6565b80600019048211156140a2576140a2613c24565b029392505050565b6000610d2d60ff841683614009565b607b60f81b8152600083516140d58160018501602088016139c4565b600b60fa1b60019184019182015283516140f68160028401602088016139c4565b607d60f81b60029290910191820152600301949350505050565b634e487b7160e01b600052601260045260246000fd5b60008261413557614135614110565b500690565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff810361416657614166613c24565b60010192915050565b600082516141818184602087016139c4565b7f73686170652d72656e646572696e673d226f7074696d697a6553706565642200920191825250601f01919050565b6000826141bf576141bf614110565b500490565b697472616e73666f726d3d60b01b81526000602760f81b80600a8401527f7472616e736c617465283130302c31303029207363616c6528302e3529200000600b840152660e4dee8c2e8ca560cb1b6029840152835161422a8160308601602088016139c4565b602960f81b60309490910193840152603183015250603201919050565b60008751602061425a8285838d016139c4565b88519184019161426d8184848d016139c4565b885192019161427f8184848c016139c4565b87519201916142918184848b016139c4565b86519201916142a38184848a016139c4565b85519201916142b581848489016139c4565b919091019998505050505050505050565b6000601160f91b80835284516142e38160018601602089016139c4565b62111d1160e91b60019185019182015284516143068160048401602089016139c4565b016004810191909152600501949350505050565b601160f91b815282516000906143378160018501602088016139c4565b61111d60f11b60019184019182015283516143598160038401602088016139c4565b01600301949350505050565b8281526000825161437d8160208501602087016139c4565b919091016020019392505050565b6577696474683d60d01b8152600085516143ac816006850160208a016139c4565b666865696768743d60c81b60069184019182015285516143d381600d840160208a016139c4565b6466696c6c3d60d81b600d929091019182015284516143f98160128401602089016139c4565b808201915050600160fd1b806012830152845161441d8160138501602089016139c4565b60139201918201526014019695505050505050565b600f60fa1b81526000835161444e8160018501602088016139c4565b600160fd1b600191840191820152835161446f8160028401602088016139c4565b61179f60f11b60029290910191820152600401949350505050565b6000602080838503121561449d57600080fd5b825167ffffffffffffffff808211156144b557600080fd5b818501915085601f8301126144c957600080fd5b6144d1613e17565b8060408401888111156144e357600080fd5b845b81811015614517578051858111156144fd5760008081fd5b6145098b828901613e40565b8552509286019286016144e5565b509098975050505050505050565b6666696c7465723d60c81b8152601160f91b60078201526475726c282360d81b6008820152815160009061456081600d8501602087016139c4565b602960f81b600d93909101928301525061011160f51b600e820152601001919050565b600f60fa1b81526000855161459f816001850160208a016139c4565b600160fd1b60019184019182015285516145c0816002840160208a016139c4565b808201915050601f60f91b80600283015285516145e4816003850160208a016139c4565b613c2f60f01b6003939091019283015284516146078160058501602089016139c4565b60059201918201526006019695505050505050565b6e36b4bc16b13632b73216b6b7b2329d60891b81526000825161464681600f8501602087016139c4565b91909101600f0192915050565b61723d60f01b815260008851614670816002850160208d016139c4565b6263783d60e81b6002918401918201528851614693816005840160208d016139c4565b6263793d60e81b6005929091019182015287516146b7816008840160208c016139c4565b6466696c6c3d60d81b600892909101918201526146d7600d820188613d12565b676f7061636974793d60c01b815290506146f46008820187613d12565b657374796c653d60d01b8152905061470f6006820186613d12565b600160fd1b815290506147256001820185613d12565b600160fd1b81526001019a9950505050505050505050565b6000845161474f8184602089016139c4565b600160fd1b908301908152636475723d60e01b6001820152845161477a8160058401602089016139c4565b7f726570656174436f756e743d22696e646566696e697465222000000000000000600592909101918201526863616c634d6f64653d60b81b601e82015283516147ca8160278401602088016139c4565b0160270195945050505050565b601160f91b815281516000906147f48160018501602087016139c4565b61011160f51b6001939091019283015250600301919050565b7f3c616e696d617465206174747269627574654e616d653d2266696c6c2220726581527f70656174436f756e743d22696e646566696e697465222076616c7565733d220060208201526000855161486b81603f850160208a016139c4565b8083019050603b60f81b80603f830152865161488e816040850160208b016139c4565b604092019182015284516148a98160418401602089016139c4565b661110323ab91e9160c91b6041929091019182015283516148d18160488401602088016139c4565b6211179f60e91b60489290910191820152604b01969550505050505056fe466c6f6174696e672e204879706e6f74697a696e672e20446976696e653f204269626f7320617265203131313120667269656e646c79207370697269747320666f7220796f75722077616c6c65742e204a6f696e207468652062696c6c696f6e73206f662070656f706c652077686f206c6f766520616e642061646f7265206269626f7320746f6461792e3c6d7061746820786c696e6b3a687265663d22236269626f2d6a69747465722d6c6722202f3e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212209089e989316e715acd65d4c221c17de33cda87aff46c02299d087d013905338e64736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106101355760003560e01c806370a08231116100ab578063a22cb4651161006f578063a22cb46514610351578063b88d4fde14610371578063c87b56dd14610391578063d5abeb01146103b1578063e985e9c5146103c7578063f0503e801461040257600080fd5b806370a08231146102cd5780638da5cb5b146102ed57806395d89b411461030d578063a035b1fe14610322578063a0712d681461033e57600080fd5b806313af4035116100fd57806313af40351461020957806318160ddd1461022957806323b872dd1461024d57806342842e0e1461026d57806351cff8d91461028d5780636352211e146102ad57600080fd5b806301ffc9a71461013a57806306fdde031461016f578063081812fc14610191578063095ea7b3146101df5780631249c58b14610201575b600080fd5b34801561014657600080fd5b5061015a6101553660046139a7565b61042f565b60405190151581526020015b60405180910390f35b34801561017b57600080fd5b50610184610481565b60405161016691906139f4565b34801561019d57600080fd5b506101c76101ac366004613a27565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610166565b3480156101eb57600080fd5b506101ff6101fa366004613a55565b61050f565b005b6101ff6105f6565b34801561021557600080fd5b506101ff610224366004613a81565b610659565b34801561023557600080fd5b5061023f60075481565b604051908152602001610166565b34801561025957600080fd5b506101ff610268366004613a9e565b6106ee565b34801561027957600080fd5b506101ff610288366004613a9e565b6108b5565b34801561029957600080fd5b506101ff6102a8366004613a81565b6109ad565b3480156102b957600080fd5b506101c76102c8366004613a27565b610a2f565b3480156102d957600080fd5b5061023f6102e8366004613a81565b610a86565b3480156102f957600080fd5b506006546101c7906001600160a01b031681565b34801561031957600080fd5b50610184610ae9565b34801561032e57600080fd5b5061023f67016345785d8a000081565b6101ff61034c366004613a27565b610af6565b34801561035d57600080fd5b506101ff61036c366004613adf565b610b9c565b34801561037d57600080fd5b506101ff61038c366004613b1d565b610c08565b34801561039d57600080fd5b506101846103ac366004613a27565b610cf0565b3480156103bd57600080fd5b5061023f61045781565b3480156103d357600080fd5b5061015a6103e2366004613bbc565b600560209081526000928352604080842090915290825290205460ff1681565b34801561040e57600080fd5b5061023f61041d366004613a27565b60086020526000908152604090205481565b60006301ffc9a760e01b6001600160e01b03198316148061046057506380ac58cd60e01b6001600160e01b03198316145b8061047b5750635b5e139f60e01b6001600160e01b03198316145b92915050565b6000805461048e90613bea565b80601f01602080910402602001604051908101604052809291908181526020018280546104ba90613bea565b80156105075780601f106104dc57610100808354040283529160200191610507565b820191906000526020600020905b8154815290600101906020018083116104ea57829003601f168201915b505050505081565b6000818152600260205260409020546001600160a01b03163381148061055857506001600160a01b038116600090815260056020908152604080832033845290915290205460ff165b61059a5760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b60448201526064015b60405180910390fd5b60008281526004602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6104576007541061061a57604051634237dcf160e11b815260040160405180910390fd5b600161062e67016345785d8a000082613c3a565b341461064d5760405163b31557c360e01b815260040160405180910390fd5b61065633610d34565b50565b6006546001600160a01b031633146106a25760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610591565b600680546001600160a01b0319166001600160a01b03831690811790915560405133907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d7690600090a350565b6000818152600260205260409020546001600160a01b038481169116146107445760405162461bcd60e51b815260206004820152600a60248201526957524f4e475f46524f4d60b01b6044820152606401610591565b6001600160a01b03821661078e5760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610591565b336001600160a01b03841614806107c857506001600160a01b038316600090815260056020908152604080832033845290915290205460ff165b806107e957506000818152600460205260409020546001600160a01b031633145b6108265760405162461bcd60e51b815260206004820152600e60248201526d1393d517d055551213d49256915160921b6044820152606401610591565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526002825284832080546001600160a01b03199081168317909155600490925284832080549092169091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6108c08383836106ee565b6001600160a01b0382163b15806109695750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af1158015610939573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095d9190613c59565b6001600160e01b031916145b6109a85760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610591565b505050565b6006546001600160a01b031633146109f65760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610591565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610a2b573d6000803e3d6000fd5b5050565b6000818152600260205260409020546001600160a01b031680610a815760405162461bcd60e51b815260206004820152600a6024820152691393d517d3525395115160b21b6044820152606401610591565b919050565b60006001600160a01b038216610acd5760405162461bcd60e51b815260206004820152600c60248201526b5a45524f5f4144445245535360a01b6044820152606401610591565b506001600160a01b031660009081526003602052604090205490565b6001805461048e90613bea565b61045760075410610b1a57604051634237dcf160e11b815260040160405180910390fd5b8061045760075482610b2c9190613c76565b1115610b4b576040516347747fa960e01b815260040160405180910390fd5b81610b5e67016345785d8a000082613c3a565b3414610b7d5760405163b31557c360e01b815260040160405180910390fd5b82156109a857610b8c33610d34565b610b9583613c8e565b9250610b7d565b3360008181526005602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610c138585856106ee565b6001600160a01b0384163b1580610caa5750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290610c5b9033908a90899089908990600401613ca5565b6020604051808303816000875af1158015610c7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9e9190613c59565b6001600160e01b031916145b610ce95760405162461bcd60e51b815260206004820152601060248201526f155394d0519157d49150d2541251539560821b6044820152606401610591565b5050505050565b60606007548210610d14576040516307ed98ed60e31b815260040160405180910390fd5b600082815260086020526040902054610d2d8382610db3565b9392505050565b6007805460009182610d4583613cf9565b919050559050610d9a816040516bffffffffffffffffffffffff193360601b16602082015242603482015260548101829052600090607401604051602081830303815290604052805190602001209050919050565b600082815260086020526040902055610a2b8282610dfe565b6060610d2d83610dc285610f09565b6040518060c00160405280608b81526020016148f0608b9139610de58688610f3c565b610def87896111d1565b610df9888a61127f565b611432565b6001600160a01b038216610e485760405162461bcd60e51b81526020600482015260116024820152701253959053125117d49150d25412515395607a1b6044820152606401610591565b6000818152600260205260409020546001600160a01b031615610e9e5760405162461bcd60e51b815260206004820152600e60248201526d1053149150511657d3525395115160921b6044820152606401610591565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6060610f1682600461157c565b604051602001610f269190613d2e565b6040516020818303038152906040529050919050565b60606000604051806040016040528060018152602001605b60f81b815250905080610f8f6040518060400160405280600781526020016644656e7369747960c81b815250610f8a87876115cd565b61163d565b604051602001610fa0929190613d5b565b60408051601f198184030181528282019091526008825267506f6c617269747960c01b602083015291508190610fda90610f8a87876116ba565b604051602001610feb929190613d8a565b60408051601f198184030181528282019091526006825265476c696e747360d01b60208301529150819061102290610f8a87611730565b604051602001611033929190613d8a565b60408051601f1981840301815282820190915260058252644d6f74657360d81b60208301529150819061106990610f8a87611748565b60405160200161107a929190613d8a565b60408051601f1981840301815282820190915260048252634579657360e01b6020830152915081906110af90610f8a87611874565b6040516020016110c0929190613d8a565b60408051601f19818403018152828201909152600582526409adeeae8d60db1b6020830152915081906110f690610f8a87611b3d565b604051602001611107929190613d8a565b60408051601f198184030181528282019091526006825265436865656b7360d01b60208301529150819061113e90610f8a87611e00565b60405160200161114f929190613d8a565b60408051601f19818403018152828201909152600682526556697274756560d01b60208301529150819061118690610f8a87611ee9565b604051602001611197929190613d8a565b6040516020818303038152906040529050806040516020016111b99190613dc6565b60405160208183030381529060405291505092915050565b60606000836040516020016111ff9181526d189858dad9dc9bdd5b99119a5b1b60921b6020820152602e0190565b60408051601f198184030181529190528051602090910120905060006112258585611ef4565b600181111561123657611236613deb565b036112785760005b6112488585611f51565b600181111561125957611259613deb565b0361126f5761126781611f7e565b91505061047b565b61126781612008565b600061123e565b6060610d2d6040518060400160405280600381526020016273766760e81b8152506112a8612043565b7304fb77f7006f1c2e7152cf33e199d2dcd0c0c01363938bfc8e6040518163ffffffff1660e01b8152600401600060405180830381865af41580156112f1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113199190810190613ec8565b6113238787612146565b61132d88886121c9565b604051633701d24b60e11b8152600481018a90526024810189905273176a00344e819430136be71b66a0e7853885342f90636e03a49690604401600060405180830381865af4158015611384573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113ac9190810190613ec8565b6040516316166e1560e31b8152600481018b9052732073341d0ac112a0bc159482d7619929d4ba34569063b0b370a890602401600060405180830381865af41580156113fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526114249190810190613ec8565b61142d8b6123f3565b61290c565b60606000611467604051806040016040528060078152602001661d1bdad95b925960ca1b8152506114628a61294f565b6129b9565b61148d604051806040016040528060048152602001636e616d6560e01b815250896129b9565b6114ba6040518060400160405280600b81526020016a3232b9b1b934b83a34b7b760a91b815250896129b9565b6114e66040518060400160405280600a8152602001696174747269627574657360b01b815250896129ce565b6115176040518060400160405280600f81526020016e3130b1b5b3b937bab73221b7b637b960891b815250896129b9565b61154160405180604001604052806005815260200164696d61676560d81b8152506114628a6129e3565b60405160200161155696959493929190613efd565b604051602081830303815290604052905061157081612a35565b98975050505050505050565b6060600061158b83600a6140aa565b90508084106115ad57604051630146a8e760e61b815260040160405180910390fd5b6115bf6115ba8286613c76565b61294f565b600101928352509092915050565b606060006115db8484611ef4565b905060008160018111156115f1576115f1613deb565b1461161757604051806040016040528060038152602001624c6f7760e81b815250611635565b60405180604001604052806004815260200163090d2ced60e31b8152505b949350505050565b606061166b6040518060400160405280600a81526020016974726169745f7479706560b01b815250846129b9565b6116926040518060400160405280600581526020016476616c756560d81b815250846129b9565b6040516020016116a39291906140b9565b604051602081830303815290604052905092915050565b606060006116c88484611f51565b905060008160018111156116de576116de613deb565b1461170957604051806040016040528060088152602001674e6567617469766560c01b815250611635565b5050604080518082019091526008815267506f73697469766560c01b602082015292915050565b6060600061173d83612a76565b9050610d2d8161294f565b6060600061175583612ae1565b9050600181600481111561176b5761176b613deb565b03611796575050604080518082019091526008815267466c6f6174696e6760c01b6020820152919050565b60028160048111156117aa576117aa613deb565b036117d3575050604080518082019091526006815265526973696e6760d01b6020820152919050565b60038160048111156117e7576117e7613deb565b0361181157505060408051808201909152600781526646616c6c696e6760c81b6020820152919050565b600481600481111561182557611825613deb565b0361185257505060408051808201909152600a815269476c697374656e696e6760b01b6020820152919050565b50506040805180820190915260048152634e6f6e6560e01b6020820152919050565b6060600061188183612b54565b9050600081600b81111561189757611897613deb565b036118be57505060408051808201909152600481526313dd985b60e21b6020820152919050565b600181600b8111156118d2576118d2613deb565b036118fb575050604080518082019091526006815265536d696c657960d01b6020820152919050565b600281600b81111561190f5761190f613deb565b0361193657505060408051808201909152600481526357696e6b60e01b6020820152919050565b600381600b81111561194a5761194a613deb565b03611972575050604080518082019091526005815264149bdd5b9960da1b6020820152919050565b600481600b81111561198657611986613deb565b036119af575050604080518082019091526006815265536c6565707960d01b6020820152919050565b600581600b8111156119c3576119c3613deb565b036119ec57505060408051808201909152600681526521b637bb32b960d11b6020820152919050565b600781600b811115611a0057611a00613deb565b03611a2757505060408051808201909152600481526329ba30b960e11b6020820152919050565b600681600b811115611a3b57611a3b613deb565b03611a6357505060408051808201909152600581526444697a7a7960d81b6020820152919050565b600881600b811115611a7757611a77613deb565b03611a9f5750506040805180820190915260058152641219585c9d60da1b6020820152919050565b600981600b811115611ab357611ab3613deb565b03611ada5750506040805180820190915260048152634861686160e01b6020820152919050565b600a81600b811115611aee57611aee613deb565b03611b185750506040805180820190915260078152664379636c6f707360c81b6020820152919050565b50506040805180820190915260078152664f70616c696e6560c81b6020820152919050565b60606000611b4a83612c4d565b9050600081600b811115611b6057611b60613deb565b03611b88575050604080518082019091526005815264536d696c6560d81b6020820152919050565b600881600b811115611b9c57611b9c613deb565b03611bc4575050604080518082019091526005815264536d69726b60d81b6020820152919050565b600181600b811115611bd857611bd8613deb565b03611c0457505060408051808201909152600981526811dc985d1a599a595960ba1b6020820152919050565b600281600b811115611c1857611c18613deb565b03611c41575050604080518082019091526006815265506f6c69746560d01b6020820152919050565b600381600b811115611c5557611c55613deb565b03611c7b575050604080518082019091526003815262486d6d60e81b6020820152919050565b600481600b811115611c8f57611c8f613deb565b03611cb55750506040805180820190915260038152624f6f6f60e81b6020820152919050565b600781600b811115611cc957611cc9613deb565b03611cf2575050604080518082019091526006815265546f6f74687960d01b6020820152919050565b600981600b811115611d0657611d06613deb565b03611d2c57505060408051808201909152600381526256656560e81b6020820152919050565b600581600b811115611d4057611d40613deb565b03611d6757505060408051808201909152600481526323b934b760e11b6020820152919050565b600b81600b811115611d7b57611d7b613deb565b03611da25750506040805180820190915260048152630426c65760e41b6020820152919050565b600681600b811115611db657611db6613deb565b03611ddf5750506040805180820190915260068152650a6dadedec6d60d31b6020820152919050565b505060408051808201909152600381526210d85d60ea1b6020820152919050565b60606000611e0d83612d48565b90506000816003811115611e2357611e23613deb565b03611e4a5750506040805180820190915260048152634e6f6e6560e01b6020820152919050565b6001816003811115611e5e57611e5e613deb565b03611e8957505060408051808201909152600881526721b4b931bab630b960c11b6020820152919050565b6003816003811115611e9d57611e9d613deb565b03611ec357505060408051808201909152600381526242696760e81b6020820152919050565b5050604080518082019091526008815267467265636b6c657360c01b6020820152919050565b606061047b82612db4565b600080611f20846040518060400160405280600781526020016664656e7369747960c81b815250613093565b905082600003611f3457600091505061047b565b6050811015611f4757600091505061047b565b5060019392505050565b600080611f208460405180604001604052806008815260200167706f6c617269747960c01b815250613093565b60607304fb77f7006f1c2e7152cf33e199d2dcd0c0c013638c4e98a9611fa5604085614126565b6040518263ffffffff1660e01b8152600401611fc391815260200190565b600060405180830381865af4158015611fe0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261047b9190810190613ec8565b6040516315e62d3b60e01b8152600481018290526060907304fb77f7006f1c2e7152cf33e199d2dcd0c0c013906315e62d3b90602401611fc3565b6060604051602001612132907f786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737681527f672220786d6c6e733a786c696e6b3d22687474703a2f2f7777772e77332e6f7260208201527f672f313939392f786c696e6b222077696474683d22313030252220686569676860408201527f743d2231303025222076696577426f783d22302030203330302033303022200060608201527f7072657365727665417370656374526174696f3d22784d6964594d6964206d65607f82015263032ba11160e51b609f8201526b03334b6361e913737b73291160a51b60a382015260af0190565b604051602081830303815290604052905090565b6060610d2d604051806040016040528060048152602001631c9958dd60e21b8152506121c4604051806040016040528060048152602001633130302560e01b815250604051806040016040528060048152602001633130302560e01b8152506121af88886111d1565b604051806020016040528060008152506130cd565b613117565b6040805161012081018252600260e08201818152610d8d60f21b61010084018190529083528351808501855282815260208181018390528085019190915284518086018652838152808201929092528385019190915283518085018552828152611a9b60f11b818301526060848101919091528451808601865283815261068760f31b8184015260808501528451808601865283815261199960f11b8184015260a08501528451808601909552918452610c8d60f21b9084015260c0820192909252600061229785856111d1565b90506000806122a68787611f51565b60018111156122b7576122b7613deb565b146122e257604051806040016040528060088152602001676d756c7469706c7960c01b815250612303565b604051806040016040528060078152602001663634b3b43a32b760c91b8152505b905060006123108361312c565b905060005b60078160ff16101561237b57816123488960ff84168a89826007811061233d5761233d61413a565b6020020151886131a1565b604051602001612359929190613d5b565b60405160208183030381529060405291508061237490614150565b9050612315565b506123e8604051806040016040528060018152602001606760f81b8152506123c3604051806040016040528060098152602001683134b13796b1363ab960b91b81525061347d565b6040516020016123d3919061416f565b60405160208183030381529060405283613490565b979650505050505050565b6060600082604051602001612417918152636661636560e01b602082015260240190565b60408051601f19818403018152919052805160209091012090506000600261243f81846141b0565b925061244b9083614126565b604080516101408101825260016101008201818152603160f81b610120840152825282518084018452818152601960f91b6020828101919091528084019190915283518085018552828152600d60fa1b818301528385015283518085018552918252601b60f91b828201526060830191909152825180840184526002808252612d3160f01b8284015260808401919091528351808501855281815261169960f11b8184015260a084015283518085018552818152610b4d60f21b8184015260c08401528351808501909452835261169b60f11b9083015260e08101919091529015915060009061253c600885614126565b6008811061254c5761254c61413a565b60200201519050600061264a60405180604001604052806002815260200161038360f41b81525060405180604001604052806040518060400160405280600381526020016203130360ec1b81525081526020016040518060400160405280600381526020016203130360ec1b81525081525060405180604001604052806005815260200164776869746560d81b8152506040518060400160405280600381526020016218171960e91b815250604051806040016040528060078152602001663634b3b43a32b760c91b8152506126456040518060400160405280600c81526020016b6269626f2d626c75722d6c6760a01b81525061347d565b6134c1565b905060008260405160200161265f91906141c4565b60408051601f19818403018152828201825260018352606760f81b6020848101919091528251808401845260048152631c9958dd60e21b818301528351808501855260038082526203230360ec1b828501819052865180880188529182528185015285518087018752600981526802330303030303030360bc1b818601528651948501909652600084529396506123e895948794612702946121c49392906130cd565b61272a60405180604001604052806006815260200165636972636c6560d01b81525087613117565b6040516316166e1560e31b8152600481018d905273fd61aff6cc3abc7339946f233f182dd17ef97b129063b0b370a890602401600060405180830381865af415801561277a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127a29190810190613ec8565b6040516316166e1560e31b8152600481018e90527340ccf25fc4c7e37a7aaaf58dbaf6b1f3996e478c9063b0b370a890602401600060405180830381865af41580156127f2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261281a9190810190613ec8565b6040516316166e1560e31b8152600481018f9052735a56533924d6694c617172592cfa7d8c63de4b4f9063b0b370a890602401600060405180830381865af415801561286a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128929190810190613ec8565b61142d6040518060400160405280600d81526020016c30b734b6b0ba32a6b7ba34b7b760991b8152506128ff8e6040518060400160405280600381526020016231317360e81b815250604051806040016040528060068152602001653634b732b0b960d11b815250613554565b61290761360f565b613490565b6060612942898989898989898960405160200161292e96959493929190614247565b604051602081830303815290604052613490565b9998505050505050505050565b6060816000036129765750506040805180820190915260018152600360fc1b602082015290565b606e6040510190508060405260005b82156129ab5760001990910190600101600a830660300180835350600a83049250612985565b601f19909101908152919050565b606082826040516020016116a39291906142c6565b606082826040516020016116a392919061431a565b60606040518060400160405280601a81526020017f646174613a696d6167652f7376672b786d6c3b6261736536342c000000000000815250612a248361362f565b604051602001610f26929190613d5b565b60606040518060400160405280601d81526020017f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000815250612a2483613796565b600080612aa0836040518060400160405280600581526020016419db1a5b9d60da1b815250613093565b90506001811015612ab45750600392915050565b6005811015612ac65750600292915050565b6023811015612ad85750600192915050565b50600092915050565b600080612b0a83604051806040016040528060048152602001636d6f746560e01b815250613093565b90506014811015612b1e5750600192915050565b6023811015612b305750600292915050565b6032811015612b425750600392915050565b603b811015612ad85750600492915050565b600080612b7c836040518060400160405280600381526020016265796560e81b815250613093565b90506014811015612b905750600092915050565b6028811015612ba25750600392915050565b6032811015612bb45750600192915050565b603c811015612bc65750600492915050565b6046811015612bd85750600292915050565b6050811015612bea5750600992915050565b6054811015612bfc5750600592915050565b6058811015612c0e5750600792915050565b605c811015612c205750600692915050565b6060811015612c325750600892915050565b6063811015612c445750600a92915050565b50600b92915050565b600080612c7783604051806040016040528060058152602001640dadeeae8d60db1b815250613093565b90506014811015612c8b5750600092915050565b6028811015612c9d5750600192915050565b603c811015612caf5750600292915050565b6046811015612cc15750600592915050565b6050811015612cd35750600892915050565b6059811015612ce55750600992915050565b605c811015612cf75750600492915050565b605e811015612d095750600392915050565b605f811015612d1b5750600792915050565b6061811015612d2d5750600b92915050565b6062811015612d3f5750600692915050565b50600a92915050565b600080612d738360405180604001604052806006815260200165636865656b7360d01b815250613093565b90506032811015612d875750600092915050565b604b811015612d995750600192915050565b6055811015612dab5750600392915050565b50600292915050565b60606000612de0836040518060400160405280600681526020016576697274756560d01b815250613093565b9050600f811015612e1357505060408051808201909152600a81526947656e746c656e65737360b01b6020820152919050565b601e811015612e415750506040805180820190915260078152664272617665727960c81b6020820152919050565b602d811015612e6f5750506040805180820190915260078152664d6f646573747960c81b6020820152919050565b603c811015612ea057505060408051808201909152600a81526954656d706572616e636560b01b6020820152919050565b6046811015612edb5750506040805180820190915260148152732934b3b43a37bab99024b73234b3b730ba34b7b760611b6020820152919050565b6050811015612f095750506040805180820190915260078152664a75737469636560c81b6020820152919050565b6055811015612f3957505060408051808201909152600981526853696e63657269747960b81b6020820152919050565b6058811015612f6c57505060408051808201909152600c81526b467269656e646c696e65737360a01b6020820152919050565b605c811015612f9a5750506040805180820190915260078152664469676e69747960c81b6020820152919050565b605e811015612fca575050604080518082019091526009815268456e647572616e636560b81b6020820152919050565b606081101561300457505060408051808201909152601381527211dc99585d1b995cdcc81bd98814dc1a5c9a5d606a1b6020820152919050565b606281101561303757505060408051808201909152600c81526b4d61676e69666963656e636560a01b6020820152919050565b6063811015613064575050604080518082019091526006815265576973646f6d60d01b6020820152919050565b505060408051808201909152601181527045787472656d652054617264696e65737360781b6020820152919050565b6000606483836040516020016130aa929190614365565b6040516020818303038152906040528051906020012060001c610d2d9190614126565b60606130d8856137a1565b6130e1856137a1565b6130ea856137a1565b846040516020016130fe949392919061438b565b6040516020818303038152906040529050949350505050565b606082826040516020016116a3929190614432565b606061047b604051806040016040528060048152602001631c9958dd60e21b8152506121c4604051806040016040528060048152602001633130302560e01b815250604051806040016040528060048152602001633130302560e01b81525086604051806020016040528060008152506130cd565b6060600086866040516020016131ce92919091825263626f647960e01b6020830152602482015260440190565b6040516020818303038152906040528051906020012060001c905060006131f68888886137b4565b9050600061320f8961320960078b613c76565b896137b4565b905060007304fb77f7006f1c2e7152cf33e199d2dcd0c0c013636f40b6756132386040876141b0565b9550856040518263ffffffff1660e01b815260040161325991815260200190565b600060405180830381865af4158015613276573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261329e9190810190613ec8565b905060008915613338577304fb77f7006f1c2e7152cf33e199d2dcd0c0c01363e927751f6132cd6002886141b0565b9650866040518263ffffffff1660e01b81526004016132ee91815260200190565b600060405180830381865af415801561330b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052613333919081019061448a565b613384565b60405180604001604052806040518060400160405280600381526020016203135360ec1b81525081526020016040518060400160405280600381526020016203135360ec1b8152508152505b90506000613393600287614126565b600014905061346d60405180604001604052806006815260200165636972636c6560d01b8152506133f08b8589604051806040016040528060018152602001603160f81b8152508e604051806020016040528060008152506134c1565b6134426040518060400160405280600d81526020016c30b734b6b0ba32a6b7ba34b7b760991b8152506128ff8689604051806040016040528060068152602001653634b732b0b960d11b815250613554565b8d1561345d57604051806020016040528060008152506138aa565b613468898989613891565b6138aa565b9c9b505050505050505050505050565b606081604051602001610f269190614525565b6060838383866040516020016134a99493929190614583565b60405160208183030381529060405290509392505050565b60606134cc876137a1565b6134dd8760005b60200201516137a1565b6134e88860016134d3565b6134f1886137a1565b6134fa886137a1565b6135228860405160200161350e919061461c565b6040516020818303038152906040526137a1565b876040516020016135399796959493929190614653565b60405160208183030381529060405290509695505050505050565b6060600084613598576040518060400160405280601e81526020017f6b6579506f696e74733d27303b3127206b657954696d65733d27303b312700008152506135cf565b6040518060400160405280601e81526020017f6b6579506f696e74733d27313b3027206b657954696d65733d27303b312700008152505b9050806135db856137a1565b6135e4856137a1565b6040516020016135f69392919061473d565b6040516020818303038152906040529150509392505050565b606060405180606001604052806026815260200161497b60269139905090565b6060815160000361364e57505060408051602081019091526000815290565b60006040518060600160405280604081526020016149a1604091399050600060038451600261367d9190613c76565b61368791906141b0565b613692906004613c3a565b905060006136a1826020613c76565b67ffffffffffffffff8111156136b9576136b9613e01565b6040519080825280601f01601f1916602001820160405280156136e3576020820181803683370190505b509050818152600183018586518101602084015b818310156137515760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b938201939093526004016136f7565b60038951066001811461376b576002811461377c57613788565b613d3d60f01b600119830152613788565b603d60f81b6000198301525b509398975050505050505050565b606061047b8261362f565b606081604051602001610f2691906147d7565b6060600084846040516020016137e592919091825267189bd91e519a5b1b60c21b6020830152602882015260480190565b60408051601f1981840301815291905280516020909101209050600061380b8685611ef4565b600181111561381c5761381c613deb565b0361385d57600061382d8685611f51565b600181111561383e5761383e613deb565b036138545761384c816138cd565b915050610d2d565b61384c816138f4565b60006138698685611f51565b600181111561387a5761387a613deb565b036138885761384c8161392f565b61384c81613956565b6060838385846040516020016134a9949392919061480d565b60606138c48585858560405160200161292e929190613d5b565b95945050505050565b60607304fb77f7006f1c2e7152cf33e199d2dcd0c0c013632f0caf42611fa5604085614126565b6040516358e1eccb60e11b8152600481018290526060907304fb77f7006f1c2e7152cf33e199d2dcd0c0c0139063b1c3d99690602401611fc3565b60607304fb77f7006f1c2e7152cf33e199d2dcd0c0c0136328dbedf9611fa5604085614126565b604051638f629b2b60e01b8152600481018290526060907304fb77f7006f1c2e7152cf33e199d2dcd0c0c01390638f629b2b90602401611fc3565b6001600160e01b03198116811461065657600080fd5b6000602082840312156139b957600080fd5b8135610d2d81613991565b60005b838110156139df5781810151838201526020016139c7565b838111156139ee576000848401525b50505050565b6020815260008251806020840152613a138160408501602087016139c4565b601f01601f19169190910160400192915050565b600060208284031215613a3957600080fd5b5035919050565b6001600160a01b038116811461065657600080fd5b60008060408385031215613a6857600080fd5b8235613a7381613a40565b946020939093013593505050565b600060208284031215613a9357600080fd5b8135610d2d81613a40565b600080600060608486031215613ab357600080fd5b8335613abe81613a40565b92506020840135613ace81613a40565b929592945050506040919091013590565b60008060408385031215613af257600080fd5b8235613afd81613a40565b915060208301358015158114613b1257600080fd5b809150509250929050565b600080600080600060808688031215613b3557600080fd5b8535613b4081613a40565b94506020860135613b5081613a40565b935060408601359250606086013567ffffffffffffffff80821115613b7457600080fd5b818801915088601f830112613b8857600080fd5b813581811115613b9757600080fd5b896020828501011115613ba957600080fd5b9699959850939650602001949392505050565b60008060408385031215613bcf57600080fd5b8235613bda81613a40565b91506020830135613b1281613a40565b600181811c90821680613bfe57607f821691505b602082108103613c1e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613c5457613c54613c24565b500290565b600060208284031215613c6b57600080fd5b8151610d2d81613991565b60008219821115613c8957613c89613c24565b500190565b600081613c9d57613c9d613c24565b506000190190565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b600060018201613d0b57613d0b613c24565b5060010190565b60008151613d248185602086016139c4565b9290920192915050565b6402134b137960dd1b815260008251613d4e8160058501602087016139c4565b9190910160050192915050565b60008351613d6d8184602088016139c4565b835190830190613d818183602088016139c4565b01949350505050565b60008351613d9c8184602088016139c4565b600b60fa1b9083019081528351613dba8160018401602088016139c4565b01600101949350505050565b60008251613dd88184602087016139c4565b605d60f81b920191825250600101919050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715613e3a57613e3a613e01565b60405290565b600082601f830112613e5157600080fd5b815167ffffffffffffffff80821115613e6c57613e6c613e01565b604051601f8301601f19908116603f01168101908282118183101715613e9457613e94613e01565b81604052838152866020858801011115613ead57600080fd5b613ebe8460208301602089016139c4565b9695505050505050565b600060208284031215613eda57600080fd5b815167ffffffffffffffff811115613ef157600080fd5b61163584828501613e40565b607b60f81b815260008751613f19816001850160208c016139c4565b8083019050600b60fa1b8060018301528851613f3c816002850160208d016139c4565b600292019182018190528751613f59816003850160208c016139c4565b600392019182018190528651613f76816004850160208b016139c4565b60049201918201528451613f918160058401602089016139c4565b01613fa260058201600b60fa1b9052565b613faf6006820185613d12565b607d60f81b81526001019998505050505050505050565b600181815b80851115614001578160001904821115613fe757613fe7613c24565b80851615613ff457918102915b93841c9390800290613fcb565b509250929050565b6000826140185750600161047b565b816140255750600061047b565b816001811461403b576002811461404557614061565b600191505061047b565b60ff84111561405657614056613c24565b50506001821b61047b565b5060208310610133831016604e8410600b8410161715614084575081810a61047b565b61408e8383613fc6565b80600019048211156140a2576140a2613c24565b029392505050565b6000610d2d60ff841683614009565b607b60f81b8152600083516140d58160018501602088016139c4565b600b60fa1b60019184019182015283516140f68160028401602088016139c4565b607d60f81b60029290910191820152600301949350505050565b634e487b7160e01b600052601260045260246000fd5b60008261413557614135614110565b500690565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff810361416657614166613c24565b60010192915050565b600082516141818184602087016139c4565b7f73686170652d72656e646572696e673d226f7074696d697a6553706565642200920191825250601f01919050565b6000826141bf576141bf614110565b500490565b697472616e73666f726d3d60b01b81526000602760f81b80600a8401527f7472616e736c617465283130302c31303029207363616c6528302e3529200000600b840152660e4dee8c2e8ca560cb1b6029840152835161422a8160308601602088016139c4565b602960f81b60309490910193840152603183015250603201919050565b60008751602061425a8285838d016139c4565b88519184019161426d8184848d016139c4565b885192019161427f8184848c016139c4565b87519201916142918184848b016139c4565b86519201916142a38184848a016139c4565b85519201916142b581848489016139c4565b919091019998505050505050505050565b6000601160f91b80835284516142e38160018601602089016139c4565b62111d1160e91b60019185019182015284516143068160048401602089016139c4565b016004810191909152600501949350505050565b601160f91b815282516000906143378160018501602088016139c4565b61111d60f11b60019184019182015283516143598160038401602088016139c4565b01600301949350505050565b8281526000825161437d8160208501602087016139c4565b919091016020019392505050565b6577696474683d60d01b8152600085516143ac816006850160208a016139c4565b666865696768743d60c81b60069184019182015285516143d381600d840160208a016139c4565b6466696c6c3d60d81b600d929091019182015284516143f98160128401602089016139c4565b808201915050600160fd1b806012830152845161441d8160138501602089016139c4565b60139201918201526014019695505050505050565b600f60fa1b81526000835161444e8160018501602088016139c4565b600160fd1b600191840191820152835161446f8160028401602088016139c4565b61179f60f11b60029290910191820152600401949350505050565b6000602080838503121561449d57600080fd5b825167ffffffffffffffff808211156144b557600080fd5b818501915085601f8301126144c957600080fd5b6144d1613e17565b8060408401888111156144e357600080fd5b845b81811015614517578051858111156144fd5760008081fd5b6145098b828901613e40565b8552509286019286016144e5565b509098975050505050505050565b6666696c7465723d60c81b8152601160f91b60078201526475726c282360d81b6008820152815160009061456081600d8501602087016139c4565b602960f81b600d93909101928301525061011160f51b600e820152601001919050565b600f60fa1b81526000855161459f816001850160208a016139c4565b600160fd1b60019184019182015285516145c0816002840160208a016139c4565b808201915050601f60f91b80600283015285516145e4816003850160208a016139c4565b613c2f60f01b6003939091019283015284516146078160058501602089016139c4565b60059201918201526006019695505050505050565b6e36b4bc16b13632b73216b6b7b2329d60891b81526000825161464681600f8501602087016139c4565b91909101600f0192915050565b61723d60f01b815260008851614670816002850160208d016139c4565b6263783d60e81b6002918401918201528851614693816005840160208d016139c4565b6263793d60e81b6005929091019182015287516146b7816008840160208c016139c4565b6466696c6c3d60d81b600892909101918201526146d7600d820188613d12565b676f7061636974793d60c01b815290506146f46008820187613d12565b657374796c653d60d01b8152905061470f6006820186613d12565b600160fd1b815290506147256001820185613d12565b600160fd1b81526001019a9950505050505050505050565b6000845161474f8184602089016139c4565b600160fd1b908301908152636475723d60e01b6001820152845161477a8160058401602089016139c4565b7f726570656174436f756e743d22696e646566696e697465222000000000000000600592909101918201526863616c634d6f64653d60b81b601e82015283516147ca8160278401602088016139c4565b0160270195945050505050565b601160f91b815281516000906147f48160018501602087016139c4565b61011160f51b6001939091019283015250600301919050565b7f3c616e696d617465206174747269627574654e616d653d2266696c6c2220726581527f70656174436f756e743d22696e646566696e697465222076616c7565733d220060208201526000855161486b81603f850160208a016139c4565b8083019050603b60f81b80603f830152865161488e816040850160208b016139c4565b604092019182015284516148a98160418401602089016139c4565b661110323ab91e9160c91b6041929091019182015283516148d18160488401602088016139c4565b6211179f60e91b60489290910191820152604b01969550505050505056fe466c6f6174696e672e204879706e6f74697a696e672e20446976696e653f204269626f7320617265203131313120667269656e646c79207370697269747320666f7220796f75722077616c6c65742e204a6f696e207468652062696c6c696f6e73206f662070656f706c652077686f206c6f766520616e642061646f7265206269626f7320746f6461792e3c6d7061746820786c696e6b3a687265663d22236269626f2d6a69747465722d6c6722202f3e4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa26469706673582212209089e989316e715acd65d4c221c17de33cda87aff46c02299d087d013905338e64736f6c634300080d0033

Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.