Address Details
contract
token

0xD629eb00dEced2a080B7EC630eF6aC117e614f1b

Token
Wrapped Bitcoin (BTC)
Creator
0xf15d39–dd6c0b at 0x9abadc–e0f031
Balance
0 CELO ( )
Locked CELO Balance
0.00 CELO
Voting CELO Balance
0.00 CELO
Pending Unlocked Gold
0.00 CELO
Tokens
Fetching tokens...
Transactions
10,543 Transactions
Transfers
9 Transfers
Gas Used
430,072,467
Last Balance Update
24795402
This contract has been partially verified via Sourcify. View contract in Sourcify repository
Contract name:
TokenSoftTokenV2




Optimization enabled
false
Compiler version
v0.6.12+commit.27d51765




EVM Version
istanbul




Verified at
2021-08-20T14:22:51.411174Z

Contract source code

pragma solidity 0.6.12;

import "./TokenSoftToken.sol";
import "./capabilities/Blacklistable.sol";
import "./capabilities/RevocableToAddress.sol";

/**
 @title Tokensoft Token V2
 @notice This contract implements the ERC1404 Interface to add transfer restrictions to a standard ER20 token.
 The role based access controls allow the Owner accounts to determine which permissions are granted to admin accounts.
 Admin accounts can enable, disable, and configure the token restrictions built into the contract.
 */
contract TokenSoftTokenV2 is TokenSoftToken, Blacklistable, RevocableToAddress {

  /// @notice The from/to account has been explicitly denied the ability to send/receive
  uint8 public constant FAILURE_BLACKLIST = 3;
  string public constant FAILURE_BLACKLIST_MESSAGE = "Restricted due to blacklist";

   /**
   @notice Used to detect if a proposed transfer will be allowed
   @dev A 0 return value is success - all other codes should be displayed to user via messageForTransferRestriction
    */
  function detectTransferRestriction (address from, address to, uint256 amt)
        public
        override
        view
        returns (uint8)
    {
        // Restrictions are enabled, so verify the whitelist config allows the transfer.
        // Logic defined in Blacklistable parent class
        if(!checkBlacklistAllowed(from, to)) {
            return FAILURE_BLACKLIST;
        }

        return TokenSoftToken.detectTransferRestriction(from, to, amt);
    }

  /**
  @notice Returns a human readable string for the error returned via detectTransferRestriction
  */ 
  function messageForTransferRestriction (uint8 restrictionCode)
        public
        override
        view
        returns (string memory)
    {
        if (restrictionCode == FAILURE_BLACKLIST) {
            return FAILURE_BLACKLIST_MESSAGE;
        }
        
        return TokenSoftToken.messageForTransferRestriction(restrictionCode);
    }

    /**
     @notice Transfers tokens if they are not restricted
     @dev Overrides the parent class token transfer function to enforce restrictions.
     */
    function transfer (address to, uint256 value)
        public
        override(TokenSoftToken, ERC20)
        notRestricted(msg.sender, to, value)
        returns (bool success)
    {
        return TokenSoftToken.transfer(to, value);
    }

    /**
    @notice Transfers from a specified address if they are not restricted
    @dev Overrides the parent class token transferFrom function to enforce restrictions.
     */
    function transferFrom (address from, address to, uint256 value)
        public
        override(TokenSoftToken, ERC20)
        notRestricted(from, to, value)
        returns (bool success)
    {
        return TokenSoftToken.transferFrom(from, to, value);
    }
}
        

Contract ABI

[{"type":"event","name":"AddressAddedToBlacklist","inputs":[{"type":"address","name":"addedAddress","internalType":"address","indexed":true},{"type":"address","name":"addedBy","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"AddressAddedToWhitelist","inputs":[{"type":"address","name":"addedAddress","internalType":"address","indexed":true},{"type":"uint8","name":"whitelist","internalType":"uint8","indexed":true},{"type":"address","name":"addedBy","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"AddressRemovedFromBlacklist","inputs":[{"type":"address","name":"removedAddress","internalType":"address","indexed":true},{"type":"address","name":"removedBy","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"AddressRemovedFromWhitelist","inputs":[{"type":"address","name":"removedAddress","internalType":"address","indexed":true},{"type":"uint8","name":"whitelist","internalType":"uint8","indexed":true},{"type":"address","name":"removedBy","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"BlacklistEnabledUpdated","inputs":[{"type":"address","name":"updatedBy","internalType":"address","indexed":true},{"type":"bool","name":"enabled","internalType":"bool","indexed":true}],"anonymous":false},{"type":"event","name":"BlacklisterAdded","inputs":[{"type":"address","name":"addedBlacklister","internalType":"address","indexed":true},{"type":"address","name":"addedBy","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"BlacklisterRemoved","inputs":[{"type":"address","name":"removedBlacklister","internalType":"address","indexed":true},{"type":"address","name":"removedBy","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Burn","inputs":[{"type":"address","name":"burner","internalType":"address","indexed":true},{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"BurnerAdded","inputs":[{"type":"address","name":"addedBurner","internalType":"address","indexed":true},{"type":"address","name":"addedBy","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"BurnerRemoved","inputs":[{"type":"address","name":"removedBurner","internalType":"address","indexed":true},{"type":"address","name":"removedBy","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"CodeAddressUpdated","inputs":[{"type":"address","name":"newAddress","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"Mint","inputs":[{"type":"address","name":"minter","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"MinterAdded","inputs":[{"type":"address","name":"addedMinter","internalType":"address","indexed":true},{"type":"address","name":"addedBy","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"MinterRemoved","inputs":[{"type":"address","name":"removedMinter","internalType":"address","indexed":true},{"type":"address","name":"removedBy","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"OutboundWhitelistUpdated","inputs":[{"type":"address","name":"updatedBy","internalType":"address","indexed":true},{"type":"uint8","name":"sourceWhitelist","internalType":"uint8","indexed":true},{"type":"uint8","name":"destinationWhitelist","internalType":"uint8","indexed":true},{"type":"bool","name":"from","internalType":"bool","indexed":false},{"type":"bool","name":"to","internalType":"bool","indexed":false}],"anonymous":false},{"type":"event","name":"OwnerAdded","inputs":[{"type":"address","name":"addedOwner","internalType":"address","indexed":true},{"type":"address","name":"addedBy","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"OwnerRemoved","inputs":[{"type":"address","name":"removedOwner","internalType":"address","indexed":true},{"type":"address","name":"removedBy","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Paused","inputs":[{"type":"address","name":"account","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"PauserAdded","inputs":[{"type":"address","name":"addedPauser","internalType":"address","indexed":true},{"type":"address","name":"addedBy","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"PauserRemoved","inputs":[{"type":"address","name":"removedPauser","internalType":"address","indexed":true},{"type":"address","name":"removedBy","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Revoke","inputs":[{"type":"address","name":"revoker","internalType":"address","indexed":true},{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"RevokeToAddress","inputs":[{"type":"address","name":"revoker","internalType":"address","indexed":true},{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"amount","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"RevokerAdded","inputs":[{"type":"address","name":"addedRevoker","internalType":"address","indexed":true},{"type":"address","name":"addedBy","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"RevokerRemoved","inputs":[{"type":"address","name":"removedRevoker","internalType":"address","indexed":true},{"type":"address","name":"removedBy","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"Unpaused","inputs":[{"type":"address","name":"account","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"WhitelistEnabledUpdated","inputs":[{"type":"address","name":"updatedBy","internalType":"address","indexed":true},{"type":"bool","name":"enabled","internalType":"bool","indexed":true}],"anonymous":false},{"type":"event","name":"WhitelisterAdded","inputs":[{"type":"address","name":"addedWhitelister","internalType":"address","indexed":true},{"type":"address","name":"addedBy","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"WhitelisterRemoved","inputs":[{"type":"address","name":"removedWhitelister","internalType":"address","indexed":true},{"type":"address","name":"removedBy","internalType":"address","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"FAILURE_BLACKLIST","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"FAILURE_BLACKLIST_MESSAGE","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"FAILURE_NON_WHITELIST","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"FAILURE_NON_WHITELIST_MESSAGE","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"FAILURE_PAUSED","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"FAILURE_PAUSED_MESSAGE","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"SUCCESS_CODE","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"SUCCESS_MESSAGE","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"UNKNOWN_ERROR","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addBlacklister","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addBurner","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addMinter","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addOwner","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addPauser","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addRevoker","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addToBlacklist","inputs":[{"type":"address","name":"addressToAdd","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addToWhitelist","inputs":[{"type":"address","name":"addressToAdd","internalType":"address"},{"type":"uint8","name":"whitelist","internalType":"uint8"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addWhitelister","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"addressBlacklists","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"addressWhitelists","inputs":[{"type":"address","name":"","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"burn","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"checkBlacklistAllowed","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"receiver","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"checkWhitelistAllowed","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"receiver","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"decreaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"subtractedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"detectTransferRestriction","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"amt","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"logicAddress","internalType":"address"}],"name":"getLogicAddress","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"increaseAllowance","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"addedValue","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"initialize","inputs":[{"type":"string","name":"name","internalType":"string"},{"type":"string","name":"symbol","internalType":"string"},{"type":"uint8","name":"decimals","internalType":"uint8"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"initialize","inputs":[{"type":"address","name":"owner","internalType":"address"},{"type":"string","name":"name","internalType":"string"},{"type":"string","name":"symbol","internalType":"string"},{"type":"uint8","name":"decimals","internalType":"uint8"},{"type":"uint256","name":"initialSupply","internalType":"uint256"},{"type":"bool","name":"whitelistEnabled","internalType":"bool"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isBlacklistEnabled","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isBlacklister","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isBurner","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isMinter","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isOwner","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isPauser","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isRevoker","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isWhitelistEnabled","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isWhitelister","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"messageForTransferRestriction","inputs":[{"type":"uint8","name":"restrictionCode","internalType":"uint8"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"mint","inputs":[{"type":"address","name":"account","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"outboundWhitelistsEnabled","inputs":[{"type":"uint8","name":"","internalType":"uint8"},{"type":"uint8","name":"","internalType":"uint8"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"pause","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"paused","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"proxiableUUID","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"removeBlacklister","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"removeBurner","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"removeFromBlacklist","inputs":[{"type":"address","name":"addressToRemove","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"removeFromWhitelist","inputs":[{"type":"address","name":"addressToRemove","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"removeMinter","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"removeOwner","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"removePauser","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"removeRevoker","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"removeWhitelister","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"revoke","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"revokeToAddress","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setBlacklistEnabled","inputs":[{"type":"bool","name":"enabled","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setWhitelistEnabled","inputs":[{"type":"bool","name":"enabled","internalType":"bool"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"success","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"success","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"from","internalType":"address"},{"type":"address","name":"to","internalType":"address"},{"type":"uint256","name":"value","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"unpause","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateCodeAddress","inputs":[{"type":"address","name":"newAddress","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateOutboundWhitelistEnabled","inputs":[{"type":"uint8","name":"sourceWhitelist","internalType":"uint8"},{"type":"uint8","name":"destinationWhitelist","internalType":"uint8"},{"type":"bool","name":"newEnabledValue","internalType":"bool"}]}]
              

Contract Creation Code

Verify & Publish
0x608060405234801561001057600080fd5b506160fe80620000216000396000f3fe608060405234801561001057600080fd5b50600436106104075760003560e01c80637f4ab1dd11610220578063a9059cbb11610130578063dd62ed3e116100b8578063eac449d911610087578063eac449d914611a57578063eaf9144a14611abb578063f2c2b9ae14611aff578063f44637ba14611b79578063f6c4b01f14611bbd57610407565b8063dd62ed3e146118ae578063e7984d1714611926578063e9594508146119a9578063ea72d6ee146119fd57610407565b8063ba54b1ce116100ff578063ba54b1ce146116bd578063c06f8b94146116de578063c893446214611722578063cc00551e146117a5578063d4ce14151461182957610407565b8063a9059cbb14611571578063aa271e1a146115d5578063abd108ba1461162f578063b66cd56c1461166357610407565b806392e6d68b116101b357806397af67441161018257806397af67441461139e578063983b2d56146114215780639dc29fac146114655780639fcf1007146114c9578063a457c2d71461150d57610407565b806392e6d68b146112025780639437e2fe1461125d57806395d89b41146112d7578063961a66f61461135a57610407565b80638771cd2d116101ef5780638771cd2d14610fc5578063878dd3321461115a5780638ab1d6811461117a578063912a9885146111be57610407565b80637f4ab1dd14610e8957806382c3f79c14610f3357806382dc1ec414610f775780638456cb5914610fbb57610407565b80633973b5961161031b57806352d1902d116102ae5780636b2c0f551161027d5780636b2c0f5514610d0b5780637065cb4814610d4f57806370a0823114610d935780637bb06eea14610deb5780637d0c269f14610e2f57610407565b806352d1902d14610c06578063537df3b614610c245780635c975abb14610c68578063611649c114610c8857610407565b80634334614a116102ea5780634334614a14610a8b57806344337ea114610ae557806346fbf68e14610b29578063489c1b2514610b8357610407565b80633973b596146109b25780633f4ba83a146109fc5780633f71370914610a0657806340c10f1914610a2757610407565b8063173825d91161039e57806323b872dd1161036d57806323b872dd1461080b5780632f54bf6e1461088f5780633092afd5146108e9578063313ce5671461092d578063395093511461094e57610407565b8063173825d91461076857806318160ddd146107ac578063184d69ab146107ca5780631fb45ec0146107ea57610407565b8063095ea7b3116103da578063095ea7b3146105545780630e969a05146105b85780631201cbd0146105d95780631624f6c61461060957610407565b80630263b8581461040c578063028468581461045d578063052d9e7e146104a157806306fdde03146104d1575b600080fd5b61045b6004803603604081101561042257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff169060200190929190505050611c17565b005b61049f6004803603602081101561047357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c83565b005b6104cf600480360360208110156104b757600080fd5b81019080803515159060200190929190505050611ced565b005b6104d9611d57565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105195780820151818401526020810190506104fe565b50505050905090810190601f1680156105465780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105a06004803603604081101561056a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611df9565b60405180821515815260200191505060405180910390f35b6105c0611e17565b604051808260ff16815260200191505060405180910390f35b610607600480360360208110156105ef57600080fd5b81019080803515159060200190929190505050611e1c565b005b6107666004803603606081101561061f57600080fd5b810190808035906020019064010000000081111561063c57600080fd5b82018360208201111561064e57600080fd5b8035906020019184600183028401116401000000008311171561067057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156106d357600080fd5b8201836020820111156106e557600080fd5b8035906020019184600183028401116401000000008311171561070757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff169060200190929190505050611e86565b005b6107aa6004803603602081101561077e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fd0565b005b6107b461203a565b6040518082815260200191505060405180910390f35b6107d2612044565b60405180821515815260200191505060405180910390f35b6107f2612057565b604051808260ff16815260200191505060405180910390f35b6108776004803603606081101561082157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061205c565b60405180821515815260200191505060405180910390f35b6108d1600480360360208110156108a557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612142565b60405180821515815260200191505060405180910390f35b61092b600480360360208110156108ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061215f565b005b6109356121c9565b604051808260ff16815260200191505060405180910390f35b61099a6004803603604081101561096457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506121e0565b60405180821515815260200191505060405180910390f35b6109fa600480360360608110156109c857600080fd5b81019080803560ff169060200190929190803560ff169060200190929190803515159060200190929190505050612293565b005b610a04612301565b005b610a0e6123eb565b604051808260ff16815260200191505060405180910390f35b610a7360048036036040811015610a3d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123f0565b60405180821515815260200191505060405180910390f35b610acd60048036036020811015610aa157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612463565b60405180821515815260200191505060405180910390f35b610b2760048036036020811015610afb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612480565b005b610b6b60048036036020811015610b3f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612507565b60405180821515815260200191505060405180910390f35b610b8b612524565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bcb578082015181840152602081019050610bb0565b50505050905090810190601f168015610bf85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610c0e612540565b6040518082815260200191505060405180910390f35b610c6660048036036020811015610c3a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061256b565b005b610c706125f2565b60405180821515815260200191505060405180910390f35b610c90612609565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610cd0578082015181840152602081019050610cb5565b50505050905090810190601f168015610cfd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610d4d60048036036020811015610d2157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612642565b005b610d9160048036036020811015610d6557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126ac565b005b610dd560048036036020811015610da957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612716565b6040518082815260200191505060405180910390f35b610e2d60048036036020811015610e0157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061275f565b005b610e7160048036036020811015610e4557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127c9565b60405180821515815260200191505060405180910390f35b610eb860048036036020811015610e9f57600080fd5b81019080803560ff1690602001909291905050506127e6565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ef8578082015181840152602081019050610edd565b50505050905090810190601f168015610f255780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610f7560048036036020811015610f4957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612845565b005b610fb960048036036020811015610f8d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128af565b005b610fc3612919565b005b611158600480360360c0811015610fdb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561101857600080fd5b82018360208201111561102a57600080fd5b8035906020019184600183028401116401000000008311171561104c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156110af57600080fd5b8201836020820111156110c157600080fd5b803590602001918460018302840111640100000000831117156110e357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff16906020019092919080359060200190929190803515159060200190929190505050612a04565b005b611162612b31565b60405180821515815260200191505060405180910390f35b6111bc6004803603602081101561119057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b44565b005b611200600480360360208110156111d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bae565b005b6112446004803603602081101561121857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c18565b604051808260ff16815260200191505060405180910390f35b6112bf6004803603604081101561127357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c38565b60405180821515815260200191505060405180910390f35b6112df612d6d565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561131f578082015181840152602081019050611304565b50505050905090810190601f16801561134c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61139c6004803603602081101561137057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e0f565b005b6113a6612e79565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156113e65780820151818401526020810190506113cb565b50505050905090810190601f1680156114135780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6114636004803603602081101561143757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612eb2565b005b6114b16004803603604081101561147b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612f1c565b60405180821515815260200191505060405180910390f35b61150b600480360360208110156114df57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f8f565b005b6115596004803603604081101561152357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612ff9565b60405180821515815260200191505060405180910390f35b6115bd6004803603604081101561158757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506130c6565b60405180821515815260200191505060405180910390f35b611617600480360360208110156115eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506131aa565b60405180821515815260200191505060405180910390f35b6116376131c7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6116a56004803603602081101561167957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506131f0565b60405180821515815260200191505060405180910390f35b6116c561320d565b604051808260ff16815260200191505060405180910390f35b611720600480360360208110156116f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613212565b005b61172a61327c565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561176a57808201518184015260208101905061174f565b50505050905090810190601f1680156117975780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b611811600480360360608110156117bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613298565b60405180821515815260200191505060405180910390f35b6118956004803603606081101561183f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061330c565b604051808260ff16815260200191505060405180910390f35b611910600480360360408110156118c457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061333a565b6040518082815260200191505060405180910390f35b61192e6133c1565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561196e578082015181840152602081019050611953565b50505050905090810190601f16801561199b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6119e5600480360360408110156119bf57600080fd5b81019080803560ff169060200190929190803560ff1690602001909291905050506133fa565b60405180821515815260200191505060405180910390f35b611a3f60048036036020811015611a1357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613429565b60405180821515815260200191505060405180910390f35b611aa360048036036040811015611a6d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613449565b60405180821515815260200191505060405180910390f35b611afd60048036036020811015611ad157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506134bb565b005b611b6160048036036040811015611b1557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613525565b60405180821515815260200191505060405180910390f35b611bbb60048036036020811015611b8f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506135f1565b005b611bff60048036036020811015611bd357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061365b565b60405180821515815260200191505060405180910390f35b611c20336127c9565b611c75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180615fdf603a913960400191505060405180910390fd5b611c7f8282613678565b5050565b611c8c33612142565b611ce1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b611cea816138f4565b50565b611cf633612142565b611d4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b611d5481613965565b50565b606060338054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611def5780601f10611dc457610100808354040283529160200191611def565b820191906000526020600020905b815481529060010190602001808311611dd257829003601f168201915b5050505050905090565b6000611e0d611e066139c8565b84846139d0565b6001905092915050565b600081565b611e2533612142565b611e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b611e8381613bc7565b50565b600060019054906101000a900460ff1680611ea55750611ea4613c2a565b5b80611ebb575060008054906101000a900460ff16155b611f10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615f2e602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015611f60576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8360339080519060200190611f76929190615c51565b508260349080519060200190611f8d929190615c51565b5081603560006101000a81548160ff021916908360ff1602179055508015611fca5760008060016101000a81548160ff0219169083151502179055505b50505050565b611fd933612142565b61202e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b61203781613c41565b50565b6000606a54905090565b609f60009054906101000a900460ff1681565b600181565b6000838383600061206e84848461330c565b9050600060ff168160ff1614612083826127e6565b90612129576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156120ee5780820151818401526020810190506120d3565b50505050905090810190601f16801561211b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50612135888888613cb2565b9450505050509392505050565b600061215882609d613d9890919063ffffffff16565b9050919050565b61216833612142565b6121bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b6121c681613e76565b50565b6000603560009054906101000a900460ff16905090565b60006122896121ed6139c8565b8461228485606960006121fe6139c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ee790919063ffffffff16565b6139d0565b6001905092915050565b61229c336127c9565b6122f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180615fdf603a913960400191505060405180910390fd5b6122fc838383613f6f565b505050565b61230a33612507565b61235f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180615d656030913960400191505060405180910390fd5b60a660009054906101000a900460ff166123e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6123e9614061565b565b600281565b60006123fb336131aa565b612450576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180615e656030913960400191505060405180910390fd5b61245b3384846140cb565b905092915050565b60006124798260a3613d9890919063ffffffff16565b9050919050565b612489336131f0565b6124fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f426c61636b6c6973746572526f6c65206d697373696e6700000000000000000081525060200191505060405180910390fd5b61250481614147565b50565b600061251d8260a5613d9890919063ffffffff16565b9050919050565b6040518060600160405280603d8152602001615f5c603d913981565b60007fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf760001b905090565b612574336131f0565b6125e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f426c61636b6c6973746572526f6c65206d697373696e6700000000000000000081525060200191505060405180910390fd5b6125ef8161435f565b50565b600060a660009054906101000a900460ff16905090565b6040518060400160405280601b81526020017f526573747269637465642064756520746f20626c61636b6c697374000000000081525081565b61264b33612142565b6126a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b6126a981614576565b50565b6126b533612142565b61270a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b612713816145e7565b50565b6000606860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61276833612142565b6127bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b6127c681614658565b50565b60006127df82609e613d9890919063ffffffff16565b9050919050565b6060600360ff168260ff161415612834576040518060400160405280601b81526020017f526573747269637465642064756520746f20626c61636b6c69737400000000008152509050612840565b61283d826146c9565b90505b919050565b61284e33612142565b6128a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b6128ac816147b3565b50565b6128b833612142565b61290d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b61291681614824565b50565b61292233612507565b612977576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180615d656030913960400191505060405180910390fd5b60a660009054906101000a900460ff16156129fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b612a02614895565b565b600060019054906101000a900460ff1680612a235750612a22613c2a565b5b80612a39575060008054906101000a900460ff16155b612a8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615f2e602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015612ade576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b612ae9868686611e86565b612af43388856140cb565b50612afe876145e7565b612b0782613965565b8015612b285760008060016101000a81548160ff0219169083151502179055505b50505050505050565b60a860009054906101000a900460ff1681565b612b4d336127c9565b612ba2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180615fdf603a913960400191505060405180910390fd5b612bab816148ff565b50565b612bb733612142565b612c0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b612c1581614af1565b50565b60a06020528060005260406000206000915054906101000a900460ff1681565b6000609f60009054906101000a900460ff16612c575760019050612d67565b600060a060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600060a060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600060ff168260ff161480612d145750600060ff168160ff16145b15612d2457600092505050612d67565b60a160008360ff1660ff16815260200190815260200160002060008260ff1660ff16815260200190815260200160002060009054906101000a900460ff16925050505b92915050565b606060348054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612e055780601f10612dda57610100808354040283529160200191612e05565b820191906000526020600020905b815481529060010190602001808311612de857829003601f168201915b5050505050905090565b612e1833612142565b612e6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b612e7681614c7c565b50565b6040518060400160405280601281526020017f556e6b6e6f776e204572726f7220436f6465000000000000000000000000000081525081565b612ebb33612142565b612f10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b612f1981614ced565b50565b6000612f2733612463565b612f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180615e0f6030913960400191505060405180910390fd5b612f87338484614d5e565b905092915050565b612f9833612142565b612fed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b612ff681614dda565b50565b60006130bc6130066139c8565b846130b7856040518060600160405280602581526020016160a460259139606960006130306139c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e4b9092919063ffffffff16565b6139d0565b6001905092915050565b600033838360006130d884848461330c565b9050600060ff168160ff16146130ed826127e6565b90613193576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561315857808201518184015260208101905061313d565b50505050905090810190601f1680156131855780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5061319e8787614f0b565b94505050505092915050565b60006131c08260a2613d9890919063ffffffff16565b9050919050565b60007fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf754905090565b60006132068260a7613d9890919063ffffffff16565b9050919050565b600381565b61321b33612142565b613270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b61327981614fef565b50565b6040518060600160405280603c815260200161603d603c913981565b60006132a33361365b565b6132f8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615db76032913960400191505060405180910390fd5b613303848484615060565b90509392505050565b60006133188484613525565b6133255760039050613333565b6133308484846150f4565b90505b9392505050565b6000606960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6040518060400160405280600781526020017f535543434553530000000000000000000000000000000000000000000000000081525081565b60a16020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60a96020528060005260406000206000915054906101000a900460ff1681565b60006134543361365b565b6134a9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615db76032913960400191505060405180910390fd5b6134b38383615146565b905092915050565b6134c433612142565b613519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b613522816151c2565b50565b600060a860009054906101000a900460ff1661354457600190506135eb565b60a960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156135e8575060a960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90505b92915050565b6135fa33612142565b61364f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b61365881615233565b50565b60006136718260a4613d9890919063ffffffff16565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180615e3f6026913960400191505060405180910390fd5b600060ff168160ff16141561377b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f496e76616c69642077686974656c69737420494420737570706c69656400000081525060200191505060405180910390fd5b600060a060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690508160a060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff160217905550600060ff168160ff1614613891573373ffffffffffffffffffffffffffffffffffffffff168160ff168473ffffffffffffffffffffffffffffffffffffffff167fb50a30a0fa972f89fbb2b514d12b31f5a5d64f53603402de7939742cd8507f6e60405160405180910390a45b3373ffffffffffffffffffffffffffffffffffffffff168260ff168473ffffffffffffffffffffffffffffffffffffffff167fca6d1e885708b837a7647aeb7f4163ee4ca96058e08ac767be8d23c972c5027060405160405180910390a4505050565b6139088160a36152a490919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f85222465e0d438163a28671b59fc9ebeb03bf39f880ddd36c8315da7512b31c060405160405180910390a350565b80609f60006101000a81548160ff0219169083151502179055508015153373ffffffffffffffffffffffffffffffffffffffff167fb535c5f7f150db8dbf22962fc390e7fa9026b9c29ffad714197bee4620572bd660405160405180910390a350565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613a56576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806160196024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615d956022913960400191505060405180910390fd5b80606960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b8060a860006101000a81548160ff0219169083151502179055508015153373ffffffffffffffffffffffffffffffffffffffff167f0254250bff2b56bce9719dfb6237446b9159bfbe2368f9dfe449d85da99b2be060405160405180910390a350565b6000803090506000813b9050600081149250505090565b613c5581609d6152a490919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fe594d081b4382713733fe631966432c9cea5199afb2db5c3c1931f9f9300367960405160405180910390a350565b60008383836000613cc484848461330c565b9050600060ff168160ff1614613cd9826127e6565b90613d7f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d44578082015181840152602081019050613d29565b50505050905090810190601f168015613d715780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50613d8b888888615361565b9450505050509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615f0c6022913960400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b613e8a8160a26152a490919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f4b5ef9a786cf64a7d82ebcf2d5132667edc9faef4ac36260d9a9e52c526b623260405160405180910390a350565b600080828401905083811015613f65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600060a160008560ff1660ff16815260200190815260200160002060008460ff1660ff16815260200190815260200160002060009054906101000a900460ff1690508160a160008660ff1660ff16815260200190815260200160002060008560ff1660ff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508260ff168460ff163373ffffffffffffffffffffffffffffffffffffffff167fb0353d563a9aa5231878c83727dc723a3cb8a38c2917f8ac2b777aa564c8a0d5848660405180831515815260200182151581526020019250505060405180910390a450505050565b600060a660006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b60006140d7838361543a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8846040518082815260200191505060405180910390a3600190509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156141ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f43616e6e6f74206164642030783000000000000000000000000000000000000081525060200191505060405180910390fd5b60a960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156142aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f416c7265616479206f6e206c697374000000000000000000000000000000000081525060200191505060405180910390fd5b600160a960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167faf6ebb6594c3be37f747a8a4692decee2e128c133145b92b98391af1e942bb5260405160405180910390a350565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f742072656d6f76652030783000000000000000000000000000000081525060200191505060405180910390fd5b60a960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166144c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4e6f74206f6e206c69737400000000000000000000000000000000000000000081525060200191505060405180910390fd5b600060a960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fc5d633221a999da7b50bad97ddd6cff0c917455d8651123a6433642833252b7c60405160405180910390a350565b61458a8160a56152a490919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb75903ade4a0fdb07d60c882c22c779e2e1c751883c37aecdcc92a8ec72b046e60405160405180910390a350565b6145fb81609d6155f790919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fc82bdbbf677a2462f2a7e22e4ba9abd209496b69cd7b868b3b1d28f76e09a40a60405160405180910390a350565b61466c8160a76155f790919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f891e671759c21e48221125d0aa55b5574dc00b3e3225e40f6cb10dde820822ad60405160405180910390a350565b6060600060ff168260ff161415614717576040518060400160405280600781526020017f535543434553530000000000000000000000000000000000000000000000000081525090506147ae565b600160ff168260ff161415614746576040518060600160405280603c815260200161603d603c913990506147ae565b600260ff168260ff161415614775576040518060600160405280603d8152602001615f5c603d913990506147ae565b6040518060400160405280601281526020017f556e6b6e6f776e204572726f7220436f6465000000000000000000000000000081525090505b919050565b6147c781609e6152a490919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3ed21605dd544629fb45f2ccaedcc095ba1dbea540fb6eaf5493a7479856b0be60405160405180910390a350565b6148388160a56155f790919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fe0953c403a52f9dc1fef4202a8d33975c958b727bee0d7b5b328965ddad98d8160405160405180910390a350565b600160a660006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180616079602b913960400191505060405180910390fd5b600060a060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600060ff168160ff161415614a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180615d126031913960400191505060405180910390fd5b600060a060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055503373ffffffffffffffffffffffffffffffffffffffff168160ff168373ffffffffffffffffffffffffffffffffffffffff167fb50a30a0fa972f89fbb2b514d12b31f5a5d64f53603402de7939742cd8507f6e60405160405180910390a45050565b8073ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015614b3757600080fd5b505afa158015614b4b573d6000803e3d6000fd5b505050506040513d6020811015614b6157600080fd5b81019080805190602001909291905050507fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf760001b14614c09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420636f6d70617469626c6500000000000000000000000000000000000081525060200191505060405180910390fd5b807fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7557feeaed647dc622e55877c30943e5c1d4feb92d1b8cfcc88d974163e9787bde9af81604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b614c908160a46155f790919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f2b5f18afd9a7b21f41bf023b012b3d4c8a22a21b79fa425cd4494ecbe297019660405160405180910390a350565b614d018160a26155f790919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3c091dafb1d99e4a4c333024492eac3b2cd8bf921a3dd547c937db33be307bb860405160405180910390a350565b6000614d6a8383615775565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fbac40739b0d4ca32fa2d82fc91630465ba3eddd1598da6fca393b26fb63b9453846040518082815260200191505060405180910390a3600190509392505050565b614dee8160a76152a490919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fc76ab32d91026761e52ef1016d8293a11dbb26424e34581575cefc484d10c6f360405160405180910390a350565b6000838311158290614ef8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614ebd578082015181840152602081019050614ea2565b50505050905090810190601f168015614eea5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60003383836000614f1d84848461330c565b9050600060ff168160ff1614614f32826127e6565b90614fd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614f9d578082015181840152602081019050614f82565b50505050905090810190601f168015614fca5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50614fe3878761592f565b94505050505092915050565b6150038160a46152a490919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb6fe3ab11eb9ab1d9f1d41c8f42a5d72d10122099ba1548e4a6d1a4d8cefec4b60405160405180910390a350565b600061506d84848461594d565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f64a989949bb484d2d275229a9d310b5d9dc273a560dd639c337aaf6f67fb73b6856040518082815260200191505060405180910390a4600190509392505050565b60006150fe6125f2565b1561510c576002905061513f565b61511584612142565b15615123576000905061513f565b61512d8484612c38565b61513a576001905061513f565b600090505b9392505050565b600061515383338461594d565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fb698e31a2abee5824d0d7bcfd2339aead7f9e9ae413fba50bf554ff3fa470b7b846040518082815260200191505060405180910390a36001905092915050565b6151d681609e6155f790919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5f36f4f5999f34947706fca376b955319b858573bf9d6bc59303c9a4cd80ced060405160405180910390a350565b6152478160a36155f790919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f86515ebaad527298e98929c064c075f5a2604cc80afc0db29e73c01a36f8e98c60405160405180910390a350565b6152ae8282613d98565b615303576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615ec36021913960400191505060405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600061536e84848461594d565b61542f8461537a6139c8565b61542a85604051806060016040528060288152602001615ee460289139606960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006153e06139c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e4b9092919063ffffffff16565b6139d0565b600190509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156154dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6154f281606a54613ee790919063ffffffff16565b606a8190555061554a81606860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ee790919063ffffffff16565b606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561569a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496e76616c69642030783020616464726573730000000000000000000000000081525060200191505060405180910390fd5b6156a48282613d98565b15615717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156157fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615f996021913960400191505060405180910390fd5b61586781604051806060016040528060228152602001615d4360229139606860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e4b9092919063ffffffff16565b606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506158bf81606a54615c0790919063ffffffff16565b606a81905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600061594361593c6139c8565b848461594d565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156159d3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615fba6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415615a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615cef6023913960400191505060405180910390fd5b615ac581604051806060016040528060268152602001615de960269139606860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e4b9092919063ffffffff16565b606860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550615b5a81606860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ee790919063ffffffff16565b606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000615c4983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614e4b565b905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10615c9257805160ff1916838001178555615cc0565b82800160010185558215615cc0579182015b82811115615cbf578251825591602001919060010190615ca4565b5b509050615ccd9190615cd1565b5090565b5b80821115615cea576000816000905550600101615cd2565b509056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416464726573732063616e6e6f742062652072656d6f7665642066726f6d20696e76616c69642077686974656c6973742e45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365506175736572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652050617573657220726f6c6545524332303a20617070726f766520746f20746865207a65726f20616464726573735265766f6b6572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865205265766f6b657220726f6c6545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654275726e6572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204275726e657220726f6c6543616e6e6f742061646420616464726573732030783020746f20612077686974656c6973742e4d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204d696e74657220726f6c654f776e6572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204f776e657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564546865207472616e736665722077617320726573747269637465642064756520746f2074686520636f6e7472616374206265696e67207061757365642e45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737357686974656c6973746572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652057686974656c697374657220726f6c6545524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373546865207472616e736665722077617320726573747269637465642064756520746f207768697465206c69737420636f6e66696775726174696f6e2e43616e6e6f742072656d6f76652061646472657373203078302066726f6d20612077686974656c6973742e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122003a2dbd342d23c022a40dfb9f5b19bc077d2e41cc3edfaa3cf13dceb473ccb5c64736f6c634300060c0033

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106104075760003560e01c80637f4ab1dd11610220578063a9059cbb11610130578063dd62ed3e116100b8578063eac449d911610087578063eac449d914611a57578063eaf9144a14611abb578063f2c2b9ae14611aff578063f44637ba14611b79578063f6c4b01f14611bbd57610407565b8063dd62ed3e146118ae578063e7984d1714611926578063e9594508146119a9578063ea72d6ee146119fd57610407565b8063ba54b1ce116100ff578063ba54b1ce146116bd578063c06f8b94146116de578063c893446214611722578063cc00551e146117a5578063d4ce14151461182957610407565b8063a9059cbb14611571578063aa271e1a146115d5578063abd108ba1461162f578063b66cd56c1461166357610407565b806392e6d68b116101b357806397af67441161018257806397af67441461139e578063983b2d56146114215780639dc29fac146114655780639fcf1007146114c9578063a457c2d71461150d57610407565b806392e6d68b146112025780639437e2fe1461125d57806395d89b41146112d7578063961a66f61461135a57610407565b80638771cd2d116101ef5780638771cd2d14610fc5578063878dd3321461115a5780638ab1d6811461117a578063912a9885146111be57610407565b80637f4ab1dd14610e8957806382c3f79c14610f3357806382dc1ec414610f775780638456cb5914610fbb57610407565b80633973b5961161031b57806352d1902d116102ae5780636b2c0f551161027d5780636b2c0f5514610d0b5780637065cb4814610d4f57806370a0823114610d935780637bb06eea14610deb5780637d0c269f14610e2f57610407565b806352d1902d14610c06578063537df3b614610c245780635c975abb14610c68578063611649c114610c8857610407565b80634334614a116102ea5780634334614a14610a8b57806344337ea114610ae557806346fbf68e14610b29578063489c1b2514610b8357610407565b80633973b596146109b25780633f4ba83a146109fc5780633f71370914610a0657806340c10f1914610a2757610407565b8063173825d91161039e57806323b872dd1161036d57806323b872dd1461080b5780632f54bf6e1461088f5780633092afd5146108e9578063313ce5671461092d578063395093511461094e57610407565b8063173825d91461076857806318160ddd146107ac578063184d69ab146107ca5780631fb45ec0146107ea57610407565b8063095ea7b3116103da578063095ea7b3146105545780630e969a05146105b85780631201cbd0146105d95780631624f6c61461060957610407565b80630263b8581461040c578063028468581461045d578063052d9e7e146104a157806306fdde03146104d1575b600080fd5b61045b6004803603604081101561042257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff169060200190929190505050611c17565b005b61049f6004803603602081101561047357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c83565b005b6104cf600480360360208110156104b757600080fd5b81019080803515159060200190929190505050611ced565b005b6104d9611d57565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156105195780820151818401526020810190506104fe565b50505050905090810190601f1680156105465780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105a06004803603604081101561056a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611df9565b60405180821515815260200191505060405180910390f35b6105c0611e17565b604051808260ff16815260200191505060405180910390f35b610607600480360360208110156105ef57600080fd5b81019080803515159060200190929190505050611e1c565b005b6107666004803603606081101561061f57600080fd5b810190808035906020019064010000000081111561063c57600080fd5b82018360208201111561064e57600080fd5b8035906020019184600183028401116401000000008311171561067057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156106d357600080fd5b8201836020820111156106e557600080fd5b8035906020019184600183028401116401000000008311171561070757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff169060200190929190505050611e86565b005b6107aa6004803603602081101561077e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fd0565b005b6107b461203a565b6040518082815260200191505060405180910390f35b6107d2612044565b60405180821515815260200191505060405180910390f35b6107f2612057565b604051808260ff16815260200191505060405180910390f35b6108776004803603606081101561082157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061205c565b60405180821515815260200191505060405180910390f35b6108d1600480360360208110156108a557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612142565b60405180821515815260200191505060405180910390f35b61092b600480360360208110156108ff57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061215f565b005b6109356121c9565b604051808260ff16815260200191505060405180910390f35b61099a6004803603604081101561096457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506121e0565b60405180821515815260200191505060405180910390f35b6109fa600480360360608110156109c857600080fd5b81019080803560ff169060200190929190803560ff169060200190929190803515159060200190929190505050612293565b005b610a04612301565b005b610a0e6123eb565b604051808260ff16815260200191505060405180910390f35b610a7360048036036040811015610a3d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123f0565b60405180821515815260200191505060405180910390f35b610acd60048036036020811015610aa157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612463565b60405180821515815260200191505060405180910390f35b610b2760048036036020811015610afb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612480565b005b610b6b60048036036020811015610b3f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612507565b60405180821515815260200191505060405180910390f35b610b8b612524565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610bcb578082015181840152602081019050610bb0565b50505050905090810190601f168015610bf85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610c0e612540565b6040518082815260200191505060405180910390f35b610c6660048036036020811015610c3a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061256b565b005b610c706125f2565b60405180821515815260200191505060405180910390f35b610c90612609565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610cd0578082015181840152602081019050610cb5565b50505050905090810190601f168015610cfd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610d4d60048036036020811015610d2157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612642565b005b610d9160048036036020811015610d6557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506126ac565b005b610dd560048036036020811015610da957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612716565b6040518082815260200191505060405180910390f35b610e2d60048036036020811015610e0157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061275f565b005b610e7160048036036020811015610e4557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127c9565b60405180821515815260200191505060405180910390f35b610eb860048036036020811015610e9f57600080fd5b81019080803560ff1690602001909291905050506127e6565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ef8578082015181840152602081019050610edd565b50505050905090810190601f168015610f255780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610f7560048036036020811015610f4957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612845565b005b610fb960048036036020811015610f8d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506128af565b005b610fc3612919565b005b611158600480360360c0811015610fdb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561101857600080fd5b82018360208201111561102a57600080fd5b8035906020019184600183028401116401000000008311171561104c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156110af57600080fd5b8201836020820111156110c157600080fd5b803590602001918460018302840111640100000000831117156110e357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290803560ff16906020019092919080359060200190929190803515159060200190929190505050612a04565b005b611162612b31565b60405180821515815260200191505060405180910390f35b6111bc6004803603602081101561119057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612b44565b005b611200600480360360208110156111d457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612bae565b005b6112446004803603602081101561121857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c18565b604051808260ff16815260200191505060405180910390f35b6112bf6004803603604081101561127357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612c38565b60405180821515815260200191505060405180910390f35b6112df612d6d565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561131f578082015181840152602081019050611304565b50505050905090810190601f16801561134c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61139c6004803603602081101561137057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e0f565b005b6113a6612e79565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156113e65780820151818401526020810190506113cb565b50505050905090810190601f1680156114135780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6114636004803603602081101561143757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612eb2565b005b6114b16004803603604081101561147b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612f1c565b60405180821515815260200191505060405180910390f35b61150b600480360360208110156114df57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612f8f565b005b6115596004803603604081101561152357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612ff9565b60405180821515815260200191505060405180910390f35b6115bd6004803603604081101561158757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506130c6565b60405180821515815260200191505060405180910390f35b611617600480360360208110156115eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506131aa565b60405180821515815260200191505060405180910390f35b6116376131c7565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6116a56004803603602081101561167957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506131f0565b60405180821515815260200191505060405180910390f35b6116c561320d565b604051808260ff16815260200191505060405180910390f35b611720600480360360208110156116f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613212565b005b61172a61327c565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561176a57808201518184015260208101905061174f565b50505050905090810190601f1680156117975780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b611811600480360360608110156117bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613298565b60405180821515815260200191505060405180910390f35b6118956004803603606081101561183f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061330c565b604051808260ff16815260200191505060405180910390f35b611910600480360360408110156118c457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061333a565b6040518082815260200191505060405180910390f35b61192e6133c1565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561196e578082015181840152602081019050611953565b50505050905090810190601f16801561199b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6119e5600480360360408110156119bf57600080fd5b81019080803560ff169060200190929190803560ff1690602001909291905050506133fa565b60405180821515815260200191505060405180910390f35b611a3f60048036036020811015611a1357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613429565b60405180821515815260200191505060405180910390f35b611aa360048036036040811015611a6d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613449565b60405180821515815260200191505060405180910390f35b611afd60048036036020811015611ad157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506134bb565b005b611b6160048036036040811015611b1557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613525565b60405180821515815260200191505060405180910390f35b611bbb60048036036020811015611b8f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506135f1565b005b611bff60048036036020811015611bd357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061365b565b60405180821515815260200191505060405180910390f35b611c20336127c9565b611c75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180615fdf603a913960400191505060405180910390fd5b611c7f8282613678565b5050565b611c8c33612142565b611ce1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b611cea816138f4565b50565b611cf633612142565b611d4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b611d5481613965565b50565b606060338054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611def5780601f10611dc457610100808354040283529160200191611def565b820191906000526020600020905b815481529060010190602001808311611dd257829003601f168201915b5050505050905090565b6000611e0d611e066139c8565b84846139d0565b6001905092915050565b600081565b611e2533612142565b611e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b611e8381613bc7565b50565b600060019054906101000a900460ff1680611ea55750611ea4613c2a565b5b80611ebb575060008054906101000a900460ff16155b611f10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615f2e602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015611f60576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b8360339080519060200190611f76929190615c51565b508260349080519060200190611f8d929190615c51565b5081603560006101000a81548160ff021916908360ff1602179055508015611fca5760008060016101000a81548160ff0219169083151502179055505b50505050565b611fd933612142565b61202e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b61203781613c41565b50565b6000606a54905090565b609f60009054906101000a900460ff1681565b600181565b6000838383600061206e84848461330c565b9050600060ff168160ff1614612083826127e6565b90612129576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156120ee5780820151818401526020810190506120d3565b50505050905090810190601f16801561211b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50612135888888613cb2565b9450505050509392505050565b600061215882609d613d9890919063ffffffff16565b9050919050565b61216833612142565b6121bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b6121c681613e76565b50565b6000603560009054906101000a900460ff16905090565b60006122896121ed6139c8565b8461228485606960006121fe6139c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ee790919063ffffffff16565b6139d0565b6001905092915050565b61229c336127c9565b6122f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180615fdf603a913960400191505060405180910390fd5b6122fc838383613f6f565b505050565b61230a33612507565b61235f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180615d656030913960400191505060405180910390fd5b60a660009054906101000a900460ff166123e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5061757361626c653a206e6f742070617573656400000000000000000000000081525060200191505060405180910390fd5b6123e9614061565b565b600281565b60006123fb336131aa565b612450576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180615e656030913960400191505060405180910390fd5b61245b3384846140cb565b905092915050565b60006124798260a3613d9890919063ffffffff16565b9050919050565b612489336131f0565b6124fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f426c61636b6c6973746572526f6c65206d697373696e6700000000000000000081525060200191505060405180910390fd5b61250481614147565b50565b600061251d8260a5613d9890919063ffffffff16565b9050919050565b6040518060600160405280603d8152602001615f5c603d913981565b60007fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf760001b905090565b612574336131f0565b6125e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f426c61636b6c6973746572526f6c65206d697373696e6700000000000000000081525060200191505060405180910390fd5b6125ef8161435f565b50565b600060a660009054906101000a900460ff16905090565b6040518060400160405280601b81526020017f526573747269637465642064756520746f20626c61636b6c697374000000000081525081565b61264b33612142565b6126a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b6126a981614576565b50565b6126b533612142565b61270a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b612713816145e7565b50565b6000606860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61276833612142565b6127bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b6127c681614658565b50565b60006127df82609e613d9890919063ffffffff16565b9050919050565b6060600360ff168260ff161415612834576040518060400160405280601b81526020017f526573747269637465642064756520746f20626c61636b6c69737400000000008152509050612840565b61283d826146c9565b90505b919050565b61284e33612142565b6128a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b6128ac816147b3565b50565b6128b833612142565b61290d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b61291681614824565b50565b61292233612507565b612977576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180615d656030913960400191505060405180910390fd5b60a660009054906101000a900460ff16156129fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f5061757361626c653a207061757365640000000000000000000000000000000081525060200191505060405180910390fd5b612a02614895565b565b600060019054906101000a900460ff1680612a235750612a22613c2a565b5b80612a39575060008054906101000a900460ff16155b612a8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615f2e602e913960400191505060405180910390fd5b60008060019054906101000a900460ff161590508015612ade576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b612ae9868686611e86565b612af43388856140cb565b50612afe876145e7565b612b0782613965565b8015612b285760008060016101000a81548160ff0219169083151502179055505b50505050505050565b60a860009054906101000a900460ff1681565b612b4d336127c9565b612ba2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180615fdf603a913960400191505060405180910390fd5b612bab816148ff565b50565b612bb733612142565b612c0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b612c1581614af1565b50565b60a06020528060005260406000206000915054906101000a900460ff1681565b6000609f60009054906101000a900460ff16612c575760019050612d67565b600060a060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600060a060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600060ff168260ff161480612d145750600060ff168160ff16145b15612d2457600092505050612d67565b60a160008360ff1660ff16815260200190815260200160002060008260ff1660ff16815260200190815260200160002060009054906101000a900460ff16925050505b92915050565b606060348054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015612e055780601f10612dda57610100808354040283529160200191612e05565b820191906000526020600020905b815481529060010190602001808311612de857829003601f168201915b5050505050905090565b612e1833612142565b612e6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b612e7681614c7c565b50565b6040518060400160405280601281526020017f556e6b6e6f776e204572726f7220436f6465000000000000000000000000000081525081565b612ebb33612142565b612f10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b612f1981614ced565b50565b6000612f2733612463565b612f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180615e0f6030913960400191505060405180910390fd5b612f87338484614d5e565b905092915050565b612f9833612142565b612fed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b612ff681614dda565b50565b60006130bc6130066139c8565b846130b7856040518060600160405280602581526020016160a460259139606960006130306139c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e4b9092919063ffffffff16565b6139d0565b6001905092915050565b600033838360006130d884848461330c565b9050600060ff168160ff16146130ed826127e6565b90613193576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561315857808201518184015260208101905061313d565b50505050905090810190601f1680156131855780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5061319e8787614f0b565b94505050505092915050565b60006131c08260a2613d9890919063ffffffff16565b9050919050565b60007fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf754905090565b60006132068260a7613d9890919063ffffffff16565b9050919050565b600381565b61321b33612142565b613270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b61327981614fef565b50565b6040518060600160405280603c815260200161603d603c913981565b60006132a33361365b565b6132f8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615db76032913960400191505060405180910390fd5b613303848484615060565b90509392505050565b60006133188484613525565b6133255760039050613333565b6133308484846150f4565b90505b9392505050565b6000606960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6040518060400160405280600781526020017f535543434553530000000000000000000000000000000000000000000000000081525081565b60a16020528160005260406000206020528060005260406000206000915091509054906101000a900460ff1681565b60a96020528060005260406000206000915054906101000a900460ff1681565b60006134543361365b565b6134a9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180615db76032913960400191505060405180910390fd5b6134b38383615146565b905092915050565b6134c433612142565b613519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b613522816151c2565b50565b600060a860009054906101000a900460ff1661354457600190506135eb565b60a960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156135e8575060a960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b90505b92915050565b6135fa33612142565b61364f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180615e95602e913960400191505060405180910390fd5b61365881615233565b50565b60006136718260a4613d9890919063ffffffff16565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180615e3f6026913960400191505060405180910390fd5b600060ff168160ff16141561377b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f496e76616c69642077686974656c69737420494420737570706c69656400000081525060200191505060405180910390fd5b600060a060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690508160a060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff160217905550600060ff168160ff1614613891573373ffffffffffffffffffffffffffffffffffffffff168160ff168473ffffffffffffffffffffffffffffffffffffffff167fb50a30a0fa972f89fbb2b514d12b31f5a5d64f53603402de7939742cd8507f6e60405160405180910390a45b3373ffffffffffffffffffffffffffffffffffffffff168260ff168473ffffffffffffffffffffffffffffffffffffffff167fca6d1e885708b837a7647aeb7f4163ee4ca96058e08ac767be8d23c972c5027060405160405180910390a4505050565b6139088160a36152a490919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f85222465e0d438163a28671b59fc9ebeb03bf39f880ddd36c8315da7512b31c060405160405180910390a350565b80609f60006101000a81548160ff0219169083151502179055508015153373ffffffffffffffffffffffffffffffffffffffff167fb535c5f7f150db8dbf22962fc390e7fa9026b9c29ffad714197bee4620572bd660405160405180910390a350565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613a56576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806160196024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615d956022913960400191505060405180910390fd5b80606960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b8060a860006101000a81548160ff0219169083151502179055508015153373ffffffffffffffffffffffffffffffffffffffff167f0254250bff2b56bce9719dfb6237446b9159bfbe2368f9dfe449d85da99b2be060405160405180910390a350565b6000803090506000813b9050600081149250505090565b613c5581609d6152a490919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fe594d081b4382713733fe631966432c9cea5199afb2db5c3c1931f9f9300367960405160405180910390a350565b60008383836000613cc484848461330c565b9050600060ff168160ff1614613cd9826127e6565b90613d7f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613d44578082015181840152602081019050613d29565b50505050905090810190601f168015613d715780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50613d8b888888615361565b9450505050509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180615f0c6022913960400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b613e8a8160a26152a490919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f4b5ef9a786cf64a7d82ebcf2d5132667edc9faef4ac36260d9a9e52c526b623260405160405180910390a350565b600080828401905083811015613f65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600060a160008560ff1660ff16815260200190815260200160002060008460ff1660ff16815260200190815260200160002060009054906101000a900460ff1690508160a160008660ff1660ff16815260200190815260200160002060008560ff1660ff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508260ff168460ff163373ffffffffffffffffffffffffffffffffffffffff167fb0353d563a9aa5231878c83727dc723a3cb8a38c2917f8ac2b777aa564c8a0d5848660405180831515815260200182151581526020019250505060405180910390a450505050565b600060a660006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b60006140d7838361543a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fab8530f87dc9b59234c4623bf917212bb2536d647574c8e7e5da92c2ede0c9f8846040518082815260200191505060405180910390a3600190509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156141ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f43616e6e6f74206164642030783000000000000000000000000000000000000081525060200191505060405180910390fd5b60a960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156142aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600f8152602001807f416c7265616479206f6e206c697374000000000000000000000000000000000081525060200191505060405180910390fd5b600160a960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167faf6ebb6594c3be37f747a8a4692decee2e128c133145b92b98391af1e942bb5260405160405180910390a350565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f43616e6e6f742072656d6f76652030783000000000000000000000000000000081525060200191505060405180910390fd5b60a960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166144c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4e6f74206f6e206c69737400000000000000000000000000000000000000000081525060200191505060405180910390fd5b600060a960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fc5d633221a999da7b50bad97ddd6cff0c917455d8651123a6433642833252b7c60405160405180910390a350565b61458a8160a56152a490919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb75903ade4a0fdb07d60c882c22c779e2e1c751883c37aecdcc92a8ec72b046e60405160405180910390a350565b6145fb81609d6155f790919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fc82bdbbf677a2462f2a7e22e4ba9abd209496b69cd7b868b3b1d28f76e09a40a60405160405180910390a350565b61466c8160a76155f790919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f891e671759c21e48221125d0aa55b5574dc00b3e3225e40f6cb10dde820822ad60405160405180910390a350565b6060600060ff168260ff161415614717576040518060400160405280600781526020017f535543434553530000000000000000000000000000000000000000000000000081525090506147ae565b600160ff168260ff161415614746576040518060600160405280603c815260200161603d603c913990506147ae565b600260ff168260ff161415614775576040518060600160405280603d8152602001615f5c603d913990506147ae565b6040518060400160405280601281526020017f556e6b6e6f776e204572726f7220436f6465000000000000000000000000000081525090505b919050565b6147c781609e6152a490919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3ed21605dd544629fb45f2ccaedcc095ba1dbea540fb6eaf5493a7479856b0be60405160405180910390a350565b6148388160a56155f790919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fe0953c403a52f9dc1fef4202a8d33975c958b727bee0d7b5b328965ddad98d8160405160405180910390a350565b600160a660006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614985576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180616079602b913960400191505060405180910390fd5b600060a060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050600060ff168160ff161415614a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526031815260200180615d126031913960400191505060405180910390fd5b600060a060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908360ff1602179055503373ffffffffffffffffffffffffffffffffffffffff168160ff168373ffffffffffffffffffffffffffffffffffffffff167fb50a30a0fa972f89fbb2b514d12b31f5a5d64f53603402de7939742cd8507f6e60405160405180910390a45050565b8073ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b158015614b3757600080fd5b505afa158015614b4b573d6000803e3d6000fd5b505050506040513d6020811015614b6157600080fd5b81019080805190602001909291905050507fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf760001b14614c09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f4e6f7420636f6d70617469626c6500000000000000000000000000000000000081525060200191505060405180910390fd5b807fc5f16f0fcc639fa48a6947836d9850f504798523bf8c9a3a87d5876cf622bcf7557feeaed647dc622e55877c30943e5c1d4feb92d1b8cfcc88d974163e9787bde9af81604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a150565b614c908160a46155f790919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f2b5f18afd9a7b21f41bf023b012b3d4c8a22a21b79fa425cd4494ecbe297019660405160405180910390a350565b614d018160a26155f790919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3c091dafb1d99e4a4c333024492eac3b2cd8bf921a3dd547c937db33be307bb860405160405180910390a350565b6000614d6a8383615775565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fbac40739b0d4ca32fa2d82fc91630465ba3eddd1598da6fca393b26fb63b9453846040518082815260200191505060405180910390a3600190509392505050565b614dee8160a76152a490919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fc76ab32d91026761e52ef1016d8293a11dbb26424e34581575cefc484d10c6f360405160405180910390a350565b6000838311158290614ef8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614ebd578082015181840152602081019050614ea2565b50505050905090810190601f168015614eea5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60003383836000614f1d84848461330c565b9050600060ff168160ff1614614f32826127e6565b90614fd8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015614f9d578082015181840152602081019050614f82565b50505050905090810190601f168015614fca5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50614fe3878761592f565b94505050505092915050565b6150038160a46152a490919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fb6fe3ab11eb9ab1d9f1d41c8f42a5d72d10122099ba1548e4a6d1a4d8cefec4b60405160405180910390a350565b600061506d84848461594d565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f64a989949bb484d2d275229a9d310b5d9dc273a560dd639c337aaf6f67fb73b6856040518082815260200191505060405180910390a4600190509392505050565b60006150fe6125f2565b1561510c576002905061513f565b61511584612142565b15615123576000905061513f565b61512d8484612c38565b61513a576001905061513f565b600090505b9392505050565b600061515383338461594d565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fb698e31a2abee5824d0d7bcfd2339aead7f9e9ae413fba50bf554ff3fa470b7b846040518082815260200191505060405180910390a36001905092915050565b6151d681609e6155f790919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f5f36f4f5999f34947706fca376b955319b858573bf9d6bc59303c9a4cd80ced060405160405180910390a350565b6152478160a36155f790919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f86515ebaad527298e98929c064c075f5a2604cc80afc0db29e73c01a36f8e98c60405160405180910390a350565b6152ae8282613d98565b615303576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615ec36021913960400191505060405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600061536e84848461594d565b61542f8461537a6139c8565b61542a85604051806060016040528060288152602001615ee460289139606960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006153e06139c8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e4b9092919063ffffffff16565b6139d0565b600190509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156154dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6154f281606a54613ee790919063ffffffff16565b606a8190555061554a81606860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ee790919063ffffffff16565b606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561569a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f496e76616c69642030783020616464726573730000000000000000000000000081525060200191505060405180910390fd5b6156a48282613d98565b15615717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156157fb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180615f996021913960400191505060405180910390fd5b61586781604051806060016040528060228152602001615d4360229139606860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e4b9092919063ffffffff16565b606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506158bf81606a54615c0790919063ffffffff16565b606a81905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600061594361593c6139c8565b848461594d565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156159d3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180615fba6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415615a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180615cef6023913960400191505060405180910390fd5b615ac581604051806060016040528060268152602001615de960269139606860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054614e4b9092919063ffffffff16565b606860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550615b5a81606860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ee790919063ffffffff16565b606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b6000615c4983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250614e4b565b905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10615c9257805160ff1916838001178555615cc0565b82800160010185558215615cc0579182015b82811115615cbf578251825591602001919060010190615ca4565b5b509050615ccd9190615cd1565b5090565b5b80821115615cea576000816000905550600101615cd2565b509056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416464726573732063616e6e6f742062652072656d6f7665642066726f6d20696e76616c69642077686974656c6973742e45524332303a206275726e20616d6f756e7420657863656564732062616c616e6365506175736572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652050617573657220726f6c6545524332303a20617070726f766520746f20746865207a65726f20616464726573735265766f6b6572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865205265766f6b657220726f6c6545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654275726e6572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204275726e657220726f6c6543616e6e6f742061646420616464726573732030783020746f20612077686974656c6973742e4d696e746572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204d696e74657220726f6c654f776e6572526f6c653a2063616c6c657220646f6573206e6f74206861766520746865204f776e657220726f6c65526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c6545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365526f6c65733a206163636f756e7420697320746865207a65726f2061646472657373436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a6564546865207472616e736665722077617320726573747269637465642064756520746f2074686520636f6e7472616374206265696e67207061757365642e45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737357686974656c6973746572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652057686974656c697374657220726f6c6545524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373546865207472616e736665722077617320726573747269637465642064756520746f207768697465206c69737420636f6e66696775726174696f6e2e43616e6e6f742072656d6f76652061646472657373203078302066726f6d20612077686974656c6973742e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122003a2dbd342d23c022a40dfb9f5b19bc077d2e41cc3edfaa3cf13dceb473ccb5c64736f6c634300060c0033