Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
GebProxyActions
Compiler Version
v0.6.7+commit.b8d736ae
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-02-14 */ /// GebProxyActions.sol // Copyright (C) 2018-2020 Maker Ecosystem Growth Holdings, INC. // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero 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 Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <https://www.gnu.org/licenses/>. pragma solidity 0.6.7; interface DSAuthority { function canCall( address src, address dst, bytes4 sig ) external view returns (bool); } abstract contract DSAuthEvents { event LogSetAuthority (address indexed authority); event LogSetOwner (address indexed owner); } contract DSAuth is DSAuthEvents { DSAuthority public authority; address public owner; constructor() public { owner = msg.sender; emit LogSetOwner(msg.sender); } function setOwner(address owner_) virtual public auth { owner = owner_; emit LogSetOwner(owner); } function setAuthority(DSAuthority authority_) virtual public auth { authority = authority_; emit LogSetAuthority(address(authority)); } modifier auth { require(isAuthorized(msg.sender, msg.sig), "ds-auth-unauthorized"); _; } function isAuthorized(address src, bytes4 sig) virtual internal view returns (bool) { if (src == address(this)) { return true; } else if (src == owner) { return true; } else if (authority == DSAuthority(0)) { return false; } else { return authority.canCall(src, address(this), sig); } } } abstract contract CollateralLike { function approve(address, uint) virtual public; function transfer(address, uint) virtual public; function transferFrom(address, address, uint) virtual public; function deposit() virtual public payable; function withdraw(uint) virtual public; } abstract contract ManagerLike { function safeCan(address, uint, address) virtual public view returns (uint); function collateralTypes(uint) virtual public view returns (bytes32); function ownsSAFE(uint) virtual public view returns (address); function safes(uint) virtual public view returns (address); function safeEngine() virtual public view returns (address); function openSAFE(bytes32, address) virtual public returns (uint); function transferSAFEOwnership(uint, address) virtual public; function allowSAFE(uint, address, uint) virtual public; function allowHandler(address, uint) virtual public; function modifySAFECollateralization(uint, int, int) virtual public; function transferCollateral(uint, address, uint) virtual public; function transferInternalCoins(uint, address, uint) virtual public; function quitSystem(uint, address) virtual public; function enterSystem(address, uint) virtual public; function moveSAFE(uint, uint) virtual public; function protectSAFE(uint, address, address) virtual public; } abstract contract SAFEEngineLike { function canModifySAFE(address, address) virtual public view returns (uint); function collateralTypes(bytes32) virtual public view returns (uint, uint, uint, uint, uint); function coinBalance(address) virtual public view returns (uint); function safes(bytes32, address) virtual public view returns (uint, uint); function modifySAFECollateralization(bytes32, address, address, address, int, int) virtual public; function approveSAFEModification(address) virtual public; function transferInternalCoins(address, address, uint) virtual public; } abstract contract CollateralJoinLike { function decimals() virtual public returns (uint); function collateral() virtual public returns (CollateralLike); function join(address, uint) virtual public payable; function exit(address, uint) virtual public; } abstract contract GNTJoinLike { function bags(address) virtual public view returns (address); function make(address) virtual public returns (address); } abstract contract DSTokenLike { function balanceOf(address) virtual public view returns (uint); function approve(address, uint) virtual public; function transfer(address, uint) virtual public returns (bool); function transferFrom(address, address, uint) virtual public returns (bool); } abstract contract WethLike { function balanceOf(address) virtual public view returns (uint); function approve(address, uint) virtual public; function transfer(address, uint) virtual public; function transferFrom(address, address, uint) virtual public; function deposit() virtual public payable; function withdraw(uint) virtual public; } abstract contract CoinJoinLike { function safeEngine() virtual public returns (SAFEEngineLike); function systemCoin() virtual public returns (DSTokenLike); function join(address, uint) virtual public payable; function exit(address, uint) virtual public; } abstract contract ApproveSAFEModificationLike { function approveSAFEModification(address) virtual public; function denySAFEModification(address) virtual public; } abstract contract GlobalSettlementLike { function collateralCashPrice(bytes32) virtual public view returns (uint); function redeemCollateral(bytes32, uint) virtual public; function freeCollateral(bytes32) virtual public; function prepareCoinsForRedeeming(uint) virtual public; function processSAFE(bytes32, address) virtual public; } abstract contract TaxCollectorLike { function taxSingle(bytes32) virtual public returns (uint); } abstract contract CoinSavingsAccountLike { function savings(address) virtual public view returns (uint); function updateAccumulatedRate() virtual public returns (uint); function deposit(uint) virtual public; function withdraw(uint) virtual public; } abstract contract ProxyRegistryLike { function proxies(address) virtual public view returns (address); function build(address) virtual public returns (address); } abstract contract ProxyLike { function owner() virtual public view returns (address); } // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // WARNING: These functions meant to be used as a a library for a DSProxy. Some are unsafe if you call them directly. // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! contract Common { uint256 constant RAY = 10 ** 27; // Internal functions function multiply(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, "mul-overflow"); } function _coinJoin_join(address apt, address safeHandler, uint wad) internal { // Approves adapter to take the COIN amount CoinJoinLike(apt).systemCoin().approve(apt, wad); // Joins COIN into the safeEngine CoinJoinLike(apt).join(safeHandler, wad); } // Public functions function coinJoin_join(address apt, address safeHandler, uint wad) public { // Gets COIN from the user's wallet CoinJoinLike(apt).systemCoin().transferFrom(msg.sender, address(this), wad); _coinJoin_join(apt, safeHandler, wad); } } contract BasicActions is Common { // Internal functions /// @notice Safe subtraction /// @dev Reverts on overflows function subtract(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x, "sub-overflow"); } /// @notice Safe conversion uint -> int /// @dev Reverts on overflows function toInt(uint x) internal pure returns (int y) { y = int(x); require(y >= 0, "int-overflow"); } /// @notice Converts a wad (18 decimal places) to rad (45 decimal places) function toRad(uint wad) internal pure returns (uint rad) { rad = multiply(wad, 10 ** 27); } function convertTo18(address collateralJoin, uint256 amt) internal returns (uint256 wad) { // For those collaterals that have other than 18 decimals precision we need to do the conversion before passing to modifySAFECollateralization function // Adapters will automatically handle the difference of precision uint decimals = CollateralJoinLike(collateralJoin).decimals(); wad = amt; if (decimals < 18) { wad = multiply( amt, 10 ** (18 - decimals) ); } else if (decimals > 18) { wad = amt / 10 ** (decimals - 18); } } /// @notice Gets delta debt generated (Total Safe debt minus available safeHandler COIN balance) /// @param safeEngine address /// @param taxCollector address /// @param safeHandler address /// @param collateralType bytes32 /// @return deltaDebt function _getGeneratedDeltaDebt( address safeEngine, address taxCollector, address safeHandler, bytes32 collateralType, uint wad ) internal returns (int deltaDebt) { // Updates stability fee rate uint rate = TaxCollectorLike(taxCollector).taxSingle(collateralType); require(rate > 0, "invalid-collateral-type"); // Gets COIN balance of the handler in the safeEngine uint coin = SAFEEngineLike(safeEngine).coinBalance(safeHandler); // If there was already enough COIN in the safeEngine balance, just exits it without adding more debt if (coin < multiply(wad, RAY)) { // Calculates the needed deltaDebt so together with the existing coins in the safeEngine is enough to exit wad amount of COIN tokens deltaDebt = toInt(subtract(multiply(wad, RAY), coin) / rate); // This is neeeded due lack of precision. It might need to sum an extra deltaDebt wei (for the given COIN wad amount) deltaDebt = multiply(uint(deltaDebt), rate) < multiply(wad, RAY) ? deltaDebt + 1 : deltaDebt; } } /// @notice Gets repaid delta debt generated (rate adjusted debt) /// @param safeEngine address /// @param coin uint amount /// @param safe uint - safeId /// @param collateralType bytes32 /// @return deltaDebt function _getRepaidDeltaDebt( address safeEngine, uint coin, address safe, bytes32 collateralType ) internal view returns (int deltaDebt) { // Gets actual rate from the safeEngine (, uint rate,,,) = SAFEEngineLike(safeEngine).collateralTypes(collateralType); require(rate > 0, "invalid-collateral-type"); // Gets actual generatedDebt value of the safe (, uint generatedDebt) = SAFEEngineLike(safeEngine).safes(collateralType, safe); // Uses the whole coin balance in the safeEngine to reduce the debt deltaDebt = toInt(coin / rate); // Checks the calculated deltaDebt is not higher than safe.generatedDebt (total debt), otherwise uses its value deltaDebt = uint(deltaDebt) <= generatedDebt ? - deltaDebt : - toInt(generatedDebt); } /// @notice Gets repaid debt (rate adjusted rate minus COIN balance available in usr's address) /// @param safeEngine address /// @param usr address /// @param safe uint /// @param collateralType address /// @return wad function _getRepaidAlDebt( address safeEngine, address usr, address safe, bytes32 collateralType ) internal view returns (uint wad) { // Gets actual rate from the safeEngine (, uint rate,,,) = SAFEEngineLike(safeEngine).collateralTypes(collateralType); // Gets actual generatedDebt value of the safe (, uint generatedDebt) = SAFEEngineLike(safeEngine).safes(collateralType, safe); // Gets actual coin amount in the safe uint coin = SAFEEngineLike(safeEngine).coinBalance(usr); uint rad = subtract(multiply(generatedDebt, rate), coin); wad = rad / RAY; // If the rad precision has some dust, it will need to request for 1 extra wad wei wad = multiply(wad, RAY) < rad ? wad + 1 : wad; } /// @notice Generates Debt (and sends coin balance to address to) /// @param manager address /// @param taxCollector address /// @param coinJoin address /// @param safe uint /// @param wad uint - amount of debt to be generated /// @param to address - receiver of the balance of generated COIN function _generateDebt(address manager, address taxCollector, address coinJoin, uint safe, uint wad, address to) internal { address safeHandler = ManagerLike(manager).safes(safe); address safeEngine = ManagerLike(manager).safeEngine(); bytes32 collateralType = ManagerLike(manager).collateralTypes(safe); // Generates debt in the SAFE modifySAFECollateralization(manager, safe, 0, _getGeneratedDeltaDebt(safeEngine, taxCollector, safeHandler, collateralType, wad)); // Moves the COIN amount (balance in the safeEngine in rad) to proxy's address transferInternalCoins(manager, safe, address(this), toRad(wad)); // Allows adapter to access to proxy's COIN balance in the safeEngine if (SAFEEngineLike(safeEngine).canModifySAFE(address(this), address(coinJoin)) == 0) { SAFEEngineLike(safeEngine).approveSAFEModification(coinJoin); } // Exits COIN to this contract CoinJoinLike(coinJoin).exit(to, wad); } /// @notice Generates Debt (and sends coin balance to address to) /// @param manager address /// @param ethJoin address /// @param safe uint /// @param value uint - amount of ETH to be locked in the Safe. /// @dev Proxy needs to have enough balance (> value), public functions should handle this. function _lockETH( address manager, address ethJoin, uint safe, uint value ) internal { // Receives ETH amount, converts it to WETH and joins it into the safeEngine ethJoin_join(ethJoin, address(this), value); // Locks WETH amount into the SAFE SAFEEngineLike(ManagerLike(manager).safeEngine()).modifySAFECollateralization( ManagerLike(manager).collateralTypes(safe), ManagerLike(manager).safes(safe), address(this), address(this), toInt(value), 0 ); } /// @notice Repays debt /// @param manager address /// @param coinJoin address /// @param safe uint /// @param wad uint - amount of debt to be repayed function _repayDebt( address manager, address coinJoin, uint safe, uint wad, bool transferFromCaller ) internal { address safeEngine = ManagerLike(manager).safeEngine(); address safeHandler = ManagerLike(manager).safes(safe); bytes32 collateralType = ManagerLike(manager).collateralTypes(safe); address own = ManagerLike(manager).ownsSAFE(safe); if (own == address(this) || ManagerLike(manager).safeCan(own, safe, address(this)) == 1) { // Joins COIN amount into the safeEngine if (transferFromCaller) coinJoin_join(coinJoin, safeHandler, wad); else _coinJoin_join(coinJoin, safeHandler, wad); // // Paybacks debt to the SAFE modifySAFECollateralization(manager, safe, 0, _getRepaidDeltaDebt(safeEngine, SAFEEngineLike(safeEngine).coinBalance(safeHandler), safeHandler, collateralType)); } else { // Joins COIN amount into the safeEngine if (transferFromCaller) coinJoin_join(coinJoin, address(this), wad); else _coinJoin_join(coinJoin, address(this), wad); // Paybacks debt to the SAFE SAFEEngineLike(safeEngine).modifySAFECollateralization( collateralType, safeHandler, address(this), address(this), 0, _getRepaidDeltaDebt(safeEngine, wad * RAY, safeHandler, collateralType) ); } } /// @notice Repays debt and frees collateral ETH /// @param manager address /// @param ethJoin address /// @param coinJoin address /// @param safe uint /// @param collateralWad uint - amount of ETH to free /// @param deltaWad uint - amount of debt to be repayed /// @param transferFromCaller True if transferring coin from caller, false if balance in the proxy function _repayDebtAndFreeETH( address manager, address ethJoin, address coinJoin, uint safe, uint collateralWad, uint deltaWad, bool transferFromCaller ) internal { address safeHandler = ManagerLike(manager).safes(safe); // Joins COIN amount into the safeEngine if (transferFromCaller) coinJoin_join(coinJoin, safeHandler, deltaWad); else _coinJoin_join(coinJoin, safeHandler, deltaWad); // Paybacks debt to the SAFE and unlocks WETH amount from it modifySAFECollateralization( manager, safe, -toInt(collateralWad), _getRepaidDeltaDebt(ManagerLike(manager).safeEngine(), SAFEEngineLike(ManagerLike(manager).safeEngine()).coinBalance(safeHandler), safeHandler, ManagerLike(manager).collateralTypes(safe)) ); // Moves the amount from the SAFE handler to proxy's address transferCollateral(manager, safe, address(this), collateralWad); // Exits WETH amount to proxy address as a token CollateralJoinLike(ethJoin).exit(address(this), collateralWad); // Converts WETH to ETH CollateralJoinLike(ethJoin).collateral().withdraw(collateralWad); } // Public functions /// @notice ERC20 transfer /// @param collateral address - address of ERC20 collateral /// @param dst address - Transfer destination /// @param amt address - Amount to transfer function transfer(address collateral, address dst, uint amt) external { CollateralLike(collateral).transfer(dst, amt); } /// @notice Joins the system with the full msg.value /// @param apt address - Address of the adapter /// @param safe uint - Safe Id function ethJoin_join(address apt, address safe) external payable { ethJoin_join(apt, safe, msg.value); } /// @notice Joins the system with the a specified value /// @param apt address - Address of the adapter /// @param safe uint - Safe Id /// @param value uint - Value to join function ethJoin_join(address apt, address safe, uint value) public payable { // Wraps ETH in WETH CollateralJoinLike(apt).collateral().deposit{value: value}(); // Approves adapter to take the WETH amount CollateralJoinLike(apt).collateral().approve(address(apt), value); // Joins WETH collateral into the safeEngine CollateralJoinLike(apt).join(safe, value); } /// @notice Approves an address to modify the Safe /// @param safeEngine address /// @param usr address - Address allowed to modify Safe function approveSAFEModification( address safeEngine, address usr ) external { ApproveSAFEModificationLike(safeEngine).approveSAFEModification(usr); } /// @notice Denies an address to modify the Safe /// @param safeEngine address /// @param usr address - Address disallowed to modify Safe function denySAFEModification( address safeEngine, address usr ) external { ApproveSAFEModificationLike(safeEngine).denySAFEModification(usr); } /// @notice Opens a brand new Safe /// @param manager address - Safe Manager /// @param collateralType bytes32 - collateral type /// @param usr address - Owner of the safe function openSAFE( address manager, bytes32 collateralType, address usr ) public returns (uint safe) { safe = ManagerLike(manager).openSAFE(collateralType, usr); } /// @notice Transfer the ownership of a proxy owned Safe /// @param manager address - Safe Manager /// @param safe uint - Safe Id /// @param usr address - Owner of the safe function transferSAFEOwnership( address manager, uint safe, address usr ) public { ManagerLike(manager).transferSAFEOwnership(safe, usr); } /// @notice Transfer the ownership to a new proxy owned by a different address /// @param proxyRegistry address - Safe Manager /// @param manager address - Safe Manager /// @param safe uint - Safe Id /// @param dst address - Owner of the new proxy function transferSAFEOwnershipToProxy( address proxyRegistry, address manager, uint safe, address dst ) external { // Gets actual proxy address address proxy = ProxyRegistryLike(proxyRegistry).proxies(dst); // Checks if the proxy address already existed and dst address is still the owner if (proxy == address(0) || ProxyLike(proxy).owner() != dst) { uint csize; assembly { csize := extcodesize(dst) } // We want to avoid creating a proxy for a contract address that might not be able to handle proxies, then losing the SAFE require(csize == 0, "dst-is-a-contract"); // Creates the proxy for the dst address proxy = ProxyRegistryLike(proxyRegistry).build(dst); } // Transfers SAFE to the dst proxy transferSAFEOwnership(manager, safe, proxy); } /// @notice Allow/disallow a usr address to manage the safe /// @param manager address - Safe Manager /// @param safe uint - Safe Id /// @param usr address - usr address /// uint ok - 1 for allowed function allowSAFE( address manager, uint safe, address usr, uint ok ) external { ManagerLike(manager).allowSAFE(safe, usr, ok); } /// @notice Allow/disallow a usr address to quit to the sender handler /// @param manager address - Safe Manager /// @param usr address - usr address /// uint ok - 1 for allowed function allowHandler( address manager, address usr, uint ok ) external { ManagerLike(manager).allowHandler(usr, ok); } /// @notice Transfer wad amount of safe collateral from the safe address to a dst address. /// @param manager address - Safe Manager /// @param safe uint - Safe Id /// @param dst address - destination address /// uint wad - amount function transferCollateral( address manager, uint safe, address dst, uint wad ) public { ManagerLike(manager).transferCollateral(safe, dst, wad); } /// @notice Transfer rad amount of COIN from the safe address to a dst address. /// @param manager address - Safe Manager /// @param safe uint - Safe Id /// @param dst address - destination address /// uint rad - amount function transferInternalCoins( address manager, uint safe, address dst, uint rad ) public { ManagerLike(manager).transferInternalCoins(safe, dst, rad); } /// @notice Modify a SAFE's collateralization ratio while keeping the generated COIN or collateral freed in the SAFE handler address. /// @param manager address - Safe Manager /// @param safe uint - Safe Id /// @param deltaCollateral - int /// @param deltaDebt - int function modifySAFECollateralization( address manager, uint safe, int deltaCollateral, int deltaDebt ) public { ManagerLike(manager).modifySAFECollateralization(safe, deltaCollateral, deltaDebt); } /// @notice Quit the system, migrating the safe (lockedCollateral, generatedDebt) to a different dst handler /// @param manager address - Safe Manager /// @param safe uint - Safe Id /// @param dst - destination handler function quitSystem( address manager, uint safe, address dst ) external { ManagerLike(manager).quitSystem(safe, dst); } /// @notice Import a position from src handler to the handler owned by safe /// @param manager address - Safe Manager /// @param src - source handler /// @param safe uint - Safe Id function enterSystem( address manager, address src, uint safe ) external { ManagerLike(manager).enterSystem(src, safe); } /// @notice Move a position from safeSrc handler to the safeDst handler /// @param manager address - Safe Manager /// @param safeSrc uint - Source Safe Id /// @param safeDst uint - Destination Safe Id function moveSAFE( address manager, uint safeSrc, uint safeDst ) external { ManagerLike(manager).moveSAFE(safeSrc, safeDst); } /// @notice Lock ETH (msg.value) as collateral in safe /// @param manager address - Safe Manager /// @param ethJoin address /// @param safe uint - Safe Id function lockETH( address manager, address ethJoin, uint safe ) public payable { _lockETH(manager, ethJoin, safe, msg.value); } /// @notice Free ETH (wad) from safe and sends it to msg.sender /// @param manager address - Safe Manager /// @param ethJoin address /// @param safe uint - Safe Id /// @param wad uint - Amount function freeETH( address manager, address ethJoin, uint safe, uint wad ) public { // Unlocks WETH amount from the SAFE modifySAFECollateralization(manager, safe, -toInt(wad), 0); // Moves the amount from the SAFE handler to proxy's address transferCollateral(manager, safe, address(this), wad); // Exits WETH amount to proxy address as a token CollateralJoinLike(ethJoin).exit(address(this), wad); // Converts WETH to ETH CollateralJoinLike(ethJoin).collateral().withdraw(wad); // Sends ETH back to the user's wallet msg.sender.transfer(wad); } /// @notice Exits ETH (wad) from balance available in the handler /// @param manager address - Safe Manager /// @param ethJoin address /// @param safe uint - Safe Id /// @param wad uint - Amount function exitETH( address manager, address ethJoin, uint safe, uint wad ) external { // Moves the amount from the SAFE handler to proxy's address transferCollateral(manager, safe, address(this), wad); // Exits WETH amount to proxy address as a token CollateralJoinLike(ethJoin).exit(address(this), wad); // Converts WETH to ETH CollateralJoinLike(ethJoin).collateral().withdraw(wad); // Sends ETH back to the user's wallet msg.sender.transfer(wad); } /// @notice Generates debt and sends COIN amount to msg.sender /// @param manager address /// @param taxCollector address /// @param coinJoin address /// @param safe uint - Safe Id /// @param wad uint - Amount function generateDebt( address manager, address taxCollector, address coinJoin, uint safe, uint wad ) public { _generateDebt(manager, taxCollector, coinJoin, safe, wad, msg.sender); } /// @notice Repays debt /// @param manager address /// @param coinJoin address /// @param safe uint - Safe Id /// @param wad uint - Amount function repayDebt( address manager, address coinJoin, uint safe, uint wad ) public { _repayDebt(manager, coinJoin, safe, wad, true); } /// @notice Locks Eth, generates debt and sends COIN amount (deltaWad) to msg.sender /// @param manager address /// @param taxCollector address /// @param ethJoin address /// @param coinJoin address /// @param safe uint - Safe Id /// @param deltaWad uint - Amount function lockETHAndGenerateDebt( address manager, address taxCollector, address ethJoin, address coinJoin, uint safe, uint deltaWad ) public payable { _lockETH(manager, ethJoin, safe, msg.value); _generateDebt(manager, taxCollector, coinJoin, safe, deltaWad, msg.sender); } /// @notice Opens Safe, locks Eth, generates debt and sends COIN amount (deltaWad) to msg.sender /// @param manager address /// @param taxCollector address /// @param ethJoin address /// @param coinJoin address /// @param deltaWad uint - Amount function openLockETHAndGenerateDebt( address manager, address taxCollector, address ethJoin, address coinJoin, bytes32 collateralType, uint deltaWad ) external payable returns (uint safe) { safe = openSAFE(manager, collateralType, address(this)); lockETHAndGenerateDebt(manager, taxCollector, ethJoin, coinJoin, safe, deltaWad); } /// @notice Repays debt and frees ETH (sends it to msg.sender) /// @param manager address /// @param ethJoin address /// @param coinJoin address /// @param safe uint - Safe Id /// @param collateralWad uint - Amount of collateral to free /// @param deltaWad uint - Amount of debt to repay function repayDebtAndFreeETH( address manager, address ethJoin, address coinJoin, uint safe, uint collateralWad, uint deltaWad ) external { _repayDebtAndFreeETH(manager, ethJoin, coinJoin, safe, collateralWad, deltaWad, true); // Sends ETH back to the user's wallet msg.sender.transfer(collateralWad); } } contract GebProxyActions is BasicActions { function tokenCollateralJoin_join(address apt, address safe, uint amt, bool transferFrom) public { // Only executes for tokens that have approval/transferFrom implementation if (transferFrom) { // Gets token from the user's wallet CollateralJoinLike(apt).collateral().transferFrom(msg.sender, address(this), amt); // Approves adapter to take the token amount CollateralJoinLike(apt).collateral().approve(apt, amt); } // Joins token collateral into the safeEngine CollateralJoinLike(apt).join(safe, amt); } function protectSAFE( address manager, uint safe, address liquidationEngine, address saviour ) public { ManagerLike(manager).protectSAFE(safe, liquidationEngine, saviour); } function makeCollateralBag( address collateralJoin ) public returns (address bag) { bag = GNTJoinLike(collateralJoin).make(address(this)); } function safeLockETH( address manager, address ethJoin, uint safe, address owner ) public payable { require(ManagerLike(manager).ownsSAFE(safe) == owner, "owner-missmatch"); lockETH(manager, ethJoin, safe); } function lockTokenCollateral( address manager, address collateralJoin, uint safe, uint amt, bool transferFrom ) public { // Takes token amount from user's wallet and joins into the safeEngine tokenCollateralJoin_join(collateralJoin, address(this), amt, transferFrom); // Locks token amount into the SAFE SAFEEngineLike(ManagerLike(manager).safeEngine()).modifySAFECollateralization( ManagerLike(manager).collateralTypes(safe), ManagerLike(manager).safes(safe), address(this), address(this), toInt(convertTo18(collateralJoin, amt)), 0 ); } function safeLockTokenCollateral( address manager, address collateralJoin, uint safe, uint amt, bool transferFrom, address owner ) public { require(ManagerLike(manager).ownsSAFE(safe) == owner, "owner-missmatch"); lockTokenCollateral(manager, collateralJoin, safe, amt, transferFrom); } function freeTokenCollateral( address manager, address collateralJoin, uint safe, uint amt ) public { uint wad = convertTo18(collateralJoin, amt); // Unlocks token amount from the SAFE modifySAFECollateralization(manager, safe, -toInt(wad), 0); // Moves the amount from the SAFE handler to proxy's address transferCollateral(manager, safe, address(this), wad); // Exits token amount to the user's wallet as a token CollateralJoinLike(collateralJoin).exit(msg.sender, amt); } function exitTokenCollateral( address manager, address collateralJoin, uint safe, uint amt ) public { // Moves the amount from the SAFE handler to proxy's address transferCollateral(manager, safe, address(this), convertTo18(collateralJoin, amt)); // Exits token amount to the user's wallet as a token CollateralJoinLike(collateralJoin).exit(msg.sender, amt); } function generateDebtAndProtectSAFE( address manager, address taxCollector, address coinJoin, uint safe, uint wad, address liquidationEngine, address saviour ) external { generateDebt(manager, taxCollector, coinJoin, safe, wad); protectSAFE(manager, safe, liquidationEngine, saviour); } function safeRepayDebt( address manager, address coinJoin, uint safe, uint wad, address owner ) public { require(ManagerLike(manager).ownsSAFE(safe) == owner, "owner-missmatch"); repayDebt(manager, coinJoin, safe, wad); } function repayAllDebt( address manager, address coinJoin, uint safe ) public { address safeEngine = ManagerLike(manager).safeEngine(); address safeHandler = ManagerLike(manager).safes(safe); bytes32 collateralType = ManagerLike(manager).collateralTypes(safe); (, uint generatedDebt) = SAFEEngineLike(safeEngine).safes(collateralType, safeHandler); address own = ManagerLike(manager).ownsSAFE(safe); if (own == address(this) || ManagerLike(manager).safeCan(own, safe, address(this)) == 1) { // Joins COIN amount into the safeEngine coinJoin_join(coinJoin, safeHandler, _getRepaidAlDebt(safeEngine, safeHandler, safeHandler, collateralType)); // Paybacks debt to the SAFE modifySAFECollateralization(manager, safe, 0, -int(generatedDebt)); } else { // Joins COIN amount into the safeEngine coinJoin_join(coinJoin, address(this), _getRepaidAlDebt(safeEngine, address(this), safeHandler, collateralType)); // Paybacks debt to the SAFE SAFEEngineLike(safeEngine).modifySAFECollateralization( collateralType, safeHandler, address(this), address(this), 0, -int(generatedDebt) ); } } function safeRepayAllDebt( address manager, address coinJoin, uint safe, address owner ) public { require(ManagerLike(manager).ownsSAFE(safe) == owner, "owner-missmatch"); repayAllDebt(manager, coinJoin, safe); } function openLockETHGenerateDebtAndProtectSAFE( address manager, address taxCollector, address ethJoin, address coinJoin, bytes32 collateralType, uint deltaWad, address liquidationEngine, address saviour ) public payable returns (uint safe) { safe = openSAFE(manager, collateralType, address(this)); lockETHAndGenerateDebt(manager, taxCollector, ethJoin, coinJoin, safe, deltaWad); protectSAFE(manager, safe, liquidationEngine, saviour); } function lockTokenCollateralAndGenerateDebt( address manager, address taxCollector, address collateralJoin, address coinJoin, uint safe, uint collateralAmount, uint deltaWad, bool transferFrom ) public { address safeHandler = ManagerLike(manager).safes(safe); address safeEngine = ManagerLike(manager).safeEngine(); bytes32 collateralType = ManagerLike(manager).collateralTypes(safe); // Takes token amount from user's wallet and joins into the safeEngine tokenCollateralJoin_join(collateralJoin, safeHandler, collateralAmount, transferFrom); // Locks token amount into the SAFE and generates debt modifySAFECollateralization(manager, safe, toInt(convertTo18(collateralJoin, collateralAmount)), _getGeneratedDeltaDebt(safeEngine, taxCollector, safeHandler, collateralType, deltaWad)); // Moves the COIN amount (balance in the safeEngine in rad) to proxy's address transferInternalCoins(manager, safe, address(this), toRad(deltaWad)); // Allows adapter to access to proxy's COIN balance in the safeEngine if (SAFEEngineLike(safeEngine).canModifySAFE(address(this), address(coinJoin)) == 0) { SAFEEngineLike(safeEngine).approveSAFEModification(coinJoin); } // Exits COIN to the user's wallet as a token CoinJoinLike(coinJoin).exit(msg.sender, deltaWad); } function lockTokenCollateralGenerateDebtAndProtectSAFE( address manager, address taxCollector, address collateralJoin, address coinJoin, uint safe, uint collateralAmount, uint deltaWad, bool transferFrom, address liquidationEngine, address saviour ) public { lockTokenCollateralAndGenerateDebt( manager, taxCollector, collateralJoin, coinJoin, safe, collateralAmount, deltaWad, transferFrom ); protectSAFE(manager, safe, liquidationEngine, saviour); } function openLockTokenCollateralAndGenerateDebt( address manager, address taxCollector, address collateralJoin, address coinJoin, bytes32 collateralType, uint collateralAmount, uint deltaWad, bool transferFrom ) public returns (uint safe) { safe = openSAFE(manager, collateralType, address(this)); lockTokenCollateralAndGenerateDebt(manager, taxCollector, collateralJoin, coinJoin, safe, collateralAmount, deltaWad, transferFrom); } function openLockTokenCollateralGenerateDebtAndProtectSAFE( address manager, address taxCollector, address collateralJoin, address coinJoin, bytes32 collateralType, uint collateralAmount, uint deltaWad, bool transferFrom, address liquidationEngine, address saviour ) public returns (uint safe) { safe = openSAFE(manager, collateralType, address(this)); lockTokenCollateralAndGenerateDebt(manager, taxCollector, collateralJoin, coinJoin, safe, collateralAmount, deltaWad, transferFrom); protectSAFE(manager, safe, liquidationEngine, saviour); } function openLockGNTAndGenerateDebt( address manager, address taxCollector, address gntJoin, address coinJoin, bytes32 collateralType, uint collateralAmount, uint deltaWad ) public returns (address bag, uint safe) { // Creates bag (if doesn't exist) to hold GNT bag = GNTJoinLike(gntJoin).bags(address(this)); if (bag == address(0)) { bag = makeCollateralBag(gntJoin); } // Transfer funds to the funds which previously were sent to the proxy CollateralLike(CollateralJoinLike(gntJoin).collateral()).transfer(bag, collateralAmount); safe = openLockTokenCollateralAndGenerateDebt(manager, taxCollector, gntJoin, coinJoin, collateralType, collateralAmount, deltaWad, false); } function openLockGNTGenerateDebtAndProtectSAFE( address manager, address taxCollector, address gntJoin, address coinJoin, bytes32 collateralType, uint collateralAmount, uint deltaWad, address liquidationEngine, address saviour ) public returns (address bag, uint safe) { (bag, safe) = openLockGNTAndGenerateDebt( manager, taxCollector, gntJoin, coinJoin, collateralType, collateralAmount, deltaWad ); protectSAFE(manager, safe, liquidationEngine, saviour); } function repayAllDebtAndFreeETH( address manager, address ethJoin, address coinJoin, uint safe, uint collateralWad ) public { address safeEngine = ManagerLike(manager).safeEngine(); address safeHandler = ManagerLike(manager).safes(safe); bytes32 collateralType = ManagerLike(manager).collateralTypes(safe); (, uint generatedDebt) = SAFEEngineLike(safeEngine).safes(collateralType, safeHandler); // Joins COIN amount into the safeEngine coinJoin_join(coinJoin, safeHandler, _getRepaidAlDebt(safeEngine, safeHandler, safeHandler, collateralType)); // Paybacks debt to the SAFE and unlocks WETH amount from it modifySAFECollateralization( manager, safe, -toInt(collateralWad), -int(generatedDebt) ); // Moves the amount from the SAFE handler to proxy's address transferCollateral(manager, safe, address(this), collateralWad); // Exits WETH amount to proxy address as a token CollateralJoinLike(ethJoin).exit(address(this), collateralWad); // Converts WETH to ETH CollateralJoinLike(ethJoin).collateral().withdraw(collateralWad); // Sends ETH back to the user's wallet msg.sender.transfer(collateralWad); } function repayDebtAndFreeTokenCollateral( address manager, address collateralJoin, address coinJoin, uint safe, uint collateralAmount, uint deltaWad ) external { address safeHandler = ManagerLike(manager).safes(safe); // Joins COIN amount into the safeEngine coinJoin_join(coinJoin, safeHandler, deltaWad); uint collateralWad = convertTo18(collateralJoin, collateralAmount); // Paybacks debt to the SAFE and unlocks token amount from it modifySAFECollateralization( manager, safe, -toInt(collateralWad), _getRepaidDeltaDebt(ManagerLike(manager).safeEngine(), SAFEEngineLike(ManagerLike(manager).safeEngine()).coinBalance(safeHandler), safeHandler, ManagerLike(manager).collateralTypes(safe)) ); // Moves the amount from the SAFE handler to proxy's address transferCollateral(manager, safe, address(this), collateralWad); // Exits token amount to the user's wallet as a token CollateralJoinLike(collateralJoin).exit(msg.sender, collateralAmount); } function repayAllDebtAndFreeTokenCollateral( address manager, address collateralJoin, address coinJoin, uint safe, uint collateralAmount ) public { address safeEngine = ManagerLike(manager).safeEngine(); address safeHandler = ManagerLike(manager).safes(safe); bytes32 collateralType = ManagerLike(manager).collateralTypes(safe); (, uint generatedDebt) = SAFEEngineLike(safeEngine).safes(collateralType, safeHandler); // Joins COIN amount into the safeEngine coinJoin_join(coinJoin, safeHandler, _getRepaidAlDebt(safeEngine, safeHandler, safeHandler, collateralType)); uint collateralWad = convertTo18(collateralJoin, collateralAmount); // Paybacks debt to the SAFE and unlocks token amount from it modifySAFECollateralization( manager, safe, -toInt(collateralWad), -int(generatedDebt) ); // Moves the amount from the SAFE handler to proxy's address transferCollateral(manager, safe, address(this), collateralWad); // Exits token amount to the user's wallet as a token CollateralJoinLike(collateralJoin).exit(msg.sender, collateralAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"usr","type":"address"},{"internalType":"uint256","name":"ok","type":"uint256"}],"name":"allowHandler","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"},{"internalType":"address","name":"usr","type":"address"},{"internalType":"uint256","name":"ok","type":"uint256"}],"name":"allowSAFE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"safeEngine","type":"address"},{"internalType":"address","name":"usr","type":"address"}],"name":"approveSAFEModification","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"apt","type":"address"},{"internalType":"address","name":"safeHandler","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"coinJoin_join","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"safeEngine","type":"address"},{"internalType":"address","name":"usr","type":"address"}],"name":"denySAFEModification","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"src","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"}],"name":"enterSystem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"apt","type":"address"},{"internalType":"address","name":"safe","type":"address"}],"name":"ethJoin_join","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"apt","type":"address"},{"internalType":"address","name":"safe","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"ethJoin_join","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"ethJoin","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"exitETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"collateralJoin","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"exitTokenCollateral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"ethJoin","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"freeETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"collateralJoin","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"freeTokenCollateral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"taxCollector","type":"address"},{"internalType":"address","name":"coinJoin","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"generateDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"taxCollector","type":"address"},{"internalType":"address","name":"coinJoin","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"},{"internalType":"uint256","name":"wad","type":"uint256"},{"internalType":"address","name":"liquidationEngine","type":"address"},{"internalType":"address","name":"saviour","type":"address"}],"name":"generateDebtAndProtectSAFE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"ethJoin","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"}],"name":"lockETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"taxCollector","type":"address"},{"internalType":"address","name":"ethJoin","type":"address"},{"internalType":"address","name":"coinJoin","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"},{"internalType":"uint256","name":"deltaWad","type":"uint256"}],"name":"lockETHAndGenerateDebt","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"collateralJoin","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"},{"internalType":"uint256","name":"amt","type":"uint256"},{"internalType":"bool","name":"transferFrom","type":"bool"}],"name":"lockTokenCollateral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"taxCollector","type":"address"},{"internalType":"address","name":"collateralJoin","type":"address"},{"internalType":"address","name":"coinJoin","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"},{"internalType":"uint256","name":"collateralAmount","type":"uint256"},{"internalType":"uint256","name":"deltaWad","type":"uint256"},{"internalType":"bool","name":"transferFrom","type":"bool"}],"name":"lockTokenCollateralAndGenerateDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"taxCollector","type":"address"},{"internalType":"address","name":"collateralJoin","type":"address"},{"internalType":"address","name":"coinJoin","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"},{"internalType":"uint256","name":"collateralAmount","type":"uint256"},{"internalType":"uint256","name":"deltaWad","type":"uint256"},{"internalType":"bool","name":"transferFrom","type":"bool"},{"internalType":"address","name":"liquidationEngine","type":"address"},{"internalType":"address","name":"saviour","type":"address"}],"name":"lockTokenCollateralGenerateDebtAndProtectSAFE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collateralJoin","type":"address"}],"name":"makeCollateralBag","outputs":[{"internalType":"address","name":"bag","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"},{"internalType":"int256","name":"deltaCollateral","type":"int256"},{"internalType":"int256","name":"deltaDebt","type":"int256"}],"name":"modifySAFECollateralization","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"uint256","name":"safeSrc","type":"uint256"},{"internalType":"uint256","name":"safeDst","type":"uint256"}],"name":"moveSAFE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"taxCollector","type":"address"},{"internalType":"address","name":"ethJoin","type":"address"},{"internalType":"address","name":"coinJoin","type":"address"},{"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"internalType":"uint256","name":"deltaWad","type":"uint256"}],"name":"openLockETHAndGenerateDebt","outputs":[{"internalType":"uint256","name":"safe","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"taxCollector","type":"address"},{"internalType":"address","name":"ethJoin","type":"address"},{"internalType":"address","name":"coinJoin","type":"address"},{"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"internalType":"uint256","name":"deltaWad","type":"uint256"},{"internalType":"address","name":"liquidationEngine","type":"address"},{"internalType":"address","name":"saviour","type":"address"}],"name":"openLockETHGenerateDebtAndProtectSAFE","outputs":[{"internalType":"uint256","name":"safe","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"taxCollector","type":"address"},{"internalType":"address","name":"gntJoin","type":"address"},{"internalType":"address","name":"coinJoin","type":"address"},{"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"internalType":"uint256","name":"collateralAmount","type":"uint256"},{"internalType":"uint256","name":"deltaWad","type":"uint256"}],"name":"openLockGNTAndGenerateDebt","outputs":[{"internalType":"address","name":"bag","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"taxCollector","type":"address"},{"internalType":"address","name":"gntJoin","type":"address"},{"internalType":"address","name":"coinJoin","type":"address"},{"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"internalType":"uint256","name":"collateralAmount","type":"uint256"},{"internalType":"uint256","name":"deltaWad","type":"uint256"},{"internalType":"address","name":"liquidationEngine","type":"address"},{"internalType":"address","name":"saviour","type":"address"}],"name":"openLockGNTGenerateDebtAndProtectSAFE","outputs":[{"internalType":"address","name":"bag","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"taxCollector","type":"address"},{"internalType":"address","name":"collateralJoin","type":"address"},{"internalType":"address","name":"coinJoin","type":"address"},{"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"internalType":"uint256","name":"collateralAmount","type":"uint256"},{"internalType":"uint256","name":"deltaWad","type":"uint256"},{"internalType":"bool","name":"transferFrom","type":"bool"}],"name":"openLockTokenCollateralAndGenerateDebt","outputs":[{"internalType":"uint256","name":"safe","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"taxCollector","type":"address"},{"internalType":"address","name":"collateralJoin","type":"address"},{"internalType":"address","name":"coinJoin","type":"address"},{"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"internalType":"uint256","name":"collateralAmount","type":"uint256"},{"internalType":"uint256","name":"deltaWad","type":"uint256"},{"internalType":"bool","name":"transferFrom","type":"bool"},{"internalType":"address","name":"liquidationEngine","type":"address"},{"internalType":"address","name":"saviour","type":"address"}],"name":"openLockTokenCollateralGenerateDebtAndProtectSAFE","outputs":[{"internalType":"uint256","name":"safe","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"bytes32","name":"collateralType","type":"bytes32"},{"internalType":"address","name":"usr","type":"address"}],"name":"openSAFE","outputs":[{"internalType":"uint256","name":"safe","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"},{"internalType":"address","name":"liquidationEngine","type":"address"},{"internalType":"address","name":"saviour","type":"address"}],"name":"protectSAFE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"},{"internalType":"address","name":"dst","type":"address"}],"name":"quitSystem","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"coinJoin","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"}],"name":"repayAllDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"ethJoin","type":"address"},{"internalType":"address","name":"coinJoin","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"},{"internalType":"uint256","name":"collateralWad","type":"uint256"}],"name":"repayAllDebtAndFreeETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"collateralJoin","type":"address"},{"internalType":"address","name":"coinJoin","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"},{"internalType":"uint256","name":"collateralAmount","type":"uint256"}],"name":"repayAllDebtAndFreeTokenCollateral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"coinJoin","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"repayDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"ethJoin","type":"address"},{"internalType":"address","name":"coinJoin","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"},{"internalType":"uint256","name":"collateralWad","type":"uint256"},{"internalType":"uint256","name":"deltaWad","type":"uint256"}],"name":"repayDebtAndFreeETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"collateralJoin","type":"address"},{"internalType":"address","name":"coinJoin","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"},{"internalType":"uint256","name":"collateralAmount","type":"uint256"},{"internalType":"uint256","name":"deltaWad","type":"uint256"}],"name":"repayDebtAndFreeTokenCollateral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"ethJoin","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"safeLockETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"collateralJoin","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"},{"internalType":"uint256","name":"amt","type":"uint256"},{"internalType":"bool","name":"transferFrom","type":"bool"},{"internalType":"address","name":"owner","type":"address"}],"name":"safeLockTokenCollateral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"coinJoin","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"safeRepayAllDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"address","name":"coinJoin","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"},{"internalType":"uint256","name":"wad","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"safeRepayDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"apt","type":"address"},{"internalType":"address","name":"safe","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"},{"internalType":"bool","name":"transferFrom","type":"bool"}],"name":"tokenCollateralJoin_join","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"collateral","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"wad","type":"uint256"}],"name":"transferCollateral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"rad","type":"uint256"}],"name":"transferInternalCoins","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"},{"internalType":"address","name":"usr","type":"address"}],"name":"transferSAFEOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"proxyRegistry","type":"address"},{"internalType":"address","name":"manager","type":"address"},{"internalType":"uint256","name":"safe","type":"uint256"},{"internalType":"address","name":"dst","type":"address"}],"name":"transferSAFEOwnershipToProxy","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50614bc6806100206000396000f3fe6080604052600436106102885760003560e01c806373f1ff691161015a578063b2be9117116100c1578063e205c1081161007a578063e205c10814610f29578063e25187c114610f5f578063ee28457614610fc7578063f19d3b4114611003578063f7f898b014611048578063ff08ec261461108b57610288565b8063b2be911714610d6c578063beabacc814610dbb578063c42e34e714610dfe578063d723323b14610e39578063d97ebbd514610e6f578063dbf83cde14610ee057610288565b80638a58060c116101135780638a58060c14610bb55780639edd720714610bfc578063a033df1214610c51578063a72d3ab014610c7f578063ac8b81de14610cc2578063b02f9e3d14610d1d57610288565b806373f1ff69146109e95780637b5a3b4314610a4a5780637b65158f14610a935780637f6a7acf14610ada57806384efae8314610b31578063861b15eb14610b7a57610288565b80632dc469a3116101fe5780634cac3da1116101b75780634cac3da11461082e57806352e83c6d1461087157806354523249146108b45780636093c9751461090057806360eba4f11461094957806364e506a01461099857610288565b80632dc469a3146106345780633664fa711461068357806339c1f126146106c25780633c6dc59a1461073a578063437c050d1461078357806343847b21146107eb57610288565b80631c145dcd116102505780631c145dcd146104435780631c25ff121461048e578063230eeac0146104df578063252fa0f61461056157806325817008146105a45780632d418a33146105ed57610288565b806303f2cd051461028d57806308f00e34146102d857806313cc55e4146103215780631a8678d9146103765780631c005fda14610400575b600080fd5b34801561029957600080fd5b506102d6600480360360808110156102b057600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356110d7565b005b3480156102e457600080fd5b506102d6600480360360808110156102fb57600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135611158565b34801561032d57600080fd5b506102d6600480360360c081101561034457600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060808101359060a001356112c7565b34801561038257600080fd5b506103ee600480360361014081101561039a57600080fd5b506001600160a01b03813581169160208101358216916040820135811691606081013582169160808201359160a08101359160c08201359160e08101351515916101008201358116916101200135166115bd565b60408051918252519081900360200190f35b34801561040c57600080fd5b506102d66004803603606081101561042357600080fd5b506001600160a01b038135811691602081013590911690604001356115f6565b34801561044f57600080fd5b506102d66004803603608081101561046657600080fd5b506001600160a01b0381358116916020810135909116906040810135906060013515156116f1565b34801561049a57600080fd5b506102d6600480360360a08110156104b157600080fd5b506001600160a01b0381358116916020810135821691604082013591606081013591608090910135166118fe565b3480156104eb57600080fd5b5061053e600480360360e081101561050257600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a08101359060c001356119d1565b604080516001600160a01b03909316835260208301919091528051918290030190f35b34801561056d57600080fd5b506103ee6004803603606081101561058457600080fd5b506001600160a01b03813581169160208101359160409091013516611b54565b3480156105b057600080fd5b506102d6600480360360808110156105c757600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135611bdb565b3480156105f957600080fd5b506102d66004803603608081101561061057600080fd5b506001600160a01b0381358116916020810135916040820135169060600135611bef565b34801561064057600080fd5b506102d6600480360360a081101561065757600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135611c48565b34801561068f57600080fd5b506102d6600480360360608110156106a657600080fd5b506001600160a01b038135169060208101359060400135611ee0565b3480156106ce57600080fd5b506102d660048036036101408110156106e657600080fd5b506001600160a01b03813581169160208101358216916040820135811691606081013582169160808201359160a08101359160c08201359160e0810135151591610100820135811691610120013516611f4b565b34801561074657600080fd5b506102d66004803603608081101561075d57600080fd5b506001600160a01b03813581169160208101358216916040820135916060013516611f73565b34801561078f57600080fd5b506102d660048036036101008110156107a757600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a08101359060c08101359060e001351515612166565b3480156107f757600080fd5b506102d66004803603606081101561080e57600080fd5b506001600160a01b0381358116916020810135909116906040013561246d565b34801561083a57600080fd5b506102d66004803603606081101561085157600080fd5b506001600160a01b038135811691602081013590911690604001356124cd565b34801561087d57600080fd5b506102d66004803603606081101561089457600080fd5b506001600160a01b0381358116916020810135916040909101351661252d565b6103ee600480360360c08110156108ca57600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a0013561258d565b34801561090c57600080fd5b506102d66004803603608081101561092357600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356125b4565b34801561095557600080fd5b506102d6600480360360a081101561096c57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135612653565b3480156109a457600080fd5b506102d6600480360360a08110156109bb57600080fd5b506001600160a01b0381358116916020810135909116906040810135906060810135906080013515156129c2565b3480156109f557600080fd5b506102d6600480360360e0811015610a0c57600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359160808201359160a081013582169160c09091013516612b9e565b348015610a5657600080fd5b506102d660048036036080811015610a6d57600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135612bb7565b348015610a9f57600080fd5b506102d660048036036080811015610ab657600080fd5b506001600160a01b0381358116916020810135916040820135169060600135612bc5565b348015610ae657600080fd5b506102d6600480360360c0811015610afd57600080fd5b506001600160a01b0381358116916020810135821691604082013591606081013591608082013515159160a0013516612c1e565b348015610b3d57600080fd5b506102d660048036036080811015610b5457600080fd5b506001600160a01b03813581169160208101358216916040820135916060013516612cfa565b348015610b8657600080fd5b506102d660048036036040811015610b9d57600080fd5b506001600160a01b0381358116916020013516612dcc565b348015610bc157600080fd5b506102d660048036036080811015610bd857600080fd5b506001600160a01b0381358116916020810135916040820135169060600135612e38565b348015610c0857600080fd5b506102d6600480360360c0811015610c1f57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060808101359060a00135612e91565b6102d660048036036040811015610c6757600080fd5b506001600160a01b0381358116916020013516612ece565b348015610c8b57600080fd5b506102d660048036036060811015610ca257600080fd5b506001600160a01b03813581169160208101359160409091013516612edd565b6103ee6004803603610100811015610cd957600080fd5b506001600160a01b03813581169160208101358216916040820135811691606081013582169160808201359160a08101359160c082013581169160e0013516612f3d565b348015610d2957600080fd5b506102d6600480360360a0811015610d4057600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135612f72565b348015610d7857600080fd5b50610d9f60048036036020811015610d8f57600080fd5b50356001600160a01b0316612f80565b604080516001600160a01b039092168252519081900360200190f35b348015610dc757600080fd5b506102d660048036036060811015610dde57600080fd5b506001600160a01b03813581169160208101359091169060400135612ffd565b348015610e0a57600080fd5b506102d660048036036040811015610e2157600080fd5b506001600160a01b038135811691602001351661305d565b6102d660048036036060811015610e4f57600080fd5b506001600160a01b038135811691602081013590911690604001356130b5565b348015610e7b57600080fd5b5061053e6004803603610120811015610e9357600080fd5b506001600160a01b03813581169160208101358216916040820135811691606081013582169160808201359160a08101359160c08201359160e081013582169161010090910135166132aa565b348015610eec57600080fd5b506102d660048036036080811015610f0357600080fd5b506001600160a01b038135811691602081013591604082013581169160600135166132db565b6102d660048036036060811015610f3f57600080fd5b506001600160a01b03813581169160208101359091169060400135613335565b348015610f6b57600080fd5b506103ee6004803603610100811015610f8357600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a08101359060c08101359060e001351515613341565b6102d660048036036080811015610fdd57600080fd5b506001600160a01b03813581169160208101358216916040820135916060013516613360565b34801561100f57600080fd5b506102d66004803603608081101561102657600080fd5b506001600160a01b038135169060208101359060408101359060600135613432565b34801561105457600080fd5b506102d66004803603606081101561106b57600080fd5b506001600160a01b03813581169160208101359091169060400135613488565b6102d6600480360360c08110156110a157600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a0013561381c565b6110ec8483306110e78786613836565b612bc5565b6040805163ef693bed60e01b81523360048201526024810183905290516001600160a01b0385169163ef693bed91604480830192600092919082900301818387803b15801561113a57600080fd5b505af115801561114e573d6000803e3d6000fd5b5050505050505050565b61116484833084612bc5565b6040805163ef693bed60e01b81523060048201526024810183905290516001600160a01b0385169163ef693bed91604480830192600092919082900301818387803b1580156111b257600080fd5b505af11580156111c6573d6000803e3d6000fd5b50505050826001600160a01b031663d8dfeb456040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561120557600080fd5b505af1158015611219573d6000803e3d6000fd5b505050506040513d602081101561122f57600080fd5b505160408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b15801561127b57600080fd5b505af115801561128f573d6000803e3d6000fd5b505060405133925083156108fc02915083906000818181858888f193505050501580156112c0573d6000803e3d6000fd5b5050505050565b6000866001600160a01b031663434efcbd856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561130d57600080fd5b505afa158015611321573d6000803e3d6000fd5b505050506040513d602081101561133757600080fd5b505190506113468582846115f6565b60006113528785613836565b90506115418886611362846138e8565b60000361153c8c6001600160a01b03166367aea3136040518163ffffffff1660e01b815260040160206040518083038186803b1580156113a157600080fd5b505afa1580156113b5573d6000803e3d6000fd5b505050506040513d60208110156113cb57600080fd5b81019080805190602001909291905050508d6001600160a01b03166367aea3136040518163ffffffff1660e01b815260040160206040518083038186803b15801561141557600080fd5b505afa158015611429573d6000803e3d6000fd5b505050506040513d602081101561143f57600080fd5b505160408051633eaf7a0360e21b81526001600160a01b038b811660048301529151919092169163fabde80c916024808301926020929190829003018186803b15801561148b57600080fd5b505afa15801561149f573d6000803e3d6000fd5b505050506040513d60208110156114b557600080fd5b8101908080519060200190929190505050888f6001600160a01b031663918b7cfe8e6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561150b57600080fd5b505afa15801561151f573d6000803e3d6000fd5b505050506040513d602081101561153557600080fd5b5051613933565b613432565b61154d88863084612bc5565b6040805163ef693bed60e01b81523360048201526024810186905290516001600160a01b0389169163ef693bed91604480830192600092919082900301818387803b15801561159b57600080fd5b505af11580156115af573d6000803e3d6000fd5b505050505050505050505050565b60006115ca8b8830611b54565b90506115dc8b8b8b8b858b8b8b612166565b6115e88b8285856132db565b9a9950505050505050505050565b826001600160a01b031663a7e944556040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561163157600080fd5b505af1158015611645573d6000803e3d6000fd5b505050506040513d602081101561165b57600080fd5b5051604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b1580156116b457600080fd5b505af11580156116c8573d6000803e3d6000fd5b505050506040513d60208110156116de57600080fd5b506116ec9050838383613ab5565b505050565b801561189e57836001600160a01b031663d8dfeb456040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561173257600080fd5b505af1158015611746573d6000803e3d6000fd5b505050506040513d602081101561175c57600080fd5b5051604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b03909216916323b872dd9160648082019260009290919082900301818387803b1580156117b457600080fd5b505af11580156117c8573d6000803e3d6000fd5b50505050836001600160a01b031663d8dfeb456040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561180757600080fd5b505af115801561181b573d6000803e3d6000fd5b505050506040513d602081101561183157600080fd5b50516040805163095ea7b360e01b81526001600160a01b038781166004830152602482018690529151919092169163095ea7b391604480830192600092919082900301818387803b15801561188557600080fd5b505af1158015611899573d6000803e3d6000fd5b505050505b836001600160a01b0316633b4da69f84846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561113a57600080fd5b806001600160a01b0316856001600160a01b031663a2a4d76e856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561194c57600080fd5b505afa158015611960573d6000803e3d6000fd5b505050506040513d602081101561197657600080fd5b50516001600160a01b0316146119c5576040805162461bcd60e51b815260206004820152600f60248201526e0deeedccae45adad2e6e6dac2e8c6d608b1b604482015290519081900360640190fd5b6112c085858585611bdb565b60408051638c4c280160e01b8152306004820152905160009182916001600160a01b03891691638c4c2801916024808301926020929190829003018186803b158015611a1c57600080fd5b505afa158015611a30573d6000803e3d6000fd5b505050506040513d6020811015611a4657600080fd5b505191506001600160a01b038216611a6457611a6187612f80565b91505b866001600160a01b031663d8dfeb456040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611a9f57600080fd5b505af1158015611ab3573d6000803e3d6000fd5b505050506040513d6020811015611ac957600080fd5b50516040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018890529151919092169163a9059cbb91604480830192600092919082900301818387803b158015611b1d57600080fd5b505af1158015611b31573d6000803e3d6000fd5b50505050611b46898989898989896000613341565b905097509795505050505050565b6040805163d983ff9560e01b8152600481018490526001600160a01b038381166024830152915160009286169163d983ff9591604480830192602092919082900301818787803b158015611ba757600080fd5b505af1158015611bbb573d6000803e3d6000fd5b505050506040513d6020811015611bd157600080fd5b5051949350505050565b611be9848484846001613af0565b50505050565b6040805163660e160760e01b8152600481018590526001600160a01b0384811660248301526044820184905291519186169163660e16079160648082019260009290919082900301818387803b15801561113a57600080fd5b6000856001600160a01b03166367aea3136040518163ffffffff1660e01b815260040160206040518083038186803b158015611c8357600080fd5b505afa158015611c97573d6000803e3d6000fd5b505050506040513d6020811015611cad57600080fd5b50516040805163434efcbd60e01b81526004810186905290519192506000916001600160a01b0389169163434efcbd916024808301926020929190829003018186803b158015611cfc57600080fd5b505afa158015611d10573d6000803e3d6000fd5b505050506040513d6020811015611d2657600080fd5b5051604080516348c5be7f60e11b81526004810187905290519192506000916001600160a01b038a169163918b7cfe916024808301926020929190829003018186803b158015611d7557600080fd5b505afa158015611d89573d6000803e3d6000fd5b505050506040513d6020811015611d9f57600080fd5b505160408051630f50894160e21b8152600481018390526001600160a01b038581166024830152825193945060009390871692633d4225049260448082019391829003018186803b158015611df357600080fd5b505afa158015611e07573d6000803e3d6000fd5b505050506040513d6040811015611e1d57600080fd5b50602001519050611e3a8784611e3587828088613f1d565b6115f6565b6000611e468987613836565b9050611e628a88611e56846138e8565b60000385600003613432565b611e6e8a883084612bc5565b6040805163ef693bed60e01b81523360048201526024810188905290516001600160a01b038b169163ef693bed91604480830192600092919082900301818387803b158015611ebc57600080fd5b505af1158015611ed0573d6000803e3d6000fd5b5050505050505050505050505050565b826001600160a01b031663018477a583836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015611f2e57600080fd5b505af1158015611f42573d6000803e3d6000fd5b50505050505050565b611f5b8a8a8a8a8a8a8a8a612166565b611f678a8784846132db565b50505050505050505050565b6000846001600160a01b031663c4552791836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611fcb57600080fd5b505afa158015611fdf573d6000803e3d6000fd5b505050506040513d6020811015611ff557600080fd5b505190506001600160a01b03811615806120855750816001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561204d57600080fd5b505afa158015612061573d6000803e3d6000fd5b505050506040513d602081101561207757600080fd5b50516001600160a01b031614155b1561215b57813b80156120d3576040805162461bcd60e51b8152602060048201526011602482015270191cdd0b5a5ccb584b58dbdb9d1c9858dd607a1b604482015290519081900360640190fd5b856001600160a01b031663f3701da2846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561212b57600080fd5b505af115801561213f573d6000803e3d6000fd5b505050506040513d602081101561215557600080fd5b50519150505b6112c0848483612edd565b6000886001600160a01b031663434efcbd866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156121ac57600080fd5b505afa1580156121c0573d6000803e3d6000fd5b505050506040513d60208110156121d657600080fd5b5051604080516367aea31360e01b815290519192506000916001600160a01b038c16916367aea313916004808301926020929190829003018186803b15801561221e57600080fd5b505afa158015612232573d6000803e3d6000fd5b505050506040513d602081101561224857600080fd5b5051604080516348c5be7f60e11b81526004810189905290519192506000916001600160a01b038d169163918b7cfe916024808301926020929190829003018186803b15801561229757600080fd5b505afa1580156122ab573d6000803e3d6000fd5b505050506040513d60208110156122c157600080fd5b505190506122d1898488876116f1565b6122f58b886122e86122e38d8b613836565b6138e8565b61153c868f89888d6140eb565b6123098b8830612304896142b8565b611bef565b604080516350de215d60e01b81523060048201526001600160a01b038a811660248301529151918416916350de215d91604480820192602092909190829003018186803b15801561235957600080fd5b505afa15801561236d573d6000803e3d6000fd5b505050506040513d602081101561238357600080fd5b50516123fa57816001600160a01b031663d94d4208896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b1580156123e157600080fd5b505af11580156123f5573d6000803e3d6000fd5b505050505b6040805163ef693bed60e01b81523360048201526024810187905290516001600160a01b038a169163ef693bed91604480830192600092919082900301818387803b15801561244857600080fd5b505af115801561245c573d6000803e3d6000fd5b505050505050505050505050505050565b826001600160a01b031663391735c183836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611f2e57600080fd5b826001600160a01b0316636ffdabbf83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611f2e57600080fd5b826001600160a01b031663a26292db83836040518363ffffffff1660e01b815260040180838152602001826001600160a01b03166001600160a01b0316815260200192505050600060405180830381600087803b158015611f2e57600080fd5b600061259a878430611b54565b90506125aa87878787858761381c565b9695505050505050565b60006125c08483613836565b90506125da85846125d0846138e8565b6000036000613432565b6125e685843084612bc5565b6040805163ef693bed60e01b81523360048201526024810184905290516001600160a01b0386169163ef693bed91604480830192600092919082900301818387803b15801561263457600080fd5b505af1158015612648573d6000803e3d6000fd5b505050505050505050565b6000856001600160a01b03166367aea3136040518163ffffffff1660e01b815260040160206040518083038186803b15801561268e57600080fd5b505afa1580156126a2573d6000803e3d6000fd5b505050506040513d60208110156126b857600080fd5b50516040805163434efcbd60e01b81526004810186905290519192506000916001600160a01b0389169163434efcbd916024808301926020929190829003018186803b15801561270757600080fd5b505afa15801561271b573d6000803e3d6000fd5b505050506040513d602081101561273157600080fd5b5051604080516348c5be7f60e11b81526004810187905290519192506000916001600160a01b038a169163918b7cfe916024808301926020929190829003018186803b15801561278057600080fd5b505afa158015612794573d6000803e3d6000fd5b505050506040513d60208110156127aa57600080fd5b505160408051630f50894160e21b8152600481018390526001600160a01b038581166024830152825193945060009390871692633d4225049260448082019391829003018186803b1580156127fe57600080fd5b505afa158015612812573d6000803e3d6000fd5b505050506040513d604081101561282857600080fd5b506020015190506128408784611e3587828088613f1d565b61285a898761284e886138e8565b60000384600003613432565b61286689873088612bc5565b6040805163ef693bed60e01b81523060048201526024810187905290516001600160a01b038a169163ef693bed91604480830192600092919082900301818387803b1580156128b457600080fd5b505af11580156128c8573d6000803e3d6000fd5b50505050876001600160a01b031663d8dfeb456040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561290757600080fd5b505af115801561291b573d6000803e3d6000fd5b505050506040513d602081101561293157600080fd5b505160408051632e1a7d4d60e01b81526004810188905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b15801561297d57600080fd5b505af1158015612991573d6000803e3d6000fd5b505060405133925087156108fc02915087906000818181858888f19350505050158015611f67573d6000803e3d6000fd5b6129ce843084846116f1565b846001600160a01b03166367aea3136040518163ffffffff1660e01b815260040160206040518083038186803b158015612a0757600080fd5b505afa158015612a1b573d6000803e3d6000fd5b505050506040513d6020811015612a3157600080fd5b5051604080516348c5be7f60e11b81526004810186905290516001600160a01b03928316926399bec315929089169163918b7cfe91602480820192602092909190829003018186803b158015612a8657600080fd5b505afa158015612a9a573d6000803e3d6000fd5b505050506040513d6020811015612ab057600080fd5b50516040805163434efcbd60e01b81526004810188905290516001600160a01b038a169163434efcbd916024808301926020929190829003018186803b158015612af957600080fd5b505afa158015612b0d573d6000803e3d6000fd5b505050506040513d6020811015612b2357600080fd5b50513080612b346122e38b8a613836565b604080516001600160e01b031960e089901b16815260048101969096526001600160a01b0394851660248701529284166044860152921660648401526084830191909152600060a48301819052905160c48084019382900301818387803b15801561263457600080fd5b612bab8787878787612f72565b611f42878584846132db565b61115884836125d0846138e8565b6040805163438ac0d160e11b8152600481018590526001600160a01b0384811660248301526044820184905291519186169163871581a29160648082019260009290919082900301818387803b15801561113a57600080fd5b806001600160a01b0316866001600160a01b031663a2a4d76e866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612c6c57600080fd5b505afa158015612c80573d6000803e3d6000fd5b505050506040513d6020811015612c9657600080fd5b50516001600160a01b031614612ce5576040805162461bcd60e51b815260206004820152600f60248201526e0deeedccae45adad2e6e6dac2e8c6d608b1b604482015290519081900360640190fd5b612cf286868686866129c2565b505050505050565b806001600160a01b0316846001600160a01b031663a2a4d76e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612d4857600080fd5b505afa158015612d5c573d6000803e3d6000fd5b505050506040513d6020811015612d7257600080fd5b50516001600160a01b031614612dc1576040805162461bcd60e51b815260206004820152600f60248201526e0deeedccae45adad2e6e6dac2e8c6d608b1b604482015290519081900360640190fd5b611be9848484613488565b816001600160a01b031663d94d4208826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b158015612e2457600080fd5b505af1158015612cf2573d6000803e3d6000fd5b6040805163e0decbcd60e01b8152600481018590526001600160a01b0384811660248301526044820184905291519186169163e0decbcd9160648082019260009290919082900301818387803b15801561113a57600080fd5b612ea186868686868660016142d5565b604051339083156108fc029084906000818181858888f19350505050158015611f42573d6000803e3d6000fd5b612ed98282346130b5565b5050565b826001600160a01b03166380bdb6b283836040518363ffffffff1660e01b815260040180838152602001826001600160a01b03166001600160a01b0316815260200192505050600060405180830381600087803b158015611f2e57600080fd5b6000612f4a898630611b54565b9050612f5a89898989858961381c565b612f66898285856132db565b98975050505050505050565b6112c0858585858533614644565b60408051631060930d60e01b815230600482015290516000916001600160a01b03841691631060930d9160248082019260209290919082900301818787803b158015612fcb57600080fd5b505af1158015612fdf573d6000803e3d6000fd5b505050506040513d6020811015612ff557600080fd5b505192915050565b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611f2e57600080fd5b816001600160a01b031663d49d7867826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b158015612e2457600080fd5b826001600160a01b031663d8dfeb456040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b505050506040513d602081101561311a57600080fd5b505160408051630d0e30db60e41b815290516001600160a01b039092169163d0e30db0918491600480830192600092919082900301818588803b15801561316057600080fd5b505af1158015613174573d6000803e3d6000fd5b5050505050826001600160a01b031663d8dfeb456040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156131b457600080fd5b505af11580156131c8573d6000803e3d6000fd5b505050506040513d60208110156131de57600080fd5b50516040805163095ea7b360e01b81526001600160a01b038681166004830152602482018590529151919092169163095ea7b391604480830192600092919082900301818387803b15801561323257600080fd5b505af1158015613246573d6000803e3d6000fd5b50505050826001600160a01b0316633b4da69f83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611f2e57600080fd5b6000806132bc8b8b8b8b8b8b8b6119d1565b90925090506132cd8b8286866132db565b995099975050505050505050565b60408051631bc250a960e21b8152600481018590526001600160a01b0384811660248301528381166044830152915191861691636f0942a49160648082019260009290919082900301818387803b15801561113a57600080fd5b6116ec83838334614917565b600061334e898630611b54565b9050612f668989898985898989612166565b806001600160a01b0316846001600160a01b031663a2a4d76e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156133ae57600080fd5b505afa1580156133c2573d6000803e3d6000fd5b505050506040513d60208110156133d857600080fd5b50516001600160a01b031614613427576040805162461bcd60e51b815260206004820152600f60248201526e0deeedccae45adad2e6e6dac2e8c6d608b1b604482015290519081900360640190fd5b611be9848484613335565b836001600160a01b031663c78101f88484846040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050600060405180830381600087803b15801561113a57600080fd5b6000836001600160a01b03166367aea3136040518163ffffffff1660e01b815260040160206040518083038186803b1580156134c357600080fd5b505afa1580156134d7573d6000803e3d6000fd5b505050506040513d60208110156134ed57600080fd5b50516040805163434efcbd60e01b81526004810185905290519192506000916001600160a01b0387169163434efcbd916024808301926020929190829003018186803b15801561353c57600080fd5b505afa158015613550573d6000803e3d6000fd5b505050506040513d602081101561356657600080fd5b5051604080516348c5be7f60e11b81526004810186905290519192506000916001600160a01b0388169163918b7cfe916024808301926020929190829003018186803b1580156135b557600080fd5b505afa1580156135c9573d6000803e3d6000fd5b505050506040513d60208110156135df57600080fd5b505160408051630f50894160e21b8152600481018390526001600160a01b038581166024830152825193945060009390871692633d4225049260448082019391829003018186803b15801561363357600080fd5b505afa158015613647573d6000803e3d6000fd5b505050506040513d604081101561365d57600080fd5b50602090810151604080516351526bb760e11b81526004810189905290519193506000926001600160a01b038b169263a2a4d76e926024808201939291829003018186803b1580156136ae57600080fd5b505afa1580156136c2573d6000803e3d6000fd5b505050506040513d60208110156136d857600080fd5b505190506001600160a01b038116301480613775575060408051634fa053b160e01b81526001600160a01b038381166004830152602482018990523060448301529151918a1691634fa053b191606480820192602092909190829003018186803b15801561374557600080fd5b505afa158015613759573d6000803e3d6000fd5b505050506040513d602081101561376f57600080fd5b50516001145b156137a05761378b8785611e3588888989613f1d565b61379b8887600085600003613432565b61114e565b6137b18730611e3588308989613f1d565b604080516399bec31560e01b8152600481018590526001600160a01b0386811660248301523060448301819052606483015260006084830181905285810360a48401529251908816926399bec3159260c4808201939182900301818387803b15801561159b57600080fd5b61382886858434614917565b612cf2868685858533614644565b600080836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561387457600080fd5b505af1158015613888573d6000803e3d6000fd5b505050506040513d602081101561389e57600080fd5b5051839250905060128110156138c5576138be8382601203600a0a614aee565b91506138e1565b60128111156138e15760128103600a0a83816138dd57fe5b0491505b5092915050565b80600081121561392e576040805162461bcd60e51b815260206004820152600c60248201526b696e742d6f766572666c6f7760a01b604482015290519081900360640190fd5b919050565b600080856001600160a01b031663d07900bb846040518263ffffffff1660e01b81526004018082815260200191505060a06040518083038186803b15801561397a57600080fd5b505afa15801561398e573d6000803e3d6000fd5b505050506040513d60a08110156139a457600080fd5b50602001519050806139f7576040805162461bcd60e51b8152602060048201526017602482015276696e76616c69642d636f6c6c61746572616c2d7479706560481b604482015290519081900360640190fd5b60408051630f50894160e21b8152600481018590526001600160a01b0386811660248301528251600093918a1692633d422504926044808301939192829003018186803b158015613a4757600080fd5b505afa158015613a5b573d6000803e3d6000fd5b505050506040513d6040811015613a7157600080fd5b50602001519050613a8a828781613a8457fe5b046138e8565b925080831115613aa557613a9d816138e8565b600003613aaa565b826000035b979650505050505050565b826001600160a01b031663a7e944556040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156131b457600080fd5b6000856001600160a01b03166367aea3136040518163ffffffff1660e01b815260040160206040518083038186803b158015613b2b57600080fd5b505afa158015613b3f573d6000803e3d6000fd5b505050506040513d6020811015613b5557600080fd5b50516040805163434efcbd60e01b81526004810187905290519192506000916001600160a01b0389169163434efcbd916024808301926020929190829003018186803b158015613ba457600080fd5b505afa158015613bb8573d6000803e3d6000fd5b505050506040513d6020811015613bce57600080fd5b5051604080516348c5be7f60e11b81526004810188905290519192506000916001600160a01b038a169163918b7cfe916024808301926020929190829003018186803b158015613c1d57600080fd5b505afa158015613c31573d6000803e3d6000fd5b505050506040513d6020811015613c4757600080fd5b5051604080516351526bb760e11b81526004810189905290519192506000916001600160a01b038b169163a2a4d76e916024808301926020929190829003018186803b158015613c9657600080fd5b505afa158015613caa573d6000803e3d6000fd5b505050506040513d6020811015613cc057600080fd5b505190506001600160a01b038116301480613d5d575060408051634fa053b160e01b81526001600160a01b038381166004830152602482018a90523060448301529151918b1691634fa053b191606480820192602092909190829003018186803b158015613d2d57600080fd5b505afa158015613d41573d6000803e3d6000fd5b505050506040513d6020811015613d5757600080fd5b50516001145b15613e1c578415613d7857613d738884886115f6565b613d83565b613d83888488613ab5565b613e178988600061153c88896001600160a01b031663fabde80c8a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015613de457600080fd5b505afa158015613df8573d6000803e3d6000fd5b505050506040513d6020811015613e0e57600080fd5b50518989613933565b612648565b8415613e3257613e2d8830886115f6565b613e3d565b613e3d883088613ab5565b836001600160a01b03166399bec315838530306000613e6b8b676765c793fa10079d601b1b8f028c8c613933565b6040518763ffffffff1660e01b815260040180878152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018281526020019650505050505050600060405180830381600087803b158015613efa57600080fd5b505af1158015613f0e573d6000803e3d6000fd5b50505050505050505050505050565b600080856001600160a01b031663d07900bb846040518263ffffffff1660e01b81526004018082815260200191505060a06040518083038186803b158015613f6457600080fd5b505afa158015613f78573d6000803e3d6000fd5b505050506040513d60a0811015613f8e57600080fd5b506020015160408051630f50894160e21b8152600481018690526001600160a01b0387811660248301528251939450600093908a1692633d4225049260448082019391829003018186803b158015613fe557600080fd5b505afa158015613ff9573d6000803e3d6000fd5b505050506040513d604081101561400f57600080fd5b5060209081015160408051633eaf7a0360e21b81526001600160a01b038a811660048301529151929450600093918b169263fabde80c92602480840193919291829003018186803b15801561406357600080fd5b505afa158015614077573d6000803e3d6000fd5b505050506040513d602081101561408d57600080fd5b5051905060006140a66140a08486614aee565b83614b49565b9050676765c793fa10079d601b1b81049450806140ce86676765c793fa10079d601b1b614aee565b106140d957846140de565b846001015b9998505050505050505050565b600080856001600160a01b0316636c50dbba856040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561413457600080fd5b505af1158015614148573d6000803e3d6000fd5b505050506040513d602081101561415e57600080fd5b50519050806141ae576040805162461bcd60e51b8152602060048201526017602482015276696e76616c69642d636f6c6c61746572616c2d7479706560481b604482015290519081900360640190fd5b6000876001600160a01b031663fabde80c876040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561420657600080fd5b505afa15801561421a573d6000803e3d6000fd5b505050506040513d602081101561423057600080fd5b5051905061424984676765c793fa10079d601b1b614aee565b8110156142ad576142798261427261426c87676765c793fa10079d601b1b614aee565b84614b49565b81613a8457fe5b925061429084676765c793fa10079d601b1b614aee565b61429a8484614aee565b106142a557826142aa565b826001015b92505b505095945050505050565b60006142cf82676765c793fa10079d601b1b614aee565b92915050565b6000876001600160a01b031663434efcbd866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561431b57600080fd5b505afa15801561432f573d6000803e3d6000fd5b505050506040513d602081101561434557600080fd5b50519050811561435f5761435a8682856115f6565b61436a565b61436a868285613ab5565b6145218886614378876138e8565b60000361153c8c6001600160a01b03166367aea3136040518163ffffffff1660e01b815260040160206040518083038186803b1580156143b757600080fd5b505afa1580156143cb573d6000803e3d6000fd5b505050506040513d60208110156143e157600080fd5b81019080805190602001909291905050508d6001600160a01b03166367aea3136040518163ffffffff1660e01b815260040160206040518083038186803b15801561442b57600080fd5b505afa15801561443f573d6000803e3d6000fd5b505050506040513d602081101561445557600080fd5b505160408051633eaf7a0360e21b81526001600160a01b038a811660048301529151919092169163fabde80c916024808301926020929190829003018186803b1580156144a157600080fd5b505afa1580156144b5573d6000803e3d6000fd5b505050506040513d60208110156144cb57600080fd5b8101908080519060200190929190505050878f6001600160a01b031663918b7cfe8e6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561150b57600080fd5b61452d88863087612bc5565b6040805163ef693bed60e01b81523060048201526024810186905290516001600160a01b0389169163ef693bed91604480830192600092919082900301818387803b15801561457b57600080fd5b505af115801561458f573d6000803e3d6000fd5b50505050866001600160a01b031663d8dfeb456040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156145ce57600080fd5b505af11580156145e2573d6000803e3d6000fd5b505050506040513d60208110156145f857600080fd5b505160408051632e1a7d4d60e01b81526004810187905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b15801561159b57600080fd5b6000866001600160a01b031663434efcbd856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561468a57600080fd5b505afa15801561469e573d6000803e3d6000fd5b505050506040513d60208110156146b457600080fd5b5051604080516367aea31360e01b815290519192506000916001600160a01b038a16916367aea313916004808301926020929190829003018186803b1580156146fc57600080fd5b505afa158015614710573d6000803e3d6000fd5b505050506040513d602081101561472657600080fd5b5051604080516348c5be7f60e11b81526004810188905290519192506000916001600160a01b038b169163918b7cfe916024808301926020929190829003018186803b15801561477557600080fd5b505afa158015614789573d6000803e3d6000fd5b505050506040513d602081101561479f57600080fd5b505190506147b78987600061153c868d89888d6140eb565b6147c6898730612304896142b8565b604080516350de215d60e01b81523060048201526001600160a01b0389811660248301529151918416916350de215d91604480820192602092909190829003018186803b15801561481657600080fd5b505afa15801561482a573d6000803e3d6000fd5b505050506040513d602081101561484057600080fd5b50516148b757816001600160a01b031663d94d4208886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561489e57600080fd5b505af11580156148b2573d6000803e3d6000fd5b505050505b866001600160a01b031663ef693bed85876040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015613efa57600080fd5b6149228330836130b5565b836001600160a01b03166367aea3136040518163ffffffff1660e01b815260040160206040518083038186803b15801561495b57600080fd5b505afa15801561496f573d6000803e3d6000fd5b505050506040513d602081101561498557600080fd5b5051604080516348c5be7f60e11b81526004810185905290516001600160a01b03928316926399bec315929088169163918b7cfe91602480820192602092909190829003018186803b1580156149da57600080fd5b505afa1580156149ee573d6000803e3d6000fd5b505050506040513d6020811015614a0457600080fd5b50516040805163434efcbd60e01b81526004810187905290516001600160a01b0389169163434efcbd916024808301926020929190829003018186803b158015614a4d57600080fd5b505afa158015614a61573d6000803e3d6000fd5b505050506040513d6020811015614a7757600080fd5b50513080614a84876138e8565b604080516001600160e01b031960e089901b16815260048101969096526001600160a01b0394851660248701529284166044860152921660648401526084830191909152600060a48301819052905160c48084019382900301818387803b15801561113a57600080fd5b6000811580614b0957505080820282828281614b0657fe5b04145b6142cf576040805162461bcd60e51b815260206004820152600c60248201526b6d756c2d6f766572666c6f7760a01b604482015290519081900360640190fd5b808203828111156142cf576040805162461bcd60e51b815260206004820152600c60248201526b7375622d6f766572666c6f7760a01b604482015290519081900360640190fdfea2646970667358221220a85d8e072b79b98ece5ca342df74ba0169886bce4daf790dd76156433918676064736f6c63430006070033
Deployed Bytecode
0x6080604052600436106102885760003560e01c806373f1ff691161015a578063b2be9117116100c1578063e205c1081161007a578063e205c10814610f29578063e25187c114610f5f578063ee28457614610fc7578063f19d3b4114611003578063f7f898b014611048578063ff08ec261461108b57610288565b8063b2be911714610d6c578063beabacc814610dbb578063c42e34e714610dfe578063d723323b14610e39578063d97ebbd514610e6f578063dbf83cde14610ee057610288565b80638a58060c116101135780638a58060c14610bb55780639edd720714610bfc578063a033df1214610c51578063a72d3ab014610c7f578063ac8b81de14610cc2578063b02f9e3d14610d1d57610288565b806373f1ff69146109e95780637b5a3b4314610a4a5780637b65158f14610a935780637f6a7acf14610ada57806384efae8314610b31578063861b15eb14610b7a57610288565b80632dc469a3116101fe5780634cac3da1116101b75780634cac3da11461082e57806352e83c6d1461087157806354523249146108b45780636093c9751461090057806360eba4f11461094957806364e506a01461099857610288565b80632dc469a3146106345780633664fa711461068357806339c1f126146106c25780633c6dc59a1461073a578063437c050d1461078357806343847b21146107eb57610288565b80631c145dcd116102505780631c145dcd146104435780631c25ff121461048e578063230eeac0146104df578063252fa0f61461056157806325817008146105a45780632d418a33146105ed57610288565b806303f2cd051461028d57806308f00e34146102d857806313cc55e4146103215780631a8678d9146103765780631c005fda14610400575b600080fd5b34801561029957600080fd5b506102d6600480360360808110156102b057600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356110d7565b005b3480156102e457600080fd5b506102d6600480360360808110156102fb57600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135611158565b34801561032d57600080fd5b506102d6600480360360c081101561034457600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060808101359060a001356112c7565b34801561038257600080fd5b506103ee600480360361014081101561039a57600080fd5b506001600160a01b03813581169160208101358216916040820135811691606081013582169160808201359160a08101359160c08201359160e08101351515916101008201358116916101200135166115bd565b60408051918252519081900360200190f35b34801561040c57600080fd5b506102d66004803603606081101561042357600080fd5b506001600160a01b038135811691602081013590911690604001356115f6565b34801561044f57600080fd5b506102d66004803603608081101561046657600080fd5b506001600160a01b0381358116916020810135909116906040810135906060013515156116f1565b34801561049a57600080fd5b506102d6600480360360a08110156104b157600080fd5b506001600160a01b0381358116916020810135821691604082013591606081013591608090910135166118fe565b3480156104eb57600080fd5b5061053e600480360360e081101561050257600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a08101359060c001356119d1565b604080516001600160a01b03909316835260208301919091528051918290030190f35b34801561056d57600080fd5b506103ee6004803603606081101561058457600080fd5b506001600160a01b03813581169160208101359160409091013516611b54565b3480156105b057600080fd5b506102d6600480360360808110156105c757600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135611bdb565b3480156105f957600080fd5b506102d66004803603608081101561061057600080fd5b506001600160a01b0381358116916020810135916040820135169060600135611bef565b34801561064057600080fd5b506102d6600480360360a081101561065757600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135611c48565b34801561068f57600080fd5b506102d6600480360360608110156106a657600080fd5b506001600160a01b038135169060208101359060400135611ee0565b3480156106ce57600080fd5b506102d660048036036101408110156106e657600080fd5b506001600160a01b03813581169160208101358216916040820135811691606081013582169160808201359160a08101359160c08201359160e0810135151591610100820135811691610120013516611f4b565b34801561074657600080fd5b506102d66004803603608081101561075d57600080fd5b506001600160a01b03813581169160208101358216916040820135916060013516611f73565b34801561078f57600080fd5b506102d660048036036101008110156107a757600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a08101359060c08101359060e001351515612166565b3480156107f757600080fd5b506102d66004803603606081101561080e57600080fd5b506001600160a01b0381358116916020810135909116906040013561246d565b34801561083a57600080fd5b506102d66004803603606081101561085157600080fd5b506001600160a01b038135811691602081013590911690604001356124cd565b34801561087d57600080fd5b506102d66004803603606081101561089457600080fd5b506001600160a01b0381358116916020810135916040909101351661252d565b6103ee600480360360c08110156108ca57600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a0013561258d565b34801561090c57600080fd5b506102d66004803603608081101561092357600080fd5b506001600160a01b038135811691602081013590911690604081013590606001356125b4565b34801561095557600080fd5b506102d6600480360360a081101561096c57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135612653565b3480156109a457600080fd5b506102d6600480360360a08110156109bb57600080fd5b506001600160a01b0381358116916020810135909116906040810135906060810135906080013515156129c2565b3480156109f557600080fd5b506102d6600480360360e0811015610a0c57600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359160808201359160a081013582169160c09091013516612b9e565b348015610a5657600080fd5b506102d660048036036080811015610a6d57600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135612bb7565b348015610a9f57600080fd5b506102d660048036036080811015610ab657600080fd5b506001600160a01b0381358116916020810135916040820135169060600135612bc5565b348015610ae657600080fd5b506102d6600480360360c0811015610afd57600080fd5b506001600160a01b0381358116916020810135821691604082013591606081013591608082013515159160a0013516612c1e565b348015610b3d57600080fd5b506102d660048036036080811015610b5457600080fd5b506001600160a01b03813581169160208101358216916040820135916060013516612cfa565b348015610b8657600080fd5b506102d660048036036040811015610b9d57600080fd5b506001600160a01b0381358116916020013516612dcc565b348015610bc157600080fd5b506102d660048036036080811015610bd857600080fd5b506001600160a01b0381358116916020810135916040820135169060600135612e38565b348015610c0857600080fd5b506102d6600480360360c0811015610c1f57600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060808101359060a00135612e91565b6102d660048036036040811015610c6757600080fd5b506001600160a01b0381358116916020013516612ece565b348015610c8b57600080fd5b506102d660048036036060811015610ca257600080fd5b506001600160a01b03813581169160208101359160409091013516612edd565b6103ee6004803603610100811015610cd957600080fd5b506001600160a01b03813581169160208101358216916040820135811691606081013582169160808201359160a08101359160c082013581169160e0013516612f3d565b348015610d2957600080fd5b506102d6600480360360a0811015610d4057600080fd5b506001600160a01b03813581169160208101358216916040820135169060608101359060800135612f72565b348015610d7857600080fd5b50610d9f60048036036020811015610d8f57600080fd5b50356001600160a01b0316612f80565b604080516001600160a01b039092168252519081900360200190f35b348015610dc757600080fd5b506102d660048036036060811015610dde57600080fd5b506001600160a01b03813581169160208101359091169060400135612ffd565b348015610e0a57600080fd5b506102d660048036036040811015610e2157600080fd5b506001600160a01b038135811691602001351661305d565b6102d660048036036060811015610e4f57600080fd5b506001600160a01b038135811691602081013590911690604001356130b5565b348015610e7b57600080fd5b5061053e6004803603610120811015610e9357600080fd5b506001600160a01b03813581169160208101358216916040820135811691606081013582169160808201359160a08101359160c08201359160e081013582169161010090910135166132aa565b348015610eec57600080fd5b506102d660048036036080811015610f0357600080fd5b506001600160a01b038135811691602081013591604082013581169160600135166132db565b6102d660048036036060811015610f3f57600080fd5b506001600160a01b03813581169160208101359091169060400135613335565b348015610f6b57600080fd5b506103ee6004803603610100811015610f8357600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a08101359060c08101359060e001351515613341565b6102d660048036036080811015610fdd57600080fd5b506001600160a01b03813581169160208101358216916040820135916060013516613360565b34801561100f57600080fd5b506102d66004803603608081101561102657600080fd5b506001600160a01b038135169060208101359060408101359060600135613432565b34801561105457600080fd5b506102d66004803603606081101561106b57600080fd5b506001600160a01b03813581169160208101359091169060400135613488565b6102d6600480360360c08110156110a157600080fd5b506001600160a01b0381358116916020810135821691604082013581169160608101359091169060808101359060a0013561381c565b6110ec8483306110e78786613836565b612bc5565b6040805163ef693bed60e01b81523360048201526024810183905290516001600160a01b0385169163ef693bed91604480830192600092919082900301818387803b15801561113a57600080fd5b505af115801561114e573d6000803e3d6000fd5b5050505050505050565b61116484833084612bc5565b6040805163ef693bed60e01b81523060048201526024810183905290516001600160a01b0385169163ef693bed91604480830192600092919082900301818387803b1580156111b257600080fd5b505af11580156111c6573d6000803e3d6000fd5b50505050826001600160a01b031663d8dfeb456040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561120557600080fd5b505af1158015611219573d6000803e3d6000fd5b505050506040513d602081101561122f57600080fd5b505160408051632e1a7d4d60e01b81526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b15801561127b57600080fd5b505af115801561128f573d6000803e3d6000fd5b505060405133925083156108fc02915083906000818181858888f193505050501580156112c0573d6000803e3d6000fd5b5050505050565b6000866001600160a01b031663434efcbd856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561130d57600080fd5b505afa158015611321573d6000803e3d6000fd5b505050506040513d602081101561133757600080fd5b505190506113468582846115f6565b60006113528785613836565b90506115418886611362846138e8565b60000361153c8c6001600160a01b03166367aea3136040518163ffffffff1660e01b815260040160206040518083038186803b1580156113a157600080fd5b505afa1580156113b5573d6000803e3d6000fd5b505050506040513d60208110156113cb57600080fd5b81019080805190602001909291905050508d6001600160a01b03166367aea3136040518163ffffffff1660e01b815260040160206040518083038186803b15801561141557600080fd5b505afa158015611429573d6000803e3d6000fd5b505050506040513d602081101561143f57600080fd5b505160408051633eaf7a0360e21b81526001600160a01b038b811660048301529151919092169163fabde80c916024808301926020929190829003018186803b15801561148b57600080fd5b505afa15801561149f573d6000803e3d6000fd5b505050506040513d60208110156114b557600080fd5b8101908080519060200190929190505050888f6001600160a01b031663918b7cfe8e6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561150b57600080fd5b505afa15801561151f573d6000803e3d6000fd5b505050506040513d602081101561153557600080fd5b5051613933565b613432565b61154d88863084612bc5565b6040805163ef693bed60e01b81523360048201526024810186905290516001600160a01b0389169163ef693bed91604480830192600092919082900301818387803b15801561159b57600080fd5b505af11580156115af573d6000803e3d6000fd5b505050505050505050505050565b60006115ca8b8830611b54565b90506115dc8b8b8b8b858b8b8b612166565b6115e88b8285856132db565b9a9950505050505050505050565b826001600160a01b031663a7e944556040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561163157600080fd5b505af1158015611645573d6000803e3d6000fd5b505050506040513d602081101561165b57600080fd5b5051604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b1580156116b457600080fd5b505af11580156116c8573d6000803e3d6000fd5b505050506040513d60208110156116de57600080fd5b506116ec9050838383613ab5565b505050565b801561189e57836001600160a01b031663d8dfeb456040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561173257600080fd5b505af1158015611746573d6000803e3d6000fd5b505050506040513d602081101561175c57600080fd5b5051604080516323b872dd60e01b81523360048201523060248201526044810185905290516001600160a01b03909216916323b872dd9160648082019260009290919082900301818387803b1580156117b457600080fd5b505af11580156117c8573d6000803e3d6000fd5b50505050836001600160a01b031663d8dfeb456040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561180757600080fd5b505af115801561181b573d6000803e3d6000fd5b505050506040513d602081101561183157600080fd5b50516040805163095ea7b360e01b81526001600160a01b038781166004830152602482018690529151919092169163095ea7b391604480830192600092919082900301818387803b15801561188557600080fd5b505af1158015611899573d6000803e3d6000fd5b505050505b836001600160a01b0316633b4da69f84846040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561113a57600080fd5b806001600160a01b0316856001600160a01b031663a2a4d76e856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561194c57600080fd5b505afa158015611960573d6000803e3d6000fd5b505050506040513d602081101561197657600080fd5b50516001600160a01b0316146119c5576040805162461bcd60e51b815260206004820152600f60248201526e0deeedccae45adad2e6e6dac2e8c6d608b1b604482015290519081900360640190fd5b6112c085858585611bdb565b60408051638c4c280160e01b8152306004820152905160009182916001600160a01b03891691638c4c2801916024808301926020929190829003018186803b158015611a1c57600080fd5b505afa158015611a30573d6000803e3d6000fd5b505050506040513d6020811015611a4657600080fd5b505191506001600160a01b038216611a6457611a6187612f80565b91505b866001600160a01b031663d8dfeb456040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611a9f57600080fd5b505af1158015611ab3573d6000803e3d6000fd5b505050506040513d6020811015611ac957600080fd5b50516040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018890529151919092169163a9059cbb91604480830192600092919082900301818387803b158015611b1d57600080fd5b505af1158015611b31573d6000803e3d6000fd5b50505050611b46898989898989896000613341565b905097509795505050505050565b6040805163d983ff9560e01b8152600481018490526001600160a01b038381166024830152915160009286169163d983ff9591604480830192602092919082900301818787803b158015611ba757600080fd5b505af1158015611bbb573d6000803e3d6000fd5b505050506040513d6020811015611bd157600080fd5b5051949350505050565b611be9848484846001613af0565b50505050565b6040805163660e160760e01b8152600481018590526001600160a01b0384811660248301526044820184905291519186169163660e16079160648082019260009290919082900301818387803b15801561113a57600080fd5b6000856001600160a01b03166367aea3136040518163ffffffff1660e01b815260040160206040518083038186803b158015611c8357600080fd5b505afa158015611c97573d6000803e3d6000fd5b505050506040513d6020811015611cad57600080fd5b50516040805163434efcbd60e01b81526004810186905290519192506000916001600160a01b0389169163434efcbd916024808301926020929190829003018186803b158015611cfc57600080fd5b505afa158015611d10573d6000803e3d6000fd5b505050506040513d6020811015611d2657600080fd5b5051604080516348c5be7f60e11b81526004810187905290519192506000916001600160a01b038a169163918b7cfe916024808301926020929190829003018186803b158015611d7557600080fd5b505afa158015611d89573d6000803e3d6000fd5b505050506040513d6020811015611d9f57600080fd5b505160408051630f50894160e21b8152600481018390526001600160a01b038581166024830152825193945060009390871692633d4225049260448082019391829003018186803b158015611df357600080fd5b505afa158015611e07573d6000803e3d6000fd5b505050506040513d6040811015611e1d57600080fd5b50602001519050611e3a8784611e3587828088613f1d565b6115f6565b6000611e468987613836565b9050611e628a88611e56846138e8565b60000385600003613432565b611e6e8a883084612bc5565b6040805163ef693bed60e01b81523360048201526024810188905290516001600160a01b038b169163ef693bed91604480830192600092919082900301818387803b158015611ebc57600080fd5b505af1158015611ed0573d6000803e3d6000fd5b5050505050505050505050505050565b826001600160a01b031663018477a583836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015611f2e57600080fd5b505af1158015611f42573d6000803e3d6000fd5b50505050505050565b611f5b8a8a8a8a8a8a8a8a612166565b611f678a8784846132db565b50505050505050505050565b6000846001600160a01b031663c4552791836040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611fcb57600080fd5b505afa158015611fdf573d6000803e3d6000fd5b505050506040513d6020811015611ff557600080fd5b505190506001600160a01b03811615806120855750816001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561204d57600080fd5b505afa158015612061573d6000803e3d6000fd5b505050506040513d602081101561207757600080fd5b50516001600160a01b031614155b1561215b57813b80156120d3576040805162461bcd60e51b8152602060048201526011602482015270191cdd0b5a5ccb584b58dbdb9d1c9858dd607a1b604482015290519081900360640190fd5b856001600160a01b031663f3701da2846040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561212b57600080fd5b505af115801561213f573d6000803e3d6000fd5b505050506040513d602081101561215557600080fd5b50519150505b6112c0848483612edd565b6000886001600160a01b031663434efcbd866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156121ac57600080fd5b505afa1580156121c0573d6000803e3d6000fd5b505050506040513d60208110156121d657600080fd5b5051604080516367aea31360e01b815290519192506000916001600160a01b038c16916367aea313916004808301926020929190829003018186803b15801561221e57600080fd5b505afa158015612232573d6000803e3d6000fd5b505050506040513d602081101561224857600080fd5b5051604080516348c5be7f60e11b81526004810189905290519192506000916001600160a01b038d169163918b7cfe916024808301926020929190829003018186803b15801561229757600080fd5b505afa1580156122ab573d6000803e3d6000fd5b505050506040513d60208110156122c157600080fd5b505190506122d1898488876116f1565b6122f58b886122e86122e38d8b613836565b6138e8565b61153c868f89888d6140eb565b6123098b8830612304896142b8565b611bef565b604080516350de215d60e01b81523060048201526001600160a01b038a811660248301529151918416916350de215d91604480820192602092909190829003018186803b15801561235957600080fd5b505afa15801561236d573d6000803e3d6000fd5b505050506040513d602081101561238357600080fd5b50516123fa57816001600160a01b031663d94d4208896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b1580156123e157600080fd5b505af11580156123f5573d6000803e3d6000fd5b505050505b6040805163ef693bed60e01b81523360048201526024810187905290516001600160a01b038a169163ef693bed91604480830192600092919082900301818387803b15801561244857600080fd5b505af115801561245c573d6000803e3d6000fd5b505050505050505050505050505050565b826001600160a01b031663391735c183836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611f2e57600080fd5b826001600160a01b0316636ffdabbf83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611f2e57600080fd5b826001600160a01b031663a26292db83836040518363ffffffff1660e01b815260040180838152602001826001600160a01b03166001600160a01b0316815260200192505050600060405180830381600087803b158015611f2e57600080fd5b600061259a878430611b54565b90506125aa87878787858761381c565b9695505050505050565b60006125c08483613836565b90506125da85846125d0846138e8565b6000036000613432565b6125e685843084612bc5565b6040805163ef693bed60e01b81523360048201526024810184905290516001600160a01b0386169163ef693bed91604480830192600092919082900301818387803b15801561263457600080fd5b505af1158015612648573d6000803e3d6000fd5b505050505050505050565b6000856001600160a01b03166367aea3136040518163ffffffff1660e01b815260040160206040518083038186803b15801561268e57600080fd5b505afa1580156126a2573d6000803e3d6000fd5b505050506040513d60208110156126b857600080fd5b50516040805163434efcbd60e01b81526004810186905290519192506000916001600160a01b0389169163434efcbd916024808301926020929190829003018186803b15801561270757600080fd5b505afa15801561271b573d6000803e3d6000fd5b505050506040513d602081101561273157600080fd5b5051604080516348c5be7f60e11b81526004810187905290519192506000916001600160a01b038a169163918b7cfe916024808301926020929190829003018186803b15801561278057600080fd5b505afa158015612794573d6000803e3d6000fd5b505050506040513d60208110156127aa57600080fd5b505160408051630f50894160e21b8152600481018390526001600160a01b038581166024830152825193945060009390871692633d4225049260448082019391829003018186803b1580156127fe57600080fd5b505afa158015612812573d6000803e3d6000fd5b505050506040513d604081101561282857600080fd5b506020015190506128408784611e3587828088613f1d565b61285a898761284e886138e8565b60000384600003613432565b61286689873088612bc5565b6040805163ef693bed60e01b81523060048201526024810187905290516001600160a01b038a169163ef693bed91604480830192600092919082900301818387803b1580156128b457600080fd5b505af11580156128c8573d6000803e3d6000fd5b50505050876001600160a01b031663d8dfeb456040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561290757600080fd5b505af115801561291b573d6000803e3d6000fd5b505050506040513d602081101561293157600080fd5b505160408051632e1a7d4d60e01b81526004810188905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b15801561297d57600080fd5b505af1158015612991573d6000803e3d6000fd5b505060405133925087156108fc02915087906000818181858888f19350505050158015611f67573d6000803e3d6000fd5b6129ce843084846116f1565b846001600160a01b03166367aea3136040518163ffffffff1660e01b815260040160206040518083038186803b158015612a0757600080fd5b505afa158015612a1b573d6000803e3d6000fd5b505050506040513d6020811015612a3157600080fd5b5051604080516348c5be7f60e11b81526004810186905290516001600160a01b03928316926399bec315929089169163918b7cfe91602480820192602092909190829003018186803b158015612a8657600080fd5b505afa158015612a9a573d6000803e3d6000fd5b505050506040513d6020811015612ab057600080fd5b50516040805163434efcbd60e01b81526004810188905290516001600160a01b038a169163434efcbd916024808301926020929190829003018186803b158015612af957600080fd5b505afa158015612b0d573d6000803e3d6000fd5b505050506040513d6020811015612b2357600080fd5b50513080612b346122e38b8a613836565b604080516001600160e01b031960e089901b16815260048101969096526001600160a01b0394851660248701529284166044860152921660648401526084830191909152600060a48301819052905160c48084019382900301818387803b15801561263457600080fd5b612bab8787878787612f72565b611f42878584846132db565b61115884836125d0846138e8565b6040805163438ac0d160e11b8152600481018590526001600160a01b0384811660248301526044820184905291519186169163871581a29160648082019260009290919082900301818387803b15801561113a57600080fd5b806001600160a01b0316866001600160a01b031663a2a4d76e866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612c6c57600080fd5b505afa158015612c80573d6000803e3d6000fd5b505050506040513d6020811015612c9657600080fd5b50516001600160a01b031614612ce5576040805162461bcd60e51b815260206004820152600f60248201526e0deeedccae45adad2e6e6dac2e8c6d608b1b604482015290519081900360640190fd5b612cf286868686866129c2565b505050505050565b806001600160a01b0316846001600160a01b031663a2a4d76e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015612d4857600080fd5b505afa158015612d5c573d6000803e3d6000fd5b505050506040513d6020811015612d7257600080fd5b50516001600160a01b031614612dc1576040805162461bcd60e51b815260206004820152600f60248201526e0deeedccae45adad2e6e6dac2e8c6d608b1b604482015290519081900360640190fd5b611be9848484613488565b816001600160a01b031663d94d4208826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b158015612e2457600080fd5b505af1158015612cf2573d6000803e3d6000fd5b6040805163e0decbcd60e01b8152600481018590526001600160a01b0384811660248301526044820184905291519186169163e0decbcd9160648082019260009290919082900301818387803b15801561113a57600080fd5b612ea186868686868660016142d5565b604051339083156108fc029084906000818181858888f19350505050158015611f42573d6000803e3d6000fd5b612ed98282346130b5565b5050565b826001600160a01b03166380bdb6b283836040518363ffffffff1660e01b815260040180838152602001826001600160a01b03166001600160a01b0316815260200192505050600060405180830381600087803b158015611f2e57600080fd5b6000612f4a898630611b54565b9050612f5a89898989858961381c565b612f66898285856132db565b98975050505050505050565b6112c0858585858533614644565b60408051631060930d60e01b815230600482015290516000916001600160a01b03841691631060930d9160248082019260209290919082900301818787803b158015612fcb57600080fd5b505af1158015612fdf573d6000803e3d6000fd5b505050506040513d6020811015612ff557600080fd5b505192915050565b826001600160a01b031663a9059cbb83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611f2e57600080fd5b816001600160a01b031663d49d7867826040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b158015612e2457600080fd5b826001600160a01b031663d8dfeb456040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156130f057600080fd5b505af1158015613104573d6000803e3d6000fd5b505050506040513d602081101561311a57600080fd5b505160408051630d0e30db60e41b815290516001600160a01b039092169163d0e30db0918491600480830192600092919082900301818588803b15801561316057600080fd5b505af1158015613174573d6000803e3d6000fd5b5050505050826001600160a01b031663d8dfeb456040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156131b457600080fd5b505af11580156131c8573d6000803e3d6000fd5b505050506040513d60208110156131de57600080fd5b50516040805163095ea7b360e01b81526001600160a01b038681166004830152602482018590529151919092169163095ea7b391604480830192600092919082900301818387803b15801561323257600080fd5b505af1158015613246573d6000803e3d6000fd5b50505050826001600160a01b0316633b4da69f83836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611f2e57600080fd5b6000806132bc8b8b8b8b8b8b8b6119d1565b90925090506132cd8b8286866132db565b995099975050505050505050565b60408051631bc250a960e21b8152600481018590526001600160a01b0384811660248301528381166044830152915191861691636f0942a49160648082019260009290919082900301818387803b15801561113a57600080fd5b6116ec83838334614917565b600061334e898630611b54565b9050612f668989898985898989612166565b806001600160a01b0316846001600160a01b031663a2a4d76e846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156133ae57600080fd5b505afa1580156133c2573d6000803e3d6000fd5b505050506040513d60208110156133d857600080fd5b50516001600160a01b031614613427576040805162461bcd60e51b815260206004820152600f60248201526e0deeedccae45adad2e6e6dac2e8c6d608b1b604482015290519081900360640190fd5b611be9848484613335565b836001600160a01b031663c78101f88484846040518463ffffffff1660e01b8152600401808481526020018381526020018281526020019350505050600060405180830381600087803b15801561113a57600080fd5b6000836001600160a01b03166367aea3136040518163ffffffff1660e01b815260040160206040518083038186803b1580156134c357600080fd5b505afa1580156134d7573d6000803e3d6000fd5b505050506040513d60208110156134ed57600080fd5b50516040805163434efcbd60e01b81526004810185905290519192506000916001600160a01b0387169163434efcbd916024808301926020929190829003018186803b15801561353c57600080fd5b505afa158015613550573d6000803e3d6000fd5b505050506040513d602081101561356657600080fd5b5051604080516348c5be7f60e11b81526004810186905290519192506000916001600160a01b0388169163918b7cfe916024808301926020929190829003018186803b1580156135b557600080fd5b505afa1580156135c9573d6000803e3d6000fd5b505050506040513d60208110156135df57600080fd5b505160408051630f50894160e21b8152600481018390526001600160a01b038581166024830152825193945060009390871692633d4225049260448082019391829003018186803b15801561363357600080fd5b505afa158015613647573d6000803e3d6000fd5b505050506040513d604081101561365d57600080fd5b50602090810151604080516351526bb760e11b81526004810189905290519193506000926001600160a01b038b169263a2a4d76e926024808201939291829003018186803b1580156136ae57600080fd5b505afa1580156136c2573d6000803e3d6000fd5b505050506040513d60208110156136d857600080fd5b505190506001600160a01b038116301480613775575060408051634fa053b160e01b81526001600160a01b038381166004830152602482018990523060448301529151918a1691634fa053b191606480820192602092909190829003018186803b15801561374557600080fd5b505afa158015613759573d6000803e3d6000fd5b505050506040513d602081101561376f57600080fd5b50516001145b156137a05761378b8785611e3588888989613f1d565b61379b8887600085600003613432565b61114e565b6137b18730611e3588308989613f1d565b604080516399bec31560e01b8152600481018590526001600160a01b0386811660248301523060448301819052606483015260006084830181905285810360a48401529251908816926399bec3159260c4808201939182900301818387803b15801561159b57600080fd5b61382886858434614917565b612cf2868685858533614644565b600080836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561387457600080fd5b505af1158015613888573d6000803e3d6000fd5b505050506040513d602081101561389e57600080fd5b5051839250905060128110156138c5576138be8382601203600a0a614aee565b91506138e1565b60128111156138e15760128103600a0a83816138dd57fe5b0491505b5092915050565b80600081121561392e576040805162461bcd60e51b815260206004820152600c60248201526b696e742d6f766572666c6f7760a01b604482015290519081900360640190fd5b919050565b600080856001600160a01b031663d07900bb846040518263ffffffff1660e01b81526004018082815260200191505060a06040518083038186803b15801561397a57600080fd5b505afa15801561398e573d6000803e3d6000fd5b505050506040513d60a08110156139a457600080fd5b50602001519050806139f7576040805162461bcd60e51b8152602060048201526017602482015276696e76616c69642d636f6c6c61746572616c2d7479706560481b604482015290519081900360640190fd5b60408051630f50894160e21b8152600481018590526001600160a01b0386811660248301528251600093918a1692633d422504926044808301939192829003018186803b158015613a4757600080fd5b505afa158015613a5b573d6000803e3d6000fd5b505050506040513d6040811015613a7157600080fd5b50602001519050613a8a828781613a8457fe5b046138e8565b925080831115613aa557613a9d816138e8565b600003613aaa565b826000035b979650505050505050565b826001600160a01b031663a7e944556040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156131b457600080fd5b6000856001600160a01b03166367aea3136040518163ffffffff1660e01b815260040160206040518083038186803b158015613b2b57600080fd5b505afa158015613b3f573d6000803e3d6000fd5b505050506040513d6020811015613b5557600080fd5b50516040805163434efcbd60e01b81526004810187905290519192506000916001600160a01b0389169163434efcbd916024808301926020929190829003018186803b158015613ba457600080fd5b505afa158015613bb8573d6000803e3d6000fd5b505050506040513d6020811015613bce57600080fd5b5051604080516348c5be7f60e11b81526004810188905290519192506000916001600160a01b038a169163918b7cfe916024808301926020929190829003018186803b158015613c1d57600080fd5b505afa158015613c31573d6000803e3d6000fd5b505050506040513d6020811015613c4757600080fd5b5051604080516351526bb760e11b81526004810189905290519192506000916001600160a01b038b169163a2a4d76e916024808301926020929190829003018186803b158015613c9657600080fd5b505afa158015613caa573d6000803e3d6000fd5b505050506040513d6020811015613cc057600080fd5b505190506001600160a01b038116301480613d5d575060408051634fa053b160e01b81526001600160a01b038381166004830152602482018a90523060448301529151918b1691634fa053b191606480820192602092909190829003018186803b158015613d2d57600080fd5b505afa158015613d41573d6000803e3d6000fd5b505050506040513d6020811015613d5757600080fd5b50516001145b15613e1c578415613d7857613d738884886115f6565b613d83565b613d83888488613ab5565b613e178988600061153c88896001600160a01b031663fabde80c8a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015613de457600080fd5b505afa158015613df8573d6000803e3d6000fd5b505050506040513d6020811015613e0e57600080fd5b50518989613933565b612648565b8415613e3257613e2d8830886115f6565b613e3d565b613e3d883088613ab5565b836001600160a01b03166399bec315838530306000613e6b8b676765c793fa10079d601b1b8f028c8c613933565b6040518763ffffffff1660e01b815260040180878152602001866001600160a01b03166001600160a01b03168152602001856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b031681526020018381526020018281526020019650505050505050600060405180830381600087803b158015613efa57600080fd5b505af1158015613f0e573d6000803e3d6000fd5b50505050505050505050505050565b600080856001600160a01b031663d07900bb846040518263ffffffff1660e01b81526004018082815260200191505060a06040518083038186803b158015613f6457600080fd5b505afa158015613f78573d6000803e3d6000fd5b505050506040513d60a0811015613f8e57600080fd5b506020015160408051630f50894160e21b8152600481018690526001600160a01b0387811660248301528251939450600093908a1692633d4225049260448082019391829003018186803b158015613fe557600080fd5b505afa158015613ff9573d6000803e3d6000fd5b505050506040513d604081101561400f57600080fd5b5060209081015160408051633eaf7a0360e21b81526001600160a01b038a811660048301529151929450600093918b169263fabde80c92602480840193919291829003018186803b15801561406357600080fd5b505afa158015614077573d6000803e3d6000fd5b505050506040513d602081101561408d57600080fd5b5051905060006140a66140a08486614aee565b83614b49565b9050676765c793fa10079d601b1b81049450806140ce86676765c793fa10079d601b1b614aee565b106140d957846140de565b846001015b9998505050505050505050565b600080856001600160a01b0316636c50dbba856040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b15801561413457600080fd5b505af1158015614148573d6000803e3d6000fd5b505050506040513d602081101561415e57600080fd5b50519050806141ae576040805162461bcd60e51b8152602060048201526017602482015276696e76616c69642d636f6c6c61746572616c2d7479706560481b604482015290519081900360640190fd5b6000876001600160a01b031663fabde80c876040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561420657600080fd5b505afa15801561421a573d6000803e3d6000fd5b505050506040513d602081101561423057600080fd5b5051905061424984676765c793fa10079d601b1b614aee565b8110156142ad576142798261427261426c87676765c793fa10079d601b1b614aee565b84614b49565b81613a8457fe5b925061429084676765c793fa10079d601b1b614aee565b61429a8484614aee565b106142a557826142aa565b826001015b92505b505095945050505050565b60006142cf82676765c793fa10079d601b1b614aee565b92915050565b6000876001600160a01b031663434efcbd866040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561431b57600080fd5b505afa15801561432f573d6000803e3d6000fd5b505050506040513d602081101561434557600080fd5b50519050811561435f5761435a8682856115f6565b61436a565b61436a868285613ab5565b6145218886614378876138e8565b60000361153c8c6001600160a01b03166367aea3136040518163ffffffff1660e01b815260040160206040518083038186803b1580156143b757600080fd5b505afa1580156143cb573d6000803e3d6000fd5b505050506040513d60208110156143e157600080fd5b81019080805190602001909291905050508d6001600160a01b03166367aea3136040518163ffffffff1660e01b815260040160206040518083038186803b15801561442b57600080fd5b505afa15801561443f573d6000803e3d6000fd5b505050506040513d602081101561445557600080fd5b505160408051633eaf7a0360e21b81526001600160a01b038a811660048301529151919092169163fabde80c916024808301926020929190829003018186803b1580156144a157600080fd5b505afa1580156144b5573d6000803e3d6000fd5b505050506040513d60208110156144cb57600080fd5b8101908080519060200190929190505050878f6001600160a01b031663918b7cfe8e6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561150b57600080fd5b61452d88863087612bc5565b6040805163ef693bed60e01b81523060048201526024810186905290516001600160a01b0389169163ef693bed91604480830192600092919082900301818387803b15801561457b57600080fd5b505af115801561458f573d6000803e3d6000fd5b50505050866001600160a01b031663d8dfeb456040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156145ce57600080fd5b505af11580156145e2573d6000803e3d6000fd5b505050506040513d60208110156145f857600080fd5b505160408051632e1a7d4d60e01b81526004810187905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b15801561159b57600080fd5b6000866001600160a01b031663434efcbd856040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561468a57600080fd5b505afa15801561469e573d6000803e3d6000fd5b505050506040513d60208110156146b457600080fd5b5051604080516367aea31360e01b815290519192506000916001600160a01b038a16916367aea313916004808301926020929190829003018186803b1580156146fc57600080fd5b505afa158015614710573d6000803e3d6000fd5b505050506040513d602081101561472657600080fd5b5051604080516348c5be7f60e11b81526004810188905290519192506000916001600160a01b038b169163918b7cfe916024808301926020929190829003018186803b15801561477557600080fd5b505afa158015614789573d6000803e3d6000fd5b505050506040513d602081101561479f57600080fd5b505190506147b78987600061153c868d89888d6140eb565b6147c6898730612304896142b8565b604080516350de215d60e01b81523060048201526001600160a01b0389811660248301529151918416916350de215d91604480820192602092909190829003018186803b15801561481657600080fd5b505afa15801561482a573d6000803e3d6000fd5b505050506040513d602081101561484057600080fd5b50516148b757816001600160a01b031663d94d4208886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050600060405180830381600087803b15801561489e57600080fd5b505af11580156148b2573d6000803e3d6000fd5b505050505b866001600160a01b031663ef693bed85876040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015613efa57600080fd5b6149228330836130b5565b836001600160a01b03166367aea3136040518163ffffffff1660e01b815260040160206040518083038186803b15801561495b57600080fd5b505afa15801561496f573d6000803e3d6000fd5b505050506040513d602081101561498557600080fd5b5051604080516348c5be7f60e11b81526004810185905290516001600160a01b03928316926399bec315929088169163918b7cfe91602480820192602092909190829003018186803b1580156149da57600080fd5b505afa1580156149ee573d6000803e3d6000fd5b505050506040513d6020811015614a0457600080fd5b50516040805163434efcbd60e01b81526004810187905290516001600160a01b0389169163434efcbd916024808301926020929190829003018186803b158015614a4d57600080fd5b505afa158015614a61573d6000803e3d6000fd5b505050506040513d6020811015614a7757600080fd5b50513080614a84876138e8565b604080516001600160e01b031960e089901b16815260048101969096526001600160a01b0394851660248701529284166044860152921660648401526084830191909152600060a48301819052905160c48084019382900301818387803b15801561113a57600080fd5b6000811580614b0957505080820282828281614b0657fe5b04145b6142cf576040805162461bcd60e51b815260206004820152600c60248201526b6d756c2d6f766572666c6f7760a01b604482015290519081900360640190fd5b808203828111156142cf576040805162461bcd60e51b815260206004820152600c60248201526b7375622d6f766572666c6f7760a01b604482015290519081900360640190fdfea2646970667358221220a85d8e072b79b98ece5ca342df74ba0169886bce4daf790dd76156433918676064736f6c63430006070033
Deployed Bytecode Sourcemap
31148:15125:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;9;2:12;34196:444:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34196:444:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;34196:444:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27630:568;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27630:568:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;27630:568:0;;;;;;;;;;;;;;;;;;;;;;:::i;43825:1162::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43825:1162:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;43825:1162:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;40284:670::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40284:670:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;40284:670:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;7719:263;;5:9:-1;2:2;;;27:1;24;17:12;2:2;7719:263:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;7719:263:0;;;;;;;;;;;;;;;;;:::i;31198:607::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31198:607:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;31198:607:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;35033:294::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35033:294:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;35033:294:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;40962:822::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;40962:822:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;40962:822:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;40962:822:0;;;;;;;;;;;;;;;;;;;;;20841:209;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20841:209:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;20841:209:0;;;;;;;;;;;;;;;;;:::i;28865:190::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28865:190:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;28865:190:0;;;;;;;;;;;;;;;;;;;;;;:::i;24185:209::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24185:209:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;24185:209:0;;;;;;;;;;;;;;;;;;;;:::i;44995:1275::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44995:1275:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;44995:1275:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25965:172::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25965:172:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;25965:172:0;;;;;;;;;;;;;:::i;39070:666::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39070:666:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;39070:666:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21717:961::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21717:961:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21717:961:0;;;;;;;;;;;;;;;;;;;;;;:::i;37588:1474::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37588:1474:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;37588:1474:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23300:165::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23300:165:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;23300:165:0;;;;;;;;;;;;;;;;;:::i;25569:167::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25569:167:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;25569:167:0;;;;;;;;;;;;;;;;;:::i;25195:165::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25195:165:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;25195:165:0;;;;;;;;;;;;;;;;;:::i;30000:412::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;30000:412:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33605:583::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33605:583:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;33605:583:0;;;;;;;;;;;;;;;;;;;;;;:::i;42453:1364::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42453:1364:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;42453:1364:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32505:716::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32505:716:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;32505:716:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;34648:377::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34648:377:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;34648:377:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26719:681::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26719:681:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;26719:681:0;;;;;;;;;;;;;;;;;;;;;;:::i;23729:203::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23729:203:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23729:203:0;;;;;;;;;;;;;;;;;;;;:::i;33229:368::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33229:368:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;33229:368:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;36748:276::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36748:276:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;36748:276:0;;;;;;;;;;;;;;;;;;;;;;:::i;20112:187::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20112:187:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;20112:187:0;;;;;;;;;;:::i;22909:185::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22909:185:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22909:185:0;;;;;;;;;;;;;;;;;;;;:::i;30743:394::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30743:394:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;30743:394:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19212:119::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;19212:119:0;;;;;;;;;;:::i;21251:185::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21251:185:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;21251:185:0;;;;;;;;;;;;;;;;;:::i;37032:548::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;37032:548:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28446:247::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28446:247:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;28446:247:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32049:168::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32049:168:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32049:168:0;-1:-1:-1;;;;;32049:168:0;;:::i;:::-;;;;-1:-1:-1;;;;;32049:168:0;;;;;;;;;;;;;;18923:134;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18923:134:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;18923:134:0;;;;;;;;;;;;;;;;;:::i;20460:181::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20460:181:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;20460:181:0;;;;;;;;;;:::i;19532:420::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;19532:420:0;;;;;;;;;;;;;;;;;:::i;41792:653::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41792:653:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;41792:653:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31813:228::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31813:228:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;31813:228:0;;;;;;;;;;;;;;;;;;;;;;:::i;26320:173::-;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;26320:173:0;;;;;;;;;;;;;;;;;:::i;39744:532::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;39744:532:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;39744:532:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32225:272::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;32225:272:0;;;;;;;;;;;;;;;;;;;;;;:::i;24696:252::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24696:252:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;24696:252:0;;;;;;;;;;;;;;;;;;:::i;35335:1405::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35335:1405:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;;;;;35335:1405:0;;;;;;;;;;;;;;;;;:::i;29362:355::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;29362:355:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;34196:444::-;34418:82;34437:7;34446:4;34460;34467:32;34479:14;34495:3;34467:11;:32::i;:::-;34418:18;:82::i;:::-;34576:56;;;-1:-1:-1;;;34576:56:0;;34616:10;34576:56;;;;;;;;;;;;-1:-1:-1;;;;;34576:39:0;;;;;:56;;;;;-1:-1:-1;;34576:56:0;;;;;;;-1:-1:-1;34576:39:0;:56;;;2:2:-1;;;;27:1;24;17:12;2:2;34576:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34576:56:0;;;;34196:444;;;;:::o;27630:568::-;27835:53;27854:7;27863:4;27877;27884:3;27835:18;:53::i;:::-;27957:52;;;-1:-1:-1;;;27957:52:0;;27998:4;27957:52;;;;;;;;;;;;-1:-1:-1;;;;;27957:32:0;;;;;:52;;;;;-1:-1:-1;;27957:52:0;;;;;;;-1:-1:-1;27957:32:0;:52;;;2:2:-1;;;;27:1;24;17:12;2:2;27957:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27957:52:0;;;;28072:7;-1:-1:-1;;;;;28053:38:0;;:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28053:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28053:40:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;28053:40:0;:54;;;-1:-1:-1;;;28053:54:0;;;;;;;;;;-1:-1:-1;;;;;28053:49:0;;;;;;:54;;;;;-1:-1:-1;;28053:54:0;;;;;;;;-1:-1:-1;28053:49:0;:54;;;2:2:-1;;;;27:1;24;17:12;2:2;28053:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;28166:24:0;;:10;;-1:-1:-1;28166:24:0;;;;;-1:-1:-1;28186:3:0;;28166:24;;;;28186:3;28166:10;:24;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;28166:24:0;27630:568;;;;:::o;43825:1162::-;44055:19;44089:7;-1:-1:-1;;;;;44077:26:0;;44104:4;44077:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44077:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;44077:32:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;44077:32:0;;-1:-1:-1;44170:46:0;44184:8;44077:32;44207:8;44170:13;:46::i;:::-;44227:18;44248:45;44260:14;44276:16;44248:11;:45::i;:::-;44227:66;;44375:317;44417:7;44439:4;44459:20;44465:13;44459:5;:20::i;:::-;44458:21;;44494:187;44526:7;-1:-1:-1;;;;;44514:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44514:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;44514:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;44514:33:0;;;;;;;;;;;;;;;;44576:7;-1:-1:-1;;;;;44564:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44564:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;44564:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;44564:33:0;44549:74;;;-1:-1:-1;;;44549:74:0;;-1:-1:-1;;;;;44549:74:0;;;;;;;;;:61;;;;;;;:74;;;;;44564:33;;44549:74;;;;;;;:61;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;44549:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;44549:74:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;44549:74:0;;;;;;;;;;;;;;;;44625:11;44650:7;-1:-1:-1;;;;;44638:36:0;;44675:4;44638:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;44638:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;44638:42:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;44638:42:0;44494:19;:187::i;:::-;44375:27;:317::i;:::-;44773:63;44792:7;44801:4;44815;44822:13;44773:18;:63::i;:::-;44910:69;;;-1:-1:-1;;;44910:69:0;;44950:10;44910:69;;;;;;;;;;;;-1:-1:-1;;;;;44910:39:0;;;;;:69;;;;;-1:-1:-1;;44910:69:0;;;;;;;-1:-1:-1;44910:39:0;:69;;;2:2:-1;;;;27:1;24;17:12;2:2;44910:69:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;44910:69:0;;;;43825:1162;;;;;;;;:::o;40284:670::-;40662:9;40691:48;40700:7;40709:14;40733:4;40691:8;:48::i;:::-;40684:55;;40750:131;40785:7;40794:12;40808:14;40824:8;40834:4;40840:16;40858:8;40868:12;40750:34;:131::i;:::-;40892:54;40904:7;40913:4;40919:17;40938:7;40892:11;:54::i;:::-;40284:670;;;;;;;;;;;;:::o;7719:263::-;7862:3;-1:-1:-1;;;;;7849:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;7849:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7849:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;7849:30:0;:75;;;-1:-1:-1;;;7849:75:0;;7893:10;7849:75;;;;7913:4;7849:75;;;;;;;;;;;;-1:-1:-1;;;;;7849:43:0;;;;;;:75;;;;;:30;;:75;;;;;;;;-1:-1:-1;7849:43:0;:75;;;2:2:-1;;;;27:1;24;17:12;2:2;7849:75:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7849:75:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;7937:37:0;;-1:-1:-1;7952:3:0;7957:11;7970:3;7937:14;:37::i;:::-;7719:263;;;:::o;31198:607::-;31394:12;31390:303;;;31492:3;-1:-1:-1;;;;;31473:34:0;;:36;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31473:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31473:36:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31473:36:0;:81;;;-1:-1:-1;;;31473:81:0;;31523:10;31473:81;;;;31543:4;31473:81;;;;;;;;;;;;-1:-1:-1;;;;;31473:49:0;;;;;;:81;;;;;-1:-1:-1;;31473:81:0;;;;;;;;-1:-1:-1;31473:49:0;:81;;;2:2:-1;;;;27:1;24;17:12;2:2;31473:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31473:81:0;;;;31646:3;-1:-1:-1;;;;;31627:34:0;;:36;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31627:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31627:36:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31627:36:0;:54;;;-1:-1:-1;;;31627:54:0;;-1:-1:-1;;;;;31627:54:0;;;;;;;;;;;;;;;:44;;;;;;;:54;;;;;-1:-1:-1;;31627:54:0;;;;;;;-1:-1:-1;31627:44:0;:54;;;2:2:-1;;;;27:1;24;17:12;2:2;31627:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31627:54:0;;;;31390:303;31777:3;-1:-1:-1;;;;;31758:28:0;;31787:4;31793:3;31758:39;;;;;;;;;;;;;-1:-1:-1;;;;;31758:39:0;-1:-1:-1;;;;;31758:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;35033:294:0;35244:5;-1:-1:-1;;;;;35205:44:0;35217:7;-1:-1:-1;;;;;35205:29:0;;35235:4;35205:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35205:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35205:35:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35205:35:0;-1:-1:-1;;;;;35205:44:0;;35197:72;;;;;-1:-1:-1;;;35197:72:0;;;;;;;;;;;;-1:-1:-1;;;35197:72:0;;;;;;;;;;;;;;;35280:39;35290:7;35299:8;35309:4;35315:3;35280:9;:39::i;40962:822::-;41316:40;;;-1:-1:-1;;;41316:40:0;;41350:4;41316:40;;;;;;41220:11;;;;-1:-1:-1;;;;;41316:25:0;;;;;:40;;;;;;;;;;;;;;:25;:40;;;2:2:-1;;;;27:1;24;17:12;2:2;41316:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41316:40:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;41316:40:0;;-1:-1:-1;;;;;;41371:17:0;;41367:82;;41411:26;41429:7;41411:17;:26::i;:::-;41405:32;;41367:82;41573:7;-1:-1:-1;;;;;41554:38:0;;:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;41554:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41554:40:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;41554:40:0;41539:88;;;-1:-1:-1;;;41539:88:0;;-1:-1:-1;;;;;41539:88:0;;;;;;;;;;;;;;;:65;;;;;;;:88;;;;;-1:-1:-1;;41539:88:0;;;;;;;-1:-1:-1;41539:65:0;:88;;;2:2:-1;;;;27:1;24;17:12;2:2;41539:88:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41539:88:0;;;;41645:131;41684:7;41693:12;41707:7;41716:8;41726:14;41742:16;41760:8;41770:5;41645:38;:131::i;:::-;41638:138;;40962:822;;;;;;;;;;:::o;20841:209::-;20992:50;;;-1:-1:-1;;;20992:50:0;;;;;;;;-1:-1:-1;;;;;20992:50:0;;;;;;;;;20963:9;;20992:29;;;;;:50;;;;;;;;;;;;;;20963:9;20992:29;:50;;;2:2:-1;;;;27:1;24;17:12;2:2;20992:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20992:50:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;20992:50:0;;20841:209;-1:-1:-1;;;;20841:209:0:o;28865:190::-;29001:46;29012:7;29021:8;29031:4;29037:3;29042:4;29001:10;:46::i;:::-;28865:190;;;;:::o;24185:209::-;24328:58;;;-1:-1:-1;;;24328:58:0;;;;;;;;-1:-1:-1;;;;;24328:58:0;;;;;;;;;;;;;;;:42;;;;;;:58;;;;;-1:-1:-1;;24328:58:0;;;;;;;;-1:-1:-1;24328:42:0;:58;;;2:2:-1;;;;27:1;24;17:12;44995:1275:0;45202:18;45235:7;-1:-1:-1;;;;;45223:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;45223:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45223:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;45223:33:0;45289:32;;;-1:-1:-1;;;45289:32:0;;;;;;;;;;45223:33;;-1:-1:-1;45267:19:0;;-1:-1:-1;;;;;45289:26:0;;;;;:32;;;;;45223:33;;45289:32;;;;;;;:26;:32;;;2:2:-1;;;;27:1;24;17:12;2:2;45289:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45289:32:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;45289:32:0;45357:42;;;-1:-1:-1;;;45357:42:0;;;;;;;;;;45289:32;;-1:-1:-1;45332:22:0;;-1:-1:-1;;;;;45357:36:0;;;;;:42;;;;;45289:32;;45357:42;;;;;;;:36;:42;;;2:2:-1;;;;27:1;24;17:12;2:2;45357:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45357:42:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;45357:42:0;45435:61;;;-1:-1:-1;;;45435:61:0;;;;;;;;-1:-1:-1;;;;;45435:61:0;;;;;;;;;45357:42;;-1:-1:-1;45413:18:0;;45435:32;;;;;;:61;;;;;;;;;;;:32;:61;;;2:2:-1;;;;27:1;24;17:12;2:2;45435:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;45435:61:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;45435:61:0;;;;-1:-1:-1;45559:108:0;45573:8;45583:11;45596:70;45613:10;45583:11;;45651:14;45596:16;:70::i;:::-;45559:13;:108::i;:::-;45678:18;45699:45;45711:14;45727:16;45699:11;:45::i;:::-;45678:66;;45826:149;45868:7;45890:4;45910:20;45916:13;45910:5;:20::i;:::-;45909:21;;45950:13;45945:19;;45826:27;:149::i;:::-;46056:63;46075:7;46084:4;46098;46105:13;46056:18;:63::i;:::-;46193:69;;;-1:-1:-1;;;46193:69:0;;46233:10;46193:69;;;;;;;;;;;;-1:-1:-1;;;;;46193:39:0;;;;;:69;;;;;-1:-1:-1;;46193:69:0;;;;;;;-1:-1:-1;46193:39:0;:69;;;2:2:-1;;;;27:1;24;17:12;2:2;46193:69:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;46193:69:0;;;;44995:1275;;;;;;;;;;:::o;25965:172::-;26094:7;-1:-1:-1;;;;;26082:29:0;;26112:7;26121;26082:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26082:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;26082:47:0;;;;25965:172;;;:::o;39070:666::-;39433:230;39480:7;39500:12;39525:14;39552:8;39573:4;39590:16;39619:8;39640:12;39433:34;:230::i;:::-;39674:54;39686:7;39695:4;39701:17;39720:7;39674:11;:54::i;:::-;39070:666;;;;;;;;;;:::o;21717:961::-;21920:13;21954;-1:-1:-1;;;;;21936:40:0;;21977:3;21936:45;;;;;;;;;;;;;-1:-1:-1;;;;;21936:45:0;-1:-1:-1;;;;;21936:45:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21936:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21936:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;21936:45:0;;-1:-1:-1;;;;;;22087:19:0;;;;:54;;;22138:3;-1:-1:-1;;;;;22110:31:0;22120:5;-1:-1:-1;;;;;22110:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22110:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22110:24:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22110:24:0;-1:-1:-1;;;;;22110:31:0;;;22087:54;22083:490;;;22220:16;;22409:10;;22401:40;;;;;-1:-1:-1;;;22401:40:0;;;;;;;;;;;;-1:-1:-1;;;22401:40:0;;;;;;;;;;;;;;;22536:13;-1:-1:-1;;;;;22518:38:0;;22557:3;22518:43;;;;;;;;;;;;;-1:-1:-1;;;;;22518:43:0;-1:-1:-1;;;;;22518:43:0;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22518:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22518:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;22518:43:0;;-1:-1:-1;;22083:490:0;22627:43;22649:7;22658:4;22664:5;22627:21;:43::i;37588:1474::-;37878:19;37912:7;-1:-1:-1;;;;;37900:26:0;;37927:4;37900:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;37900:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37900:32:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;37900:32:0;37964:33;;;-1:-1:-1;;;37964:33:0;;;;37900:32;;-1:-1:-1;37943:18:0;;-1:-1:-1;;;;;37964:31:0;;;;;:33;;;;;37900:32;;37964:33;;;;;;;:31;:33;;;2:2:-1;;;;27:1;24;17:12;2:2;37964:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;37964:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;37964:33:0;38033:42;;;-1:-1:-1;;;38033:42:0;;;;;;;;;;37964:33;;-1:-1:-1;38008:22:0;;-1:-1:-1;;;;;38033:36:0;;;;;:42;;;;;37964:33;;38033:42;;;;;;;:36;:42;;;2:2:-1;;;;27:1;24;17:12;2:2;38033:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38033:42:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38033:42:0;;-1:-1:-1;38166:85:0;38191:14;38207:11;38220:16;38238:12;38166:24;:85::i;:::-;38326:185;38354:7;38363:4;38369:52;38375:45;38387:14;38403:16;38375:11;:45::i;:::-;38369:5;:52::i;:::-;38423:87;38446:10;38458:12;38472:11;38485:14;38501:8;38423:22;:87::i;38326:185::-;38610:68;38632:7;38641:4;38655;38662:15;38668:8;38662:5;:15::i;:::-;38610:21;:68::i;:::-;38772:74;;;-1:-1:-1;;;38772:74:0;;38821:4;38772:74;;;;-1:-1:-1;;;;;38772:74:0;;;;;;;;;:40;;;;;;:74;;;;;;;;;;;;;;;:40;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;38772:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38772:74:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;38772:74:0;38768:172;;38883:10;-1:-1:-1;;;;;38868:50:0;;38919:8;38868:60;;;;;;;;;;;;;-1:-1:-1;;;;;38868:60:0;-1:-1:-1;;;;;38868:60:0;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;38868:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;38868:60:0;;;;38768:172;39005:49;;;-1:-1:-1;;;39005:49:0;;39033:10;39005:49;;;;;;;;;;;;-1:-1:-1;;;;;39005:27:0;;;;;:49;;;;;-1:-1:-1;;39005:49:0;;;;;;;-1:-1:-1;39005:27:0;:49;;;2:2:-1;;;;27:1;24;17:12;2:2;39005:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;39005:49:0;;;;37588:1474;;;;;;;;;;;:::o;23300:165::-;23427:7;-1:-1:-1;;;;;23415:33:0;;23449:3;23454:2;23415:42;;;;;;;;;;;;;-1:-1:-1;;;;;23415:42:0;-1:-1:-1;;;;;23415:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;25569:167:0;25697:7;-1:-1:-1;;;;;25685:32:0;;25718:3;25723:4;25685:43;;;;;;;;;;;;;-1:-1:-1;;;;;25685:43:0;-1:-1:-1;;;;;25685:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;25195:165:0;25322:7;-1:-1:-1;;;;;25310:31:0;;25342:4;25348:3;25310:42;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25310:42:0;-1:-1:-1;;;;;25310:42:0;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;30000:412:0;30236:9;30265:48;30274:7;30283:14;30307:4;30265:8;:48::i;:::-;30258:55;;30324:80;30347:7;30356:12;30370:7;30379:8;30389:4;30395:8;30324:22;:80::i;:::-;30000:412;;;;;;;;:::o;33605:583::-;33757:8;33768:32;33780:14;33796:3;33768:11;:32::i;:::-;33757:43;;33858:58;33886:7;33895:4;33902:10;33908:3;33902:5;:10::i;:::-;33901:11;;33914:1;33858:27;:58::i;:::-;33997:53;34016:7;34025:4;34039;34046:3;33997:18;:53::i;:::-;34124:56;;;-1:-1:-1;;;34124:56:0;;34164:10;34124:56;;;;;;;;;;;;-1:-1:-1;;;;;34124:39:0;;;;;:56;;;;;-1:-1:-1;;34124:56:0;;;;;;;-1:-1:-1;34124:39:0;:56;;;2:2:-1;;;;27:1;24;17:12;2:2;34124:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;34124:56:0;;;;33605:583;;;;;:::o;42453:1364::-;42638:18;42671:7;-1:-1:-1;;;;;42659:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;42659:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;42659:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;42659:33:0;42725:32;;;-1:-1:-1;;;42725:32:0;;;;;;;;;;42659:33;;-1:-1:-1;42703:19:0;;-1:-1:-1;;;;;42725:26:0;;;;;:32;;;;;42659:33;;42725:32;;;;;;;:26;:32;;;2:2:-1;;;;27:1;24;17:12;2:2;42725:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;42725:32:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;42725:32:0;42793:42;;;-1:-1:-1;;;42793:42:0;;;;;;;;;;42725:32;;-1:-1:-1;42768:22:0;;-1:-1:-1;;;;;42793:36:0;;;;;:42;;;;;42725:32;;42793:42;;;;;;;:36;:42;;;2:2:-1;;;;27:1;24;17:12;2:2;42793:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;42793:42:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;42793:42:0;42871:61;;;-1:-1:-1;;;42871:61:0;;;;;;;;-1:-1:-1;;;;;42871:61:0;;;;;;;;;42793:42;;-1:-1:-1;42849:18:0;;42871:32;;;;;;:61;;;;;;;;;;;:32;:61;;;2:2:-1;;;;27:1;24;17:12;2:2;42871:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;42871:61:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;42871:61:0;;;;-1:-1:-1;42995:108:0;43009:8;43019:11;43032:70;43049:10;43019:11;;43087:14;43032:16;:70::i;42995:108::-;43184:149;43226:7;43248:4;43268:20;43274:13;43268:5;:20::i;:::-;43267:21;;43308:13;43303:19;;43184:27;:149::i;:::-;43414:63;43433:7;43442:4;43456;43463:13;43414:18;:63::i;:::-;43546:62;;;-1:-1:-1;;;43546:62:0;;43587:4;43546:62;;;;;;;;;;;;-1:-1:-1;;;;;43546:32:0;;;;;:62;;;;;-1:-1:-1;;43546:62:0;;;;;;;-1:-1:-1;43546:32:0;:62;;;2:2:-1;;;;27:1;24;17:12;2:2;43546:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;43546:62:0;;;;43671:7;-1:-1:-1;;;;;43652:38:0;;:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;43652:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;43652:40:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;43652:40:0;:64;;;-1:-1:-1;;;43652:64:0;;;;;;;;;;-1:-1:-1;;;;;43652:49:0;;;;;;:64;;;;;-1:-1:-1;;43652:64:0;;;;;;;;-1:-1:-1;43652:49:0;:64;;;2:2:-1;;;;27:1;24;17:12;2:2;43652:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;43775:34:0;;:10;;-1:-1:-1;43775:34:0;;;;;-1:-1:-1;43795:13:0;;43775:34;;;;43795:13;43775:10;:34;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;32505:716:0;32765:74;32790:14;32814:4;32821:3;32826:12;32765:24;:74::i;:::-;32922:7;-1:-1:-1;;;;;32910:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32910:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32910:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32910:33:0;32987:42;;;-1:-1:-1;;;32987:42:0;;;;;;;;;;-1:-1:-1;;;;;32895:77:0;;;;;;32987:36;;;;;;:42;;;;;32910:33;;32987:42;;;;;;;;:36;:42;;;2:2:-1;;;;27:1;24;17:12;2:2;32987:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32987:42:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32987:42:0;33044:32;;;-1:-1:-1;;;33044:32:0;;;;;;;;;;-1:-1:-1;;;;;33044:26:0;;;;;:32;;;;;32987:42;;33044:32;;;;;;;:26;:32;;;2:2:-1;;;;27:1;24;17:12;2:2;33044:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33044:32:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33044:32:0;33099:4;;33147:39;33153:32;33165:14;33181:3;33153:11;:32::i;33147:39::-;32895:318;;;-1:-1:-1;;;;;;32895:318:0;;;;;;;;;;;;;;-1:-1:-1;;;;;32895:318:0;;;;;;;;;;;;;;;;;;;;;;;;;;;33201:1;32895:318;;;;;;;;;;;;;;;;;;33201:1;32895:318;;;;2:2:-1;;;;27:1;24;17:12;34648:377:0;34896:56;34909:7;34918:12;34932:8;34942:4;34948:3;34896:12;:56::i;:::-;34963:54;34975:7;34984:4;34990:17;35009:7;34963:11;:54::i;26719:681::-;26898:58;26926:7;26935:4;26942:10;26948:3;26942:5;:10::i;23729:203::-;23869:55;;;-1:-1:-1;;;23869:55:0;;;;;;;;-1:-1:-1;;;;;23869:55:0;;;;;;;;;;;;;;;:39;;;;;;:55;;;;;-1:-1:-1;;23869:55:0;;;;;;;;-1:-1:-1;23869:39:0;:55;;;2:2:-1;;;;27:1;24;17:12;33229:368:0;33484:5;-1:-1:-1;;;;;33445:44:0;33457:7;-1:-1:-1;;;;;33445:29:0;;33475:4;33445:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33445:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;33445:35:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33445:35:0;-1:-1:-1;;;;;33445:44:0;;33437:72;;;;;-1:-1:-1;;;33437:72:0;;;;;;;;;;;;-1:-1:-1;;;33437:72:0;;;;;;;;;;;;;;;33520:69;33540:7;33549:14;33565:4;33571:3;33576:12;33520:19;:69::i;:::-;33229:368;;;;;;:::o;36748:276::-;36943:5;-1:-1:-1;;;;;36904:44:0;36916:7;-1:-1:-1;;;;;36904:29:0;;36934:4;36904:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;36904:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;36904:35:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;36904:35:0;-1:-1:-1;;;;;36904:44:0;;36896:72;;;;;-1:-1:-1;;;36896:72:0;;;;;;;;;;;;-1:-1:-1;;;36896:72:0;;;;;;;;;;;;;;;36979:37;36992:7;37001:8;37011:4;36979:12;:37::i;20112:187::-;20251:10;-1:-1:-1;;;;;20223:63:0;;20287:3;20223:68;;;;;;;;;;;;;-1:-1:-1;;;;;20223:68:0;-1:-1:-1;;;;;20223:68:0;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20223:68:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;22909:185:0;23041:45;;;-1:-1:-1;;;23041:45:0;;;;;;;;-1:-1:-1;;;;;23041:45:0;;;;;;;;;;;;;;;:30;;;;;;:45;;;;;-1:-1:-1;;23041:45:0;;;;;;;;-1:-1:-1;23041:30:0;:45;;;2:2:-1;;;;27:1;24;17:12;30743:394:0;30951:85;30972:7;30981;30990:8;31000:4;31006:13;31021:8;31031:4;30951:20;:85::i;:::-;31095:34;;:10;;:34;;;;;31115:13;;31095:34;;;;31115:13;31095:10;:34;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;19212:119:0;19289:34;19302:3;19307:4;19313:9;19289:12;:34::i;:::-;19212:119;;:::o;21251:185::-;21387:7;-1:-1:-1;;;;;21375:42:0;;21418:4;21424:3;21375:53;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21375:53:0;-1:-1:-1;;;;;21375:53:0;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;37032:548:0;37339:9;37368:48;37377:7;37386:14;37410:4;37368:8;:48::i;:::-;37361:55;;37427:80;37450:7;37459:12;37473:7;37482:8;37492:4;37498:8;37427:22;:80::i;:::-;37518:54;37530:7;37539:4;37545:17;37564:7;37518:11;:54::i;:::-;37032:548;;;;;;;;;;:::o;28446:247::-;28616:69;28630:7;28639:12;28653:8;28663:4;28669:3;28674:10;28616:13;:69::i;32049:168::-;32162:47;;;-1:-1:-1;;;32162:47:0;;32203:4;32162:47;;;;;;32132:11;;-1:-1:-1;;;;;32162:32:0;;;;;:47;;;;;;;;;;;;;;;32132:11;32162:32;:47;;;2:2:-1;;;;27:1;24;17:12;2:2;32162:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32162:47:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32162:47:0;;32049:168;-1:-1:-1;;32049:168:0:o;18923:134::-;19019:10;-1:-1:-1;;;;;19004:35:0;;19040:3;19045;19004:45;;;;;;;;;;;;;-1:-1:-1;;;;;19004:45:0;-1:-1:-1;;;;;19004:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;20460:181:0;20596:10;-1:-1:-1;;;;;20568:60:0;;20629:3;20568:65;;;;;;;;;;;;;-1:-1:-1;;;;;20568:65:0;-1:-1:-1;;;;;20568:65:0;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;19532:420:0;19668:3;-1:-1:-1;;;;;19649:34:0;;:36;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19649:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19649:36:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19649:36:0;:60;;;-1:-1:-1;;;19649:60:0;;;;-1:-1:-1;;;;;19649:44:0;;;;;;19701:5;;19649:60;;;;;;;;;;;;;;19701:5;19649:44;:60;;;2:2:-1;;;;27:1;24;17:12;2:2;19649:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19649:60:0;;;;;19792:3;-1:-1:-1;;;;;19773:34:0;;:36;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19773:36:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19773:36:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;19773:36:0;:65;;;-1:-1:-1;;;19773:65:0;;-1:-1:-1;;;;;19773:65:0;;;;;;;;;;;;;;;:44;;;;;;;:65;;;;;-1:-1:-1;;19773:65:0;;;;;;;-1:-1:-1;19773:44:0;:65;;;2:2:-1;;;;27:1;24;17:12;2:2;19773:65:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19773:65:0;;;;19922:3;-1:-1:-1;;;;;19903:28:0;;19932:4;19938:5;19903:41;;;;;;;;;;;;;-1:-1:-1;;;;;19903:41:0;-1:-1:-1;;;;;19903:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;41792:653:0;42123:11;42136:9;42172:200;42211:7;42231:12;42256:7;42276:8;42297:14;42324:16;42353:8;42172:26;:200::i;:::-;42158:214;;-1:-1:-1;42158:214:0;-1:-1:-1;42383:54:0;42395:7;42158:214;42410:17;42429:7;42383:11;:54::i;:::-;41792:653;;;;;;;;;;;;:::o;31813:228::-;31967:66;;;-1:-1:-1;;;31967:66:0;;;;;;;;-1:-1:-1;;;;;31967:66:0;;;;;;;;;;;;;;;;:32;;;;;;:66;;;;;-1:-1:-1;;31967:66:0;;;;;;;;-1:-1:-1;31967:32:0;:66;;;2:2:-1;;;;27:1;24;17:12;26320:173:0;26442:43;26451:7;26460;26469:4;26475:9;26442:8;:43::i;39744:532::-;40049:9;40078:48;40087:7;40096:14;40120:4;40078:8;:48::i;:::-;40071:55;;40137:131;40172:7;40181:12;40195:14;40211:8;40221:4;40227:16;40245:8;40255:12;40137:34;:131::i;32225:272::-;32422:5;-1:-1:-1;;;;;32383:44:0;32395:7;-1:-1:-1;;;;;32383:29:0;;32413:4;32383:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32383:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;32383:35:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32383:35:0;-1:-1:-1;;;;;32383:44:0;;32375:72;;;;;-1:-1:-1;;;32375:72:0;;;;;;;;;;;;-1:-1:-1;;;32375:72:0;;;;;;;;;;;;;;;32458:31;32466:7;32475;32484:4;32458:7;:31::i;24696:252::-;24870:7;-1:-1:-1;;;;;24858:48:0;;24907:4;24913:15;24930:9;24858:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;35335:1405:0;35455:18;35488:7;-1:-1:-1;;;;;35476:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35476:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35476:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35476:33:0;35542:32;;;-1:-1:-1;;;35542:32:0;;;;;;;;;;35476:33;;-1:-1:-1;35520:19:0;;-1:-1:-1;;;;;35542:26:0;;;;;:32;;;;;35476:33;;35542:32;;;;;;;:26;:32;;;2:2:-1;;;;27:1;24;17:12;2:2;35542:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35542:32:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35542:32:0;35610:42;;;-1:-1:-1;;;35610:42:0;;;;;;;;;;35542:32;;-1:-1:-1;35585:22:0;;-1:-1:-1;;;;;35610:36:0;;;;;:42;;;;;35542:32;;35610:42;;;;;;;:36;:42;;;2:2:-1;;;;27:1;24;17:12;2:2;35610:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35610:42:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35610:42:0;35688:61;;;-1:-1:-1;;;35688:61:0;;;;;;;;-1:-1:-1;;;;;35688:61:0;;;;;;;;;35610:42;;-1:-1:-1;35666:18:0;;35688:32;;;;;;:61;;;;;;;;;;;:32;:61;;;2:2:-1;;;;27:1;24;17:12;2:2;35688:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35688:61:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35688:61:0;;;;;;35776:35;;-1:-1:-1;;;35776:35:0;;;;;;;;;;35688:61;;-1:-1:-1;35762:11:0;;-1:-1:-1;;;;;35776:29:0;;;;;:35;;;;;35688:61;35776:35;;;;;;:29;:35;;;2:2:-1;;;;27:1;24;17:12;2:2;35776:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35776:35:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35776:35:0;;-1:-1:-1;;;;;;35826:20:0;;35841:4;35826:20;;:83;;-1:-1:-1;35850:54:0;;;-1:-1:-1;;;35850:54:0;;-1:-1:-1;;;;;35850:54:0;;;;;;;;;;;;;35898:4;35850:54;;;;;;:28;;;;;;:54;;;;;;;;;;;;;;;:28;:54;;;2:2:-1;;;;27:1;24;17:12;2:2;35850:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;35850:54:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35850:54:0;35908:1;35850:59;35826:83;35822:911;;;35980:108;35994:8;36004:11;36017:70;36034:10;36046:11;36059;36072:14;36017:16;:70::i;35980:108::-;36145:66;36173:7;36182:4;36188:1;36196:13;36191:19;;36145:27;:66::i;:::-;35822:911;;;36298:112;36312:8;36330:4;36337:72;36354:10;36374:4;36381:11;36394:14;36337:16;:72::i;36298:112::-;36467:254;;;-1:-1:-1;;;36467:254:0;;;;;;;;-1:-1:-1;;;;;36467:254:0;;;;;;;36611:4;36467:254;;;;;;;;;;36667:1;36467:254;;;;;;36687:19;;;36467:254;;;;;;:54;;;;;;:254;;;;;;;;;;;36667:1;36467:54;:254;;;2:2:-1;;;;27:1;24;17:12;29362:355:0;29581:43;29590:7;29599;29608:4;29614:9;29581:8;:43::i;:::-;29635:74;29649:7;29658:12;29672:8;29682:4;29688:8;29698:10;29635:13;:74::i;8664:647::-;8740:11;9000:13;9035:14;-1:-1:-1;;;;;9016:43:0;;:45;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9016:45:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9016:45:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;9016:45:0;9078:3;;-1:-1:-1;9016:45:0;-1:-1:-1;9107:2:0;9096:13;;9092:212;;;9130:79;9155:3;9187:8;9182:2;:13;9175:2;:21;9130:8;:79::i;:::-;9124:85;;9092:212;;;9242:2;9231:8;:13;9227:77;;;9289:2;9278:8;:13;9271:2;:21;9265:3;:27;;;;;;9259:33;;9227:77;8664:647;;;;;:::o;8339:124::-;8411:1;8385:5;8432:6;;;8424:31;;;;;-1:-1:-1;;;8424:31:0;;;;;;;;;;;;-1:-1:-1;;;8424:31:0;;;;;;;;;;;;;;;8339:124;;;:::o;11006:862::-;11170:13;11248:9;11279:10;-1:-1:-1;;;;;11264:42:0;;11307:14;11264:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11264:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11264:58:0;;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;11264:58:0;;;;-1:-1:-1;11341:8:0;11333:44;;;;;-1:-1:-1;;;11333:44:0;;;;;;;;;;;;-1:-1:-1;;;11333:44:0;;;;;;;;;;;;;;;11471:54;;;-1:-1:-1;;;11471:54:0;;;;;;;;-1:-1:-1;;;;;11471:54:0;;;;;;;;;11449:18;;11471:32;;;;;;:54;;;;;;;;;;;;:32;:54;;;2:2:-1;;;;27:1;24;17:12;2:2;11471:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11471:54:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11471:54:0;;;;-1:-1:-1;11627:18:0;11640:4;11633;11640;11633:11;;;;;11627:5;:18::i;:::-;11615:30;;11808:13;11794:9;11789:32;;:71;;11840:20;11846:13;11840:5;:20::i;:::-;11838:22;;11789:71;;;11826:9;11824:11;;11789:71;11777:83;11006:862;-1:-1:-1;;;;;;;11006:862:0:o;7395:291::-;7549:3;-1:-1:-1;;;;;7536:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;15453:1549:0;15626:18;15659:7;-1:-1:-1;;;;;15647:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15647:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15647:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15647:33:0;15713:32;;;-1:-1:-1;;;15713:32:0;;;;;;;;;;15647:33;;-1:-1:-1;15691:19:0;;-1:-1:-1;;;;;15713:26:0;;;;;:32;;;;;15647:33;;15713:32;;;;;;;:26;:32;;;2:2:-1;;;;27:1;24;17:12;2:2;15713:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15713:32:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15713:32:0;15781:42;;;-1:-1:-1;;;15781:42:0;;;;;;;;;;15713:32;;-1:-1:-1;15756:22:0;;-1:-1:-1;;;;;15781:36:0;;;;;:42;;;;;15713:32;;15781:42;;;;;;;:36;:42;;;2:2:-1;;;;27:1;24;17:12;2:2;15781:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15781:42:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15781:42:0;15850:35;;;-1:-1:-1;;;15850:35:0;;;;;;;;;;15781:42;;-1:-1:-1;15836:11:0;;-1:-1:-1;;;;;15850:29:0;;;;;:35;;;;;15781:42;;15850:35;;;;;;;:29;:35;;;2:2:-1;;;;27:1;24;17:12;2:2;15850:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15850:35:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15850:35:0;;-1:-1:-1;;;;;;15900:20:0;;15915:4;15900:20;;:83;;-1:-1:-1;15924:54:0;;;-1:-1:-1;;;15924:54:0;;-1:-1:-1;;;;;15924:54:0;;;;;;;;;;;;;15972:4;15924:54;;;;;;:28;;;;;;:54;;;;;;;;;;;;;;;:28;:54;;;2:2:-1;;;;27:1;24;17:12;2:2;15924:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15924:54:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15924:54:0;15982:1;15924:59;15900:83;15896:1099;;;16058:18;16054:127;;;16078:41;16092:8;16102:11;16115:3;16078:13;:41::i;:::-;16054:127;;;16139:42;16154:8;16164:11;16177:3;16139:14;:42::i;:::-;16241:160;16269:7;16278:4;16284:1;16287:113;16307:10;16334;-1:-1:-1;;;;;16319:38:0;;16358:11;16319:51;;;;;;;;;;;;;-1:-1:-1;;;;;16319:51:0;-1:-1:-1;;;;;16319:51:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16319:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16319:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16319:51:0;16372:11;16385:14;16287:19;:113::i;16241:160::-;15896:1099;;;16493:18;16489:131;;;16513:43;16527:8;16545:4;16552:3;16513:13;:43::i;:::-;16489:131;;;16576:44;16591:8;16609:4;16616:3;16576:14;:44::i;:::-;16692:10;-1:-1:-1;;;;;16677:54:0;;16750:14;16783:11;16821:4;16853;16877:1;16897:71;16917:10;-1:-1:-1;;;16929:3:0;:9;16940:11;16953:14;16897:19;:71::i;:::-;16677:306;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16677:306:0;-1:-1:-1;;;;;16677:306:0;;;;;;-1:-1:-1;;;;;16677:306:0;-1:-1:-1;;;;;16677:306:0;;;;;;-1:-1:-1;;;;;16677:306:0;-1:-1:-1;;;;;16677:306:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16677:306:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16677:306:0;;;;15453:1549;;;;;;;;;:::o;12126:824::-;12289:8;12362:9;12393:10;-1:-1:-1;;;;;12378:42:0;;12421:14;12378:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12378:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12378:58:0;;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;12378:58:0;;;;12528:54;;-1:-1:-1;;;12528:54:0;;;;;;;;-1:-1:-1;;;;;12528:54:0;;;;;;;;;12378:58;;-1:-1:-1;12506:18:0;;12528:32;;;;;;:54;;;;;;;;;;;:32;:54;;;2:2:-1;;;;27:1;24;17:12;2:2;12528:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12528:54:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12528:54:0;;;;;;12653:43;;-1:-1:-1;;;12653:43:0;;-1:-1:-1;;;;;12653:43:0;;;;;;;;;12528:54;;-1:-1:-1;12641:9:0;;12653:38;;;;;;:43;;;;;12528:54;;12653:43;;;;;;:38;:43;;;2:2:-1;;;;27:1;24;17:12;2:2;12653:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12653:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12653:43:0;;-1:-1:-1;12709:8:0;12720:45;12729:29;12738:13;12753:4;12729:8;:29::i;:::-;12760:4;12720:8;:45::i;:::-;12709:56;-1:-1:-1;;;;12709:56:0;12782:9;12776:15;;12923:3;12902:18;12911:3;-1:-1:-1;;;12902:8:0;:18::i;:::-;:24;:40;;12939:3;12902:40;;;12929:3;12935:1;12929:7;12902:40;12896:46;12126:824;-1:-1:-1;;;;;;;;;12126:824:0:o;9595:1159::-;9794:13;9859:9;9888:12;-1:-1:-1;;;;;9871:40:0;;9912:14;9871:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9871:56:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9871:56:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;9871:56:0;;-1:-1:-1;9946:8:0;9938:44;;;;;-1:-1:-1;;;9938:44:0;;;;;;;;;;;;-1:-1:-1;;;9938:44:0;;;;;;;;;;;;;;;10058:9;10085:10;-1:-1:-1;;;;;10070:38:0;;10109:11;10070:51;;;;;;;;;;;;;-1:-1:-1;;;;;10070:51:0;-1:-1:-1;;;;;10070:51:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;10070:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10070:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;10070:51:0;;-1:-1:-1;10256:18:0;10265:3;-1:-1:-1;;;10256:8:0;:18::i;:::-;10249:4;:25;10245:502;;;10449:48;10492:4;10455:34;10464:18;10473:3;-1:-1:-1;;;10464:8:0;:18::i;:::-;10484:4;10455:8;:34::i;:::-;:41;;;;10449:48;10437:60;;10689:18;10698:3;-1:-1:-1;;;10689:8:0;:18::i;:::-;10655:31;10669:9;10681:4;10655:8;:31::i;:::-;:52;:80;;10726:9;10655:80;;;10710:9;10722:1;10710:13;10655:80;10643:92;;10245:502;9595:1159;;;;;;;;;:::o;8550:106::-;8598:8;8625:23;8634:3;-1:-1:-1;;;8625:8:0;:23::i;:::-;8619:29;8550:106;-1:-1:-1;;8550:106:0:o;17411:1280::-;17654:19;17688:7;-1:-1:-1;;;;;17676:26:0;;17703:4;17676:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17676:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17676:32:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17676:32:0;;-1:-1:-1;17769:133:0;;;;17793:46;17807:8;17817:11;17830:8;17793:13;:46::i;:::-;17769:133;;;17855:47;17870:8;17880:11;17893:8;17855:14;:47::i;:::-;17983:317;18025:7;18047:4;18067:20;18073:13;18067:5;:20::i;:::-;18066:21;;18102:187;18134:7;-1:-1:-1;;;;;18122:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18122:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18122:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;18122:33:0;;;;;;;;;;;;;;;;18184:7;-1:-1:-1;;;;;18172:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18172:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18172:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18172:33:0;18157:74;;;-1:-1:-1;;;18157:74:0;;-1:-1:-1;;;;;18157:74:0;;;;;;;;;:61;;;;;;;:74;;;;;18172:33;;18157:74;;;;;;;:61;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;18157:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18157:74:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;18157:74:0;;;;;;;;;;;;;;;;18233:11;18258:7;-1:-1:-1;;;;;18246:36:0;;18283:4;18246:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;17983:317:0;18381:63;18400:7;18409:4;18423;18430:13;18381:18;:63::i;:::-;18513:62;;;-1:-1:-1;;;18513:62:0;;18554:4;18513:62;;;;;;;;;;;;-1:-1:-1;;;;;18513:32:0;;;;;:62;;;;;-1:-1:-1;;18513:62:0;;;;;;;-1:-1:-1;18513:32:0;:62;;;2:2:-1;;;;27:1;24;17:12;2:2;18513:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18513:62:0;;;;18638:7;-1:-1:-1;;;;;18619:38:0;;:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18619:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18619:40:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;18619:40:0;:64;;;-1:-1:-1;;;18619:64:0;;;;;;;;;;-1:-1:-1;;;;;18619:49:0;;;;;;:64;;;;;-1:-1:-1;;18619:64:0;;;;;;;;-1:-1:-1;18619:49:0;:64;;;2:2:-1;;;;27:1;24;17:12;13286:1027:0;13419:19;13453:7;-1:-1:-1;;;;;13441:26:0;;13468:4;13441:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13441:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13441:32:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;13441:32:0;13505:33;;;-1:-1:-1;;;13505:33:0;;;;13441:32;;-1:-1:-1;13484:18:0;;-1:-1:-1;;;;;13505:31:0;;;;;:33;;;;;13441:32;;13505:33;;;;;;;:31;:33;;;2:2:-1;;;;27:1;24;17:12;2:2;13505:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13505:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;13505:33:0;13574:42;;;-1:-1:-1;;;13574:42:0;;;;;;;;;;13505:33;;-1:-1:-1;13549:22:0;;-1:-1:-1;;;;;13574:36:0;;;;;:42;;;;;13505:33;;13574:42;;;;;;;:36;:42;;;2:2:-1;;;;27:1;24;17:12;2:2;13574:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13574:42:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;13574:42:0;;-1:-1:-1;13666:129:0;13694:7;13703:4;13709:1;13712:82;13735:10;13747:12;13761:11;13574:42;13790:3;13712:22;:82::i;13666:129::-;13894:63;13916:7;13925:4;13939;13946:10;13952:3;13946:5;:10::i;13894:63::-;14051:74;;;-1:-1:-1;;;14051:74:0;;14100:4;14051:74;;;;-1:-1:-1;;;;;14051:74:0;;;;;;;;;:40;;;;;;:74;;;;;;;;;;;;;;;:40;:74;;;2:2:-1;;;;27:1;24;17:12;2:2;14051:74:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14051:74:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;14051:74:0;14047:172;;14162:10;-1:-1:-1;;;;;14147:50:0;;14198:8;14147:60;;;;;;;;;;;;;-1:-1:-1;;;;;14147:60:0;-1:-1:-1;;;;;14147:60:0;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14147:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14147:60:0;;;;14047:172;14282:8;-1:-1:-1;;;;;14269:27:0;;14297:2;14301:3;14269:36;;;;;;;;;;;;;-1:-1:-1;;;;;14269:36:0;-1:-1:-1;;;;;14269:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;14648:621:0;14872:43;14885:7;14902:4;14909:5;14872:12;:43::i;:::-;14997:7;-1:-1:-1;;;;;14985:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14985:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14985:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;14985:33:0;15062:42;;;-1:-1:-1;;;15062:42:0;;;;;;;;;;-1:-1:-1;;;;;14970:77:0;;;;;;15062:36;;;;;;:42;;;;;14985:33;;15062:42;;;;;;;;:36;:42;;;2:2:-1;;;;27:1;24;17:12;2:2;15062:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15062:42:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15062:42:0;15119:32;;;-1:-1:-1;;;15119:32:0;;;;;;;;;;-1:-1:-1;;;;;15119:26:0;;;;;:32;;;;;15062:42;;15119:32;;;;;;;:26;:32;;;2:2:-1;;;;27:1;24;17:12;2:2;15119:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15119:32:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15119:32:0;15174:4;;15222:12;15228:5;15222;:12::i;:::-;14970:291;;;-1:-1:-1;;;;;;14970:291:0;;;;;;;;;;;;;;-1:-1:-1;;;;;14970:291:0;;;;;;;;;;;;;;;;;;;;;;;;;;;15249:1;14970:291;;;;;;;;;;;;;;;;;;15249:1;14970:291;;;;2:2:-1;;;;27:1;24;17:12;7248:139:0;7305:6;7332;;;:30;;-1:-1:-1;;7347:5:0;;;7361:1;7356;7347:5;7356:1;7342:15;;;;;:20;7332:30;7324:55;;;;;-1:-1:-1;;;7324:55:0;;;;;;;;;;;;-1:-1:-1;;;7324:55:0;;;;;;;;;;;;;;8126:125;8215:5;;;8210:16;;;;8202:41;;;;;-1:-1:-1;;;8202:41:0;;;;;;;;;;;;-1:-1:-1;;;8202:41:0;;;;;;;;;;;;;
Swarm Source
ipfs://a85d8e072b79b98ece5ca342df74ba0169886bce4daf790dd761564339186760
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.