ETH Price: $2,215.59 (+5.62%)
Gas: 0.68 Gwei

Token

ERC20 ***
 

Overview

Max Total Supply

1,016.32637129812435568 ERC20 ***

Holders

1

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 ERC20 ***

Value
$0.00
0x54e324219979c0d1e9a895122edaaaa3c02cb6b4
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# 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.

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x814A9072...Fa959CeB1
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Curve

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion, MIT license
File 1 of 30 : Curve.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
// 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.8.13;
pragma experimental ABIEncoderV2;
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "./interfaces/IWeth.sol";
import "./interfaces/IAssimilatorFactory.sol";
import "./lib/ABDKMath64x64.sol";
import "./lib/FullMath.sol";
import "./lib/NoDelegateCall.sol";
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 2 of 30 : SafeERC20.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
// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol)
pragma solidity ^0.8.0;
import "../IERC20.sol";
import "../extensions/IERC20Permit.sol";
import "../../../utils/Address.sol";
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 3 of 30 : IERC20.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
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 4 of 30 : IWeth.sol
1
2
3
4
5
6
7
8
9
10
11
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
interface IWETH {
function deposit() external payable;
function transfer(address to, uint256 value) external returns (bool);
function withdraw(uint256) external;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 5 of 30 : IAssimilatorFactory.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
// 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.8.13;
import "../assimilators/AssimilatorV3.sol";
import "../interfaces/IOracle.sol";
interface IAssimilatorFactory {
function getAssimilator(address _token, address _quote) external view returns (AssimilatorV3);
function newAssimilator(address _quote, IOracle _oracle, address _token, uint256 _tokenDecimals)
external
returns (AssimilatorV3);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 6 of 30 : ABDKMath64x64.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: BSD-4-Clause
/*
* ABDK Math 64.64 Smart Contract Library. Copyright © 2019 by ABDK Consulting.
* Author: Mikhail Vladimirov <mikhail.vladimirov@gmail.com>
*/
pragma solidity ^0.8.13;
/**
* Smart contract library of mathematical functions operating with signed
* 64.64-bit fixed point numbers. Signed 64.64-bit fixed point number is
* basically a simple fraction whose numerator is signed 128-bit integer and
* denominator is 2^64. As long as denominator is always the same, there is no
* need to store it, thus in Solidity signed 64.64-bit fixed point numbers are
* represented by int128 type holding only the numerator.
*/
library ABDKMath64x64 {
/*
* Minimum value signed 64.64-bit fixed point number may have.
*/
int128 private constant MIN_64x64 = -0x80000000000000000000000000000000;
/*
* Maximum value signed 64.64-bit fixed point number may have.
*/
int128 private constant MAX_64x64 = 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 7 of 30 : FullMath.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 Contains 512-bit math functions
/// @notice Facilitates multiplication and division that can have overflow of an intermediate value without any loss of precision
/// @dev Handles "phantom overflow" i.e., allows multiplication and division where an intermediate value overflows 256 bits
library FullMath {
/// @notice Calculates floor(a×b÷denominator) with full precision. Throws if result overflows a uint256 or denominator == 0
/// @param a The multiplicand
/// @param b The multiplier
/// @param denominator The divisor
/// @return result The 256-bit result
/// @dev Credit to Remco Bloemen under MIT license https://xn--2-umb.com/21/muldiv
function mulDiv(uint256 a, uint256 b, uint256 denominator) internal pure returns (uint256 result) {
unchecked {
// 512-bit multiply [prod1 prod0] = a * b
// Compute the product mod 2**256 and mod 2**256 - 1
// then use the Chinese Remainder Theorem to reconstruct
// the 512 bit result. The result is stored in two 256
// variables such that product = prod1 * 2**256 + prod0
uint256 prod0; // Least significant 256 bits of the product
uint256 prod1; // Most significant 256 bits of the product
assembly {
let mm := mulmod(a, b, not(0))
prod0 := mul(a, b)
prod1 := sub(sub(mm, prod0), lt(mm, prod0))
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 8 of 30 : NoDelegateCall.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: BUSL-1.1
pragma solidity ^0.8.13;
/// @title Prevents delegatecall to a contract
/// @notice Base contract that provides a modifier for preventing delegatecall to methods in a child contract
abstract contract NoDelegateCall {
/// @dev The original address of this contract
address private immutable original;
constructor() {
// Immutables are computed in the init code of the contract, and then inlined into the deployed bytecode.
// In other words, this variable won't change when it's checked at runtime.
original = address(this);
}
/// @dev Private method is used instead of inlining into modifier because modifiers are copied into each method,
/// and the use of immutable means the address bytes are copied in every place the modifier is used.
function checkNotDelegateCall() private view {
require(address(this) == original);
}
/// @notice Prevents delegatecall into the modified method
modifier noDelegateCall() {
checkNotDelegateCall();
_;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 9 of 30 : Orchestrator.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
// 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.8.13;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "./lib/ABDKMath64x64.sol";
import "./Storage.sol";
import "./CurveMath.sol";
library Orchestrator {
using SafeERC20 for IERC20;
using ABDKMath64x64 for int128;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 10 of 30 : ProportionalLiquidity.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.13;
import "@openzeppelin/contracts/utils/math/SafeMath.sol";
import "./Assimilators.sol";
import "./Storage.sol";
import "./lib/UnsafeMath64x64.sol";
import "./lib/ABDKMath64x64.sol";
import "./CurveMath.sol";
import "./Structs.sol";
import "./interfaces/IAssimilator.sol";
import "./interfaces/ICurve.sol";
library ProportionalLiquidity {
using ABDKMath64x64 for uint256;
using ABDKMath64x64 for int128;
using UnsafeMath64x64 for int128;
using SafeMath for uint256;
event Transfer(address indexed from, address indexed to, uint256 value);
int128 public constant ONE = 0x10000000000000000;
int128 public constant ONE_WEI = 0x12;
function proportionalDeposit(Storage.Curve storage curve, DepositData memory depositData)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 11 of 30 : Swaps.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.13;
pragma experimental ABIEncoderV2;
import "@openzeppelin/contracts/utils/math/SafeMath.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "./Structs.sol";
import "./Assimilators.sol";
import "./Storage.sol";
import "./CurveMath.sol";
import "./lib/UnsafeMath64x64.sol";
import "./lib/ABDKMath64x64.sol";
library Swaps {
using ABDKMath64x64 for int128;
using ABDKMath64x64 for int256;
using UnsafeMath64x64 for int128;
using ABDKMath64x64 for uint256;
using SafeMath for uint256;
event Trade(
address indexed trader,
address indexed origin,
address indexed target,
uint256 originAmount,
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 12 of 30 : ViewLiquidity.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
// 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.8.13;
import "./Storage.sol";
import "./Assimilators.sol";
import "./lib/ABDKMath64x64.sol";
library ViewLiquidity {
using ABDKMath64x64 for int128;
function viewLiquidity(Storage.Curve storage curve)
external
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 13 of 30 : Storage.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
// 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.8.13;
import "./interfaces/IOracle.sol";
import "./Assimilators.sol";
contract Storage {
struct Curve {
// Curve parameters
int128 alpha;
int128 beta;
int128 delta;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 14 of 30 : ICurveFactory.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
import "./IAssimilatorFactory.sol";
interface ICurveFactory {
function getProtocolFee() external view returns (int128);
function getProtocolTreasury() external view returns (address);
function assimilatorFactory() external view returns (IAssimilatorFactory);
function wETH() external view returns (address);
function isDFXCurve(address) external view returns (bool);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 15 of 30 : IAssimilator.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
// 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.8.13;
interface IAssimilator {
function oracleDecimals() external view returns (uint256);
function underlyingToken() external view returns (address);
function getWeth() external view returns (address);
function tokenDecimals() external view returns (uint256);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 16 of 30 : ICurve.sol
1
2
3
4
5
6
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
interface ICurve {
function getWeth() external view returns (address);
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 17 of 30 : IConfig.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
interface IConfig {
function getGlobalFrozenState() external view returns (bool);
function getProtocolFee() external view returns (int128);
function getProtocolTreasury() external view returns (address);
function setGlobalFrozen(bool) external;
function updateProtocolTreasury(address) external;
function updateProtocolFee(int128) external;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 18 of 30 : Structs.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.13;
import "./interfaces/ICurveFactory.sol";
import "./interfaces/IOracle.sol";
struct OriginSwapData {
address _origin;
address _target;
uint256 _originAmount;
address _recipient;
address _curveFactory;
}
struct TargetSwapData {
address _origin;
address _target;
uint256 _targetAmount;
address _recipient;
address _curveFactory;
}
struct SwapInfo {
int128 totalAmount;
int128 totalFee;
int128 amountToUser;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 19 of 30 : IERC20Permit.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
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Permit.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
* https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
*
* Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
* presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
* need to send a transaction, and thus is not required to hold Ether at all.
*/
interface IERC20Permit {
/**
* @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
* given ``owner``'s signed approval.
*
* IMPORTANT: The same issues {IERC20-approve} has related to transaction
* ordering also apply here.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `spender` cannot be the zero address.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 20 of 30 : Address.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
// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
*
* Furthermore, `isContract` will also return true if the target contract within
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 21 of 30 : AssimilatorV3.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
// 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.8.13;
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
import "@openzeppelin/contracts/utils/math/SafeMath.sol";
import "@openzeppelin/contracts/utils/math/Math.sol";
import "../lib/ABDKMath64x64.sol";
import "../interfaces/IAssimilator.sol";
import "../interfaces/IOracle.sol";
import "../interfaces/IWeth.sol";
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 22 of 30 : IOracle.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
// 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.8.13;
interface IOracle {
function acceptOwnership() external;
function accessController() external view returns (address);
function aggregator() external view returns (address);
function confirmAggregator(address _aggregator) external;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 23 of 30 : ERC20.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
// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.0;
import "./IERC20.sol";
import "./extensions/IERC20Metadata.sol";
import "../../utils/Context.sol";
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* The default value of {decimals} is 18. To change this, you should override
* this function so it returns a different value.
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 24 of 30 : CurveMath.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
// 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.8.13;
import "./Storage.sol";
import "./lib/UnsafeMath64x64.sol";
import "./lib/ABDKMath64x64.sol";
library CurveMath {
int128 private constant ONE = 0x10000000000000000;
int128 private constant MAX = 0x4000000000000000; // .25 in layman's terms
int128 private constant MAX_DIFF = -0x10C6F7A0B5EE;
int128 private constant ONE_WEI = 0x12;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 25 of 30 : SafeMath.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
// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)
pragma solidity ^0.8.0;
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
* now has built in overflow checking.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 26 of 30 : Assimilators.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
// 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.8.13;
import "@openzeppelin/contracts/utils/Address.sol";
import "./interfaces/IAssimilator.sol";
import "./lib/ABDKMath64x64.sol";
import "./Structs.sol";
library Assimilators {
using ABDKMath64x64 for int128;
using Address for address;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 27 of 30 : UnsafeMath64x64.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.13;
library UnsafeMath64x64 {
/**
* Calculate x * y rounding down.
*
* @param x signed 64.64-bit fixed point number
* @param y signed 64.64-bit fixed point number
* @return signed 64.64-bit fixed point number
*/
function us_mul(int128 x, int128 y) internal pure returns (int128) {
int256 result = int256(x) * y >> 64;
return int128(result);
}
/**
* Calculate x / y rounding towards zero. Revert on overflow or when y is
* zero.
*
* @param x signed 64.64-bit fixed point number
* @param y signed 64.64-bit fixed point number
* @return signed 64.64-bit fixed point number
*/
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 28 of 30 : IERC20Metadata.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
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.0;
import "../IERC20.sol";
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 29 of 30 : Math.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
// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)
pragma solidity ^0.8.0;
/**
* @dev Standard math utilities missing in the Solidity language.
*/
library Math {
enum Rounding {
Down, // Toward negative infinity
Up, // Toward infinity
Zero // Toward zero
}
/**
* @dev Returns the largest of two numbers.
*/
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a > b ? a : b;
}
/**
* @dev Returns the smallest of two numbers.
*/
function min(uint256 a, uint256 b) internal pure returns (uint256) {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 30 of 30 : Context.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: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
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": [
"@openzeppelin/=lib/openzeppelin-contracts/",
"@forge-std/=lib/forge-std/src/",
"ds-test/=lib/forge-std/lib/ds-test/src/",
"forge-std/=lib/forge-std/src/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"abi"
]
}
},
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address[]","name":"_assets","type":"address[]"},{"internalType":"uint256[]","name":"_assetWeights","type":"uint256[]"},{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_config","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"numeraire","type":"address"},{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"uint256","name":"weight","type":"uint256"}],"name":"AssetIncluded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"derivative","type":"address"},{"indexed":true,"internalType":"address","name":"numeraire","type":"address"},{"indexed":true,"internalType":"address","name":"reserve","type":"address"},{"indexed":false,"internalType":"address","name":"assimilator","type":"address"}],"name":"AssimilatorIncluded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isEmergency","type":"bool"}],"name":"EmergencyAlarm","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isFrozen","type":"bool"}],"name":"FrozenSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransfered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"alpha","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"beta","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"delta","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"epsilon","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lambda","type":"uint256"}],"name":"ParametersSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"redeemer","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"PartitionRedeemed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"trader","type":"address"},{"indexed":true,"internalType":"address","name":"origin","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"uint256","name":"originAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"targetAmount","type":"uint256"},{"indexed":false,"internalType":"int128","name":"rawProtocolFee","type":"int128"}],"name":"Trade","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"allowance_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"success_","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_derivative","type":"address"}],"name":"assimilator","outputs":[{"internalType":"address","name":"assimilator_","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"curve","outputs":[{"internalType":"int128","name":"alpha","type":"int128"},{"internalType":"int128","name":"beta","type":"int128"},{"internalType":"int128","name":"delta","type":"int128"},{"internalType":"int128","name":"epsilon","type":"int128"},{"internalType":"int128","name":"lambda","type":"int128"},{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deposit","type":"uint256"},{"internalType":"uint256","name":"_minQuoteAmount","type":"uint256"},{"internalType":"uint256","name":"_minBaseAmount","type":"uint256"},{"internalType":"uint256","name":"_maxQuoteAmount","type":"uint256"},{"internalType":"uint256","name":"_maxBaseAmount","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"curvesMinted_","type":"uint256"},{"internalType":"uint256[]","name":"deposits_","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deposit","type":"uint256"},{"internalType":"uint256","name":"_minQuoteAmount","type":"uint256"},{"internalType":"uint256","name":"_minBaseAmount","type":"uint256"},{"internalType":"uint256","name":"_maxQuoteAmount","type":"uint256"},{"internalType":"uint256","name":"_maxBaseAmount","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"depositETH","outputs":[{"internalType":"uint256","name":"curvesMinted_","type":"uint256"},{"internalType":"uint256[]","name":"deposits_","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"derivatives","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergency","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_curvesToBurn","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"emergencyWithdraw","outputs":[{"internalType":"uint256[]","name":"withdrawals_","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_derivative","type":"address"}],"name":"excludeDerivative","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"frozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getWeth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidity","outputs":[{"internalType":"uint256","name":"total_","type":"uint256"},{"internalType":"uint256[]","name":"individual_","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notEntered","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"numeraires","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_origin","type":"address"},{"internalType":"address","name":"_target","type":"address"},{"internalType":"uint256","name":"_originAmount","type":"uint256"},{"internalType":"uint256","name":"_minTargetAmount","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"originSwap","outputs":[{"internalType":"uint256","name":"targetAmount_","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_target","type":"address"},{"internalType":"uint256","name":"_minTargetAmount","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"originSwapFromETH","outputs":[{"internalType":"uint256","name":"targetAmount_","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_origin","type":"address"},{"internalType":"uint256","name":"_originAmount","type":"uint256"},{"internalType":"uint256","name":"_minTargetAmount","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"originSwapToETH","outputs":[{"internalType":"uint256","name":"targetAmount_","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserves","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_baseCurrency","type":"address"},{"internalType":"address","name":"_baseAssim","type":"address"},{"internalType":"address","name":"_quoteCurrency","type":"address"},{"internalType":"address","name":"_quoteAssim","type":"address"}],"name":"setAssimilator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_emergency","type":"bool"}],"name":"setEmergency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_toFreezeOrNotToFreeze","type":"bool"}],"name":"setFrozen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_alpha","type":"uint256"},{"internalType":"uint256","name":"_beta","type":"uint256"},{"internalType":"uint256","name":"_feeAtHalt","type":"uint256"},{"internalType":"uint256","name":"_epsilon","type":"uint256"},{"internalType":"uint256","name":"_lambda","type":"uint256"}],"name":"setParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"_interface","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"supports_","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_origin","type":"address"},{"internalType":"address","name":"_target","type":"address"},{"internalType":"uint256","name":"_maxOriginAmount","type":"uint256"},{"internalType":"uint256","name":"_targetAmount","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"targetSwap","outputs":[{"internalType":"uint256","name":"originAmount_","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"totalSupply_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success_","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"success_","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"viewCurve","outputs":[{"internalType":"uint256","name":"alpha_","type":"uint256"},{"internalType":"uint256","name":"beta_","type":"uint256"},{"internalType":"uint256","name":"delta_","type":"uint256"},{"internalType":"uint256","name":"epsilon_","type":"uint256"},{"internalType":"uint256","name":"lambda_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deposit","type":"uint256"}],"name":"viewDeposit","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_origin","type":"address"},{"internalType":"address","name":"_target","type":"address"},{"internalType":"uint256","name":"_originAmount","type":"uint256"}],"name":"viewOriginSwap","outputs":[{"internalType":"uint256","name":"targetAmount_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_origin","type":"address"},{"internalType":"address","name":"_target","type":"address"},{"internalType":"uint256","name":"_targetAmount","type":"uint256"}],"name":"viewTargetSwap","outputs":[{"internalType":"uint256","name":"originAmount_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_curvesToBurn","type":"uint256"}],"name":"viewWithdraw","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_curvesToBurn","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"withdraw","outputs":[{"internalType":"uint256[]","name":"withdrawals_","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_curvesToBurn","type":"uint256"},{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"withdrawETH","outputs":[{"internalType":"uint256[]","name":"withdrawals_","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526010805462ffffff1916620100001790553480156200002257600080fd5b506040516200491d3803806200491d83398101604081905262000045916200043b565b306080526001600160a01b038216620000ae5760405162461bcd60e51b815260206004820152602160248201527f43757276652f637572766520666163746f7279207a65726f20616464726573736044820152602160f81b606482015260840160405180910390fd5b600a80546001600160a01b03191633179055600b620000ce8782620005a7565b50600c620000dd8682620005a7565b50601080546301000000600160b81b03191663010000006001600160a01b038581169190910291909117909155601180546001600160a01b03191691831691909117905560405133906000907f0d18b5fd22306e373229b9439188228edca81207d1667f604daf6cef8aa3ee67908290a3816001600160a01b031663f24286216040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200018d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001b3919062000673565b6001600160a01b031660a052604051635931eef160e11b8152731190da269ffe6f4567fed0c3c9bba01f883722549063b263dde2906200020690600090600e90600f90600d908b908b9060040162000698565b60006040518083038186803b1580156200021f57600080fd5b505af415801562000234573d6000803e3d6000fd5b5050505050505050505062000740565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562000285576200028562000244565b604052919050565b600082601f8301126200029f57600080fd5b81516001600160401b03811115620002bb57620002bb62000244565b6020620002d1601f8301601f191682016200025a565b8281528582848701011115620002e657600080fd5b60005b8381101562000306578581018301518282018401528201620002e9565b506000928101909101919091529392505050565b60006001600160401b0382111562000336576200033662000244565b5060051b60200190565b80516001600160a01b03811681146200035857600080fd5b919050565b600082601f8301126200036f57600080fd5b815160206200038862000382836200031a565b6200025a565b82815260059290921b84018101918181019086841115620003a857600080fd5b8286015b84811015620003ce57620003c08162000340565b8352918301918301620003ac565b509695505050505050565b600082601f830112620003eb57600080fd5b81516020620003fe62000382836200031a565b82815260059290921b840181019181810190868411156200041e57600080fd5b8286015b84811015620003ce578051835291830191830162000422565b60008060008060008060c087890312156200045557600080fd5b86516001600160401b03808211156200046d57600080fd5b6200047b8a838b016200028d565b975060208901519150808211156200049257600080fd5b620004a08a838b016200028d565b96506040890151915080821115620004b757600080fd5b620004c58a838b016200035d565b95506060890151915080821115620004dc57600080fd5b50620004eb89828a01620003d9565b935050620004fc6080880162000340565b91506200050c60a0880162000340565b90509295509295509295565b600181811c908216806200052d57607f821691505b6020821081036200054e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620005a257600081815260208120601f850160051c810160208610156200057d5750805b601f850160051c820191505b818110156200059e5782815560010162000589565b5050505b505050565b81516001600160401b03811115620005c357620005c362000244565b620005db81620005d4845462000518565b8462000554565b602080601f831160018114620006135760008415620005fa5750858301515b600019600386901b1c1916600185901b1785556200059e565b600085815260208120601f198616915b82811015620006445788860151825594840194600190910190840162000623565b5085821015620006635787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200068657600080fd5b620006918262000340565b9392505050565b600060c082018883526020888185015287604085015286606085015260c0608085015281865180845260e086019150828801935060005b81811015620006f65784516001600160a01b031683529383019391830191600101620006cf565b505084810360a0860152855180825290820192508186019060005b818110156200072f5782518552938301939183019160010162000711565b50929b9a5050505050505050505050565b60805160a051614171620007ac6000396000818161034601528181611352015281816113d0015281816116400152818161172e0152818161185b01528181611899015281816120de0152818161214d0152818161218d0152613103015260006134b301526141716000f3fe60806040526004361061024a5760003560e01c806370a0823111610139578063a8e9d528116100b6578063caa6fea41161007a578063caa6fea41461078e578063d828bb88146107ad578063dd62ed3e146107cd578063de3e2e2414610813578063e5cf8a5c14610833578063f2fde38b1461085357600080fd5b8063a8e9d528146106ee578063a9059cbb1461070e578063c0046e391461072e578063c7cdea371461074e578063c912ff7a1461076e57600080fd5b80638334278d116100fd5780638334278d14610659578063838e6a22146106795780638da5cb5b1461069957806395d89b41146106b9578063a3f5d8cc146106ce57600080fd5b806370a08231146105465780637165485d1461057c57806372b4129a146105f957806379a390a5146106195780637e932d321461063957600080fd5b806323b872dd116101c7578063525d0da71161018b578063525d0da7146104965780635872278a146104b6578063595520c7146104d65780636919ba27146105135780636f2ef95b1461052657600080fd5b806323b872dd146103e3578063313ce567146104035780633cae77f71461042a578063441a3e70146104635780634fe5da711461048357600080fd5b80630b2583c81161020e5780630b2583c814610309578063107c279f1461033757806318160ddd1461037e5780631a686502146103935780631f276b6e146103b657600080fd5b806301ffc9a7146102565780630501d5561461028b578063054f7d9c146102ad57806306fdde03146102c7578063095ea7b3146102e957600080fd5b3661025157005b600080fd5b34801561026257600080fd5b50610276610271366004613801565b610873565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b506102ab6102a636600461383c565b6108c5565b005b3480156102b957600080fd5b506010546102769060ff1681565b3480156102d357600080fd5b506102dc6109d9565b604051610282919061387d565b3480156102f557600080fd5b506102766103043660046138c5565b610a67565b34801561031557600080fd5b506103296103243660046138f1565b610b49565b604051908152602001610282565b34801561034357600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b6040516001600160a01b039091168152602001610282565b34801561038a57600080fd5b50600754610329565b34801561039f57600080fd5b506103a8610e70565b60405161028292919061397d565b3480156103c257600080fd5b506103d66103d1366004613996565b610ef6565b60405161028291906139b8565b3480156103ef57600080fd5b506102766103fe3660046139cb565b61101d565b34801561040f57600080fd5b50610418601281565b60405160ff9091168152602001610282565b34801561043657600080fd5b50610366610445366004613a0c565b6001600160a01b039081166000908152600560205260409020541690565b34801561046f57600080fd5b506103d661047e366004613996565b61112f565b6103a8610491366004613a29565b6111b5565b3480156104a257600080fd5b506103296104b13660046139cb565b6119b8565b3480156104c257600080fd5b506103a86104d1366004613a29565b611b01565b3480156104e257600080fd5b506104eb611ef3565b604080519586526020860194909452928401919091526060830152608082015260a001610282565b610329610521366004613a6c565b611f87565b34801561053257600080fd5b506103a8610541366004613aa1565b61228b565b34801561055257600080fd5b50610329610561366004613a0c565b6001600160a01b031660009081526008602052604090205490565b34801561058857600080fd5b506000546001546002546007546105bc93600f81810b94600160801b92839004820b9481830b9493909104820b92910b9086565b60408051600f97880b815295870b602087015293860b9385019390935290840b606084015290920b608082015260a081019190915260c001610282565b34801561060557600080fd5b506103296106143660046138f1565b6124de565b34801561062557600080fd5b506102ab610634366004613aba565b61273f565b34801561064557600080fd5b506102ab61065436600461383c565b61288b565b34801561066557600080fd5b50610366610674366004613aa1565b61298f565b34801561068557600080fd5b506103296106943660046139cb565b6129b9565b3480156106a557600080fd5b50600a54610366906001600160a01b031681565b3480156106c557600080fd5b506102dc612abd565b3480156106da57600080fd5b506010546102769062010000900460ff1681565b3480156106fa57600080fd5b50610366610709366004613aa1565b612aca565b34801561071a57600080fd5b506102766107293660046138c5565b612ada565b34801561073a57600080fd5b50610366610749366004613aa1565b612b8f565b34801561075a57600080fd5b506103d6610769366004613996565b612b9f565b34801561077a57600080fd5b506102ab610789366004613a0c565b612c6b565b34801561079a57600080fd5b5060105461027690610100900460ff1681565b3480156107b957600080fd5b506102ab6107c8366004613b16565b612e62565b3480156107d957600080fd5b506103296107e8366004613b51565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b34801561081f57600080fd5b5061032961082e366004613b8a565b612fab565b34801561083f57600080fd5b506103d661084e366004613aa1565b6131fe565b34801561085f57600080fd5b506102ab61086e366004613a0c565b61332b565b60006301ffc9a760e01b6001600160e01b0319831614806108a457506307f5828d60e41b6001600160e01b03198316145b806108bf57506336372b0760e01b6001600160e01b03198316145b92915050565b600a546001600160a01b03163314806109655750601160009054906101000a90046001600160a01b03166001600160a01b0316639611f3d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109509190613bc5565b6001600160a01b0316336001600160a01b0316145b61098a5760405162461bcd60e51b815260040161098190613be2565b60405180910390fd5b60405181151581527fa44450e52bea871e50cfee059fbe027c26ff43fd7534c06b7de61d90b58ab3c19060200160405180910390a1601080549115156101000261ff0019909216919091179055565b600b80546109e690613c19565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1290613c19565b8015610a5f5780601f10610a3457610100808354040283529160200191610a5f565b820191906000526020600020905b815481529060010190602001808311610a4257829003601f168201915b505050505081565b60105460009062010000900460ff16610a925760405162461bcd60e51b815260040161098190613c53565b6010805462ff000019169055610aa66134a8565b60405163e60ac42960e01b8152600060048201526001600160a01b0384166024820152604481018390527385e9690c2d4c6cae31d96f9b5afe6d111d1651579063e60ac429906064015b602060405180830381865af4158015610b0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b319190613c7d565b6010805462ff00001916620100001790559392505050565b600081804210610b6b5760405162461bcd60e51b815260040161098190613c9a565b601160009054906101000a90046001600160a01b03166001600160a01b0316636a8e1cd06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be29190613c7d565b15610bff5760405162461bcd60e51b815260040161098190613cd1565b60105460ff1615610c225760405162461bcd60e51b815260040161098190613d2e565b610c2a6134a8565b601054610100900460ff1615610c525760405162461bcd60e51b815260040161098190613d7e565b60105462010000900460ff16610c7a5760405162461bcd60e51b815260040161098190613c53565b6010805462ff00001916908190556040805160a0810182526001600160a01b038a8116825289811660208084018290528385018b905233606085018190526301000000909604909216608084015283516370a0823160e01b8152600481019590955292519193600093926370a08231926024808401939192918290030181865afa158015610d0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d309190613ddb565b60405163fd17568b60e01b81529091507374982d2fd25ca0e0dee702e40affd93bae04d3a69063fd17568b90610d6f9060009086908290600401613e31565b602060405180830381865af4158015610d8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db09190613ddb565b5060608201516040516370a0823160e01b81526001600160a01b0391821660048201526000918a16906370a0823190602401602060405180830381865afa158015610dff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e239190613ddb565b9050610e2f8282613e6b565b945086851015610e515760405162461bcd60e51b815260040161098190613e7e565b50506010805462ff000019166201000017905550909695505050505050565b604051633745793960e11b815260006004820181905290606090731134daeaa652e11360631e3cc93e688204d9354b90636e8af27290602401600060405180830381865af4158015610ec6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610eee9190810190613f5b565b915091509091565b601054606090610100900460ff16610f205760405162461bcd60e51b815260040161098190613d7e565b81804210610f405760405162461bcd60e51b815260040161098190613c9a565b60105462010000900460ff16610f685760405162461bcd60e51b815260040161098190613c53565b6010805462ff000019169055610f7c6134a8565b60405163eaadf2b560e01b8152600060048201819052602482018690526044820152730a7e79b7a4912ea42f82e25b9c033919b97f6fb09063eaadf2b5906064015b600060405180830381865af4158015610fdb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110039190810190613fa2565b9150506010805462ff000019166201000017905592915050565b60105460009062010000900460ff166110485760405162461bcd60e51b815260040161098190613c53565b6010805462ff00001916905561105c6134a8565b601054610100900460ff16156110845760405162461bcd60e51b815260040161098190613d7e565b6040516303a90f6960e31b8152600060048201526001600160a01b03808616602483015284166044820152606481018390527385e9690c2d4c6cae31d96f9b5afe6d111d16515790631d487b4890608401602060405180830381865af41580156110f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111169190613c7d565b6010805462ff0000191662010000179055949350505050565b6060818042106111515760405162461bcd60e51b815260040161098190613c9a565b60105462010000900460ff166111795760405162461bcd60e51b815260040161098190613c53565b6010805462ff00001916905561118d6134a8565b601054610100900460ff1615610f7c5760405162461bcd60e51b815260040161098190613d7e565b60006060828042106111d95760405162461bcd60e51b815260040161098190613c9a565b601160009054906101000a90046001600160a01b03166001600160a01b0316636a8e1cd06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561122c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112509190613c7d565b1561126d5760405162461bcd60e51b815260040161098190613cd1565b60105460ff16156112905760405162461bcd60e51b815260040161098190613d2e565b60105462010000900460ff166112b85760405162461bcd60e51b815260040161098190613c53565b6010805462ff0000191690556112cc6134a8565b601054610100900460ff16156112f45760405162461bcd60e51b815260040161098190613d7e565b6000891161133f5760405162461bcd60e51b815260206004820152601860248201527743757276652f6465706f7369745f62656c6f775f7a65726f60401b6044820152606401610981565b6113488961228b565b80935081945050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156113ab57600080fd5b505af11580156113bf573d6000803e3d6000fd5b506113fc9350506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016915030905033346134df565b6114046137a5565b89815260208101899052604081018890526080810187905260a081018690528251839060009061143657611436613fd7565b60200260200101518160c00181815250508260018151811061145a5761145a613fd7565b6020026020010151816060018181525050600f60008154811061147f5761147f613fd7565b60009182526020822001546001600160a01b031660e0830152600f80549091906114ab576114ab613fd7565b6000918252602090912001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156114fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115209190613ddb565b610100820152600f8054600190811061153b5761153b613fd7565b6000918252602090912001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561158c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b09190613ddb565b610120820152604051629d2ea960e41b8152730a7e79b7a4912ea42f82e25b9c033919b97f6fb0906309d2ea90906115ef906000908590600401613fed565b600060405180830381865af415801561160c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116349190810190613f5b565b809450819550505060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316600060040160008154811061167f5761167f613fd7565b6000918252602091829020015460408051632495a59960e01b815290516001600160a01b0390921692632495a599926004808401938290030181865afa1580156116cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f19190613bc5565b6001600160a01b03160361172c578360008151811061171257611712613fd7565b6020026020010151346117259190613e6b565b9050611848565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316600060040160018154811061176d5761176d613fd7565b6000918252602091829020015460408051632495a59960e01b815290516001600160a01b0390921692632495a599926004808401938290030181865afa1580156117bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117df9190613bc5565b6001600160a01b031603611800578360018151811061171257611712613fd7565b60405162461bcd60e51b815260206004820152601860248201527f43757276652f4465706f73697420455448206661696c656400000000000000006044820152606401610981565b8015611997576118836001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163330846134df565b604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156118e557600080fd5b505af11580156118f9573d6000803e3d6000fd5b50506040516000925033915083908381818185875af1925050503d806000811461193f576040519150601f19603f3d011682016040523d82523d6000602084013e611944565b606091505b50509050806119955760405162461bcd60e51b815260206004820152601960248201527f43757276652f455448207472616e73666572206661696c6564000000000000006044820152606401610981565b505b5050506010805462ff00001916620100001790559097909650945050505050565b601154604080516306a8e1cd60e41b815290516000926001600160a01b031691636a8e1cd09160048083019260209291908290030181865afa158015611a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a269190613c7d565b15611a435760405162461bcd60e51b815260040161098190613cd1565b60105460ff1615611a665760405162461bcd60e51b815260040161098190613d2e565b6040516315be82e960e21b8152600060048201526001600160a01b03808616602483015284166044820152606481018390527374982d2fd25ca0e0dee702e40affd93bae04d3a6906356fa0ba4906084015b602060405180830381865af4158015611ad5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af99190613ddb565b949350505050565b6000606082804210611b255760405162461bcd60e51b815260040161098190613c9a565b601160009054906101000a90046001600160a01b03166001600160a01b0316636a8e1cd06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9c9190613c7d565b15611bb95760405162461bcd60e51b815260040161098190613cd1565b60105460ff1615611bdc5760405162461bcd60e51b815260040161098190613d2e565b60105462010000900460ff16611c045760405162461bcd60e51b815260040161098190613c53565b6010805462ff000019169055611c186134a8565b601054610100900460ff1615611c405760405162461bcd60e51b815260040161098190613d7e565b60008911611c8b5760405162461bcd60e51b815260206004820152601860248201527743757276652f6465706f7369745f62656c6f775f7a65726f60401b6044820152606401610981565b611c948961228b565b9093509150611ca16137a5565b89815260208101899052604081018890526080810187905260a0810186905282518390600090611cd357611cd3613fd7565b60200260200101518160c001818152505082600181518110611cf757611cf7613fd7565b6020026020010151816060018181525050600f600081548110611d1c57611d1c613fd7565b60009182526020822001546001600160a01b031660e0830152600f8054909190611d4857611d48613fd7565b6000918252602090912001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611d99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbd9190613ddb565b610100820152600f80546001908110611dd857611dd8613fd7565b6000918252602090912001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611e29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4d9190613ddb565b610120820152604051629d2ea960e41b8152730a7e79b7a4912ea42f82e25b9c033919b97f6fb0906309d2ea9090611e8c906000908590600401613fed565b600060405180830381865af4158015611ea9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ed19190810190613f5b565b6010805462ff0000191662010000179055909b909a5098505050505050505050565b6000806000806000731190da269ffe6f4567fed0c3c9bba01f8837225463faa50b5d60006040518263ffffffff1660e01b8152600401611f3591815260200190565b60a060405180830381865af4158015611f52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f769190614079565b945094509450945094509091929394565b600081804210611fa95760405162461bcd60e51b815260040161098190613c9a565b601160009054906101000a90046001600160a01b03166001600160a01b0316636a8e1cd06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ffc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120209190613c7d565b1561203d5760405162461bcd60e51b815260040161098190613cd1565b60105460ff16156120605760405162461bcd60e51b815260040161098190613d2e565b6120686134a8565b601054610100900460ff16156120905760405162461bcd60e51b815260040161098190613d7e565b60105462010000900460ff166120b85760405162461bcd60e51b815260040161098190613c53565b6010805462ff00001916905560408051630d0e30db60e41b815290516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163d0e30db091349160048082019260009290919082900301818588803b15801561212857600080fd5b505af115801561213c573d6000803e3d6000fd5b506121799350506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016915030905033346134df565b6040805160a0810182526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811682528781166020830152348284015233606083015260105463010000009004166080820152905163fd17568b60e01b81527374982d2fd25ca0e0dee702e40affd93bae04d3a69063fd17568b9061220e9060009085908290600401613e31565b602060405180830381865af415801561222b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224f9190613ddb565b9250848310156122715760405162461bcd60e51b815260040161098190613e7e565b50506010805462ff00001916620100001790559392505050565b60006060601160009054906101000a90046001600160a01b03166001600160a01b0316636a8e1cd06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123069190613c7d565b156123235760405162461bcd60e51b815260040161098190613cd1565b60105460ff16156123465760405162461bcd60e51b815260040161098190613d2e565b604080516002808252606082018352600092839291906020830190803683370190505060405163822f39d560e01b81526000600482015260248101879052909150730a7e79b7a4912ea42f82e25b9c033919b97f6fb09063822f39d590604401600060405180830381865af41580156123c3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123eb9190810190613f5b565b909250905060008261240c876ec097ce7bc90715b34b9f10000000006140b9565b61241691906140d0565b90506ec097ce7bc90715b34b9f1000000000818360008151811061243c5761243c613fd7565b602002602001015161244e91906140b9565b61245891906140d0565b8260008151811061246b5761246b613fd7565b6020026020010181815250506ec097ce7bc90715b34b9f1000000000818360018151811061249b5761249b613fd7565b60200260200101516124ad91906140b9565b6124b791906140d0565b826001815181106124ca576124ca613fd7565b602090810291909101015250939492505050565b6000818042106125005760405162461bcd60e51b815260040161098190613c9a565b601160009054906101000a90046001600160a01b03166001600160a01b0316636a8e1cd06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125779190613c7d565b156125945760405162461bcd60e51b815260040161098190613cd1565b60105460ff16156125b75760405162461bcd60e51b815260040161098190613d2e565b6125bf6134a8565b601054610100900460ff16156125e75760405162461bcd60e51b815260040161098190613d7e565b60105462010000900460ff1661260f5760405162461bcd60e51b815260040161098190613c53565b6010805462ff00001916908190556040805160a0810182526001600160a01b038a811682528981166020830152818301889052336060830152630100000090930490921660808301525163498e2a2560e11b81527374982d2fd25ca0e0dee702e40affd93bae04d3a69063931c544a906126909060009085906004016140f2565b602060405180830381865af41580156126ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d19190613ddb565b9250858311156127235760405162461bcd60e51b815260206004820152601d60248201527f43757276652f61626f76652d6d61782d6f726967696e2d616d6f756e740000006044820152606401610981565b50506010805462ff000019166201000017905595945050505050565b600a546001600160a01b03163314806127df5750601160009054906101000a90046001600160a01b03166001600160a01b0316639611f3d96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ca9190613bc5565b6001600160a01b0316336001600160a01b0316145b6127fb5760405162461bcd60e51b815260040161098190613be2565b604051632e6ce08560e11b8152600060048201526001600160a01b0380861660248301528085166044830152808416606483015282166084820152731190da269ffe6f4567fed0c3c9bba01f8837225490635cd9c10a9060a40160006040518083038186803b15801561286d57600080fd5b505af4158015612881573d6000803e3d6000fd5b5050505050505050565b600a546001600160a01b031633148061292b5750601160009054906101000a90046001600160a01b03166001600160a01b0316639611f3d96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129169190613bc5565b6001600160a01b0316336001600160a01b0316145b6129475760405162461bcd60e51b815260040161098190613be2565b60405181151581527f7c029deaca9b6c66abb68e5f874a812822f0fcaa52a890f980a7ab1afb5edba69060200160405180910390a16010805460ff1916911515919091179055565b600f818154811061299f57600080fd5b6000918252602090912001546001600160a01b0316905081565b601154604080516306a8e1cd60e41b815290516000926001600160a01b031691636a8e1cd09160048083019260209291908290030181865afa158015612a03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a279190613c7d565b15612a445760405162461bcd60e51b815260040161098190613cd1565b60105460ff1615612a675760405162461bcd60e51b815260040161098190613d2e565b604051637dba2aed60e11b8152600060048201526001600160a01b03808616602483015284166044820152606481018390527374982d2fd25ca0e0dee702e40affd93bae04d3a69063fb7455da90608401611ab8565b600c80546109e690613c19565b600e818154811061299f57600080fd5b60105460009062010000900460ff16612b055760405162461bcd60e51b815260040161098190613c53565b6010805462ff000019169055612b196134a8565b601054610100900460ff1615612b415760405162461bcd60e51b815260040161098190613d7e565b60405163a4bcd45960e01b8152600060048201526001600160a01b0384166024820152604481018390527385e9690c2d4c6cae31d96f9b5afe6d111d1651579063a4bcd45990606401610af0565b600d818154811061299f57600080fd5b606081804210612bc15760405162461bcd60e51b815260040161098190613c9a565b60105462010000900460ff16612be95760405162461bcd60e51b815260040161098190613c53565b6010805462ff000019169055612bfd6134a8565b601054610100900460ff1615612c255760405162461bcd60e51b815260040161098190613d7e565b60405163eaadf2b560e01b8152600060048201526024810185905260016044820152730a7e79b7a4912ea42f82e25b9c033919b97f6fb09063eaadf2b590606401610fbe565b600a546001600160a01b0316331480612d0b5750601160009054906101000a90046001600160a01b03166001600160a01b0316639611f3d96040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf69190613bc5565b6001600160a01b0316336001600160a01b0316145b612d275760405162461bcd60e51b815260040161098190613be2565b60005b600e54811015612e3a57600e8181548110612d4757612d47613fd7565b6000918252602090912001546001600160a01b0390811690831603612dae5760405162461bcd60e51b815260206004820152601d60248201527f43757276652f63616e6e6f742d64656c6574652d6e756d6572616972650000006044820152606401610981565b600f8181548110612dc157612dc1613fd7565b6000918252602090912001546001600160a01b0390811690831603612e285760405162461bcd60e51b815260206004820152601b60248201527f43757276652f63616e6e6f742d64656c6574652d7265736572766500000000006044820152606401610981565b80612e3281614106565b915050612d2a565b506001600160a01b0316600090815260056020526040902080546001600160a81b0319169055565b600a546001600160a01b0316331480612f025750601160009054906101000a90046001600160a01b03166001600160a01b0316639611f3d96040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ec9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eed9190613bc5565b6001600160a01b0316336001600160a01b0316145b612f1e5760405162461bcd60e51b815260040161098190613be2565b60405163231888b760e01b8152600060048201526024810186905260448101859052606481018490526084810183905260a48101829052731190da269ffe6f4567fed0c3c9bba01f883722549063231888b79060c40160006040518083038186803b158015612f8c57600080fd5b505af4158015612fa0573d6000803e3d6000fd5b505050505050505050565b600081804210612fcd5760405162461bcd60e51b815260040161098190613c9a565b601160009054906101000a90046001600160a01b03166001600160a01b0316636a8e1cd06040518163ffffffff1660e01b8152600401602060405180830381865afa158015613020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130449190613c7d565b156130615760405162461bcd60e51b815260040161098190613cd1565b60105460ff16156130845760405162461bcd60e51b815260040161098190613d2e565b61308c6134a8565b601054610100900460ff16156130b45760405162461bcd60e51b815260040161098190613d7e565b60105462010000900460ff166130dc5760405162461bcd60e51b815260040161098190613c53565b6010805462ff00001916908190556040805160a0810182526001600160a01b0389811682527f000000000000000000000000000000000000000000000000000000000000000081166020830152818301899052336060830152630100000090930490921660808301525163fd17568b60e01b81527374982d2fd25ca0e0dee702e40affd93bae04d3a69063fd17568b90613180906000908590600190600401613e31565b602060405180830381865af415801561319d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131c19190613ddb565b9250848310156131e35760405162461bcd60e51b815260040161098190613e7e565b50506010805462ff0000191662010000179055949350505050565b601154604080516306a8e1cd60e41b815290516060926001600160a01b031691636a8e1cd09160048083019260209291908290030181865afa158015613248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061326c9190613c7d565b156132895760405162461bcd60e51b815260040161098190613cd1565b60105460ff16156132ac5760405162461bcd60e51b815260040161098190613d2e565b6040516330771ac760e11b81526000600482015260248101839052730a7e79b7a4912ea42f82e25b9c033919b97f6fb0906360ee358e90604401600060405180830381865af4158015613303573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108bf9190810190613fa2565b600a546001600160a01b03163314806133cb5750601160009054906101000a90046001600160a01b03166001600160a01b0316639611f3d96040518163ffffffff1660e01b8152600401602060405180830381865afa158015613392573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b69190613bc5565b6001600160a01b0316336001600160a01b0316145b6133e75760405162461bcd60e51b815260040161098190613be2565b6001600160a01b03811661344c5760405162461bcd60e51b815260206004820152602660248201527f43757276652f6e65772d6f776e65722d63616e6e6f742d62652d7a65726f2d6160448201526564647265737360d01b6064820152608401610981565b600a546040516001600160a01b038084169216907f0d18b5fd22306e373229b9439188228edca81207d1667f604daf6cef8aa3ee6790600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146134dd57600080fd5b565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261353990859061353f565b50505050565b6000613594826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166136169092919063ffffffff16565b80519091501561361157808060200190518101906135b29190613c7d565b6136115760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610981565b505050565b6060611af9848460008561362c565b9392505050565b60608247101561368d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610981565b600080866001600160a01b031685876040516136a9919061411f565b60006040518083038185875af1925050503d80600081146136e6576040519150601f19603f3d011682016040523d82523d6000602084013e6136eb565b606091505b50915091506136fc87838387613707565b979650505050505050565b6060831561377657825160000361376f576001600160a01b0385163b61376f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610981565b5081611af9565b611af9838381511561378b5781518083602001fd5b8060405162461bcd60e51b8152600401610981919061387d565b6040518061014001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001600081525090565b60006020828403121561381357600080fd5b81356001600160e01b03198116811461362557600080fd5b801515811461383957600080fd5b50565b60006020828403121561384e57600080fd5b81356136258161382b565b60005b8381101561387457818101518382015260200161385c565b50506000910152565b602081526000825180602084015261389c816040850160208701613859565b601f01601f19169190910160400192915050565b6001600160a01b038116811461383957600080fd5b600080604083850312156138d857600080fd5b82356138e3816138b0565b946020939093013593505050565b600080600080600060a0868803121561390957600080fd5b8535613914816138b0565b94506020860135613924816138b0565b94979496505050506040830135926060810135926080909101359150565b600081518084526020808501945080840160005b8381101561397257815187529582019590820190600101613956565b509495945050505050565b828152604060208201526000611af96040830184613942565b600080604083850312156139a957600080fd5b50508035926020909101359150565b6020815260006136256020830184613942565b6000806000606084860312156139e057600080fd5b83356139eb816138b0565b925060208401356139fb816138b0565b929592945050506040919091013590565b600060208284031215613a1e57600080fd5b8135613625816138b0565b60008060008060008060c08789031215613a4257600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080600060608486031215613a8157600080fd5b8335613a8c816138b0565b95602085013595506040909401359392505050565b600060208284031215613ab357600080fd5b5035919050565b60008060008060808587031215613ad057600080fd5b8435613adb816138b0565b93506020850135613aeb816138b0565b92506040850135613afb816138b0565b91506060850135613b0b816138b0565b939692955090935050565b600080600080600060a08688031215613b2e57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215613b6457600080fd5b8235613b6f816138b0565b91506020830135613b7f816138b0565b809150509250929050565b60008060008060808587031215613ba057600080fd5b8435613bab816138b0565b966020860135965060408601359560600135945092505050565b600060208284031215613bd757600080fd5b8151613625816138b0565b60208082526019908201527f43757276652f63616c6c65722d69732d6e6f742d6f776e657200000000000000604082015260600190565b600181811c90821680613c2d57607f821691505b602082108103613c4d57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526010908201526f10dd5c9d994bdc994b595b9d195c995960821b604082015260600190565b600060208284031215613c8f57600080fd5b81516136258161382b565b60208082526018908201527f43757276652f74782d646561646c696e652d7061737365640000000000000000604082015260600190565b60208082526039908201527f43757276652f66726f7a656e2d676c6f62616c6c792d6f6e6c792d616c6c6f7760408201527f696e672d70726f706f7274696f6e616c2d776974686472617700000000000000606082015260800190565b60208082526030908201527f43757276652f66726f7a656e2d6f6e6c792d616c6c6f77696e672d70726f706f60408201526f7274696f6e616c2d776974686472617760801b606082015260800190565b6020808252603d908201527f43757276652f656d657267656e63792d6f6e6c792d616c6c6f77696e672d656d60408201527f657267656e63792d70726f706f7274696f6e616c2d7769746864726177000000606082015260800190565b600060208284031215613ded57600080fd5b5051919050565b80516001600160a01b0390811683526020808301518216908401526040808301519084015260608083015182169084015260809182015116910152565b83815260e08101613e456020830185613df4565b82151560c0830152949350505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156108bf576108bf613e55565b6020808252601d908201527f43757276652f62656c6f772d6d696e2d7461726765742d616d6f756e74000000604082015260600190565b634e487b7160e01b600052604160045260246000fd5b600082601f830112613edc57600080fd5b8151602067ffffffffffffffff80831115613ef957613ef9613eb5565b8260051b604051601f19603f83011681018181108482111715613f1e57613f1e613eb5565b604052938452858101830193838101925087851115613f3c57600080fd5b83870191505b848210156136fc57815183529183019190830190613f42565b60008060408385031215613f6e57600080fd5b82519150602083015167ffffffffffffffff811115613f8c57600080fd5b613f9885828601613ecb565b9150509250929050565b600060208284031215613fb457600080fd5b815167ffffffffffffffff811115613fcb57600080fd5b611af984828501613ecb565b634e487b7160e01b600052603260045260246000fd5b60006101608201905083825282516020830152602083015160408301526040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c083015160e083015260e0830151610100614058818501836001600160a01b03169052565b84015161012084810191909152909301516101409092019190915292915050565b600080600080600060a0868803121561409157600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b80820281158282048414176108bf576108bf613e55565b6000826140ed57634e487b7160e01b600052601260045260246000fd5b500490565b82815260c081016136256020830184613df4565b60006001820161411857614118613e55565b5060010190565b60008251614131818460208701613859565b919091019291505056fea26469706673582212209fe70fae664b7f88f6ddb308707297efdaab6e0c0059376ecafddee9e2c0cb2164736f6c6343000815003300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000002a0000000000000000000000000ce2b8e0c196b7f9297a9c168dfe1a977682978350000000000000000000000001020e08935e9f8ee963356f4c47d7fe8a024c8a700000000000000000000000000000000000000000000000000000000000000106466782d636164632d757364632d76330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000106466782d636164632d757364632d763300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000cadc0acd4b445166f12d2c07eac6e2544fbe2eef000000000000000000000000bfa98e686ea480f6dabd82519d15cb65c664fe7f000000000000000000000000cadc0acd4b445166f12d2c07eac6e2544fbe2eef000000000000000000000000bfa98e686ea480f6dabd82519d15cb65c664fe7f000000000000000000000000cadc0acd4b445166f12d2c07eac6e2544fbe2eef000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000e15d4757fa0afa3f6ed0752aff7bd776127e0045000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000e15d4757fa0afa3f6ed0752aff7bd776127e0045000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000006f05b59d3b2000000000000000000000000000000000000000000000000000006f05b59d3b20000

Deployed Bytecode

0x60806040526004361061024a5760003560e01c806370a0823111610139578063a8e9d528116100b6578063caa6fea41161007a578063caa6fea41461078e578063d828bb88146107ad578063dd62ed3e146107cd578063de3e2e2414610813578063e5cf8a5c14610833578063f2fde38b1461085357600080fd5b8063a8e9d528146106ee578063a9059cbb1461070e578063c0046e391461072e578063c7cdea371461074e578063c912ff7a1461076e57600080fd5b80638334278d116100fd5780638334278d14610659578063838e6a22146106795780638da5cb5b1461069957806395d89b41146106b9578063a3f5d8cc146106ce57600080fd5b806370a08231146105465780637165485d1461057c57806372b4129a146105f957806379a390a5146106195780637e932d321461063957600080fd5b806323b872dd116101c7578063525d0da71161018b578063525d0da7146104965780635872278a146104b6578063595520c7146104d65780636919ba27146105135780636f2ef95b1461052657600080fd5b806323b872dd146103e3578063313ce567146104035780633cae77f71461042a578063441a3e70146104635780634fe5da711461048357600080fd5b80630b2583c81161020e5780630b2583c814610309578063107c279f1461033757806318160ddd1461037e5780631a686502146103935780631f276b6e146103b657600080fd5b806301ffc9a7146102565780630501d5561461028b578063054f7d9c146102ad57806306fdde03146102c7578063095ea7b3146102e957600080fd5b3661025157005b600080fd5b34801561026257600080fd5b50610276610271366004613801565b610873565b60405190151581526020015b60405180910390f35b34801561029757600080fd5b506102ab6102a636600461383c565b6108c5565b005b3480156102b957600080fd5b506010546102769060ff1681565b3480156102d357600080fd5b506102dc6109d9565b604051610282919061387d565b3480156102f557600080fd5b506102766103043660046138c5565b610a67565b34801561031557600080fd5b506103296103243660046138f1565b610b49565b604051908152602001610282565b34801561034357600080fd5b507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc25b6040516001600160a01b039091168152602001610282565b34801561038a57600080fd5b50600754610329565b34801561039f57600080fd5b506103a8610e70565b60405161028292919061397d565b3480156103c257600080fd5b506103d66103d1366004613996565b610ef6565b60405161028291906139b8565b3480156103ef57600080fd5b506102766103fe3660046139cb565b61101d565b34801561040f57600080fd5b50610418601281565b60405160ff9091168152602001610282565b34801561043657600080fd5b50610366610445366004613a0c565b6001600160a01b039081166000908152600560205260409020541690565b34801561046f57600080fd5b506103d661047e366004613996565b61112f565b6103a8610491366004613a29565b6111b5565b3480156104a257600080fd5b506103296104b13660046139cb565b6119b8565b3480156104c257600080fd5b506103a86104d1366004613a29565b611b01565b3480156104e257600080fd5b506104eb611ef3565b604080519586526020860194909452928401919091526060830152608082015260a001610282565b610329610521366004613a6c565b611f87565b34801561053257600080fd5b506103a8610541366004613aa1565b61228b565b34801561055257600080fd5b50610329610561366004613a0c565b6001600160a01b031660009081526008602052604090205490565b34801561058857600080fd5b506000546001546002546007546105bc93600f81810b94600160801b92839004820b9481830b9493909104820b92910b9086565b60408051600f97880b815295870b602087015293860b9385019390935290840b606084015290920b608082015260a081019190915260c001610282565b34801561060557600080fd5b506103296106143660046138f1565b6124de565b34801561062557600080fd5b506102ab610634366004613aba565b61273f565b34801561064557600080fd5b506102ab61065436600461383c565b61288b565b34801561066557600080fd5b50610366610674366004613aa1565b61298f565b34801561068557600080fd5b506103296106943660046139cb565b6129b9565b3480156106a557600080fd5b50600a54610366906001600160a01b031681565b3480156106c557600080fd5b506102dc612abd565b3480156106da57600080fd5b506010546102769062010000900460ff1681565b3480156106fa57600080fd5b50610366610709366004613aa1565b612aca565b34801561071a57600080fd5b506102766107293660046138c5565b612ada565b34801561073a57600080fd5b50610366610749366004613aa1565b612b8f565b34801561075a57600080fd5b506103d6610769366004613996565b612b9f565b34801561077a57600080fd5b506102ab610789366004613a0c565b612c6b565b34801561079a57600080fd5b5060105461027690610100900460ff1681565b3480156107b957600080fd5b506102ab6107c8366004613b16565b612e62565b3480156107d957600080fd5b506103296107e8366004613b51565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b34801561081f57600080fd5b5061032961082e366004613b8a565b612fab565b34801561083f57600080fd5b506103d661084e366004613aa1565b6131fe565b34801561085f57600080fd5b506102ab61086e366004613a0c565b61332b565b60006301ffc9a760e01b6001600160e01b0319831614806108a457506307f5828d60e41b6001600160e01b03198316145b806108bf57506336372b0760e01b6001600160e01b03198316145b92915050565b600a546001600160a01b03163314806109655750601160009054906101000a90046001600160a01b03166001600160a01b0316639611f3d96040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109509190613bc5565b6001600160a01b0316336001600160a01b0316145b61098a5760405162461bcd60e51b815260040161098190613be2565b60405180910390fd5b60405181151581527fa44450e52bea871e50cfee059fbe027c26ff43fd7534c06b7de61d90b58ab3c19060200160405180910390a1601080549115156101000261ff0019909216919091179055565b600b80546109e690613c19565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1290613c19565b8015610a5f5780601f10610a3457610100808354040283529160200191610a5f565b820191906000526020600020905b815481529060010190602001808311610a4257829003601f168201915b505050505081565b60105460009062010000900460ff16610a925760405162461bcd60e51b815260040161098190613c53565b6010805462ff000019169055610aa66134a8565b60405163e60ac42960e01b8152600060048201526001600160a01b0384166024820152604481018390527385e9690c2d4c6cae31d96f9b5afe6d111d1651579063e60ac429906064015b602060405180830381865af4158015610b0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b319190613c7d565b6010805462ff00001916620100001790559392505050565b600081804210610b6b5760405162461bcd60e51b815260040161098190613c9a565b601160009054906101000a90046001600160a01b03166001600160a01b0316636a8e1cd06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be29190613c7d565b15610bff5760405162461bcd60e51b815260040161098190613cd1565b60105460ff1615610c225760405162461bcd60e51b815260040161098190613d2e565b610c2a6134a8565b601054610100900460ff1615610c525760405162461bcd60e51b815260040161098190613d7e565b60105462010000900460ff16610c7a5760405162461bcd60e51b815260040161098190613c53565b6010805462ff00001916908190556040805160a0810182526001600160a01b038a8116825289811660208084018290528385018b905233606085018190526301000000909604909216608084015283516370a0823160e01b8152600481019590955292519193600093926370a08231926024808401939192918290030181865afa158015610d0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d309190613ddb565b60405163fd17568b60e01b81529091507374982d2fd25ca0e0dee702e40affd93bae04d3a69063fd17568b90610d6f9060009086908290600401613e31565b602060405180830381865af4158015610d8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610db09190613ddb565b5060608201516040516370a0823160e01b81526001600160a01b0391821660048201526000918a16906370a0823190602401602060405180830381865afa158015610dff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e239190613ddb565b9050610e2f8282613e6b565b945086851015610e515760405162461bcd60e51b815260040161098190613e7e565b50506010805462ff000019166201000017905550909695505050505050565b604051633745793960e11b815260006004820181905290606090731134daeaa652e11360631e3cc93e688204d9354b90636e8af27290602401600060405180830381865af4158015610ec6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610eee9190810190613f5b565b915091509091565b601054606090610100900460ff16610f205760405162461bcd60e51b815260040161098190613d7e565b81804210610f405760405162461bcd60e51b815260040161098190613c9a565b60105462010000900460ff16610f685760405162461bcd60e51b815260040161098190613c53565b6010805462ff000019169055610f7c6134a8565b60405163eaadf2b560e01b8152600060048201819052602482018690526044820152730a7e79b7a4912ea42f82e25b9c033919b97f6fb09063eaadf2b5906064015b600060405180830381865af4158015610fdb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110039190810190613fa2565b9150506010805462ff000019166201000017905592915050565b60105460009062010000900460ff166110485760405162461bcd60e51b815260040161098190613c53565b6010805462ff00001916905561105c6134a8565b601054610100900460ff16156110845760405162461bcd60e51b815260040161098190613d7e565b6040516303a90f6960e31b8152600060048201526001600160a01b03808616602483015284166044820152606481018390527385e9690c2d4c6cae31d96f9b5afe6d111d16515790631d487b4890608401602060405180830381865af41580156110f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111169190613c7d565b6010805462ff0000191662010000179055949350505050565b6060818042106111515760405162461bcd60e51b815260040161098190613c9a565b60105462010000900460ff166111795760405162461bcd60e51b815260040161098190613c53565b6010805462ff00001916905561118d6134a8565b601054610100900460ff1615610f7c5760405162461bcd60e51b815260040161098190613d7e565b60006060828042106111d95760405162461bcd60e51b815260040161098190613c9a565b601160009054906101000a90046001600160a01b03166001600160a01b0316636a8e1cd06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561122c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112509190613c7d565b1561126d5760405162461bcd60e51b815260040161098190613cd1565b60105460ff16156112905760405162461bcd60e51b815260040161098190613d2e565b60105462010000900460ff166112b85760405162461bcd60e51b815260040161098190613c53565b6010805462ff0000191690556112cc6134a8565b601054610100900460ff16156112f45760405162461bcd60e51b815260040161098190613d7e565b6000891161133f5760405162461bcd60e51b815260206004820152601860248201527743757276652f6465706f7369745f62656c6f775f7a65726f60401b6044820152606401610981565b6113488961228b565b80935081945050507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156113ab57600080fd5b505af11580156113bf573d6000803e3d6000fd5b506113fc9350506001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216915030905033346134df565b6114046137a5565b89815260208101899052604081018890526080810187905260a081018690528251839060009061143657611436613fd7565b60200260200101518160c00181815250508260018151811061145a5761145a613fd7565b6020026020010151816060018181525050600f60008154811061147f5761147f613fd7565b60009182526020822001546001600160a01b031660e0830152600f80549091906114ab576114ab613fd7565b6000918252602090912001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156114fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115209190613ddb565b610100820152600f8054600190811061153b5761153b613fd7565b6000918252602090912001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561158c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b09190613ddb565b610120820152604051629d2ea960e41b8152730a7e79b7a4912ea42f82e25b9c033919b97f6fb0906309d2ea90906115ef906000908590600401613fed565b600060405180830381865af415801561160c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116349190810190613f5b565b809450819550505060007f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316600060040160008154811061167f5761167f613fd7565b6000918252602091829020015460408051632495a59960e01b815290516001600160a01b0390921692632495a599926004808401938290030181865afa1580156116cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f19190613bc5565b6001600160a01b03160361172c578360008151811061171257611712613fd7565b6020026020010151346117259190613e6b565b9050611848565b7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b0316600060040160018154811061176d5761176d613fd7565b6000918252602091829020015460408051632495a59960e01b815290516001600160a01b0390921692632495a599926004808401938290030181865afa1580156117bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117df9190613bc5565b6001600160a01b031603611800578360018151811061171257611712613fd7565b60405162461bcd60e51b815260206004820152601860248201527f43757276652f4465706f73697420455448206661696c656400000000000000006044820152606401610981565b8015611997576118836001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2163330846134df565b604051632e1a7d4d60e01b8152600481018290527f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156118e557600080fd5b505af11580156118f9573d6000803e3d6000fd5b50506040516000925033915083908381818185875af1925050503d806000811461193f576040519150601f19603f3d011682016040523d82523d6000602084013e611944565b606091505b50509050806119955760405162461bcd60e51b815260206004820152601960248201527f43757276652f455448207472616e73666572206661696c6564000000000000006044820152606401610981565b505b5050506010805462ff00001916620100001790559097909650945050505050565b601154604080516306a8e1cd60e41b815290516000926001600160a01b031691636a8e1cd09160048083019260209291908290030181865afa158015611a02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a269190613c7d565b15611a435760405162461bcd60e51b815260040161098190613cd1565b60105460ff1615611a665760405162461bcd60e51b815260040161098190613d2e565b6040516315be82e960e21b8152600060048201526001600160a01b03808616602483015284166044820152606481018390527374982d2fd25ca0e0dee702e40affd93bae04d3a6906356fa0ba4906084015b602060405180830381865af4158015611ad5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af99190613ddb565b949350505050565b6000606082804210611b255760405162461bcd60e51b815260040161098190613c9a565b601160009054906101000a90046001600160a01b03166001600160a01b0316636a8e1cd06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9c9190613c7d565b15611bb95760405162461bcd60e51b815260040161098190613cd1565b60105460ff1615611bdc5760405162461bcd60e51b815260040161098190613d2e565b60105462010000900460ff16611c045760405162461bcd60e51b815260040161098190613c53565b6010805462ff000019169055611c186134a8565b601054610100900460ff1615611c405760405162461bcd60e51b815260040161098190613d7e565b60008911611c8b5760405162461bcd60e51b815260206004820152601860248201527743757276652f6465706f7369745f62656c6f775f7a65726f60401b6044820152606401610981565b611c948961228b565b9093509150611ca16137a5565b89815260208101899052604081018890526080810187905260a0810186905282518390600090611cd357611cd3613fd7565b60200260200101518160c001818152505082600181518110611cf757611cf7613fd7565b6020026020010151816060018181525050600f600081548110611d1c57611d1c613fd7565b60009182526020822001546001600160a01b031660e0830152600f8054909190611d4857611d48613fd7565b6000918252602090912001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611d99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbd9190613ddb565b610100820152600f80546001908110611dd857611dd8613fd7565b6000918252602090912001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611e29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4d9190613ddb565b610120820152604051629d2ea960e41b8152730a7e79b7a4912ea42f82e25b9c033919b97f6fb0906309d2ea9090611e8c906000908590600401613fed565b600060405180830381865af4158015611ea9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ed19190810190613f5b565b6010805462ff0000191662010000179055909b909a5098505050505050505050565b6000806000806000731190da269ffe6f4567fed0c3c9bba01f8837225463faa50b5d60006040518263ffffffff1660e01b8152600401611f3591815260200190565b60a060405180830381865af4158015611f52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f769190614079565b945094509450945094509091929394565b600081804210611fa95760405162461bcd60e51b815260040161098190613c9a565b601160009054906101000a90046001600160a01b03166001600160a01b0316636a8e1cd06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ffc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120209190613c7d565b1561203d5760405162461bcd60e51b815260040161098190613cd1565b60105460ff16156120605760405162461bcd60e51b815260040161098190613d2e565b6120686134a8565b601054610100900460ff16156120905760405162461bcd60e51b815260040161098190613d7e565b60105462010000900460ff166120b85760405162461bcd60e51b815260040161098190613c53565b6010805462ff00001916905560408051630d0e30db60e41b815290516001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2169163d0e30db091349160048082019260009290919082900301818588803b15801561212857600080fd5b505af115801561213c573d6000803e3d6000fd5b506121799350506001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc216915030905033346134df565b6040805160a0810182526001600160a01b037f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2811682528781166020830152348284015233606083015260105463010000009004166080820152905163fd17568b60e01b81527374982d2fd25ca0e0dee702e40affd93bae04d3a69063fd17568b9061220e9060009085908290600401613e31565b602060405180830381865af415801561222b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061224f9190613ddb565b9250848310156122715760405162461bcd60e51b815260040161098190613e7e565b50506010805462ff00001916620100001790559392505050565b60006060601160009054906101000a90046001600160a01b03166001600160a01b0316636a8e1cd06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123069190613c7d565b156123235760405162461bcd60e51b815260040161098190613cd1565b60105460ff16156123465760405162461bcd60e51b815260040161098190613d2e565b604080516002808252606082018352600092839291906020830190803683370190505060405163822f39d560e01b81526000600482015260248101879052909150730a7e79b7a4912ea42f82e25b9c033919b97f6fb09063822f39d590604401600060405180830381865af41580156123c3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526123eb9190810190613f5b565b909250905060008261240c876ec097ce7bc90715b34b9f10000000006140b9565b61241691906140d0565b90506ec097ce7bc90715b34b9f1000000000818360008151811061243c5761243c613fd7565b602002602001015161244e91906140b9565b61245891906140d0565b8260008151811061246b5761246b613fd7565b6020026020010181815250506ec097ce7bc90715b34b9f1000000000818360018151811061249b5761249b613fd7565b60200260200101516124ad91906140b9565b6124b791906140d0565b826001815181106124ca576124ca613fd7565b602090810291909101015250939492505050565b6000818042106125005760405162461bcd60e51b815260040161098190613c9a565b601160009054906101000a90046001600160a01b03166001600160a01b0316636a8e1cd06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612553573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125779190613c7d565b156125945760405162461bcd60e51b815260040161098190613cd1565b60105460ff16156125b75760405162461bcd60e51b815260040161098190613d2e565b6125bf6134a8565b601054610100900460ff16156125e75760405162461bcd60e51b815260040161098190613d7e565b60105462010000900460ff1661260f5760405162461bcd60e51b815260040161098190613c53565b6010805462ff00001916908190556040805160a0810182526001600160a01b038a811682528981166020830152818301889052336060830152630100000090930490921660808301525163498e2a2560e11b81527374982d2fd25ca0e0dee702e40affd93bae04d3a69063931c544a906126909060009085906004016140f2565b602060405180830381865af41580156126ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126d19190613ddb565b9250858311156127235760405162461bcd60e51b815260206004820152601d60248201527f43757276652f61626f76652d6d61782d6f726967696e2d616d6f756e740000006044820152606401610981565b50506010805462ff000019166201000017905595945050505050565b600a546001600160a01b03163314806127df5750601160009054906101000a90046001600160a01b03166001600160a01b0316639611f3d96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ca9190613bc5565b6001600160a01b0316336001600160a01b0316145b6127fb5760405162461bcd60e51b815260040161098190613be2565b604051632e6ce08560e11b8152600060048201526001600160a01b0380861660248301528085166044830152808416606483015282166084820152731190da269ffe6f4567fed0c3c9bba01f8837225490635cd9c10a9060a40160006040518083038186803b15801561286d57600080fd5b505af4158015612881573d6000803e3d6000fd5b5050505050505050565b600a546001600160a01b031633148061292b5750601160009054906101000a90046001600160a01b03166001600160a01b0316639611f3d96040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129169190613bc5565b6001600160a01b0316336001600160a01b0316145b6129475760405162461bcd60e51b815260040161098190613be2565b60405181151581527f7c029deaca9b6c66abb68e5f874a812822f0fcaa52a890f980a7ab1afb5edba69060200160405180910390a16010805460ff1916911515919091179055565b600f818154811061299f57600080fd5b6000918252602090912001546001600160a01b0316905081565b601154604080516306a8e1cd60e41b815290516000926001600160a01b031691636a8e1cd09160048083019260209291908290030181865afa158015612a03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a279190613c7d565b15612a445760405162461bcd60e51b815260040161098190613cd1565b60105460ff1615612a675760405162461bcd60e51b815260040161098190613d2e565b604051637dba2aed60e11b8152600060048201526001600160a01b03808616602483015284166044820152606481018390527374982d2fd25ca0e0dee702e40affd93bae04d3a69063fb7455da90608401611ab8565b600c80546109e690613c19565b600e818154811061299f57600080fd5b60105460009062010000900460ff16612b055760405162461bcd60e51b815260040161098190613c53565b6010805462ff000019169055612b196134a8565b601054610100900460ff1615612b415760405162461bcd60e51b815260040161098190613d7e565b60405163a4bcd45960e01b8152600060048201526001600160a01b0384166024820152604481018390527385e9690c2d4c6cae31d96f9b5afe6d111d1651579063a4bcd45990606401610af0565b600d818154811061299f57600080fd5b606081804210612bc15760405162461bcd60e51b815260040161098190613c9a565b60105462010000900460ff16612be95760405162461bcd60e51b815260040161098190613c53565b6010805462ff000019169055612bfd6134a8565b601054610100900460ff1615612c255760405162461bcd60e51b815260040161098190613d7e565b60405163eaadf2b560e01b8152600060048201526024810185905260016044820152730a7e79b7a4912ea42f82e25b9c033919b97f6fb09063eaadf2b590606401610fbe565b600a546001600160a01b0316331480612d0b5750601160009054906101000a90046001600160a01b03166001600160a01b0316639611f3d96040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cf69190613bc5565b6001600160a01b0316336001600160a01b0316145b612d275760405162461bcd60e51b815260040161098190613be2565b60005b600e54811015612e3a57600e8181548110612d4757612d47613fd7565b6000918252602090912001546001600160a01b0390811690831603612dae5760405162461bcd60e51b815260206004820152601d60248201527f43757276652f63616e6e6f742d64656c6574652d6e756d6572616972650000006044820152606401610981565b600f8181548110612dc157612dc1613fd7565b6000918252602090912001546001600160a01b0390811690831603612e285760405162461bcd60e51b815260206004820152601b60248201527f43757276652f63616e6e6f742d64656c6574652d7265736572766500000000006044820152606401610981565b80612e3281614106565b915050612d2a565b506001600160a01b0316600090815260056020526040902080546001600160a81b0319169055565b600a546001600160a01b0316331480612f025750601160009054906101000a90046001600160a01b03166001600160a01b0316639611f3d96040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ec9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612eed9190613bc5565b6001600160a01b0316336001600160a01b0316145b612f1e5760405162461bcd60e51b815260040161098190613be2565b60405163231888b760e01b8152600060048201526024810186905260448101859052606481018490526084810183905260a48101829052731190da269ffe6f4567fed0c3c9bba01f883722549063231888b79060c40160006040518083038186803b158015612f8c57600080fd5b505af4158015612fa0573d6000803e3d6000fd5b505050505050505050565b600081804210612fcd5760405162461bcd60e51b815260040161098190613c9a565b601160009054906101000a90046001600160a01b03166001600160a01b0316636a8e1cd06040518163ffffffff1660e01b8152600401602060405180830381865afa158015613020573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130449190613c7d565b156130615760405162461bcd60e51b815260040161098190613cd1565b60105460ff16156130845760405162461bcd60e51b815260040161098190613d2e565b61308c6134a8565b601054610100900460ff16156130b45760405162461bcd60e51b815260040161098190613d7e565b60105462010000900460ff166130dc5760405162461bcd60e51b815260040161098190613c53565b6010805462ff00001916908190556040805160a0810182526001600160a01b0389811682527f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281166020830152818301899052336060830152630100000090930490921660808301525163fd17568b60e01b81527374982d2fd25ca0e0dee702e40affd93bae04d3a69063fd17568b90613180906000908590600190600401613e31565b602060405180830381865af415801561319d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131c19190613ddb565b9250848310156131e35760405162461bcd60e51b815260040161098190613e7e565b50506010805462ff0000191662010000179055949350505050565b601154604080516306a8e1cd60e41b815290516060926001600160a01b031691636a8e1cd09160048083019260209291908290030181865afa158015613248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061326c9190613c7d565b156132895760405162461bcd60e51b815260040161098190613cd1565b60105460ff16156132ac5760405162461bcd60e51b815260040161098190613d2e565b6040516330771ac760e11b81526000600482015260248101839052730a7e79b7a4912ea42f82e25b9c033919b97f6fb0906360ee358e90604401600060405180830381865af4158015613303573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108bf9190810190613fa2565b600a546001600160a01b03163314806133cb5750601160009054906101000a90046001600160a01b03166001600160a01b0316639611f3d96040518163ffffffff1660e01b8152600401602060405180830381865afa158015613392573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133b69190613bc5565b6001600160a01b0316336001600160a01b0316145b6133e75760405162461bcd60e51b815260040161098190613be2565b6001600160a01b03811661344c5760405162461bcd60e51b815260206004820152602660248201527f43757276652f6e65772d6f776e65722d63616e6e6f742d62652d7a65726f2d6160448201526564647265737360d01b6064820152608401610981565b600a546040516001600160a01b038084169216907f0d18b5fd22306e373229b9439188228edca81207d1667f604daf6cef8aa3ee6790600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b306001600160a01b037f000000000000000000000000814a90726fb9f7cf7566e28db634ff5fa959ceb116146134dd57600080fd5b565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905261353990859061353f565b50505050565b6000613594826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166136169092919063ffffffff16565b80519091501561361157808060200190518101906135b29190613c7d565b6136115760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610981565b505050565b6060611af9848460008561362c565b9392505050565b60608247101561368d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610981565b600080866001600160a01b031685876040516136a9919061411f565b60006040518083038185875af1925050503d80600081146136e6576040519150601f19603f3d011682016040523d82523d6000602084013e6136eb565b606091505b50915091506136fc87838387613707565b979650505050505050565b6060831561377657825160000361376f576001600160a01b0385163b61376f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610981565b5081611af9565b611af9838381511561378b5781518083602001fd5b8060405162461bcd60e51b8152600401610981919061387d565b6040518061014001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001600081525090565b60006020828403121561381357600080fd5b81356001600160e01b03198116811461362557600080fd5b801515811461383957600080fd5b50565b60006020828403121561384e57600080fd5b81356136258161382b565b60005b8381101561387457818101518382015260200161385c565b50506000910152565b602081526000825180602084015261389c816040850160208701613859565b601f01601f19169190910160400192915050565b6001600160a01b038116811461383957600080fd5b600080604083850312156138d857600080fd5b82356138e3816138b0565b946020939093013593505050565b600080600080600060a0868803121561390957600080fd5b8535613914816138b0565b94506020860135613924816138b0565b94979496505050506040830135926060810135926080909101359150565b600081518084526020808501945080840160005b8381101561397257815187529582019590820190600101613956565b509495945050505050565b828152604060208201526000611af96040830184613942565b600080604083850312156139a957600080fd5b50508035926020909101359150565b6020815260006136256020830184613942565b6000806000606084860312156139e057600080fd5b83356139eb816138b0565b925060208401356139fb816138b0565b929592945050506040919091013590565b600060208284031215613a1e57600080fd5b8135613625816138b0565b60008060008060008060c08789031215613a4257600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600080600060608486031215613a8157600080fd5b8335613a8c816138b0565b95602085013595506040909401359392505050565b600060208284031215613ab357600080fd5b5035919050565b60008060008060808587031215613ad057600080fd5b8435613adb816138b0565b93506020850135613aeb816138b0565b92506040850135613afb816138b0565b91506060850135613b0b816138b0565b939692955090935050565b600080600080600060a08688031215613b2e57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60008060408385031215613b6457600080fd5b8235613b6f816138b0565b91506020830135613b7f816138b0565b809150509250929050565b60008060008060808587031215613ba057600080fd5b8435613bab816138b0565b966020860135965060408601359560600135945092505050565b600060208284031215613bd757600080fd5b8151613625816138b0565b60208082526019908201527f43757276652f63616c6c65722d69732d6e6f742d6f776e657200000000000000604082015260600190565b600181811c90821680613c2d57607f821691505b602082108103613c4d57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526010908201526f10dd5c9d994bdc994b595b9d195c995960821b604082015260600190565b600060208284031215613c8f57600080fd5b81516136258161382b565b60208082526018908201527f43757276652f74782d646561646c696e652d7061737365640000000000000000604082015260600190565b60208082526039908201527f43757276652f66726f7a656e2d676c6f62616c6c792d6f6e6c792d616c6c6f7760408201527f696e672d70726f706f7274696f6e616c2d776974686472617700000000000000606082015260800190565b60208082526030908201527f43757276652f66726f7a656e2d6f6e6c792d616c6c6f77696e672d70726f706f60408201526f7274696f6e616c2d776974686472617760801b606082015260800190565b6020808252603d908201527f43757276652f656d657267656e63792d6f6e6c792d616c6c6f77696e672d656d60408201527f657267656e63792d70726f706f7274696f6e616c2d7769746864726177000000606082015260800190565b600060208284031215613ded57600080fd5b5051919050565b80516001600160a01b0390811683526020808301518216908401526040808301519084015260608083015182169084015260809182015116910152565b83815260e08101613e456020830185613df4565b82151560c0830152949350505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156108bf576108bf613e55565b6020808252601d908201527f43757276652f62656c6f772d6d696e2d7461726765742d616d6f756e74000000604082015260600190565b634e487b7160e01b600052604160045260246000fd5b600082601f830112613edc57600080fd5b8151602067ffffffffffffffff80831115613ef957613ef9613eb5565b8260051b604051601f19603f83011681018181108482111715613f1e57613f1e613eb5565b604052938452858101830193838101925087851115613f3c57600080fd5b83870191505b848210156136fc57815183529183019190830190613f42565b60008060408385031215613f6e57600080fd5b82519150602083015167ffffffffffffffff811115613f8c57600080fd5b613f9885828601613ecb565b9150509250929050565b600060208284031215613fb457600080fd5b815167ffffffffffffffff811115613fcb57600080fd5b611af984828501613ecb565b634e487b7160e01b600052603260045260246000fd5b60006101608201905083825282516020830152602083015160408301526040830151606083015260608301516080830152608083015160a083015260a083015160c083015260c083015160e083015260e0830151610100614058818501836001600160a01b03169052565b84015161012084810191909152909301516101409092019190915292915050565b600080600080600060a0868803121561409157600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b80820281158282048414176108bf576108bf613e55565b6000826140ed57634e487b7160e01b600052601260045260246000fd5b500490565b82815260c081016136256020830184613df4565b60006001820161411857614118613e55565b5060010190565b60008251614131818460208701613859565b919091019291505056fea26469706673582212209fe70fae664b7f88f6ddb308707297efdaab6e0c0059376ecafddee9e2c0cb2164736f6c63430008150033

Deployed Bytecode Sourcemap

6843:22013:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25348:282;;;;;;;;;;-1:-1:-1;25348:282:10;;;;;:::i;:::-;;:::i;:::-;;;470:14:30;;463:22;445:41;;433:2;418:18;25348:282:10;;;;;;;;11793:139;;;;;;;;;;-1:-1:-1;11793:139:10;;;;;:::i;:::-;;:::i;:::-;;1875:26:14;;;;;;;;;;-1:-1:-1;1875:26:14;;;;;;;;1653:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;26999:179:10:-;;;;;;;;;;-1:-1:-1;26999:179:10;;;;;:::i;:::-;;:::i;12809:988::-;;;;;;;;;;-1:-1:-1;12809:988:10;;;;;:::i;:::-;;:::i;:::-;;;2723:25:30;;;2711:2;2696:18;12809:988:10;2577:177:30;25254:88:10;;;;;;;;;;-1:-1:-1;25331:4:10;25254:88;;;-1:-1:-1;;;;;3032:32:30;;;3014:51;;3002:2;2987:18;25254:88:10;2868:203:30;27631:115:10;;;;;;;;;;-1:-1:-1;27722:17:10;;27631:115;;28399:146;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;22845:325::-;;;;;;;;;;-1:-1:-1;22845:325:10;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;26453:278::-;;;;;;;;;;-1:-1:-1;26453:278:10;;;;;:::i;:::-;;:::i;1703:35:14:-;;;;;;;;;;;;1736:2;1703:35;;;;;5005:4:30;4993:17;;;4975:36;;4963:2;4948:18;1703:35:14;4833:184:30;28666:153:10;;;;;;;;;;-1:-1:-1;28666:153:10;;;;;:::i;:::-;-1:-1:-1;;;;;28776:31:10;;;28729:20;28776:31;;;:18;:31;;;;;:36;;;28666:153;23582:319;;;;;;;;;;-1:-1:-1;23582:319:10;;;;;:::i;:::-;;:::i;19299:2129::-;;;;;;:::i;:::-;;:::i;17649:298::-;;;;;;;;;;-1:-1:-1;17649:298:10;;;;;:::i;:::-;;:::i;17981:1277::-;;;;;;;;;;-1:-1:-1;17981:1277:10;;;;;:::i;:::-;;:::i;11580:207::-;;;;;;;;;;;;;:::i;:::-;;;;6061:25:30;;;6117:2;6102:18;;6095:34;;;;6145:18;;;6138:34;;;;6203:2;6188:18;;6181:34;6246:3;6231:19;;6224:35;6048:3;6033:19;11580:207:10;5802:463:30;13803:924:10;;;;;;:::i;:::-;;:::i;21838:563::-;;;;;;;;;;-1:-1:-1;21838:563:10;;;;;:::i;:::-;;:::i;27378:128::-;;;;;;;;;;-1:-1:-1;27378:128:10;;;;;:::i;:::-;-1:-1:-1;;;;;27475:24:10;27436:16;27475:24;;;:14;:24;;;;;;;27378:128;1586:18:14;;;;;;;;;;-1:-1:-1;1586:18:14;;;;;;;;;;;;;;;-1:-1:-1;;;1586:18:14;;;;;;;;;;;;;;;;;;;;;;;;;;;7149:2:30;7138:22;;;7120:41;;7197:22;;;7192:2;7177:18;;7170:50;7256:22;;;7236:18;;;7229:50;;;;7315:22;;;7310:2;7295:18;;7288:50;7375:22;;;7369:3;7354:19;;7347:51;7429:3;7414:19;;7407:35;;;;7107:3;7092:19;1586:18:14;6843:605:30;16545:782:10;;;;;;;;;;-1:-1:-1;16545:782:10;;;;;:::i;:::-;;:::i;10453:258::-;;;;;;;;;;-1:-1:-1;10453:258:10;;;;;:::i;:::-;;:::i;11938:164::-;;;;;;;;;;-1:-1:-1;11938:164:10;;;;;:::i;:::-;;:::i;1812:25:14:-;;;;;;;;;;-1:-1:-1;1812:25:14;;;;;:::i;:::-;;:::i;15790:298:10:-;;;;;;;;;;-1:-1:-1;15790:298:10;;;;;:::i;:::-;;:::i;1626:20:14:-;;;;;;;;;;-1:-1:-1;1626:20:14;;;;-1:-1:-1;;;;;1626:20:14;;;1677;;;;;;;;;;;;;:::i;1942:29::-;;;;;;;;;;-1:-1:-1;1942:29:14;;;;;;;;;;;1779:27;;;;;;;;;;-1:-1:-1;1779:27:14;;;;;:::i;:::-;;:::i;25859:244:10:-;;;;;;;;;;-1:-1:-1;25859:244:10;;;;;:::i;:::-;;:::i;1745:28:14:-;;;;;;;;;;-1:-1:-1;1745:28:14;;;;;:::i;:::-;;:::i;24339:321:10:-;;;;;;;;;;-1:-1:-1;24339:321:10;;;;;:::i;:::-;;:::i;10841:425::-;;;;;;;;;;-1:-1:-1;10841:425:10;;;;;:::i;:::-;;:::i;1907:29:14:-;;;;;;;;;;-1:-1:-1;1907:29:14;;;;;;;;;;;10211:236:10;;;;;;;;;;-1:-1:-1;10211:236:10;;;;;:::i;:::-;;:::i;28011:158::-;;;;;;;;;;-1:-1:-1;28011:158:10;;;;;:::i;:::-;-1:-1:-1;;;;;28128:24:10;;;28085:18;28128:24;;;:16;:24;;;;;;;;:34;;;;;;;;;;;;;28011:158;14733:727;;;;;;;;;;-1:-1:-1;14733:727:10;;;;;:::i;:::-;;:::i;24992:256::-;;;;;;;;;;-1:-1:-1;24992:256:10;;;;;:::i;:::-;;:::i;12108:237::-;;;;;;;;;;-1:-1:-1;12108:237:10;;;;;:::i;:::-;;:::i;25348:282::-;25415:14;-1:-1:-1;;;;;;;;;25453:45:10;;;;:103;;-1:-1:-1;;;;;;;;;;25524:32:10;;;25453:103;:161;;;-1:-1:-1;;;;;;;;;;25582:32:10;;;25453:161;25441:173;25348:282;-1:-1:-1;;25348:282:10:o;11793:139::-;8136:5;;-1:-1:-1;;;;;8136:5:10;8122:10;:19;;:65;;;8159:6;;;;;;;;;-1:-1:-1;;;;;8159:6:10;-1:-1:-1;;;;;8159:26:10;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8145:42:10;:10;-1:-1:-1;;;;;8145:42:10;;8122:65;8114:103;;;;-1:-1:-1;;;8114:103:10;;;;;;;:::i;:::-;;;;;;;;;11866:26:::1;::::0;470:14:30;;463:22;445:41;;11866:26:10::1;::::0;433:2:30;418:18;11866:26:10::1;;;;;;;11903:9;:22:::0;;;::::1;;;;-1:-1:-1::0;;11903:22:10;;::::1;::::0;;;::::1;::::0;;11793:139::o;1653:18:14:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26999:179:10:-;8283:10;;27095:13;;8283:10;;;;;8275:39;;;;-1:-1:-1;;;8275:39:10;;;;;;;:::i;:::-;8324:10;:18;;-1:-1:-1;;8324:18:10;;;1037:22:28::1;:20;:22::i;:::-;27131:40:10::2;::::0;-1:-1:-1;;;27131:40:10;;27146:5:::2;27131:40;::::0;::::2;11008:25:30::0;-1:-1:-1;;;;;11069:32:30;;11049:18;;;11042:60;11118:18;;;11111:34;;;27131:6:10::2;::::0;:14:::2;::::0;10981:18:30;;27131:40:10::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8363:10:::0;:17;;-1:-1:-1;;8363:17:10;;;;;27120:51;26999:179;-1:-1:-1;;;26999:179:10:o;12809:988::-;13156:21;13011:9;8876;8858:15;:27;8850:64;;;;-1:-1:-1;;;8850:64:10;;;;;;;:::i;:::-;8989:6:::1;;;;;;;;;-1:-1:-1::0;;;;;8989:6:10::1;-1:-1:-1::0;;;;;8989:27:10::1;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8988:30;8980:100;;;;-1:-1:-1::0;;;8980:100:10::1;;;;;;;:::i;:::-;8436:6:::2;::::0;::::2;;8435:7;8427:68;;;;-1:-1:-1::0;;;8427:68:10::2;;;;;;;:::i;:::-;1037:22:28::3;:20;:22::i;:::-;8704:9:10::4;::::0;::::4;::::0;::::4;;;8703:10;8695:84;;;;-1:-1:-1::0;;;8695:84:10::4;;;;;;;:::i;:::-;8283:10:::5;::::0;;;::::5;;;8275:39;;;;-1:-1:-1::0;;;8275:39:10::5;;;;;;;:::i;:::-;8324:10;:18:::0;;-1:-1:-1;;8324:18:10::5;::::0;;;;-1:-1:-1;;;;;;;;;;;;;13234:27:10;;::::6;::::0;;13271;;::::6;-1:-1:-1::0;;;;13271:27:10;;;-1:-1:-1;;;13308:39:10;;;13380:10:::6;-1:-1:-1::0;;;13357:33:10;;;13426:12;;;::::6;::::0;;::::6;-1:-1:-1::0;;;13400:38:10;13472:47;;-1:-1:-1;;;13472:47:10;;::::6;::::0;::::6;3014:51:30::0;;;;13472:47:10;;-1:-1:-1;;;;13271:27:10;13472:25:::6;::::0;2987:18:30;;;;;-1:-1:-1;;13472:47:10;;;;;;13271:27;13472:47:::6;;;;;;;;;::::0;::::6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13529:41;::::0;-1:-1:-1;;;13529:41:10;;13448:71;;-1:-1:-1;13529:5:10::6;::::0;:16:::6;::::0;:41:::6;::::0;13546:5:::6;::::0;13553:9;;13546:5;;13529:41:::6;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;13629:20:10::6;::::0;::::6;::::0;13603:47:::6;::::0;-1:-1:-1;;;13603:47:10;;-1:-1:-1;;;;;3032:32:30;;;13603:47:10::6;::::0;::::6;3014:51:30::0;13580:20:10::6;::::0;13603:25;::::6;::::0;::::6;::::0;2987:18:30;;13603:47:10::6;;;;;;;;;;;;;;;;;::::0;::::6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13580:70:::0;-1:-1:-1;13676:28:10::6;13691:13:::0;13580:70;13676:28:::6;:::i;:::-;13660:44;;13740:16;13723:13;:33;;13715:75;;;;-1:-1:-1::0;;;13715:75:10::6;;;;;;;:::i;:::-;-1:-1:-1::0;;8363:10:10::5;:17:::0;;-1:-1:-1;;8363:17:10::5;::::0;::::5;::::0;;-1:-1:-1;12809:988:10;;;-1:-1:-1;;;;;;12809:988:10:o;28399:146::-;28504:34;;-1:-1:-1;;;28504:34:10;;28441:14;28504:34;;;2723:25:30;;;28441:14:10;28457:28;;28504:13;;:27;;2696:18:30;;28504:34:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28504:34:10;;;;;;;;;;;;:::i;:::-;28497:41;;;;28399:146;;:::o;22845:325::-;8560:9;;23040:29;;8560:9;;;;;8552:83;;;;-1:-1:-1;;;8552:83:10;;;;;;;:::i;:::-;22968:9:::1;8876;8858:15;:27;8850:64;;;;-1:-1:-1::0;;;8850:64:10::1;;;;;;;:::i;:::-;8283:10:::2;::::0;;;::::2;;;8275:39;;;;-1:-1:-1::0;;;8275:39:10::2;;;;;;;:::i;:::-;8324:10;:18:::0;;-1:-1:-1;;8324:18:10::2;::::0;;1037:22:28::3;:20;:22::i;:::-;23092:71:10::4;::::0;-1:-1:-1;;;23092:71:10;;23135:5:::4;23092:71;::::0;::::4;16599:25:30::0;;;16640:18;;;16633:34;;;16683:18;;;16676:50;23092:21:10::4;::::0;:42:::4;::::0;16572:18:30;;23092:71:10::4;;;;;;;;;;;;;;;;;;::::0;::::4;;;;;;;;;;;;;;;;;::::0;;::::4;-1:-1:-1::0;;23092:71:10::4;::::0;::::4;;::::0;::::4;::::0;;;::::4;::::0;::::4;:::i;:::-;23085:78;;-1:-1:-1::0;8363:10:10::2;:17:::0;;-1:-1:-1;;8363:17:10::2;::::0;::::2;::::0;;22845:325;;-1:-1:-1;;22845:325:10:o;26453:278::-;8283:10;;26628:13;;8283:10;;;;;8275:39;;;;-1:-1:-1;;;8275:39:10;;;;;;;:::i;:::-;8324:10;:18;;-1:-1:-1;;8324:18:10;;;1037:22:28::1;:20;:22::i;:::-;8704:9:10::2;::::0;::::2;::::0;::::2;;;8703:10;8695:84;;;;-1:-1:-1::0;;;8695:84:10::2;;;;;;;:::i;:::-;26668:56:::3;::::0;-1:-1:-1;;;26668:56:10;;26688:5:::3;26668:56;::::0;::::3;17364:25:30::0;-1:-1:-1;;;;;17463:15:30;;;17443:18;;;17436:43;17515:15;;17495:18;;;17488:43;17547:18;;;17540:34;;;26668:6:10::3;::::0;:19:::3;::::0;17336::30;;26668:56:10::3;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8363:10:::0;:17;;-1:-1:-1;;8363:17:10;;;;;26657:67;26453:278;-1:-1:-1;;;;26453:278:10:o;23582:319::-;23771:29;23676:9;8876;8858:15;:27;8850:64;;;;-1:-1:-1;;;8850:64:10;;;;;;;:::i;:::-;8283:10:::1;::::0;;;::::1;;;8275:39;;;;-1:-1:-1::0;;;8275:39:10::1;;;;;;;:::i;:::-;8324:10;:18:::0;;-1:-1:-1;;8324:18:10::1;::::0;;1037:22:28::2;:20;:22::i;:::-;8704:9:10::3;::::0;::::3;::::0;::::3;;;8703:10;8695:84;;;;-1:-1:-1::0;;;8695:84:10::3;;;;;;;:::i;19299:2129::-:0;19703:21;19726:26;19558:9;8876;8858:15;:27;8850:64;;;;-1:-1:-1;;;8850:64:10;;;;;;;:::i;:::-;8989:6:::1;;;;;;;;;-1:-1:-1::0;;;;;8989:6:10::1;-1:-1:-1::0;;;;;8989:27:10::1;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8988:30;8980:100;;;;-1:-1:-1::0;;;8980:100:10::1;;;;;;;:::i;:::-;8436:6:::2;::::0;::::2;;8435:7;8427:68;;;;-1:-1:-1::0;;;8427:68:10::2;;;;;;;:::i;:::-;8283:10:::3;::::0;;;::::3;;;8275:39;;;;-1:-1:-1::0;;;8275:39:10::3;;;;;;;:::i;:::-;8324:10;:18:::0;;-1:-1:-1;;8324:18:10::3;::::0;;1037:22:28::4;:20;:22::i;:::-;8704:9:10::5;::::0;::::5;::::0;::::5;;;8703:10;8695:84;;;;-1:-1:-1::0;;;8695:84:10::5;;;;;;;:::i;:::-;19787:1:::6;19776:8;:12;19768:49;;;::::0;-1:-1:-1;;;19768:49:10;;17787:2:30;19768:49:10::6;::::0;::::6;17769:21:30::0;17826:2;17806:18;;;17799:30;-1:-1:-1;;;17845:18:30;;;17838:54;17909:18;;19768:49:10::6;17585:348:30::0;19768:49:10::6;19856:21;19868:8;19856:11;:21::i;:::-;19827:50;;;;;;;;19894:4;-1:-1:-1::0;;;;;19888:19:10::6;;19915:9;19888:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::6;;;;;;;;;;;;::::0;::::6;;;;;-1:-1:-1::0;19937:67:10::6;::::0;-1:-1:-1;;;;;;;19944:4:10::6;19937:29;::::0;-1:-1:-1;19975:4:10::6;::::0;-1:-1:-1;19982:10:10::6;19994:9;19937:29;:67::i;:::-;20014:31;;:::i;:::-;20055:32:::0;;;20097:21:::6;::::0;::::6;:39:::0;;;20146:20:::6;::::0;::::6;:37:::0;;;20193:21:::6;::::0;::::6;:39:::0;;;20242:20:::6;::::0;::::6;:37:::0;;;20312:12;;:9;;20055:21:::6;::::0;20312:12:::6;;;;:::i;:::-;;;;;;;20289;:20;;:35;;;::::0;::::6;20358:9;20368:1;20358:12;;;;;;;;:::i;:::-;;;;;;;20334;:21;;:36;;;::::0;::::6;20402:8;20411:1;20402:11;;;;;;;;:::i;:::-;;::::0;;;::::6;::::0;;::::6;::::0;-1:-1:-1;;;;;20402:11:10::6;20380:19;::::0;::::6;:33:::0;20455:8:::6;:11:::0;;:8;;20402:11;20455::::6;;;;:::i;:::-;;::::0;;;::::6;::::0;;;::::6;::::0;20448:44:::6;::::0;-1:-1:-1;;;20448:44:10;;20486:4:::6;20448:44;::::0;::::6;3014:51:30::0;-1:-1:-1;;;;;20455:11:10;;::::6;::::0;20448:29:::6;::::0;2987:18:30;;20448:44:10::6;;;;;;;;;;;;;;;;;::::0;::::6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20423:22;::::0;::::6;:69:::0;20534:8:::6;:11:::0;;20543:1:::6;::::0;20534:11;::::6;;;;;:::i;:::-;;::::0;;;::::6;::::0;;;::::6;::::0;20527:44:::6;::::0;-1:-1:-1;;;20527:44:10;;20565:4:::6;20527:44;::::0;::::6;3014:51:30::0;-1:-1:-1;;;;;20534:11:10;;::::6;::::0;20527:29:::6;::::0;2987:18:30;;20527:44:10::6;;;;;;;;;;;;;;;;;::::0;::::6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20502:22;::::0;::::6;:69:::0;20610:62:::6;::::0;-1:-1:-1;;;20610:62:10;;:21:::6;::::0;:41:::6;::::0;:62:::6;::::0;20652:5:::6;::::0;20502:12;;20610:62:::6;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::6;;;;;;;;;;;;;;;;;::::0;;::::6;-1:-1:-1::0;;20610:62:10::6;::::0;::::6;;::::0;::::6;::::0;;;::::6;::::0;::::6;:::i;:::-;20581:91;;;;;;;;20683:17;20774:4;-1:-1:-1::0;;;;;20718:60:10::6;20731:5;:12;;20744:1;20731:15;;;;;;;;:::i;:::-;;::::0;;;::::6;::::0;;;;::::6;:20:::0;20718:52:::6;::::0;;-1:-1:-1;;;20718:52:10;;;;-1:-1:-1;;;;;20731:20:10;;::::6;::::0;20718:50:::6;::::0;:52:::6;::::0;;::::6;::::0;;;;;;20731:20;20718:52:::6;;;;;;;;;::::0;::::6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20718:60:10::6;::::0;20714:325:::6;;20818:9;20828:1;20818:12;;;;;;;;:::i;:::-;;;;;;;20806:9;:24;;;;:::i;:::-;20794:36;;20714:325;;;20907:4;-1:-1:-1::0;;;;;20851:60:10::6;20864:5;:12;;20877:1;20864:15;;;;;;;;:::i;:::-;;::::0;;;::::6;::::0;;;;::::6;:20:::0;20851:52:::6;::::0;;-1:-1:-1;;;20851:52:10;;;;-1:-1:-1;;;;;20864:20:10;;::::6;::::0;20851:50:::6;::::0;:52:::6;::::0;;::::6;::::0;;;;;;20864:20;20851:52:::6;;;;;;;;;::::0;::::6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20851:60:10::6;::::0;20847:192:::6;;20951:9;20961:1;20951:12;;;;;;;;:::i;20847:192::-;20994:34;::::0;-1:-1:-1;;;20994:34:10;;19277:2:30;20994:34:10::6;::::0;::::6;19259:21:30::0;19316:2;19296:18;;;19289:30;19355:26;19335:18;;;19328:54;19399:18;;20994:34:10::6;19075:348:30::0;20847:192:10::6;21099:13:::0;;21095:284:::6;;21128:67;-1:-1:-1::0;;;;;21135:4:10::6;21128:29;21158:10;21178:4;21185:9:::0;21128:29:::6;:67::i;:::-;21209:31;::::0;-1:-1:-1;;;21209:31:10;;::::6;::::0;::::6;2723:25:30::0;;;21215:4:10::6;-1:-1:-1::0;;;;;21209:20:10::6;::::0;::::6;::::0;2696:18:30;;21209:31:10::6;;;;;;;;;;;;;;;;;::::0;::::6;;;;;;;;;;;;::::0;::::6;;;;;-1:-1:-1::0;;21272:37:10::6;::::0;21255:12:::6;::::0;-1:-1:-1;21272:10:10::6;::::0;-1:-1:-1;21295:9:10;;21255:12;21272:37;21255:12;21272:37;21295:9;21272:10;:37:::6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21254:55;;;21331:7;21323:45;;;::::0;-1:-1:-1;;;21323:45:10;;19840:2:30;21323:45:10::6;::::0;::::6;19822:21:30::0;19879:2;19859:18;;;19852:30;19918:27;19898:18;;;19891:55;19963:18;;21323:45:10::6;19638:349:30::0;21323:45:10::6;21114:265;21095:284;21388:33;;-1:-1:-1::0;8363:10:10::3;:17:::0;;-1:-1:-1;;8363:17:10::3;::::0;::::3;::::0;;19299:2129;;;;-1:-1:-1;19299:2129:10;-1:-1:-1;;;;;19299:2129:10:o;17649:298::-;8989:6;;:29;;;-1:-1:-1;;;8989:29:10;;;;17827:21;;-1:-1:-1;;;;;8989:6:10;;:27;;:29;;;;;;;;;;;;;;:6;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8988:30;8980:100;;;;-1:-1:-1;;;8980:100:10;;;;;;;:::i;:::-;8436:6:::1;::::0;::::1;;8435:7;8427:68;;;;-1:-1:-1::0;;;8427:68:10::1;;;;;;;:::i;:::-;17880:60:::2;::::0;-1:-1:-1;;;17880:60:10;;17901:5:::2;17880:60;::::0;::::2;17364:25:30::0;-1:-1:-1;;;;;17463:15:30;;;17443:18;;;17436:43;17515:15;;17495:18;;;17488:43;17547:18;;;17540:34;;;17880:5:10::2;::::0;:20:::2;::::0;17336:19:30;;17880:60:10::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17864:76:::0;17649:298;-1:-1:-1;;;;17649:298:10:o;17981:1277::-;18366:21;18389:26;18221:9;8876;8858:15;:27;8850:64;;;;-1:-1:-1;;;8850:64:10;;;;;;;:::i;:::-;8989:6:::1;;;;;;;;;-1:-1:-1::0;;;;;8989:6:10::1;-1:-1:-1::0;;;;;8989:27:10::1;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8988:30;8980:100;;;;-1:-1:-1::0;;;8980:100:10::1;;;;;;;:::i;:::-;8436:6:::2;::::0;::::2;;8435:7;8427:68;;;;-1:-1:-1::0;;;8427:68:10::2;;;;;;;:::i;:::-;8283:10:::3;::::0;;;::::3;;;8275:39;;;;-1:-1:-1::0;;;8275:39:10::3;;;;;;;:::i;:::-;8324:10;:18:::0;;-1:-1:-1;;8324:18:10::3;::::0;;1037:22:28::4;:20;:22::i;:::-;8704:9:10::5;::::0;::::5;::::0;::::5;;;8703:10;8695:84;;;;-1:-1:-1::0;;;8695:84:10::5;;;;;;;:::i;:::-;18450:1:::6;18439:8;:12;18431:49;;;::::0;-1:-1:-1;;;18431:49:10;;17787:2:30;18431:49:10::6;::::0;::::6;17769:21:30::0;17826:2;17806:18;;;17799:30;-1:-1:-1;;;17845:18:30;;;17838:54;17909:18;;18431:49:10::6;17585:348:30::0;18431:49:10::6;18519:21;18531:8;18519:11;:21::i;:::-;18490:50:::0;;-1:-1:-1;18490:50:10;-1:-1:-1;18550:31:10::6;;:::i;:::-;18591:32:::0;;;18633:21:::6;::::0;::::6;:39:::0;;;18682:20:::6;::::0;::::6;:37:::0;;;18729:21:::6;::::0;::::6;:39:::0;;;18778:20:::6;::::0;::::6;:37:::0;;;18848:12;;:9;;18591:21:::6;::::0;18848:12:::6;;;;:::i;:::-;;;;;;;18825;:20;;:35;;;::::0;::::6;18894:9;18904:1;18894:12;;;;;;;;:::i;:::-;;;;;;;18870;:21;;:36;;;::::0;::::6;18938:8;18947:1;18938:11;;;;;;;;:::i;:::-;;::::0;;;::::6;::::0;;::::6;::::0;-1:-1:-1;;;;;18938:11:10::6;18916:19;::::0;::::6;:33:::0;18991:8:::6;:11:::0;;:8;;18938:11;18991::::6;;;;:::i;:::-;;::::0;;;::::6;::::0;;;::::6;::::0;18984:44:::6;::::0;-1:-1:-1;;;18984:44:10;;19022:4:::6;18984:44;::::0;::::6;3014:51:30::0;-1:-1:-1;;;;;18991:11:10;;::::6;::::0;18984:29:::6;::::0;2987:18:30;;18984:44:10::6;;;;;;;;;;;;;;;;;::::0;::::6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18959:22;::::0;::::6;:69:::0;19070:8:::6;:11:::0;;19079:1:::6;::::0;19070:11;::::6;;;;;:::i;:::-;;::::0;;;::::6;::::0;;;::::6;::::0;19063:44:::6;::::0;-1:-1:-1;;;19063:44:10;;19101:4:::6;19063:44;::::0;::::6;3014:51:30::0;-1:-1:-1;;;;;19070:11:10;;::::6;::::0;19063:29:::6;::::0;2987:18:30;;19063:44:10::6;;;;;;;;;;;;;;;;;::::0;::::6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19038:22;::::0;::::6;:69:::0;19146:62:::6;::::0;-1:-1:-1;;;19146:62:10;;:21:::6;::::0;:41:::6;::::0;:62:::6;::::0;19188:5:::6;::::0;19038:12;;19146:62:::6;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::6;;;;;;;;;;;;;;;;;::::0;;::::6;-1:-1:-1::0;;19146:62:10::6;::::0;::::6;;::::0;::::6;::::0;;;::::6;::::0;::::6;:::i;:::-;8363:10:::3;:17:::0;;-1:-1:-1;;8363:17:10::3;::::0;::::3;::::0;;19117:91;;;;-1:-1:-1;19117:91:10;-1:-1:-1;;;;;;;;;17981:1277:10:o;11580:207::-;11648:14;11664:13;11679:14;11695:16;11713:15;11751:12;:22;11774:5;11751:29;;;;;;;;;;;;;2723:25:30;;2711:2;2696:18;;2577:177;11751:29:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11744:36;;;;;;;;;;11580:207;;;;;:::o;13803:924::-;14087:21;13942:9;8876;8858:15;:27;8850:64;;;;-1:-1:-1;;;8850:64:10;;;;;;;:::i;:::-;8989:6:::1;;;;;;;;;-1:-1:-1::0;;;;;8989:6:10::1;-1:-1:-1::0;;;;;8989:27:10::1;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8988:30;8980:100;;;;-1:-1:-1::0;;;8980:100:10::1;;;;;;;:::i;:::-;8436:6:::2;::::0;::::2;;8435:7;8427:68;;;;-1:-1:-1::0;;;8427:68:10::2;;;;;;;:::i;:::-;1037:22:28::3;:20;:22::i;:::-;8704:9:10::4;::::0;::::4;::::0;::::4;;;8703:10;8695:84;;;;-1:-1:-1::0;;;8695:84:10::4;;;;;;;:::i;:::-;8283:10:::5;::::0;;;::::5;;;8275:39;;;;-1:-1:-1::0;;;8275:39:10::5;;;;;;;:::i;:::-;8324:10;:18:::0;;-1:-1:-1;;8324:18:10::5;::::0;;14203:39:::6;::::0;;-1:-1:-1;;;14203:39:10;;;;-1:-1:-1;;;;;14209:4:10::6;14203:19;::::0;::::6;::::0;14230:9:::6;::::0;14203:39:::6;::::0;;::::6;::::0;8337:5:::5;::::0;14203:39;;;;;;;;14230:9;14203:19;:39;::::6;;::::0;::::6;;;;::::0;::::6;;;;;;;;;;;;::::0;::::6;;;;;-1:-1:-1::0;14252:67:10::6;::::0;-1:-1:-1;;;;;;;14259:4:10::6;14252:29;::::0;-1:-1:-1;14290:4:10::6;::::0;-1:-1:-1;14297:10:10::6;14309:9;14252:29;:67::i;:::-;-1:-1:-1::0;;;;;;;;;;;;;14390:4:10::6;14370:24:::0;::::6;::::0;;14404:27;;::::6;-1:-1:-1::0;;;14404:27:10;14467:9:::6;-1:-1:-1::0;;;14441:35:10;14509:10:::6;-1:-1:-1::0;;;14486:33:10;14555:12:::6;::::0;;;::::6;;-1:-1:-1::0;;;14529:38:10;14593:41;;-1:-1:-1;;;14593:41:10;;:5:::6;::::0;:16:::6;::::0;:41:::6;::::0;-1:-1:-1;;;;;;14593:41:10::6;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14577:57;;14670:16;14653:13;:33;;14645:75;;;;-1:-1:-1::0;;;14645:75:10::6;;;;;;;:::i;:::-;-1:-1:-1::0;;8363:10:10::5;:17:::0;;-1:-1:-1;;8363:17:10::5;::::0;::::5;::::0;;13803:924;;-1:-1:-1;;;13803:924:10:o;21838:563::-;21972:7;21981:16;8989:6;;;;;;;;;-1:-1:-1;;;;;8989:6:10;-1:-1:-1;;;;;8989:27:10;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8988:30;8980:100;;;;-1:-1:-1;;;8980:100:10;;;;;;;:::i;:::-;8436:6:::1;::::0;::::1;;8435:7;8427:68;;;;-1:-1:-1::0;;;8427:68:10::1;;;;;;;:::i;:::-;22106:16:::2;::::0;;22120:1:::2;22106:16:::0;;;;;::::2;::::0;;22055::::2;::::0;;;22106;22120:1;22106:16:::2;::::0;::::2;::::0;;::::2;::::0;::::2;;::::0;-1:-1:-1;;22152:62:10::2;::::0;-1:-1:-1;;;22152:62:10;;22198:5:::2;22152:62;::::0;::::2;20629:25:30::0;20670:18;;;20663:34;;;22081:41:10;;-1:-1:-1;22152:21:10::2;::::0;:45:::2;::::0;20602:18:30;;22152:62:10::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;::::0;;::::2;-1:-1:-1::0;;22152:62:10::2;::::0;::::2;;::::0;::::2;::::0;;;::::2;::::0;::::2;:::i;:::-;22132:82:::0;;-1:-1:-1;22132:82:10;-1:-1:-1;22224:13:10::2;22132:82:::0;22241:15:::2;:8:::0;22252:4:::2;22241:15;:::i;:::-;22240:28;;;;:::i;:::-;22224:44;;22310:4;22301:5;22290;22296:1;22290:8;;;;;;;;:::i;:::-;;;;;;;:16;;;;:::i;:::-;22289:25;;;;:::i;:::-;22278:5;22284:1;22278:8;;;;;;;;:::i;:::-;;;;;;:36;;;::::0;::::2;22356:4;22347:5;22336;22342:1;22336:8;;;;;;;;:::i;:::-;;;;;;;:16;;;;:::i;:::-;22335:25;;;;:::i;:::-;22324:5;22330:1;22324:8;;;;;;;;:::i;:::-;;::::0;;::::2;::::0;;;;;:36;-1:-1:-1;22378:8:10;;21838:563;-1:-1:-1;;;21838:563:10:o;16545:782::-;16892:21;16747:9;8876;8858:15;:27;8850:64;;;;-1:-1:-1;;;8850:64:10;;;;;;;:::i;:::-;8989:6:::1;;;;;;;;;-1:-1:-1::0;;;;;8989:6:10::1;-1:-1:-1::0;;;;;8989:27:10::1;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8988:30;8980:100;;;;-1:-1:-1::0;;;8980:100:10::1;;;;;;;:::i;:::-;8436:6:::2;::::0;::::2;;8435:7;8427:68;;;;-1:-1:-1::0;;;8427:68:10::2;;;;;;;:::i;:::-;1037:22:28::3;:20;:22::i;:::-;8704:9:10::4;::::0;::::4;::::0;::::4;;;8703:10;8695:84;;;;-1:-1:-1::0;;;8695:84:10::4;;;;;;;:::i;:::-;8283:10:::5;::::0;;;::::5;;;8275:39;;;;-1:-1:-1::0;;;8275:39:10::5;;;;;;;:::i;:::-;8324:10;:18:::0;;-1:-1:-1;;8324:18:10::5;::::0;;;;-1:-1:-1;;;;;;;;;;;;;16970:27:10;;::::6;::::0;;17007;;::::6;-1:-1:-1::0;;;17007:27:10;-1:-1:-1;;;17044:39:10;;;17116:10:::6;-1:-1:-1::0;;;17093:33:10;17162:12;;;::::6;::::0;;::::6;-1:-1:-1::0;;;17136:38:10;17200:34;-1:-1:-1;;;17200:34:10;;:5:::6;::::0;:16:::6;::::0;:34:::6;::::0;-1:-1:-1;;;;17200:34:10::6;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17184:50;;17270:16;17253:13;:33;;17245:75;;;::::0;-1:-1:-1;;;17245:75:10;;21677:2:30;17245:75:10::6;::::0;::::6;21659:21:30::0;21716:2;21696:18;;;21689:30;21755:31;21735:18;;;21728:59;21804:18;;17245:75:10::6;21475:353:30::0;17245:75:10::6;-1:-1:-1::0;;8363:10:10::5;:17:::0;;-1:-1:-1;;8363:17:10::5;::::0;::::5;::::0;;16545:782;;-1:-1:-1;;;;;16545:782:10:o;10453:258::-;8136:5;;-1:-1:-1;;;;;8136:5:10;8122:10;:19;;:65;;;8159:6;;;;;;;;;-1:-1:-1;;;;;8159:6:10;-1:-1:-1;;;;;8159:26:10;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8145:42:10;:10;-1:-1:-1;;;;;8145:42:10;;8122:65;8114:103;;;;-1:-1:-1;;;8114:103:10;;;;;;;:::i;:::-;10614:90:::1;::::0;-1:-1:-1;;;10614:90:10;;10642:5:::1;10614:90;::::0;::::1;22120:25:30::0;-1:-1:-1;;;;;22219:15:30;;;22199:18;;;22192:43;22271:15;;;22251:18;;;22244:43;22323:15;;;22303:18;;;22296:43;22376:15;;22355:19;;;22348:44;10614:12:10::1;::::0;:27:::1;::::0;22092:19:30;;10614:90:10::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;10453:258:::0;;;;:::o;11938:164::-;8136:5;;-1:-1:-1;;;;;8136:5:10;8122:10;:19;;:65;;;8159:6;;;;;;;;;-1:-1:-1;;;;;8159:6:10;-1:-1:-1;;;;;8159:26:10;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8145:42:10;:10;-1:-1:-1;;;;;8145:42:10;;8122:65;8114:103;;;;-1:-1:-1;;;8114:103:10;;;;;;;:::i;:::-;12020:33:::1;::::0;470:14:30;;463:22;445:41;;12020:33:10::1;::::0;433:2:30;418:18;12020:33:10::1;;;;;;;12064:6;:31:::0;;-1:-1:-1;;12064:31:10::1;::::0;::::1;;::::0;;;::::1;::::0;;11938:164::o;1812:25:14:-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1812:25:14;;-1:-1:-1;1812:25:14;:::o;15790:298:10:-;8989:6;;:29;;;-1:-1:-1;;;8989:29:10;;;;15968:21;;-1:-1:-1;;;;;8989:6:10;;:27;;:29;;;;;;;;;;;;;;:6;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8988:30;8980:100;;;;-1:-1:-1;;;8980:100:10;;;;;;;:::i;:::-;8436:6:::1;::::0;::::1;;8435:7;8427:68;;;;-1:-1:-1::0;;;8427:68:10::1;;;;;;;:::i;:::-;16021:60:::2;::::0;-1:-1:-1;;;16021:60:10;;16042:5:::2;16021:60;::::0;::::2;17364:25:30::0;-1:-1:-1;;;;;17463:15:30;;;17443:18;;;17436:43;17515:15;;17495:18;;;17488:43;17547:18;;;17540:34;;;16021:5:10::2;::::0;:20:::2;::::0;17336:19:30;;16021:60:10::2;17105:475:30::0;1677:20:14;;;;;;;:::i;1779:27::-;;;;;;;;;;;;25859:244:10;8283:10;;26013:13;;8283:10;;;;;8275:39;;;;-1:-1:-1;;;8275:39:10;;;;;;;:::i;:::-;8324:10;:18;;-1:-1:-1;;8324:18:10;;;1037:22:28::1;:20;:22::i;:::-;8704:9:10::2;::::0;::::2;::::0;::::2;;;8703:10;8695:84;;;;-1:-1:-1::0;;;8695:84:10::2;;;;;;;:::i;:::-;26053:43:::3;::::0;-1:-1:-1;;;26053:43:10;;26069:5:::3;26053:43;::::0;::::3;11008:25:30::0;-1:-1:-1;;;;;11069:32:30;;11049:18;;;11042:60;11118:18;;;11111:34;;;26053:6:10::3;::::0;:15:::3;::::0;10981:18:30;;26053:43:10::3;10778:373:30::0;1745:28:14;;;;;;;;;;;;24339:321:10;24531:29;24436:9;8876;8858:15;:27;8850:64;;;;-1:-1:-1;;;8850:64:10;;;;;;;:::i;:::-;8283:10:::1;::::0;;;::::1;;;8275:39;;;;-1:-1:-1::0;;;8275:39:10::1;;;;;;;:::i;:::-;8324:10;:18:::0;;-1:-1:-1;;8324:18:10::1;::::0;;1037:22:28::2;:20;:22::i;:::-;8704:9:10::3;::::0;::::3;::::0;::::3;;;8703:10;8695:84;;;;-1:-1:-1::0;;;8695:84:10::3;;;;;;;:::i;:::-;24583:70:::4;::::0;-1:-1:-1;;;24583:70:10;;24626:5:::4;24583:70;::::0;::::4;16599:25:30::0;16640:18;;;16633:34;;;24648:4:10::4;16683:18:30::0;;;16676:50;24583:21:10::4;::::0;:42:::4;::::0;16572:18:30;;24583:70:10::4;16375:357:30::0;10841:425:10;8136:5;;-1:-1:-1;;;;;8136:5:10;8122:10;:19;;:65;;;8159:6;;;;;;;;;-1:-1:-1;;;;;8159:6:10;-1:-1:-1;;;;;8159:26:10;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8145:42:10;:10;-1:-1:-1;;;;;8145:42:10;;8122:65;8114:103;;;;-1:-1:-1;;;8114:103:10;;;;;;;:::i;:::-;10923:9:::1;10918:293;10942:10;:17:::0;10938:21;::::1;10918:293;;;10999:10;11010:1;10999:13;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;10999:13:10;;::::1;10984:28:::0;;::::1;::::0;10980:106:::1;;11032:39;::::0;-1:-1:-1;;;11032:39:10;;22605:2:30;11032:39:10::1;::::0;::::1;22587:21:30::0;22644:2;22624:18;;;22617:30;22683:31;22663:18;;;22656:59;22732:18;;11032:39:10::1;22403:353:30::0;10980:106:10::1;11118:8;11127:1;11118:11;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;11118:11:10;;::::1;11103:26:::0;;::::1;::::0;11099:102:::1;;11149:37;::::0;-1:-1:-1;;;11149:37:10;;22963:2:30;11149:37:10::1;::::0;::::1;22945:21:30::0;23002:2;22982:18;;;22975:30;23041:29;23021:18;;;23014:57;23088:18;;11149:37:10::1;22761:351:30::0;11099:102:10::1;10961:3:::0;::::1;::::0;::::1;:::i;:::-;;;;10918:293;;;-1:-1:-1::0;;;;;;11228:31:10::1;:5;:31:::0;;;:18:::1;:31;::::0;;;;11221:38;;-1:-1:-1;;;;;;11221:38:10;;;10841:425::o;10211:236::-;8136:5;;-1:-1:-1;;;;;8136:5:10;8122:10;:19;;:65;;;8159:6;;;;;;;;;-1:-1:-1;;;;;8159:6:10;-1:-1:-1;;;;;8159:26:10;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8145:42:10;:10;-1:-1:-1;;;;;8145:42:10;;8122:65;8114:103;;;;-1:-1:-1;;;8114:103:10;;;;;;;:::i;:::-;10365:75:::1;::::0;-1:-1:-1;;;10365:75:10;;10388:5:::1;10365:75;::::0;::::1;23572:25:30::0;23613:18;;;23606:34;;;23656:18;;;23649:34;;;23699:18;;;23692:34;;;23742:19;;;23735:35;;;23786:19;;;23779:35;;;10365:12:10::1;::::0;:22:::1;::::0;23544:19:30;;10365:75:10::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;10211:236:::0;;;;;:::o;14733:727::-;15022:21;14877:9;8876;8858:15;:27;8850:64;;;;-1:-1:-1;;;8850:64:10;;;;;;;:::i;:::-;8989:6:::1;;;;;;;;;-1:-1:-1::0;;;;;8989:6:10::1;-1:-1:-1::0;;;;;8989:27:10::1;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8988:30;8980:100;;;;-1:-1:-1::0;;;8980:100:10::1;;;;;;;:::i;:::-;8436:6:::2;::::0;::::2;;8435:7;8427:68;;;;-1:-1:-1::0;;;8427:68:10::2;;;;;;;:::i;:::-;1037:22:28::3;:20;:22::i;:::-;8704:9:10::4;::::0;::::4;::::0;::::4;;;8703:10;8695:84;;;;-1:-1:-1::0;;;8695:84:10::4;;;;;;;:::i;:::-;8283:10:::5;::::0;;;::::5;;;8275:39;;;;-1:-1:-1::0;;;8275:39:10::5;;;;;;;:::i;:::-;8324:10;:18:::0;;-1:-1:-1;;8324:18:10::5;::::0;;;;-1:-1:-1;;;;;;;;;;;;;15100:27:10;;::::6;::::0;;15157:4:::6;15137:24:::0;::::6;-1:-1:-1::0;;;15137:24:10;-1:-1:-1;;;15171:39:10;;;15243:10:::6;-1:-1:-1::0;;;15220:33:10;15289:12;;;::::6;::::0;;::::6;-1:-1:-1::0;;;15263:38:10;15327:40;-1:-1:-1;;;15327:40:10;;:5:::6;::::0;:16:::6;::::0;:40:::6;::::0;-1:-1:-1;;;;;;15327:40:10::6;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15311:56;;15403:16;15386:13;:33;;15378:75;;;;-1:-1:-1::0;;;15378:75:10::6;;;;;;;:::i;:::-;-1:-1:-1::0;;8363:10:10::5;:17:::0;;-1:-1:-1;;8363:17:10::5;::::0;::::5;::::0;;14733:727;;-1:-1:-1;;;;14733:727:10:o;24992:256::-;8989:6;;:29;;;-1:-1:-1;;;8989:29:10;;;;25134:16;;-1:-1:-1;;;;;8989:6:10;;:27;;:29;;;;;;;;;;;;;;:6;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8988:30;8980:100;;;;-1:-1:-1;;;8980:100:10;;;;;;;:::i;:::-;8436:6:::1;::::0;::::1;;8435:7;8427:68;;;;-1:-1:-1::0;;;8427:68:10::1;;;;;;;:::i;:::-;25173::::2;::::0;-1:-1:-1;;;25173:68:10;;25220:5:::2;25173:68;::::0;::::2;20629:25:30::0;20670:18;;;20663:34;;;25173:21:10::2;::::0;:46:::2;::::0;20602:18:30;;25173:68:10::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;::::0;;::::2;-1:-1:-1::0;;25173:68:10::2;::::0;::::2;;::::0;::::2;::::0;;;::::2;::::0;::::2;:::i;12108:237::-:0;8136:5;;-1:-1:-1;;;;;8136:5:10;8122:10;:19;;:65;;;8159:6;;;;;;;;;-1:-1:-1;;;;;8159:6:10;-1:-1:-1;;;;;8159:26:10;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8145:42:10;:10;-1:-1:-1;;;;;8145:42:10;;8122:65;8114:103;;;;-1:-1:-1;;;8114:103:10;;;;;;;:::i;:::-;-1:-1:-1;;;;;12191:23:10;::::1;12183:74;;;::::0;-1:-1:-1;;;12183:74:10;;24027:2:30;12183:74:10::1;::::0;::::1;24009:21:30::0;24066:2;24046:18;;;24039:30;24105:34;24085:18;;;24078:62;-1:-1:-1;;;24156:18:30;;;24149:36;24202:19;;12183:74:10::1;23825:402:30::0;12183:74:10::1;12293:5;::::0;12273:37:::1;::::0;-1:-1:-1;;;;;12273:37:10;;::::1;::::0;12293:5:::1;::::0;12273:37:::1;::::0;12293:5:::1;::::0;12273:37:::1;12321:5;:17:::0;;-1:-1:-1;;;;;;12321:17:10::1;-1:-1:-1::0;;;;;12321:17:10;;;::::1;::::0;;;::::1;::::0;;12108:237::o;836:96:28:-;907:4;-1:-1:-1;;;;;916:8:28;899:25;;891:34;;;;;;836:96::o;938:203:4:-;1065:68;;;-1:-1:-1;;;;;24490:15:30;;;1065:68:4;;;24472:34:30;24542:15;;24522:18;;;24515:43;24574:18;;;;24567:34;;;1065:68:4;;;;;;;;;;24407:18:30;;;;1065:68:4;;;;;;;;-1:-1:-1;;;;;1065:68:4;-1:-1:-1;;;1065:68:4;;;1038:96;;1058:5;;1038:19;:96::i;:::-;938:203;;;;:::o;3583:706::-;4002:23;4028:69;4056:4;4028:69;;;;;;;;;;;;;;;;;4036:5;-1:-1:-1;;;;;4028:27:4;;;:69;;;;;:::i;:::-;4111:17;;4002:95;;-1:-1:-1;4111:21:4;4107:176;;4206:10;4195:30;;;;;;;;;;;;:::i;:::-;4187:85;;;;-1:-1:-1;;;4187:85:4;;24814:2:30;4187:85:4;;;24796:21:30;24853:2;24833:18;;;24826:30;24892:34;24872:18;;;24865:62;-1:-1:-1;;;24943:18:30;;;24936:40;24993:19;;4187:85:4;24612:406:30;4187:85:4;3653:636;3583:706;;:::o;4109:223:5:-;4242:12;4273:52;4295:6;4303:4;4309:1;4312:12;4273:21;:52::i;4109:223::-;;;;;;:::o;5166:446::-;5331:12;5388:5;5363:21;:30;;5355:81;;;;-1:-1:-1;;;5355:81:5;;25225:2:30;5355:81:5;;;25207:21:30;25264:2;25244:18;;;25237:30;25303:34;25283:18;;;25276:62;-1:-1:-1;;;25354:18:30;;;25347:36;25400:19;;5355:81:5;25023:402:30;5355:81:5;5447:12;5461:23;5488:6;-1:-1:-1;;;;;5488:11:5;5507:5;5514:4;5488:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5446:73;;;;5536:69;5563:6;5571:7;5580:10;5592:12;5536:26;:69::i;:::-;5529:76;5166:446;-1:-1:-1;;;;;;;5166:446:5:o;7672:628::-;7852:12;7880:7;7876:418;;;7907:10;:17;7928:1;7907:22;7903:286;;-1:-1:-1;;;;;1702:19:5;;;8114:60;;;;-1:-1:-1;;;8114:60:5;;25924:2:30;8114:60:5;;;25906:21:30;25963:2;25943:18;;;25936:30;26002:31;25982:18;;;25975:59;26051:18;;8114:60:5;25722:353:30;8114:60:5;-1:-1:-1;8209:10:5;8202:17;;7876:418;8250:33;8258:10;8270:12;8981:17;;:21;8977:379;;9209:10;9203:17;9265:15;9252:10;9248:2;9244:19;9237:44;8977:379;9332:12;9325:20;;-1:-1:-1;;;9325:20:5;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:286:30:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:30;;209:43;;199:71;;266:1;263;256:12;497:118;583:5;576:13;569:21;562:5;559:32;549:60;;605:1;602;595:12;549:60;497:118;:::o;620:241::-;676:6;729:2;717:9;708:7;704:23;700:32;697:52;;;745:1;742;735:12;697:52;784:9;771:23;803:28;825:5;803:28;:::i;866:250::-;951:1;961:113;975:6;972:1;969:13;961:113;;;1051:11;;;1045:18;1032:11;;;1025:39;997:2;990:10;961:113;;;-1:-1:-1;;1108:1:30;1090:16;;1083:27;866:250::o;1121:396::-;1270:2;1259:9;1252:21;1233:4;1302:6;1296:13;1345:6;1340:2;1329:9;1325:18;1318:34;1361:79;1433:6;1428:2;1417:9;1413:18;1408:2;1400:6;1396:15;1361:79;:::i;:::-;1501:2;1480:15;-1:-1:-1;;1476:29:30;1461:45;;;;1508:2;1457:54;;1121:396;-1:-1:-1;;1121:396:30:o;1522:131::-;-1:-1:-1;;;;;1597:31:30;;1587:42;;1577:70;;1643:1;1640;1633:12;1658:315;1726:6;1734;1787:2;1775:9;1766:7;1762:23;1758:32;1755:52;;;1803:1;1800;1793:12;1755:52;1842:9;1829:23;1861:31;1886:5;1861:31;:::i;:::-;1911:5;1963:2;1948:18;;;;1935:32;;-1:-1:-1;;;1658:315:30:o;1978:594::-;2073:6;2081;2089;2097;2105;2158:3;2146:9;2137:7;2133:23;2129:33;2126:53;;;2175:1;2172;2165:12;2126:53;2214:9;2201:23;2233:31;2258:5;2233:31;:::i;:::-;2283:5;-1:-1:-1;2340:2:30;2325:18;;2312:32;2353:33;2312:32;2353:33;:::i;:::-;1978:594;;2405:7;;-1:-1:-1;;;;2459:2:30;2444:18;;2431:32;;2510:2;2495:18;;2482:32;;2561:3;2546:19;;;2533:33;;-1:-1:-1;1978:594:30:o;3076:435::-;3129:3;3167:5;3161:12;3194:6;3189:3;3182:19;3220:4;3249:2;3244:3;3240:12;3233:19;;3286:2;3279:5;3275:14;3307:1;3317:169;3331:6;3328:1;3325:13;3317:169;;;3392:13;;3380:26;;3426:12;;;;3461:15;;;;3353:1;3346:9;3317:169;;;-1:-1:-1;3502:3:30;;3076:435;-1:-1:-1;;;;;3076:435:30:o;3516:332::-;3723:6;3712:9;3705:25;3766:2;3761;3750:9;3746:18;3739:30;3686:4;3786:56;3838:2;3827:9;3823:18;3815:6;3786:56;:::i;3853:248::-;3921:6;3929;3982:2;3970:9;3961:7;3957:23;3953:32;3950:52;;;3998:1;3995;3988:12;3950:52;-1:-1:-1;;4021:23:30;;;4091:2;4076:18;;;4063:32;;-1:-1:-1;3853:248:30:o;4106:261::-;4285:2;4274:9;4267:21;4248:4;4305:56;4357:2;4346:9;4342:18;4334:6;4305:56;:::i;4372:456::-;4449:6;4457;4465;4518:2;4506:9;4497:7;4493:23;4489:32;4486:52;;;4534:1;4531;4524:12;4486:52;4573:9;4560:23;4592:31;4617:5;4592:31;:::i;:::-;4642:5;-1:-1:-1;4699:2:30;4684:18;;4671:32;4712:33;4671:32;4712:33;:::i;:::-;4372:456;;4764:7;;-1:-1:-1;;;4818:2:30;4803:18;;;;4790:32;;4372:456::o;5022:247::-;5081:6;5134:2;5122:9;5113:7;5109:23;5105:32;5102:52;;;5150:1;5147;5140:12;5102:52;5189:9;5176:23;5208:31;5233:5;5208:31;:::i;5274:523::-;5378:6;5386;5394;5402;5410;5418;5471:3;5459:9;5450:7;5446:23;5442:33;5439:53;;;5488:1;5485;5478:12;5439:53;-1:-1:-1;;5511:23:30;;;5581:2;5566:18;;5553:32;;-1:-1:-1;5632:2:30;5617:18;;5604:32;;5683:2;5668:18;;5655:32;;-1:-1:-1;5734:3:30;5719:19;;5706:33;;-1:-1:-1;5786:3:30;5771:19;5758:33;;-1:-1:-1;5274:523:30;-1:-1:-1;5274:523:30:o;6270:383::-;6347:6;6355;6363;6416:2;6404:9;6395:7;6391:23;6387:32;6384:52;;;6432:1;6429;6422:12;6384:52;6471:9;6458:23;6490:31;6515:5;6490:31;:::i;:::-;6540:5;6592:2;6577:18;;6564:32;;-1:-1:-1;6643:2:30;6628:18;;;6615:32;;6270:383;-1:-1:-1;;;6270:383:30:o;6658:180::-;6717:6;6770:2;6758:9;6749:7;6745:23;6741:32;6738:52;;;6786:1;6783;6776:12;6738:52;-1:-1:-1;6809:23:30;;6658:180;-1:-1:-1;6658:180:30:o;7453:671::-;7539:6;7547;7555;7563;7616:3;7604:9;7595:7;7591:23;7587:33;7584:53;;;7633:1;7630;7623:12;7584:53;7672:9;7659:23;7691:31;7716:5;7691:31;:::i;:::-;7741:5;-1:-1:-1;7798:2:30;7783:18;;7770:32;7811:33;7770:32;7811:33;:::i;:::-;7863:7;-1:-1:-1;7922:2:30;7907:18;;7894:32;7935:33;7894:32;7935:33;:::i;:::-;7987:7;-1:-1:-1;8046:2:30;8031:18;;8018:32;8059:33;8018:32;8059:33;:::i;:::-;7453:671;;;;-1:-1:-1;7453:671:30;;-1:-1:-1;;7453:671:30:o;8129:454::-;8224:6;8232;8240;8248;8256;8309:3;8297:9;8288:7;8284:23;8280:33;8277:53;;;8326:1;8323;8316:12;8277:53;-1:-1:-1;;8349:23:30;;;8419:2;8404:18;;8391:32;;-1:-1:-1;8470:2:30;8455:18;;8442:32;;8521:2;8506:18;;8493:32;;-1:-1:-1;8572:3:30;8557:19;8544:33;;-1:-1:-1;8129:454:30;-1:-1:-1;8129:454:30:o;8588:388::-;8656:6;8664;8717:2;8705:9;8696:7;8692:23;8688:32;8685:52;;;8733:1;8730;8723:12;8685:52;8772:9;8759:23;8791:31;8816:5;8791:31;:::i;:::-;8841:5;-1:-1:-1;8898:2:30;8883:18;;8870:32;8911:33;8870:32;8911:33;:::i;:::-;8963:7;8953:17;;;8588:388;;;;;:::o;8981:452::-;9067:6;9075;9083;9091;9144:3;9132:9;9123:7;9119:23;9115:33;9112:53;;;9161:1;9158;9151:12;9112:53;9200:9;9187:23;9219:31;9244:5;9219:31;:::i;:::-;9269:5;9321:2;9306:18;;9293:32;;-1:-1:-1;9372:2:30;9357:18;;9344:32;;9423:2;9408:18;9395:32;;-1:-1:-1;8981:452:30;-1:-1:-1;;;8981:452:30:o;9438:251::-;9508:6;9561:2;9549:9;9540:7;9536:23;9532:32;9529:52;;;9577:1;9574;9567:12;9529:52;9609:9;9603:16;9628:31;9653:5;9628:31;:::i;9694:349::-;9896:2;9878:21;;;9935:2;9915:18;;;9908:30;9974:27;9969:2;9954:18;;9947:55;10034:2;10019:18;;9694:349::o;10048:380::-;10127:1;10123:12;;;;10170;;;10191:61;;10245:4;10237:6;10233:17;10223:27;;10191:61;10298:2;10290:6;10287:14;10267:18;10264:38;10261:161;;10344:10;10339:3;10335:20;10332:1;10325:31;10379:4;10376:1;10369:15;10407:4;10404:1;10397:15;10261:161;;10048:380;;;:::o;10433:340::-;10635:2;10617:21;;;10674:2;10654:18;;;10647:30;-1:-1:-1;;;10708:2:30;10693:18;;10686:46;10764:2;10749:18;;10433:340::o;11156:245::-;11223:6;11276:2;11264:9;11255:7;11251:23;11247:32;11244:52;;;11292:1;11289;11282:12;11244:52;11324:9;11318:16;11343:28;11365:5;11343:28;:::i;11406:348::-;11608:2;11590:21;;;11647:2;11627:18;;;11620:30;11686:26;11681:2;11666:18;;11659:54;11745:2;11730:18;;11406:348::o;11759:421::-;11961:2;11943:21;;;12000:2;11980:18;;;11973:30;12039:34;12034:2;12019:18;;12012:62;12110:27;12105:2;12090:18;;12083:55;12170:3;12155:19;;11759:421::o;12185:412::-;12387:2;12369:21;;;12426:2;12406:18;;;12399:30;12465:34;12460:2;12445:18;;12438:62;-1:-1:-1;;;12531:2:30;12516:18;;12509:46;12587:3;12572:19;;12185:412::o;12602:425::-;12804:2;12786:21;;;12843:2;12823:18;;;12816:30;12882:34;12877:2;12862:18;;12855:62;12953:31;12948:2;12933:18;;12926:59;13017:3;13002:19;;12602:425::o;13032:184::-;13102:6;13155:2;13143:9;13134:7;13130:23;13126:32;13123:52;;;13171:1;13168;13161:12;13123:52;-1:-1:-1;13194:16:30;;13032:184;-1:-1:-1;13032:184:30:o;13221:397::-;13343:12;;-1:-1:-1;;;;;13339:21:30;;;13327:34;;13414:4;13403:16;;;13397:23;13393:32;;13377:14;;;13370:56;13475:4;13464:16;;;13458:23;13442:14;;;13435:47;13535:4;13524:16;;;13518:23;13514:32;;13498:14;;;13491:56;13600:4;13589:16;;;13583:23;13579:32;13563:14;;13556:56;13221:397::o;13623:449::-;13912:25;;;13899:3;13884:19;;13946:60;14002:2;13987:18;;13979:6;13946:60;:::i;:::-;14057:6;14050:14;14043:22;14037:3;14026:9;14022:19;14015:51;13623:449;;;;;;:::o;14077:127::-;14138:10;14133:3;14129:20;14126:1;14119:31;14169:4;14166:1;14159:15;14193:4;14190:1;14183:15;14209:128;14276:9;;;14297:11;;;14294:37;;;14311:18;;:::i;14342:353::-;14544:2;14526:21;;;14583:2;14563:18;;;14556:30;14622:31;14617:2;14602:18;;14595:59;14686:2;14671:18;;14342:353::o;14910:127::-;14971:10;14966:3;14962:20;14959:1;14952:31;15002:4;14999:1;14992:15;15026:4;15023:1;15016:15;15042:899;15107:5;15160:3;15153:4;15145:6;15141:17;15137:27;15127:55;;15178:1;15175;15168:12;15127:55;15207:6;15201:13;15233:4;15256:18;15293:2;15289;15286:10;15283:36;;;15299:18;;:::i;:::-;15345:2;15342:1;15338:10;15377:2;15371:9;15440:2;15436:7;15431:2;15427;15423:11;15419:25;15411:6;15407:38;15495:6;15483:10;15480:22;15475:2;15463:10;15460:18;15457:46;15454:72;;;15506:18;;:::i;:::-;15542:2;15535:22;15592:18;;;15668:15;;;15664:24;;;15626:15;;;;-1:-1:-1;15700:15:30;;;15697:35;;;15728:1;15725;15718:12;15697:35;15764:2;15756:6;15752:15;15741:26;;15776:135;15792:6;15787:3;15784:15;15776:135;;;15858:10;;15846:23;;15889:12;;;;15809;;;;15776:135;;15946:424;16050:6;16058;16111:2;16099:9;16090:7;16086:23;16082:32;16079:52;;;16127:1;16124;16117:12;16079:52;16156:9;16150:16;16140:26;;16210:2;16199:9;16195:18;16189:25;16237:18;16229:6;16226:30;16223:50;;;16269:1;16266;16259:12;16223:50;16292:72;16356:7;16347:6;16336:9;16332:22;16292:72;:::i;:::-;16282:82;;;15946:424;;;;;:::o;16737:363::-;16832:6;16885:2;16873:9;16864:7;16860:23;16856:32;16853:52;;;16901:1;16898;16891:12;16853:52;16934:9;16928:16;16967:18;16959:6;16956:30;16953:50;;;16999:1;16996;16989:12;16953:50;17022:72;17086:7;17077:6;17066:9;17062:22;17022:72;:::i;17938:127::-;17999:10;17994:3;17990:20;17987:1;17980:31;18030:4;18027:1;18020:15;18054:4;18051:1;18044:15;18070:1000;18276:4;18318:3;18307:9;18303:19;18295:27;;18349:6;18338:9;18331:25;18398:6;18392:13;18387:2;18376:9;18372:18;18365:41;18460:2;18452:6;18448:15;18442:22;18437:2;18426:9;18422:18;18415:50;18519:2;18511:6;18507:15;18501:22;18496:2;18485:9;18481:18;18474:50;18579:2;18571:6;18567:15;18561:22;18555:3;18544:9;18540:19;18533:51;18639:3;18631:6;18627:16;18621:23;18615:3;18604:9;18600:19;18593:52;18700:3;18692:6;18688:16;18682:23;18676:3;18665:9;18661:19;18654:52;18761:3;18753:6;18749:16;18743:23;18737:3;18726:9;18722:19;18715:52;18814:3;18806:6;18802:16;18796:23;18838:3;18850:52;18898:2;18887:9;18883:18;18869:12;-1:-1:-1;;;;;2825:31:30;2813:44;;2759:104;18850:52;18927:15;;18921:22;18962:3;18981:18;;;18974:30;;;;19047:15;;;19041:22;19035:3;19020:19;;;19013:51;;;;18070:1000;;-1:-1:-1;;18070:1000:30:o;19992:430::-;20098:6;20106;20114;20122;20130;20183:3;20171:9;20162:7;20158:23;20154:33;20151:53;;;20200:1;20197;20190:12;20151:53;-1:-1:-1;;20223:16:30;;20279:2;20264:18;;20258:25;20323:2;20308:18;;20302:25;20367:2;20352:18;;20346:25;20411:3;20396:19;;;20390:26;20223:16;;20258:25;;-1:-1:-1;20302:25:30;20346;-1:-1:-1;20390:26:30;;-1:-1:-1;19992:430:30;-1:-1:-1;19992:430:30:o;20708:168::-;20781:9;;;20812;;20829:15;;;20823:22;;20809:37;20799:71;;20850:18;;:::i;20881:217::-;20921:1;20947;20937:132;;20991:10;20986:3;20982:20;20979:1;20972:31;21026:4;21023:1;21016:15;21054:4;21051:1;21044:15;20937:132;-1:-1:-1;21083:9:30;;20881:217::o;21103:367::-;21370:25;;;21357:3;21342:19;;21404:60;21460:2;21445:18;;21437:6;21404:60;:::i;23117:135::-;23156:3;23177:17;;;23174:43;;23197:18;;:::i;:::-;-1:-1:-1;23244:1:30;23233:13;;23117:135::o;25430:287::-;25559:3;25597:6;25591:13;25613:66;25672:6;25667:3;25660:4;25652:6;25648:17;25613:66;:::i;:::-;25695:16;;;;;25430:287;-1:-1:-1;;25430:287:30:o

Swarm Source

ipfs://9fe70fae664b7f88f6ddb308707297efdaab6e0c0059376ecafddee9e2c0cb21
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ 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.