Contract 0x04d1974ca2da3848a41e8c0e309f8fc5e426ce7e

Contract Overview

Balance:
0.00306 ETH
Txn Hash Method
Block
From
To
Value
0x264919b8640d32180ee3eaca91a8699d4088d43f10103cc7c5af4bd0b7ded3600x1e348f32102487232024-05-21 4:28:546 days 15 hrs ago0x0d73fff202a6b3c9f23978a9d7f1ec7610a392bc IN  0x04d1974ca2da3848a41e8c0e309f8fc5e426ce7e0 ETH0.000082050611.500004007
0x9ece1dd3c5245750539226f52877a88f628d2a8b9a688fc91fb27da76c3385ab0x1e348f32101411812024-05-18 16:44:109 days 2 hrs ago0x0d73fff202a6b3c9f23978a9d7f1ec7610a392bc IN  0x04d1974ca2da3848a41e8c0e309f8fc5e426ce7e0 ETH0.000077777451.500000266
0x2a98f7b9d77eccd161e54b7401a0ec4d8b67c883577f77b636a242da52b361070xcb4a98b8101064682024-05-17 21:27:049 days 22 hrs ago0x10d84d30748147e1f66d8752eca8e771f7854534 IN  0x04d1974ca2da3848a41e8c0e309f8fc5e426ce7e0 ETH0.000112296621.50000026
0x7d547c1cb3c471d45c5f07411c908f7612a38821e2e25d03b9999ac2141ea1d40x1e348f32101016922024-05-17 18:47:5210 days 51 mins ago0x10d84d30748147e1f66d8752eca8e771f7854534 IN  0x04d1974ca2da3848a41e8c0e309f8fc5e426ce7e0 ETH0.0001532385751.500000257
0x1ea6a2e53caaec146a37adc8d5d8bb731a9569491e675e8a53407c9de2533cf50x1e348f32101016212024-05-17 18:45:3010 days 53 mins ago0x10d84d30748147e1f66d8752eca8e771f7854534 IN  0x04d1974ca2da3848a41e8c0e309f8fc5e426ce7e0 ETH0.0002891354971.500000256
0xbe6d3857e357f79b26ebaed7e94d7933f56ab8b58cbded87b6bb848376397b3a0xf3587e46101004832024-05-17 18:07:3410 days 1 hr ago0x10d84d30748147e1f66d8752eca8e771f7854534 IN  0x04d1974ca2da3848a41e8c0e309f8fc5e426ce7e0 ETH0.0001019468811.500000261
0xd7530177c2f6843445778aad2db43e68604f3c27421994f515dee07f01a832e10xf3587e46101003932024-05-17 18:04:3410 days 1 hr ago0x10d84d30748147e1f66d8752eca8e771f7854534 IN  0x04d1974ca2da3848a41e8c0e309f8fc5e426ce7e0 ETH0.000129119031.500000258
0x84590c5b22a660c86769a5a387cce8fe4de9004962d51391e5bfebf9c3bd01370xf3587e46100992812024-05-17 17:27:3010 days 2 hrs ago0x10d84d30748147e1f66d8752eca8e771f7854534 IN  0x04d1974ca2da3848a41e8c0e309f8fc5e426ce7e0 ETH0.000177897091.500000267
0x48d7b2b68b7a4660e9465dc83de2dd63b0a417825f2937724676c7e26c5dbd440xf3587e46100992512024-05-17 17:26:3010 days 2 hrs ago0x10d84d30748147e1f66d8752eca8e771f7854534 IN  0x04d1974ca2da3848a41e8c0e309f8fc5e426ce7e0 ETH0.0001483422411.500000267
0xc4e444ab1bddc0b7069e93545eba3a56d8d73544d3dc2bb4c2091f04bee522780xf3587e46100992392024-05-17 17:26:0610 days 2 hrs ago0x10d84d30748147e1f66d8752eca8e771f7854534 IN  0x04d1974ca2da3848a41e8c0e309f8fc5e426ce7e0 ETH0.0001674589751.500000266
0x6984257c0dcb8b21ab7b681cec68300d2232dad6720ea25612662f3072ba6d840x1e348f32100990472024-05-17 17:19:4210 days 2 hrs ago0x0d73fff202a6b3c9f23978a9d7f1ec7610a392bc IN  0x04d1974ca2da3848a41e8c0e309f8fc5e426ce7e0 ETH0.0003854175741.500000269
0x4cf25732e993a52cf8c0359a8c5d517f98c87799255ee2df1f9354089652f8710xf3587e46100989502024-05-17 17:16:2810 days 2 hrs ago0x0d73fff202a6b3c9f23978a9d7f1ec7610a392bc IN  0x04d1974ca2da3848a41e8c0e309f8fc5e426ce7e0 ETH0.0002435868631.500000269
0x20bcdad4218fe6418394dcb5d9675661520378004b3476be6bd3bab663aebb170x5ed35ded100986402024-05-17 17:06:0810 days 2 hrs ago0x0d73fff202a6b3c9f23978a9d7f1ec7610a392bc IN  0x04d1974ca2da3848a41e8c0e309f8fc5e426ce7e0 ETH0.0002147095661.500000264
0xca1a934ca26df5d6ed5a3728b5ea2015b789077d0eeae5b55c7c2d11139c5b380x851264e1100986192024-05-17 17:05:2610 days 2 hrs ago0x0d73fff202a6b3c9f23978a9d7f1ec7610a392bc IN  0x04d1974ca2da3848a41e8c0e309f8fc5e426ce7e0 ETH0.0006489887311.500000262
0x1b14bb7d66123bc3ccddf8765174d9af00fb9866bb455032853f6fc7e1ed9ead0xc8a09110100983762024-05-17 16:57:2010 days 2 hrs ago0x0d73fff202a6b3c9f23978a9d7f1ec7610a392bc IN  0x04d1974ca2da3848a41e8c0e309f8fc5e426ce7e0.00104 ETH0.0003160627841.500000261
0x11287ae0b25c3a21e8b5fc80d310aa214f54c74f0cc62b7596b20fa0a446297e0xc8a09110100983652024-05-17 16:56:5810 days 2 hrs ago0x0d73fff202a6b3c9f23978a9d7f1ec7610a392bc IN  0x04d1974ca2da3848a41e8c0e309f8fc5e426ce7e0.00102 ETH0.000478413481.500000261
0x2bf76c9d000335df8a55e902a15fe9f956073bcc70ff021a7bfaed25349959200x7c178d8e100983292024-05-17 16:55:4610 days 2 hrs ago0x0d73fff202a6b3c9f23978a9d7f1ec7610a392bc IN  0x04d1974ca2da3848a41e8c0e309f8fc5e426ce7e0 ETH0.0000811657461.500000261
0xac2c334f3dedf5aed5818d8169c19a7e7856ee339fa077a88415e900be56de430x7c178d8e100980882024-05-17 16:47:4410 days 2 hrs ago0x0d73fff202a6b3c9f23978a9d7f1ec7610a392bc IN  0x04d1974ca2da3848a41e8c0e309f8fc5e426ce7e0 ETH0.0001173951461.500000267
0xfc0fda7b3af0f02d34b7d93cf6887c5e2e2a59650b93c907de6b76ca64cbb9240x3836eaa1100979382024-05-17 16:42:4410 days 2 hrs ago0x0d73fff202a6b3c9f23978a9d7f1ec7610a392bc IN  0x04d1974ca2da3848a41e8c0e309f8fc5e426ce7e0 ETH0.0028839582121.500000259
0xc1c8bf29d36e16c5d0d0dfb9860fc9442daf00a6c3c945658f8ed1e215cf13380x7c178d8e100322702024-05-16 4:13:4811 days 15 hrs ago0x0d73fff202a6b3c9f23978a9d7f1ec7610a392bc IN  0x04d1974ca2da3848a41e8c0e309f8fc5e426ce7e0 ETH0.00071711634911.455206065
0x0b0923c758d61feddf96d3cea1b25bfcef7f1e41965ce0c18ca1317a2407b75a0x3836eaa1100322122024-05-16 4:11:5211 days 15 hrs ago0x0d73fff202a6b3c9f23978a9d7f1ec7610a392bc IN  0x04d1974ca2da3848a41e8c0e309f8fc5e426ce7e0 ETH0.01949293691411.389552277
0xe06c40bb663365ea1b1528807ccc9f99d06e0ad34e7379d8ab7d51445e09dec90x3836eaa1100321822024-05-16 4:10:5211 days 15 hrs ago0x0d73fff202a6b3c9f23978a9d7f1ec7610a392bc IN  0x04d1974ca2da3848a41e8c0e309f8fc5e426ce7e0 ETH0.01925182850311.392167074
0xbda6741f1e28259f2a9d052331723073831e4e59bc708e43326a4357984b44400xaac90c2b100320102024-05-16 4:05:0811 days 15 hrs ago0x0d73fff202a6b3c9f23978a9d7f1ec7610a392bc IN  0x04d1974ca2da3848a41e8c0e309f8fc5e426ce7e0 ETH0.00043486544811.409319443
0x432f50aab7bf98068e4d54661db0ecc18322c5ee3916939858f8a00cd6dbd76b0x3836eaa1100282822024-05-16 2:00:5211 days 17 hrs ago0x10d84d30748147e1f66d8752eca8e771f7854534 IN  0x04d1974ca2da3848a41e8c0e309f8fc5e426ce7e0 ETH0.0006937903591.581085199
0x13fd7d78c8414f72075cbd2cbd2ba3f8a44ec8c27a31067ae9a0d6af516a2d660x3836eaa1100282682024-05-16 2:00:2411 days 17 hrs ago0x10d84d30748147e1f66d8752eca8e771f7854534 IN  0x04d1974ca2da3848a41e8c0e309f8fc5e426ce7e0 ETH0.0007349043681.579268617
[ Download CSV Export 
Latest 2 internal transactions
Parent Txn Hash Block From To Value
0xb32d561d9e99cb94d83bb6a51a9465a21948da655d90ce93d1a413fcd496688e100149942024-05-15 18:37:5612 days 1 hr ago 0x04d1974ca2da3848a41e8c0e309f8fc5e426ce7e0x0d73fff202a6b3c9f23978a9d7f1ec7610a392bc0.001 ETH
0xcd5802a0b9be55991658dadff1e95c81ffb387c5666a3efdced010f91e6b10ce100146392024-05-15 18:26:0612 days 1 hr ago 0x04d1974ca2da3848a41e8c0e309f8fc5e426ce7e0x0d73fff202a6b3c9f23978a9d7f1ec7610a392bc0.001 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Dlogos

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion, GNU GPLv3 license

Contract Source Code (Solidity Multiple files format)

File 2 of 7: Dlogos.sol
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.24;

import {EnumerableSet} from "./EnumerableSet.sol";
import {Ownable} from "./Ownable.sol";
import {Pausable} from "./Pausable.sol";
import {ReentrancyGuard} from "./ReentrancyGuard.sol";
import {Idlogos} from "./Idlogos.sol";


/*                                                           
                                     ..........................                                     
                                ....................................                                
                            ............................................                            
                         ..................:===:...........................                         
                      .....................-====..............................                      
                    .......................=====:...............................                    
                  .........................=====-.................................                  
                 ..........................-=====..................................                 
               ............................-=====....................................               
              .............................:=====:....................................              
             ..............................:=====:.....................................             
            ...............................:=====-......................................            
           .................................=====-.......................................           
           .................................=====-.......................................           
          ..................................=====-........................................          
          ..................................=====-........................................          
          ..................................=====-........................................          
          ..................................=====-........................................          
          ..................................=====-........................................          
          .................................:=====:........................................          
          .................................-=====:........................................          
           ................................======........................................           
           ...............................-=====-........................................           
            ..................:--------:..======:.......................................            
             ...............-====------========-.......................................             
              .............-===-.......-=======-::....................................              
               ............:====-----========-=======----::::::::::--==-.............               
                ............:==============:....:-====================:.............                
                  ............:-======--:...........::--=======---::..............                  
                    ............................................................                    
                      ........................................................                      
                         ..................................................                         
                            ............................................                            
                                 ..................................                                 
                                     .........................                                                                                                                                 
*/


/// @title Core DLogos contract
/// @author 0xan000n
contract Dlogos is Idlogos, Ownable, Pausable, ReentrancyGuard {
    using EnumerableSet for EnumerableSet.AddressSet;

    /// STORAGE
    uint256 public logoId = 1; // Global Logo ID starting from 1
    mapping(uint256 => Logo) public logos; // Mapping of Owner addresses to Logo ID to Logo info 
    mapping(uint256 => mapping(address => Backer)) public logoBackers; // Mapping of Logo ID to address to Backer
    mapping(uint256 => EnumerableSet.AddressSet) private _logoBackerAddresses;
    mapping(uint256 => Speaker[]) public logoSpeakers; // Mapping of Logo ID to list of Speakers
    uint16 public rejectThreshold = 5000; // backer rejection threshold in BPS (50%)

    /// FUNCTIONS
    /**
     * @dev Set reject threshold for dLogos.
     */
    function setRejectThreshold(uint16 _rejectThreshold) external nonReentrant onlyOwner {
        require(
            _rejectThreshold > 0 && _rejectThreshold <= 10000,
            "Reject threshold must be greater than 0 and less than 100."
        );
        rejectThreshold = _rejectThreshold;
        emit RejectThresholdUpdated(rejectThreshold);
    }

    /**
     * @dev Create new Logo onchain.
     */
    function createLogo(
        string calldata _title,
        string calldata _description,
        string calldata _discussion,
        uint _crowdfundNumberOfDays
    ) external nonReentrant whenNotPaused returns (uint256) {
        logos[logoId] = Logo({
            id: logoId,
            title: _title,
            description: _description,
            discussion: _discussion,
            creator: msg.sender,
            scheduledAt: 0,
            mediaAssetURL: "",
            minimumPledge: 0,
            crowdfundStartAt: block.timestamp,
            crowdfundEndAt: block.timestamp + _crowdfundNumberOfDays * 1 days,
            splits: address(0),
            rejectionDeadline: 0,
            status: Status({isUploaded: false, isCrowdfunding: true, isDistributed: false, isRefunded: false})
        });
        emit LogoCreated(msg.sender, logoId, block.timestamp);
        emit CrowdfundToggled(msg.sender, true);
        return logoId++; // Return and Increment Global Logo ID
    }

    /**
     * @dev Toggle crowdfund for Logo. Only the creator of the Logo is allowed to toggle a crowdfund.
     */
    function toggleCrowdfund(uint256 _logoId) external nonReentrant whenNotPaused {
        Logo storage l = logos[_logoId];
        require(!l.status.isUploaded, "Cannot toggle crowdfund after Logo asset is uploaded.");
        require(!l.status.isDistributed, "Cannot toggle crowdfund after rewards are distributed.");
        require(!l.status.isRefunded, "Cannot toggle crowdfund after Logo is refunded.");
        require(l.creator == msg.sender, "Only the Logo creator is allowed to toggle crowdfund.");
        l.status.isCrowdfunding = !l.status.isCrowdfunding;
        emit CrowdfundToggled(msg.sender, l.status.isCrowdfunding);
    }

    /**
     * @dev Crowdfund.
     */
    function crowdfund(uint256 _logoId) external payable nonReentrant whenNotPaused {
        Logo memory l = logos[_logoId];
        require(l.status.isCrowdfunding, "Crowdfund is not open.");
        require(!l.status.isDistributed, "Cannot set date after rewards are distributed.");
        require(msg.value > l.minimumPledge, "Crowdfund value must be greater than the minimum pledge.");
        bool isBacker = _logoBackerAddresses[_logoId].contains(msg.sender);
        if (isBacker){
            Backer storage backer = logoBackers[_logoId][msg.sender];
            unchecked {
                backer.amount += msg.value;
            }
        } else {
            // Record the value sent to the address.
            require (_logoBackerAddresses[_logoId].length() < 1000, "A Logo can have at most 1000 backers.");
            Backer memory b = Backer({
                addr: msg.sender,
                amount: msg.value,
                votesToReject: false,
                isDistributed: false
            });
            bool added = _logoBackerAddresses[_logoId].add(msg.sender);
            require(added, "Failed to add backer");
            logoBackers[_logoId][msg.sender] = b;
        }
        emit Crowdfund(msg.sender, msg.value);    
    }

    /**
     * @dev Set minimum pledge for a conversation.
     */
    function setMinimumPledge(uint256 _logoId, uint256 _minimumPledge) external nonReentrant whenNotPaused {
        Logo storage l = logos[_logoId];
        require(l.status.isCrowdfunding, "Can only set minimum pledge during crowdfund.");
        require(l.creator == msg.sender, "msg.sender is not the Logo creator.");
        require(_minimumPledge > 0, "Minimum pledge must be greater than 0.");
        l.minimumPledge = _minimumPledge;
        emit MinimumPledgeSet(msg.sender, _minimumPledge);
    }

    /**
     * @dev Withdraw your pledge from a Logo.
     */
    function withdrawFunds(
        uint256 _logoId,
        uint256 _amount
    ) external nonReentrant whenNotPaused {
        Logo memory l = logos[_logoId];
        require(
            l.status.isCrowdfunding || l.status.isRefunded,
            "Logo must be crowdfunding or be refunded to withdraw."
        );
        require(_amount > 0, "Amount must be greater than 0."); 
        bool isBacker = _logoBackerAddresses[_logoId].contains(msg.sender);
        require (isBacker, "msg.sender is not a backer.");
        Backer storage backer = logoBackers[_logoId][msg.sender];
        require(!backer.isDistributed, "Backer funds have already been distributed.");
        require(backer.amount == _amount, "Requested withdrawal amount does not match the backer's pledged amount.");
        uint256 amount = backer.amount;
        bool removed = _logoBackerAddresses[_logoId].remove(msg.sender);
        require(removed, "Failed to remove backer.");
        delete logoBackers[_logoId][msg.sender];
        (bool success, ) = payable(msg.sender).call{value: amount}("");
        require(success, "Withdraw failed.");
        emit FundsWithdrawn(msg.sender, amount);
    }
    
    /**
     * @dev Allows a backer to reject an uploaded asset.
     */
    function reject(
        uint256 _logoId
    ) external nonReentrant whenNotPaused {
        Logo memory l = logos[_logoId];
        require(block.timestamp < l.rejectionDeadline, "Rejection deadline has passed.");
        bool isBacker = _logoBackerAddresses[_logoId].contains(msg.sender);
        require (isBacker, "msg.sender is not a backer.");
        Backer storage backer = logoBackers[_logoId][msg.sender];
        backer.votesToReject = true;
        emit RejectionSubmitted(_logoId, msg.sender);
    }


    /**
     * @dev Issue refund of the Logo.
     */
    function refund(
        uint256 _logoId
    ) external nonReentrant whenNotPaused {
        Logo storage l = logos[_logoId];
        require(!l.status.isDistributed, "Cannot refund after rewards are distributed.");
        bool c1 = l.creator == msg.sender; // Case 1: Logo creator can refund whenever.
        bool c2 = block.timestamp > l.crowdfundEndAt; // Case 2: Crowdfund end date reached and not distributed
        bool c3 = l.scheduledAt != 0 && (block.timestamp > l.scheduledAt + 7 * 1 days) && !l.status.isUploaded; // Case 3: >7 days have passed since schedule date and no asset uploaded.
        bool c4 = _pollBackersForRefund(_logoId); // Case 4: >50% of backers reject upload.
        require(c1 || c2 || c3 || c4, "No conditions met for refund.");
        l.status.isRefunded = true;
        emit RefundInitiated(_logoId, c1, c2, c3, c4);
    }

    /**
     * @dev Return the list of backers for a Logo.
     */
    function getBackersForLogo(
        uint256 _logoId
    ) external view returns (Backer[] memory) {
        EnumerableSet.AddressSet storage backerAddresses = _logoBackerAddresses[_logoId];
        address[] memory backerArray = backerAddresses.values();
        Backer[] memory backers = new Backer[](backerArray.length);
        for (uint256 i = 0; i < backerArray.length; i++) {
            backers[i] = logoBackers[_logoId][backerArray[i]];
        }
        return backers;
    }

    /**
     * @dev Set speakers for a Logo.
     */
    function setSpeakers(
        uint256 _logoId,
        address[] calldata _speakers,
        uint16[] calldata _fees,
        string[] calldata _providers,
        string[] calldata _handles
    ) external nonReentrant whenNotPaused {
        Logo memory l = logos[_logoId];
        require(l.creator == msg.sender, "msg.sender is not the Logo creator.");
        require(_speakers.length > 0, "Please submit at least one speaker.");
        require(_speakers.length < 100, "Cannot have more than 100 speakers.");
        require(
            _speakers.length == _fees.length &&
            _fees.length == _providers.length &&
            _providers.length == _handles.length,
            "Length of calldata arrays must be equal."
        );
        delete logoSpeakers[_logoId]; // Reset to default (no speakers)
        for (uint i = 0; i < _speakers.length; i++) {
            Speaker memory s = Speaker({
                addr: _speakers[i],
                fee: _fees[i],
                provider: _providers[i],
                handle: _handles[i],
                status: SpeakerStatus.Pending
            });
            logoSpeakers[_logoId].push(s);
        }
        emit SpeakersSet(msg.sender, _speakers, _fees, _providers, _handles);
    }

    /**
     * @dev Set status of a speaker.
     */
    function setSpeakerStatus(uint256 _logoId, uint _speakerStatus) external nonReentrant whenNotPaused {
        Speaker[] memory speakers = logoSpeakers[_logoId];
        for (uint i = 0; i < speakers.length; i++) {
            if (address(speakers[i].addr) == msg.sender) { 
                logoSpeakers[_logoId][i].status = SpeakerStatus(_speakerStatus);
                emit SpeakerStatusSet(_logoId, msg.sender, _speakerStatus);
                break;
            }
        }
    }

    /**
     * @dev Return the list of speakers for a Logo.
     */
    function getSpeakersForLogo(
        uint256 _logoId
    ) external view returns (Speaker[] memory) {
        return logoSpeakers[_logoId];
    }

    /**
     * @dev Set date for a conversation.
     */
    function setDate(uint256 _logoId, uint _scheduledAt) external nonReentrant whenNotPaused {
        Logo storage l = logos[_logoId];
        require(!l.status.isUploaded, "Cannot set date after Logo asset is uploaded.");
        require(!l.status.isDistributed, "Cannot set date after rewards are distributed.");
        require(!l.status.isRefunded, "Cannot set date after Logo is refunded.");
        require(l.creator == msg.sender, "msg.sender is not the Logo creator.");
        require(_scheduledAt > block.timestamp, "Proposed date must be in the future.");
        l.scheduledAt = _scheduledAt;
        l.status.isCrowdfunding = false; // Close crowdfund
        emit DateSet(msg.sender, _scheduledAt);
    }

    /**
     * @dev Sets media URL for a Logo.
     */
    function setMediaAsset(
        uint256 _logoId,
        string calldata _mediaAssetURL
    ) external nonReentrant whenNotPaused {
        Logo storage l = logos[_logoId];
        require(!l.status.isDistributed, "Cannot upload asset after rewards are distributed.");
        require(!l.status.isRefunded, "Cannot upload asset after Logo is refunded.");
        require(l.creator == msg.sender, "msg.sender is not the Logo creator.");
        l.mediaAssetURL = _mediaAssetURL;
        l.status.isCrowdfunding = false; // Close crowdfund
        l.status.isUploaded = true;
        l.rejectionDeadline = block.timestamp + 7 * 1 days;
        emit MediaAssetSet(msg.sender, _mediaAssetURL);
    }
    
    /**
     * @dev Sets splits address for a Logo.
     */
    function setSplitsAddress(
        uint256 _logoId,
        address _splitsAddress
    ) external nonReentrant whenNotPaused {
        Logo storage l = logos[_logoId];
        require(!l.status.isDistributed, "Cannot set splits after rewards are distributed.");
        require(!l.status.isRefunded, "Cannot set splits after Logo is refunded.");
        require(l.creator == msg.sender, "msg.sender is not the Logo creator.");
        l.splits = _splitsAddress;
        l.status.isCrowdfunding = false; // Close crowdfund
        l.rejectionDeadline = block.timestamp + 7 * 1 days;
        emit SplitsSet(msg.sender, _splitsAddress);
    }

    /**
     * @dev Calculate and distribute rewards to the Splits contract.
     */
    function distributeRewards(
        uint256 _logoId
    ) external nonReentrant whenNotPaused {
        Logo storage l = logos[_logoId];
        require(!l.status.isDistributed, "Logo has already been distributed.");
        require(!l.status.isRefunded, "Cannot distribute rewards after Logo is refunded.");
        require(block.timestamp > l.rejectionDeadline, "Rewards can only be distributed after rejection deadline has passed.");
        require(l.creator == msg.sender, "msg.sender is not the Logo creator.");
        require(l.splits != address(0), "Splits address must be set prior to distribution.");
        EnumerableSet.AddressSet storage backerAddresses = _logoBackerAddresses[_logoId];
        address[] memory backerArray = backerAddresses.values();
        uint256 totalRewards = 0;
        for (uint256 i = 0; i < backerArray.length; i++) {
            Backer storage b = logoBackers[_logoId][backerArray[i]];
            if (!b.isDistributed) {
                unchecked {
                    totalRewards += b.amount;
                }
                b.isDistributed = true;
            }
        }
        l.status.isDistributed = true;
        (bool success, ) = payable(l.splits).call{value: totalRewards}("");
        require(success, "Reward distribution failed.");
        emit RewardsDistributed(msg.sender, l.splits, totalRewards);
    }

    /**
     * @dev Private function for polling backers, weighted by capital.
     */
    function _pollBackersForRefund(
        uint256 _logoId
    ) private view returns (bool) {
        EnumerableSet.AddressSet storage backerAddresses = _logoBackerAddresses[_logoId];
        address[] memory backerArray = backerAddresses.values();
        uint256 total = 0;
        uint256 rejected = 0;
        for (uint i = 0; i < total; i++) {
            address bAddress = backerArray[i];
            Backer memory b = logoBackers[_logoId][bAddress];
            unchecked {
                if (b.votesToReject) {
                    rejected += b.amount;
                }
                total += b.amount;
            }
        }
        uint256 threshold = rejected * 10_000 / total; // BPS
        return threshold > rejectThreshold;
    }
}

File 1 of 7: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 3 of 7: EnumerableSet.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/structs/EnumerableSet.sol)
// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.

pragma solidity ^0.8.0;

/**
 * @dev Library for managing
 * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
 * types.
 *
 * Sets have the following properties:
 *
 * - Elements are added, removed, and checked for existence in constant time
 * (O(1)).
 * - Elements are enumerated in O(n). No guarantees are made on the ordering.
 *
 * ```solidity
 * contract Example {
 *     // Add the library methods
 *     using EnumerableSet for EnumerableSet.AddressSet;
 *
 *     // Declare a set state variable
 *     EnumerableSet.AddressSet private mySet;
 * }
 * ```
 *
 * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)
 * and `uint256` (`UintSet`) are supported.
 *
 * [WARNING]
 * ====
 * Trying to delete such a structure from storage will likely result in data corruption, rendering the structure
 * unusable.
 * See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.
 *
 * In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an
 * array of EnumerableSet.
 * ====
 */
library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;
        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping(bytes32 => uint256) _indexes;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {
            // Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            if (lastIndex != toDeleteIndex) {
                bytes32 lastValue = set._values[lastIndex];

                // Move the last value to the index where the value to delete is
                set._values[toDeleteIndex] = lastValue;
                // Update the index for the moved value
                set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex
            }

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        return set._values[index];
    }

    /**
     * @dev Return the entire set in an array
     *
     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
     * this function has an unbounded cost, and using it as part of a state-changing function may render the function
     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
     */
    function _values(Set storage set) private view returns (bytes32[] memory) {
        return set._values;
    }

    // Bytes32Set

    struct Bytes32Set {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    /**
     * @dev Return the entire set in an array
     *
     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
     * this function has an unbounded cost, and using it as part of a state-changing function may render the function
     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
     */
    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {
        bytes32[] memory store = _values(set._inner);
        bytes32[] memory result;

        /// @solidity memory-safe-assembly
        assembly {
            result := store
        }

        return result;
    }

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    /**
     * @dev Return the entire set in an array
     *
     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
     * this function has an unbounded cost, and using it as part of a state-changing function may render the function
     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
     */
    function values(AddressSet storage set) internal view returns (address[] memory) {
        bytes32[] memory store = _values(set._inner);
        address[] memory result;

        /// @solidity memory-safe-assembly
        assembly {
            result := store
        }

        return result;
    }

    // UintSet

    struct UintSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }

    /**
     * @dev Return the entire set in an array
     *
     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
     * this function has an unbounded cost, and using it as part of a state-changing function may render the function
     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
     */
    function values(UintSet storage set) internal view returns (uint256[] memory) {
        bytes32[] memory store = _values(set._inner);
        uint256[] memory result;

        /// @solidity memory-safe-assembly
        assembly {
            result := store
        }

        return result;
    }
}

File 4 of 7: Idlogos.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

interface Idlogos {
    struct Backer {
        address addr;
        uint256 amount;
        bool votesToReject;
        bool isDistributed; 
    }

    enum SpeakerStatus {
        Pending,
        Accepted,
        Declined
    }

    struct Speaker {
        address addr;
        uint16 fee; // in BPS
        string provider; // e.g. X, Discord etc.
        string handle;
        SpeakerStatus status;
    }

    struct Status {
        bool isCrowdfunding;
        bool isUploaded;
        bool isDistributed;
        bool isRefunded;
    }

    /// @notice All onchain information for a Logo.
    struct Logo {
        uint256 id;
        string title;
        string description;
        string discussion;
        string mediaAssetURL;
        address creator;
        uint scheduledAt;
        uint256 minimumPledge;
        uint crowdfundStartAt;
        uint crowdfundEndAt;
        uint rejectionDeadline;
        address splits; // Splits Address
        Status status;
    }

    /// EVENTS
    event RejectThresholdUpdated(uint16 indexed _fee);
    event LogoCreated(
        address indexed _owner,
        uint indexed _logoId,
        uint indexed _crowdfundStartAt
    );
    event MinimumPledgeSet(address indexed _owner, uint indexed _minimumPledge);
    event Crowdfund(address indexed _owner, uint indexed _amount);
    event CrowdfundToggled(
        address indexed _owner,
        bool indexed _crowdfundIsOpen
    );
    event FundsWithdrawn(address indexed _owner, uint indexed _amount);
    event SpeakersSet(
        address indexed _owner,
        address[] _speakers,
        uint16[] _fees,
        string[] _providers,
        string[] _handles
    );
    event DateSet(address indexed _owner, uint indexed _scheduledAt);
    event MediaAssetSet(address indexed _owner, string indexed _mediaAssetURL);
    event SplitsSet(address indexed _owner, address indexed _splitsAddress);
    event RewardsDistributed(
        address indexed _owner,
        address indexed _splitsAddress,
        uint256 indexed _totalRewards
    );
    event SpeakerStatusSet(uint indexed _logoId, address indexed _speaker, uint indexed _status);
    event RejectionSubmitted(uint indexed _logoId, address indexed _backer);
    event RefundInitiated(
        uint indexed _logoId, 
        bool _case1,
        bool _case2,
        bool _case3,
        bool _case4
    );
}

File 5 of 7: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 6 of 7: Pausable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        require(!paused(), "Pausable: paused");
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        require(paused(), "Pausable: not paused");
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

File 7 of 7: ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"Crowdfund","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"bool","name":"_crowdfundIsOpen","type":"bool"}],"name":"CrowdfundToggled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"_scheduledAt","type":"uint256"}],"name":"DateSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"FundsWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"_logoId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"_crowdfundStartAt","type":"uint256"}],"name":"LogoCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"string","name":"_mediaAssetURL","type":"string"}],"name":"MediaAssetSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"_minimumPledge","type":"uint256"}],"name":"MinimumPledgeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_logoId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"_case1","type":"bool"},{"indexed":false,"internalType":"bool","name":"_case2","type":"bool"},{"indexed":false,"internalType":"bool","name":"_case3","type":"bool"},{"indexed":false,"internalType":"bool","name":"_case4","type":"bool"}],"name":"RefundInitiated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint16","name":"_fee","type":"uint16"}],"name":"RejectThresholdUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_logoId","type":"uint256"},{"indexed":true,"internalType":"address","name":"_backer","type":"address"}],"name":"RejectionSubmitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_splitsAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"_totalRewards","type":"uint256"}],"name":"RewardsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_logoId","type":"uint256"},{"indexed":true,"internalType":"address","name":"_speaker","type":"address"},{"indexed":true,"internalType":"uint256","name":"_status","type":"uint256"}],"name":"SpeakerStatusSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":false,"internalType":"address[]","name":"_speakers","type":"address[]"},{"indexed":false,"internalType":"uint16[]","name":"_fees","type":"uint16[]"},{"indexed":false,"internalType":"string[]","name":"_providers","type":"string[]"},{"indexed":false,"internalType":"string[]","name":"_handles","type":"string[]"}],"name":"SpeakersSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_splitsAddress","type":"address"}],"name":"SplitsSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"string","name":"_title","type":"string"},{"internalType":"string","name":"_description","type":"string"},{"internalType":"string","name":"_discussion","type":"string"},{"internalType":"uint256","name":"_crowdfundNumberOfDays","type":"uint256"}],"name":"createLogo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_logoId","type":"uint256"}],"name":"crowdfund","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_logoId","type":"uint256"}],"name":"distributeRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_logoId","type":"uint256"}],"name":"getBackersForLogo","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"votesToReject","type":"bool"},{"internalType":"bool","name":"isDistributed","type":"bool"}],"internalType":"struct Idlogos.Backer[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_logoId","type":"uint256"}],"name":"getSpeakersForLogo","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint16","name":"fee","type":"uint16"},{"internalType":"string","name":"provider","type":"string"},{"internalType":"string","name":"handle","type":"string"},{"internalType":"enum Idlogos.SpeakerStatus","name":"status","type":"uint8"}],"internalType":"struct Idlogos.Speaker[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"logoBackers","outputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"votesToReject","type":"bool"},{"internalType":"bool","name":"isDistributed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"logoId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"logoSpeakers","outputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint16","name":"fee","type":"uint16"},{"internalType":"string","name":"provider","type":"string"},{"internalType":"string","name":"handle","type":"string"},{"internalType":"enum Idlogos.SpeakerStatus","name":"status","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"logos","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"title","type":"string"},{"internalType":"string","name":"description","type":"string"},{"internalType":"string","name":"discussion","type":"string"},{"internalType":"string","name":"mediaAssetURL","type":"string"},{"internalType":"address","name":"creator","type":"address"},{"internalType":"uint256","name":"scheduledAt","type":"uint256"},{"internalType":"uint256","name":"minimumPledge","type":"uint256"},{"internalType":"uint256","name":"crowdfundStartAt","type":"uint256"},{"internalType":"uint256","name":"crowdfundEndAt","type":"uint256"},{"internalType":"uint256","name":"rejectionDeadline","type":"uint256"},{"internalType":"address","name":"splits","type":"address"},{"components":[{"internalType":"bool","name":"isCrowdfunding","type":"bool"},{"internalType":"bool","name":"isUploaded","type":"bool"},{"internalType":"bool","name":"isDistributed","type":"bool"},{"internalType":"bool","name":"isRefunded","type":"bool"}],"internalType":"struct Idlogos.Status","name":"status","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_logoId","type":"uint256"}],"name":"refund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_logoId","type":"uint256"}],"name":"reject","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rejectThreshold","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_logoId","type":"uint256"},{"internalType":"uint256","name":"_scheduledAt","type":"uint256"}],"name":"setDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_logoId","type":"uint256"},{"internalType":"string","name":"_mediaAssetURL","type":"string"}],"name":"setMediaAsset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_logoId","type":"uint256"},{"internalType":"uint256","name":"_minimumPledge","type":"uint256"}],"name":"setMinimumPledge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_rejectThreshold","type":"uint16"}],"name":"setRejectThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_logoId","type":"uint256"},{"internalType":"uint256","name":"_speakerStatus","type":"uint256"}],"name":"setSpeakerStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_logoId","type":"uint256"},{"internalType":"address[]","name":"_speakers","type":"address[]"},{"internalType":"uint16[]","name":"_fees","type":"uint16[]"},{"internalType":"string[]","name":"_providers","type":"string[]"},{"internalType":"string[]","name":"_handles","type":"string[]"}],"name":"setSpeakers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_logoId","type":"uint256"},{"internalType":"address","name":"_splitsAddress","type":"address"}],"name":"setSplitsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_logoId","type":"uint256"}],"name":"toggleCrowdfund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_logoId","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260016002556007805461ffff19166113881790553480156200002557600080fd5b50620000313362000048565b6000805460ff60a01b191690556001805562000098565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b614bab80620000a86000396000f3fe6080604052600436106101665760003560e01c8063851264e1116100d1578063cb4a98b81161008a578063e525310511610064578063e5253105146104df578063ef7a4a32146104ff578063f2fde38b14610515578063f3587e461461053557600080fd5b8063cb4a98b814610465578063d694e9d314610485578063de8a9524146104b257600080fd5b8063851264e11461033b5780638da5cb5b1461035b5780639f699b1314610383578063aac90c2b14610412578063b8adaa1114610432578063c8a091101461045257600080fd5b806359974e381161012357806359974e381461027c5780635c975abb1461029c5780635ed35ded146102c65780636e9b70b1146102e6578063715018a6146103065780637c178d8e1461031b57600080fd5b8063141798651461016b5780631e348f32146101ad57806326263578146101cf578063278ecde1146102005780633836eaa1146102205780633fefc23d1461024e575b600080fd5b34801561017757600080fd5b5061018b61018636600461402d565b610555565b6040516101a49d9c9b9a9998979695949392919061408c565b60405180910390f35b3480156101b957600080fd5b506101cd6101c83660046141bc565b610827565b005b3480156101db57600080fd5b506101ef6101ea366004614208565b6109e0565b6040516101a4959493929190614262565b34801561020c57600080fd5b506101cd61021b36600461402d565b610b52565b34801561022c57600080fd5b5061024061023b3660046142bc565b610d27565b6040519081526020016101a4565b34801561025a57600080fd5b506007546102699061ffff1681565b60405161ffff90911681526020016101a4565b34801561028857600080fd5b506101cd61029736600461402d565b611042565b3480156102a857600080fd5b50600054600160a01b900460ff1660405190151581526020016101a4565b3480156102d257600080fd5b506101cd6102e1366004614208565b611416565b3480156102f257600080fd5b506101cd610301366004614376565b6116f9565b34801561031257600080fd5b506101cd6117db565b34801561032757600080fd5b506101cd610336366004614208565b6117ef565b34801561034757600080fd5b506101cd6103563660046143d6565b611940565b34801561036757600080fd5b506000546040516001600160a01b0390911681526020016101a4565b34801561038f57600080fd5b506103e061039e3660046144bd565b60046020908152600092835260408084209091529082529020805460018201546002909201546001600160a01b03909116919060ff8082169161010090041684565b604080516001600160a01b039095168552602085019390935290151591830191909152151560608201526080016101a4565b34801561041e57600080fd5b506101cd61042d36600461402d565b61203e565b34801561043e57600080fd5b506101cd61044d36600461402d565b61228d565b6101cd61046036600461402d565b6126dc565b34801561047157600080fd5b506101cd6104803660046144bd565b612cea565b34801561049157600080fd5b506104a56104a036600461402d565b612e91565b6040516101a491906144e9565b3480156104be57600080fd5b506104d26104cd36600461402d565b613081565b6040516101a491906145ab565b3480156104eb57600080fd5b506101cd6104fa366004614208565b6131d3565b34801561050b57600080fd5b5061024060025481565b34801561052157600080fd5b506101cd61053036600461461c565b6138b8565b34801561054157600080fd5b506101cd610550366004614208565b61392e565b6003602052600090815260409020805460018201805491929161057790614637565b80601f01602080910402602001604051908101604052809291908181526020018280546105a390614637565b80156105f05780601f106105c5576101008083540402835291602001916105f0565b820191906000526020600020905b8154815290600101906020018083116105d357829003601f168201915b50505050509080600201805461060590614637565b80601f016020809104026020016040519081016040528092919081815260200182805461063190614637565b801561067e5780601f106106535761010080835404028352916020019161067e565b820191906000526020600020905b81548152906001019060200180831161066157829003601f168201915b50505050509080600301805461069390614637565b80601f01602080910402602001604051908101604052809291908181526020018280546106bf90614637565b801561070c5780601f106106e15761010080835404028352916020019161070c565b820191906000526020600020905b8154815290600101906020018083116106ef57829003601f168201915b50505050509080600401805461072190614637565b80601f016020809104026020016040519081016040528092919081815260200182805461074d90614637565b801561079a5780601f1061076f5761010080835404028352916020019161079a565b820191906000526020600020905b81548152906001019060200180831161077d57829003601f168201915b50505060058401546006850154600786015460088701546009880154600a890154600b8a015460408051608081018252600c909c015460ff80821615158e5261010082048116151560208f015262010000820481161515928e01929092526301000000900416151560608c015298996001600160a01b03968716999598509396509194909391929116908d565b61082f613b24565b610837613b7d565b6000838152600360205260409020600c81015462010000900460ff16156108c05760405162461bcd60e51b815260206004820152603260248201527f43616e6e6f742075706c6f616420617373657420616674657220726577617264604482015271399030b932903234b9ba3934b13aba32b21760711b60648201526084015b60405180910390fd5b600c8101546301000000900460ff16156109305760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f742075706c6f6164206173736574206166746572204c6f676f206960448201526a39903932b33ab73232b21760a91b60648201526084016108b7565b60058101546001600160a01b0316331461095c5760405162461bcd60e51b81526004016108b790614671565b6004810161096b83858361471a565b50600c8101805461ffff191661010017905561098a4262093a806147f1565b600a82015560405161099f9084908490614804565b6040519081900381209033907fdaca9dfa00120092ab7ae835a59b4413fa372a1961cf864c3c057a903959281590600090a3506109db60018055565b505050565b600660205281600052604060002081815481106109fc57600080fd5b6000918252602090912060049091020180546001820180546001600160a01b0383169550600160a01b90920461ffff16935090610a3890614637565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6490614637565b8015610ab15780601f10610a8657610100808354040283529160200191610ab1565b820191906000526020600020905b815481529060010190602001808311610a9457829003601f168201915b505050505090806002018054610ac690614637565b80601f0160208091040260200160405190810160405280929190818152602001828054610af290614637565b8015610b3f5780601f10610b1457610100808354040283529160200191610b3f565b820191906000526020600020905b815481529060010190602001808311610b2257829003601f168201915b5050506003909301549192505060ff1685565b610b5a613b24565b610b62613b7d565b6000818152600360205260409020600c81015462010000900460ff1615610be05760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420726566756e642061667465722072657761726473206172652060448201526b3234b9ba3934b13aba32b21760a11b60648201526084016108b7565b6005810154600982015460068301546001600160a01b039290921633149142919091119060009015801590610c2557506006840154610c229062093a806147f1565b42115b8015610c3b5750600c840154610100900460ff16155b90506000610c4886613bca565b90508380610c535750825b80610c5b5750815b80610c635750805b610caf5760405162461bcd60e51b815260206004820152601d60248201527f4e6f20636f6e646974696f6e73206d657420666f7220726566756e642e00000060448201526064016108b7565b600c8501805463ff00000019166301000000179055604080518515158152841515602082015283151591810191909152811515606082015286907f8436c78cf1c919ad429cd807bb175fccb4ec9145b7c25f73e34211488275ad359060800160405180910390a25050505050610d2460018055565b50565b6000610d31613b24565b610d39613b7d565b604051806101a00160405280600254815260200189898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250604080516020601f8a0181900481028201810190925288815291810191908990899081908401838280828437600092019190915250505090825250604080516020601f8801819004810282018101909252868152918101919087908790819084018382808284376000920182905250938552505060408051602081810183528482528501523390840152506060820181905260808201524260a082015260c001610e338462015180614814565b610e3d90426147f1565b81526000602080830182905260408084018390528051608081018252600180825281840185905281830185905260608281018690529095015260025483526003825290912083518155908301519091820190610e99908261482b565b5060408201516002820190610eae908261482b565b5060608201516003820190610ec3908261482b565b5060808201516004820190610ed8908261482b565b5060a08201516005820180546001600160a01b03199081166001600160a01b039384161790915560c0840151600684015560e084015160078401556101008085015160088501556101208501516009850155610140850151600a850155610160850151600b850180549093169316929092179055610180909201518051600c9092018054602083015160408085015160609095015161ffff1990931695151561ff001916959095179015159095029490941763ffff00001916620100009215159290920263ff00000019169190911763010000009315159390930292909217909155600254905142919033907f9863e548efbd634df531441d89075234b4b0452e5ff9cdffe303349bd8f227d490600090a460405160019033907f6c1134fca06e5342d932bd5bf5463faf51f55d7922d40b1395ca99387ee93c4190600090a360028054906000611028836148eb565b91905055905061103760018055565b979650505050505050565b61104a613b24565b611052613b7d565b6000818152600360205260409020600c81015462010000900460ff16156110c65760405162461bcd60e51b815260206004820152602260248201527f4c6f676f2068617320616c7265616479206265656e2064697374726962757465604482015261321760f11b60648201526084016108b7565b600c8101546301000000900460ff161561113c5760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f7420646973747269627574652072657761726473206166746572206044820152702637b3b79034b9903932b33ab73232b21760791b60648201526084016108b7565b80600a015442116111c35760405162461bcd60e51b8152602060048201526044602482018190527f526577617264732063616e206f6e6c7920626520646973747269627574656420908201527f61667465722072656a656374696f6e20646561646c696e65206861732070617360648201526339b2b21760e11b608482015260a4016108b7565b60058101546001600160a01b031633146111ef5760405162461bcd60e51b81526004016108b790614671565b600b8101546001600160a01b03166112635760405162461bcd60e51b815260206004820152603160248201527f53706c6974732061646472657373206d75737420626520736574207072696f72604482015270103a37903234b9ba3934b13aba34b7b71760791b60648201526084016108b7565b60008281526005602052604081209061127b82613cc3565b90506000805b8251811015611313576000868152600460205260408120845182908690859081106112ae576112ae614904565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002090508060020160019054906101000a900460ff1661130a57600181015460028201805461ff00191661010017905592909201915b50600101611281565b50600c8401805462ff0000191662010000179055600b8401546040516000916001600160a01b03169083908381818185875af1925050503d8060008114611376576040519150601f19603f3d011682016040523d82523d6000602084013e61137b565b606091505b50509050806113cc5760405162461bcd60e51b815260206004820152601b60248201527f52657761726420646973747269627574696f6e206661696c65642e000000000060448201526064016108b7565b600b85015460405183916001600160a01b03169033907f92d8e67e11e35152e7b525077fc4cf66393423d128ce3b803453b22533c5764190600090a45050505050610d2460018055565b61141e613b24565b611426613b7d565b600082815260066020908152604080832080548251818502810185019093528083529192909190849084015b828210156116025760008481526020908190206040805160a0810182526004860290920180546001600160a01b0381168452600160a01b900461ffff1693830193909352600183018054929392918401916114ac90614637565b80601f01602080910402602001604051908101604052809291908181526020018280546114d890614637565b80156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b5050505050815260200160028201805461153e90614637565b80601f016020809104026020016040519081016040528092919081815260200182805461156a90614637565b80156115b75780601f1061158c576101008083540402835291602001916115b7565b820191906000526020600020905b81548152906001019060200180831161159a57829003601f168201915b5050509183525050600382015460209091019060ff1660028111156115de576115de61422a565b60028111156115ef576115ef61422a565b8152505081526020019060010190611452565b50505050905060005b81518110156116ea57336001600160a01b031682828151811061163057611630614904565b6020026020010151600001516001600160a01b0316036116e25782600281111561165c5761165c61422a565b600085815260066020526040902080548390811061167c5761167c614904565b60009182526020909120600360049092020101805460ff191660018360028111156116a9576116a961422a565b02179055506040518390339086907f721baf174a66b27f7cbf75db11b4b81b19cf06b42d6f610a858e6380dbdb7bcd90600090a46116ea565b60010161160b565b50506116f560018055565b5050565b611701613b24565b611709613cd7565b60008161ffff1611801561172357506127108161ffff1611155b6117955760405162461bcd60e51b815260206004820152603a60248201527f52656a656374207468726573686f6c64206d757374206265206772656174657260448201527f207468616e203020616e64206c657373207468616e203130302e00000000000060648201526084016108b7565b6007805461ffff191661ffff83169081179091556040517f984a2537837a71a2541644e4364777b97512492def296b89db3cb13efcb8fa6e90600090a2610d2460018055565b6117e3613cd7565b6117ed6000613d31565b565b6117f7613b24565b6117ff613b7d565b6000828152600360205260409020600c81015460ff166118775760405162461bcd60e51b815260206004820152602d60248201527f43616e206f6e6c7920736574206d696e696d756d20706c65646765206475726960448201526c37339031b937bbb2333ab7321760991b60648201526084016108b7565b60058101546001600160a01b031633146118a35760405162461bcd60e51b81526004016108b790614671565b600082116119025760405162461bcd60e51b815260206004820152602660248201527f4d696e696d756d20706c65646765206d757374206265206772656174657220746044820152653430b710181760d11b60648201526084016108b7565b60078101829055604051829033907f13e8e9a235317a308fe41d194e033ff632a2ebd2ceb3559fa755b5d3b3ca08bc90600090a3506116f560018055565b611948613b24565b611950613b7d565b6000600360008b8152602001908152602001600020604051806101a00160405290816000820154815260200160018201805461198b90614637565b80601f01602080910402602001604051908101604052809291908181526020018280546119b790614637565b8015611a045780601f106119d957610100808354040283529160200191611a04565b820191906000526020600020905b8154815290600101906020018083116119e757829003601f168201915b50505050508152602001600282018054611a1d90614637565b80601f0160208091040260200160405190810160405280929190818152602001828054611a4990614637565b8015611a965780601f10611a6b57610100808354040283529160200191611a96565b820191906000526020600020905b815481529060010190602001808311611a7957829003601f168201915b50505050508152602001600382018054611aaf90614637565b80601f0160208091040260200160405190810160405280929190818152602001828054611adb90614637565b8015611b285780601f10611afd57610100808354040283529160200191611b28565b820191906000526020600020905b815481529060010190602001808311611b0b57829003601f168201915b50505050508152602001600482018054611b4190614637565b80601f0160208091040260200160405190810160405280929190818152602001828054611b6d90614637565b8015611bba5780601f10611b8f57610100808354040283529160200191611bba565b820191906000526020600020905b815481529060010190602001808311611b9d57829003601f168201915b505050918352505060058201546001600160a01b03908116602080840191909152600684015460408085019190915260078501546060808601919091526008860154608080870191909152600987015460a080880191909152600a88015460c0880152600b880154861660e088015283519182018452600c9097015460ff80821615158352610100808304821615159684019690965262010000820481161515948301949094526301000000900490921615159082015292019190915290820151919250163314611c9d5760405162461bcd60e51b81526004016108b790614671565b87611cf65760405162461bcd60e51b815260206004820152602360248201527f506c65617365207375626d6974206174206c65617374206f6e6520737065616b60448201526232b91760e91b60648201526084016108b7565b60648810611d525760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742068617665206d6f7265207468616e2031303020737065616b6560448201526239399760e91b60648201526084016108b7565b8786148015611d6057508584145b8015611d6b57508382145b611dc85760405162461bcd60e51b815260206004820152602860248201527f4c656e677468206f662063616c6c6461746120617272617973206d7573742062604482015267329032b8bab0b61760c11b60648201526084016108b7565b60008a8152600660205260408120611ddf91613f7a565b60005b88811015611fd95760006040518060a001604052808c8c85818110611e0957611e09614904565b9050602002016020810190611e1e919061461c565b6001600160a01b031681526020018a8a85818110611e3e57611e3e614904565b9050602002016020810190611e539190614376565b61ffff168152602001888885818110611e6e57611e6e614904565b9050602002810190611e80919061491a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602001868685818110611ecc57611ecc614904565b9050602002810190611ede919061491a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250938552505060209092019150905260008d815260066020908152604080832080546001818101835591855293839020855160049095020180549386015161ffff16600160a01b026001600160b01b03199094166001600160a01b0390951694909417929092178355830151929350839290820190611f8c908261482b565b5060608201516002820190611fa1908261482b565b50608082015160038201805460ff19166001836002811115611fc557611fc561422a565b02179055505060019092019150611de29050565b50336001600160a01b03167fa67eebd088c1c632e4d075b03e26a7d4373785dd3411294a694a4359130be3988a8a8a8a8a8a8a8a604051612021989796959493929190614a21565b60405180910390a25061203360018055565b505050505050505050565b612046613b24565b61204e613b7d565b6000818152600360205260409020600c810154610100900460ff16156120d45760405162461bcd60e51b815260206004820152603560248201527f43616e6e6f7420746f67676c652063726f776466756e64206166746572204c6f60448201527433b79030b9b9b2ba1034b9903ab83637b0b232b21760591b60648201526084016108b7565b600c81015462010000900460ff161561214e5760405162461bcd60e51b815260206004820152603660248201527f43616e6e6f7420746f67676c652063726f776466756e642061667465722072656044820152753bb0b932399030b932903234b9ba3934b13aba32b21760511b60648201526084016108b7565b600c8101546301000000900460ff16156121c25760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420746f67676c652063726f776466756e64206166746572204c6f60448201526e33b79034b9903932b33ab73232b21760891b60648201526084016108b7565b60058101546001600160a01b0316331461223c5760405162461bcd60e51b815260206004820152603560248201527f4f6e6c7920746865204c6f676f2063726561746f7220697320616c6c6f776564604482015274103a37903a37b3b3b6329031b937bbb2333ab7321760591b60648201526084016108b7565b600c8101805460ff19811660ff91821615908117909255604051911615159033907f6c1134fca06e5342d932bd5bf5463faf51f55d7922d40b1395ca99387ee93c4190600090a350610d2460018055565b612295613b24565b61229d613b7d565b600060036000838152602001908152602001600020604051806101a0016040529081600082015481526020016001820180546122d890614637565b80601f016020809104026020016040519081016040528092919081815260200182805461230490614637565b80156123515780601f1061232657610100808354040283529160200191612351565b820191906000526020600020905b81548152906001019060200180831161233457829003601f168201915b5050505050815260200160028201805461236a90614637565b80601f016020809104026020016040519081016040528092919081815260200182805461239690614637565b80156123e35780601f106123b8576101008083540402835291602001916123e3565b820191906000526020600020905b8154815290600101906020018083116123c657829003601f168201915b505050505081526020016003820180546123fc90614637565b80601f016020809104026020016040519081016040528092919081815260200182805461242890614637565b80156124755780601f1061244a57610100808354040283529160200191612475565b820191906000526020600020905b81548152906001019060200180831161245857829003601f168201915b5050505050815260200160048201805461248e90614637565b80601f01602080910402602001604051908101604052809291908181526020018280546124ba90614637565b80156125075780601f106124dc57610100808354040283529160200191612507565b820191906000526020600020905b8154815290600101906020018083116124ea57829003601f168201915b505050918352505060058201546001600160a01b03908116602080840191909152600684015460408085019190915260078501546060808601919091526008860154608080870191909152600987015460a0870152600a87015460c0870152600b87015490941660e086015281519384018252600c9095015460ff8082161515855261010080830482161515948601949094526201000082048116151592850192909252630100000090041615159382019390935291015261014081015190915042106126165760405162461bcd60e51b815260206004820152601e60248201527f52656a656374696f6e20646561646c696e6520686173207061737365642e000060448201526064016108b7565b600082815260056020526040812061262e9033613d81565b90508061267d5760405162461bcd60e51b815260206004820152601b60248201527f6d73672e73656e646572206973206e6f742061206261636b65722e000000000060448201526064016108b7565b600083815260046020908152604080832033808552925280832060028101805460ff191660011790559051909286917f1dce50f50c15dd6fbb4969bc896f5f2c300686f62ea12fb4bd150c6c2cbfc1159190a3505050610d2460018055565b6126e4613b24565b6126ec613b7d565b600060036000838152602001908152602001600020604051806101a00160405290816000820154815260200160018201805461272790614637565b80601f016020809104026020016040519081016040528092919081815260200182805461275390614637565b80156127a05780601f10612775576101008083540402835291602001916127a0565b820191906000526020600020905b81548152906001019060200180831161278357829003601f168201915b505050505081526020016002820180546127b990614637565b80601f01602080910402602001604051908101604052809291908181526020018280546127e590614637565b80156128325780601f1061280757610100808354040283529160200191612832565b820191906000526020600020905b81548152906001019060200180831161281557829003601f168201915b5050505050815260200160038201805461284b90614637565b80601f016020809104026020016040519081016040528092919081815260200182805461287790614637565b80156128c45780601f10612899576101008083540402835291602001916128c4565b820191906000526020600020905b8154815290600101906020018083116128a757829003601f168201915b505050505081526020016004820180546128dd90614637565b80601f016020809104026020016040519081016040528092919081815260200182805461290990614637565b80156129565780601f1061292b57610100808354040283529160200191612956565b820191906000526020600020905b81548152906001019060200180831161293957829003601f168201915b505050918352505060058201546001600160a01b03908116602080840191909152600684015460408085019190915260078501546060808601919091526008860154608080870191909152600987015460a0870152600a87015460c0870152600b87015490941660e086015281519384018252600c9095015460ff8082161515855261010080830482161515948601949094526201000082048116151592850192909252630100000090041615159382019390935291015261018081015151909150612a5d5760405162461bcd60e51b815260206004820152601660248201527521b937bbb2333ab7321034b9903737ba1037b832b71760511b60448201526064016108b7565b8061018001516040015115612a845760405162461bcd60e51b81526004016108b790614adc565b8060e001513411612afd5760405162461bcd60e51b815260206004820152603860248201527f43726f776466756e642076616c7565206d75737420626520677265617465722060448201527f7468616e20746865206d696e696d756d20706c656467652e000000000000000060648201526084016108b7565b6000828152600560205260408120612b159033613d81565b90508015612b445760008381526004602090815260408083203384529091529020600101805434019055612cb2565b60008381526005602052604090206103e890612b5f90613da8565b10612bba5760405162461bcd60e51b815260206004820152602560248201527f41204c6f676f2063616e2068617665206174206d6f737420313030302062616360448201526435b2b9399760d91b60648201526084016108b7565b6040805160808101825233808252346020808401919091526000838501819052606084018190528781526005909152928320919291612bf891613db2565b905080612c3e5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379030b232103130b1b5b2b960611b60448201526064016108b7565b506000848152600460209081526040808320338452825291829020835181546001600160a01b03919091166001600160a01b0319909116178155908301516001820155908201516002909101805460609093015115156101000261ff00199215159290921661ffff19909316929092171790555b604051349033907ff789dfdfa750579d805bb98791bfcd6712b3b5765259a96d590f6982a18c80b190600090a35050610d2460018055565b612cf2613b24565b612cfa613b7d565b6000828152600360205260409020600c81015462010000900460ff1615612d7c5760405162461bcd60e51b815260206004820152603060248201527f43616e6e6f74207365742073706c69747320616674657220726577617264732060448201526f30b932903234b9ba3934b13aba32b21760811b60648201526084016108b7565b600c8101546301000000900460ff1615612dea5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207365742073706c697473206166746572204c6f676f206973206044820152683932b33ab73232b21760b91b60648201526084016108b7565b60058101546001600160a01b03163314612e165760405162461bcd60e51b81526004016108b790614671565b600b810180546001600160a01b0319166001600160a01b038416179055600c8101805460ff19169055612e4c4262093a806147f1565b600a8201556040516001600160a01b0383169033907fd2e110bd2ea762a7c1a232fc1e5754583c21dfa282b11c041e37f4565a08543190600090a3506116f560018055565b606060066000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156130765760008481526020908190206040805160a0810182526004860290920180546001600160a01b0381168452600160a01b900461ffff169383019390935260018301805492939291840191612f2090614637565b80601f0160208091040260200160405190810160405280929190818152602001828054612f4c90614637565b8015612f995780601f10612f6e57610100808354040283529160200191612f99565b820191906000526020600020905b815481529060010190602001808311612f7c57829003601f168201915b50505050508152602001600282018054612fb290614637565b80601f0160208091040260200160405190810160405280929190818152602001828054612fde90614637565b801561302b5780601f106130005761010080835404028352916020019161302b565b820191906000526020600020905b81548152906001019060200180831161300e57829003601f168201915b5050509183525050600382015460209091019060ff1660028111156130525761305261422a565b60028111156130635761306361422a565b8152505081526020019060010190612ec6565b505050509050919050565b600081815260056020526040812060609161309b82613cc3565b90506000815167ffffffffffffffff8111156130b9576130b96146b4565b60405190808252806020026020018201604052801561310b57816020015b6040805160808101825260008082526020808301829052928201819052606082015282526000199092019101816130d75790505b50905060005b82518110156131ca5760046000878152602001908152602001600020600084838151811061314157613141614904565b6020908102919091018101516001600160a01b0390811683528282019390935260409182016000208251608081018452815490941684526001810154918401919091526002015460ff8082161515928401929092526101009004161515606082015282518390839081106131b7576131b7614904565b6020908102919091010152600101613111565b50949350505050565b6131db613b24565b6131e3613b7d565b600060036000848152602001908152602001600020604051806101a00160405290816000820154815260200160018201805461321e90614637565b80601f016020809104026020016040519081016040528092919081815260200182805461324a90614637565b80156132975780601f1061326c57610100808354040283529160200191613297565b820191906000526020600020905b81548152906001019060200180831161327a57829003601f168201915b505050505081526020016002820180546132b090614637565b80601f01602080910402602001604051908101604052809291908181526020018280546132dc90614637565b80156133295780601f106132fe57610100808354040283529160200191613329565b820191906000526020600020905b81548152906001019060200180831161330c57829003601f168201915b5050505050815260200160038201805461334290614637565b80601f016020809104026020016040519081016040528092919081815260200182805461336e90614637565b80156133bb5780601f10613390576101008083540402835291602001916133bb565b820191906000526020600020905b81548152906001019060200180831161339e57829003601f168201915b505050505081526020016004820180546133d490614637565b80601f016020809104026020016040519081016040528092919081815260200182805461340090614637565b801561344d5780601f106134225761010080835404028352916020019161344d565b820191906000526020600020905b81548152906001019060200180831161343057829003601f168201915b505050918352505060058201546001600160a01b03908116602080840191909152600684015460408085019190915260078501546060808601919091526008860154608080870191909152600987015460a0870152600a87015460c0870152600b87015490941660e086015281519384018252600c9095015460ff8082161515855261010080830482161515948601949094526201000082048116151592850192909252630100000090041615159382019390935291015261018081015151909150806135205750806101800151606001515b61358a5760405162461bcd60e51b815260206004820152603560248201527f4c6f676f206d7573742062652063726f776466756e64696e67206f72206265206044820152743932b33ab73232b2103a37903bb4ba34323930bb9760591b60648201526084016108b7565b600082116135da5760405162461bcd60e51b815260206004820152601e60248201527f416d6f756e74206d7573742062652067726561746572207468616e20302e000060448201526064016108b7565b60008381526005602052604081206135f29033613d81565b9050806136415760405162461bcd60e51b815260206004820152601b60248201527f6d73672e73656e646572206973206e6f742061206261636b65722e000000000060448201526064016108b7565b600084815260046020908152604080832033845290915290206002810154610100900460ff16156136c85760405162461bcd60e51b815260206004820152602b60248201527f4261636b65722066756e6473206861766520616c7265616479206265656e206460448201526a34b9ba3934b13aba32b21760a91b60648201526084016108b7565b838160010154146137515760405162461bcd60e51b815260206004820152604760248201527f526571756573746564207769746864726177616c20616d6f756e7420646f657360448201527f206e6f74206d6174636820746865206261636b6572277320706c65646765642060648201526630b6b7bab73a1760c91b608482015260a4016108b7565b6001810154600086815260056020526040812061376e9033613dc7565b9050806137bd5760405162461bcd60e51b815260206004820152601860248201527f4661696c656420746f2072656d6f7665206261636b65722e000000000000000060448201526064016108b7565b600087815260046020908152604080832033808552925280832080546001600160a01b031916815560018101849055600201805461ffff191690555184908381818185875af1925050503d8060008114613833576040519150601f19603f3d011682016040523d82523d6000602084013e613838565b606091505b505090508061387c5760405162461bcd60e51b815260206004820152601060248201526f2bb4ba34323930bb903330b4b632b21760811b60448201526064016108b7565b604051839033907feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d90600090a35050505050506116f560018055565b6138c0613cd7565b6001600160a01b0381166139255760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108b7565b610d2481613d31565b613936613b24565b61393e613b7d565b6000828152600360205260409020600c810154610100900460ff16156139bc5760405162461bcd60e51b815260206004820152602d60248201527f43616e6e6f74207365742064617465206166746572204c6f676f20617373657460448201526c1034b9903ab83637b0b232b21760991b60648201526084016108b7565b600c81015462010000900460ff16156139e75760405162461bcd60e51b81526004016108b790614adc565b600c8101546301000000900460ff1615613a535760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74207365742064617465206166746572204c6f676f206973207265604482015266333ab73232b21760c91b60648201526084016108b7565b60058101546001600160a01b03163314613a7f5760405162461bcd60e51b81526004016108b790614671565b428211613ada5760405162461bcd60e51b8152602060048201526024808201527f50726f706f7365642064617465206d75737420626520696e20746865206675746044820152633ab9329760e11b60648201526084016108b7565b60068101829055600c8101805460ff19169055604051829033907fad4b88683e1e1c12a1a813d21f81f6efc8c74b3b64ff2d26e08cf519e843105490600090a3506116f560018055565b600260015403613b765760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108b7565b6002600155565b600054600160a01b900460ff16156117ed5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016108b7565b600081815260056020526040812081613be282613cc3565b905060008060005b82811015613c96576000848281518110613c0657613c06614904565b60209081029190910181015160008a81526004835260408082206001600160a01b0380851684529085529181902081516080810183528154909316835260018101549483019490945260029093015460ff80821615801595840195909552610100909104161515606082015290925090613c84578060200151840193505b60200151939093019250600101613bea565b50600082613ca683612710614814565b613cb09190614b2a565b60075461ffff1610979650505050505050565b60606000613cd083613ddc565b9392505050565b6000546001600160a01b031633146117ed5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116600090815260018301602052604081205415155b90505b92915050565b6000613da2825490565b6000613d9f836001600160a01b038416613e38565b6000613d9f836001600160a01b038416613e87565b606081600001805480602002602001604051908101604052809291908181526020018280548015613e2c57602002820191906000526020600020905b815481526020019060010190808311613e18575b50505050509050919050565b6000818152600183016020526040812054613e7f57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155613da2565b506000613da2565b60008181526001830160205260408120548015613f70576000613eab600183614b4c565b8554909150600090613ebf90600190614b4c565b9050818114613f24576000866000018281548110613edf57613edf614904565b9060005260206000200154905080876000018481548110613f0257613f02614904565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f3557613f35614b5f565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050613da2565b6000915050613da2565b5080546000825560040290600052602060002090810190610d2491905b80821115613fdf5780546001600160b01b03191681556000613fbc6001830182613fe3565b613fca600283016000613fe3565b5060038101805460ff19169055600401613f97565b5090565b508054613fef90614637565b6000825580601f10613fff575050565b601f016020900490600052602060002090810190610d2491905b80821115613fdf5760008155600101614019565b60006020828403121561403f57600080fd5b5035919050565b6000815180845260005b8181101561406c57602081850181015186830182015201614050565b506000602082860101526020601f19601f83011685010191505092915050565b8d8152610200602082015260006140a761020083018f614046565b82810360408401526140b9818f614046565b905082810360608401526140cd818e614046565b905082810360808401526140e1818d614046565b9150506140f960a083018b6001600160a01b03169052565b8860c08301528760e08301528661010083015285610120830152846101408301526141306101608301856001600160a01b03169052565b82511515610180830152602083015115156101a0830152604083015115156101c0830152606083015115156101e08301529e9d5050505050505050505050505050565b60008083601f84011261418557600080fd5b50813567ffffffffffffffff81111561419d57600080fd5b6020830191508360208285010111156141b557600080fd5b9250929050565b6000806000604084860312156141d157600080fd5b83359250602084013567ffffffffffffffff8111156141ef57600080fd5b6141fb86828701614173565b9497909650939450505050565b6000806040838503121561421b57600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b6003811061425e57634e487b7160e01b600052602160045260246000fd5b9052565b6001600160a01b038616815261ffff8516602082015260a06040820181905260009061429090830186614046565b82810360608401526142a28186614046565b9150506142b26080830184614240565b9695505050505050565b60008060008060008060006080888a0312156142d757600080fd5b873567ffffffffffffffff808211156142ef57600080fd5b6142fb8b838c01614173565b909950975060208a013591508082111561431457600080fd5b6143208b838c01614173565b909750955060408a013591508082111561433957600080fd5b506143468a828b01614173565b989b979a50959894979596606090950135949350505050565b803561ffff8116811461437157600080fd5b919050565b60006020828403121561438857600080fd5b613d9f8261435f565b60008083601f8401126143a357600080fd5b50813567ffffffffffffffff8111156143bb57600080fd5b6020830191508360208260051b85010111156141b557600080fd5b600080600080600080600080600060a08a8c0312156143f457600080fd5b8935985060208a013567ffffffffffffffff8082111561441357600080fd5b61441f8d838e01614391565b909a50985060408c013591508082111561443857600080fd5b6144448d838e01614391565b909850965060608c013591508082111561445d57600080fd5b6144698d838e01614391565b909650945060808c013591508082111561448257600080fd5b5061448f8c828d01614391565b915080935050809150509295985092959850929598565b80356001600160a01b038116811461437157600080fd5b600080604083850312156144d057600080fd5b823591506144e0602084016144a6565b90509250929050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b8381101561459d57888303603f19018552815180516001600160a01b031684528781015161ffff16888501528681015160a08886018190529061455782870182614046565b915050606080830151868303828801526145718382614046565b92505050608080830151925061458981870184614240565b509588019593505090860190600101614512565b509098975050505050505050565b602080825282518282018190526000919060409081850190868401855b8281101561460f57815180516001600160a01b03168552868101518786015285810151151586860152606090810151151590850152608090930192908501906001016145c8565b5091979650505050505050565b60006020828403121561462e57600080fd5b613d9f826144a6565b600181811c9082168061464b57607f821691505b60208210810361466b57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f6d73672e73656e646572206973206e6f7420746865204c6f676f20637265617460408201526237b91760e91b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b601f8211156109db576000816000526020600020601f850160051c810160208610156146f35750805b601f850160051c820191505b81811015614712578281556001016146ff565b505050505050565b67ffffffffffffffff831115614732576147326146b4565b614746836147408354614637565b836146ca565b6000601f84116001811461477a57600085156147625750838201355b600019600387901b1c1916600186901b1783556147d4565b600083815260209020601f19861690835b828110156147ab578685013582556020948501946001909201910161478b565b50868210156147c85760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115613da257613da26147db565b8183823760009101908152919050565b8082028115828204841417613da257613da26147db565b815167ffffffffffffffff811115614845576148456146b4565b614859816148538454614637565b846146ca565b602080601f83116001811461488e57600084156148765750858301515b600019600386901b1c1916600185901b178555614712565b600085815260208120601f198616915b828110156148bd5788860151825594840194600190910190840161489e565b50858210156148db5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000600182016148fd576148fd6147db565b5060010190565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261493157600080fd5b83018035915067ffffffffffffffff82111561494c57600080fd5b6020019150368190038213156141b557600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000838385526020808601955060208560051b8301018460005b87811015614a1457848303601f19018952813536889003601e190181126149ca57600080fd5b8701848101903567ffffffffffffffff8111156149e657600080fd5b8036038213156149f557600080fd5b614a00858284614961565b9a86019a94505050908301906001016149a4565b5090979650505050505050565b6080808252810188905260008960a08301825b8b811015614a62576001600160a01b03614a4d846144a6565b16825260209283019290910190600101614a34565b5083810360208581019190915289825291508990820160005b8a811015614aa25761ffff614a8f8461435f565b1682529183019190830190600101614a7b565b508481036040860152614ab681898b61498a565b925050508281036060840152614acd81858761498a565b9b9a5050505050505050505050565b6020808252602e908201527f43616e6e6f74207365742064617465206166746572207265776172647320617260408201526d32903234b9ba3934b13aba32b21760911b606082015260800190565b600082614b4757634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115613da257613da26147db565b634e487b7160e01b600052603160045260246000fdfea26469706673582212209339730d2849fb4adedab4599e3c2078ea674903da5e4b33fa0c86a38786b00464736f6c63430008180033

Deployed Bytecode

0x6080604052600436106101665760003560e01c8063851264e1116100d1578063cb4a98b81161008a578063e525310511610064578063e5253105146104df578063ef7a4a32146104ff578063f2fde38b14610515578063f3587e461461053557600080fd5b8063cb4a98b814610465578063d694e9d314610485578063de8a9524146104b257600080fd5b8063851264e11461033b5780638da5cb5b1461035b5780639f699b1314610383578063aac90c2b14610412578063b8adaa1114610432578063c8a091101461045257600080fd5b806359974e381161012357806359974e381461027c5780635c975abb1461029c5780635ed35ded146102c65780636e9b70b1146102e6578063715018a6146103065780637c178d8e1461031b57600080fd5b8063141798651461016b5780631e348f32146101ad57806326263578146101cf578063278ecde1146102005780633836eaa1146102205780633fefc23d1461024e575b600080fd5b34801561017757600080fd5b5061018b61018636600461402d565b610555565b6040516101a49d9c9b9a9998979695949392919061408c565b60405180910390f35b3480156101b957600080fd5b506101cd6101c83660046141bc565b610827565b005b3480156101db57600080fd5b506101ef6101ea366004614208565b6109e0565b6040516101a4959493929190614262565b34801561020c57600080fd5b506101cd61021b36600461402d565b610b52565b34801561022c57600080fd5b5061024061023b3660046142bc565b610d27565b6040519081526020016101a4565b34801561025a57600080fd5b506007546102699061ffff1681565b60405161ffff90911681526020016101a4565b34801561028857600080fd5b506101cd61029736600461402d565b611042565b3480156102a857600080fd5b50600054600160a01b900460ff1660405190151581526020016101a4565b3480156102d257600080fd5b506101cd6102e1366004614208565b611416565b3480156102f257600080fd5b506101cd610301366004614376565b6116f9565b34801561031257600080fd5b506101cd6117db565b34801561032757600080fd5b506101cd610336366004614208565b6117ef565b34801561034757600080fd5b506101cd6103563660046143d6565b611940565b34801561036757600080fd5b506000546040516001600160a01b0390911681526020016101a4565b34801561038f57600080fd5b506103e061039e3660046144bd565b60046020908152600092835260408084209091529082529020805460018201546002909201546001600160a01b03909116919060ff8082169161010090041684565b604080516001600160a01b039095168552602085019390935290151591830191909152151560608201526080016101a4565b34801561041e57600080fd5b506101cd61042d36600461402d565b61203e565b34801561043e57600080fd5b506101cd61044d36600461402d565b61228d565b6101cd61046036600461402d565b6126dc565b34801561047157600080fd5b506101cd6104803660046144bd565b612cea565b34801561049157600080fd5b506104a56104a036600461402d565b612e91565b6040516101a491906144e9565b3480156104be57600080fd5b506104d26104cd36600461402d565b613081565b6040516101a491906145ab565b3480156104eb57600080fd5b506101cd6104fa366004614208565b6131d3565b34801561050b57600080fd5b5061024060025481565b34801561052157600080fd5b506101cd61053036600461461c565b6138b8565b34801561054157600080fd5b506101cd610550366004614208565b61392e565b6003602052600090815260409020805460018201805491929161057790614637565b80601f01602080910402602001604051908101604052809291908181526020018280546105a390614637565b80156105f05780601f106105c5576101008083540402835291602001916105f0565b820191906000526020600020905b8154815290600101906020018083116105d357829003601f168201915b50505050509080600201805461060590614637565b80601f016020809104026020016040519081016040528092919081815260200182805461063190614637565b801561067e5780601f106106535761010080835404028352916020019161067e565b820191906000526020600020905b81548152906001019060200180831161066157829003601f168201915b50505050509080600301805461069390614637565b80601f01602080910402602001604051908101604052809291908181526020018280546106bf90614637565b801561070c5780601f106106e15761010080835404028352916020019161070c565b820191906000526020600020905b8154815290600101906020018083116106ef57829003601f168201915b50505050509080600401805461072190614637565b80601f016020809104026020016040519081016040528092919081815260200182805461074d90614637565b801561079a5780601f1061076f5761010080835404028352916020019161079a565b820191906000526020600020905b81548152906001019060200180831161077d57829003601f168201915b50505060058401546006850154600786015460088701546009880154600a890154600b8a015460408051608081018252600c909c015460ff80821615158e5261010082048116151560208f015262010000820481161515928e01929092526301000000900416151560608c015298996001600160a01b03968716999598509396509194909391929116908d565b61082f613b24565b610837613b7d565b6000838152600360205260409020600c81015462010000900460ff16156108c05760405162461bcd60e51b815260206004820152603260248201527f43616e6e6f742075706c6f616420617373657420616674657220726577617264604482015271399030b932903234b9ba3934b13aba32b21760711b60648201526084015b60405180910390fd5b600c8101546301000000900460ff16156109305760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f742075706c6f6164206173736574206166746572204c6f676f206960448201526a39903932b33ab73232b21760a91b60648201526084016108b7565b60058101546001600160a01b0316331461095c5760405162461bcd60e51b81526004016108b790614671565b6004810161096b83858361471a565b50600c8101805461ffff191661010017905561098a4262093a806147f1565b600a82015560405161099f9084908490614804565b6040519081900381209033907fdaca9dfa00120092ab7ae835a59b4413fa372a1961cf864c3c057a903959281590600090a3506109db60018055565b505050565b600660205281600052604060002081815481106109fc57600080fd5b6000918252602090912060049091020180546001820180546001600160a01b0383169550600160a01b90920461ffff16935090610a3890614637565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6490614637565b8015610ab15780601f10610a8657610100808354040283529160200191610ab1565b820191906000526020600020905b815481529060010190602001808311610a9457829003601f168201915b505050505090806002018054610ac690614637565b80601f0160208091040260200160405190810160405280929190818152602001828054610af290614637565b8015610b3f5780601f10610b1457610100808354040283529160200191610b3f565b820191906000526020600020905b815481529060010190602001808311610b2257829003601f168201915b5050506003909301549192505060ff1685565b610b5a613b24565b610b62613b7d565b6000818152600360205260409020600c81015462010000900460ff1615610be05760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420726566756e642061667465722072657761726473206172652060448201526b3234b9ba3934b13aba32b21760a11b60648201526084016108b7565b6005810154600982015460068301546001600160a01b039290921633149142919091119060009015801590610c2557506006840154610c229062093a806147f1565b42115b8015610c3b5750600c840154610100900460ff16155b90506000610c4886613bca565b90508380610c535750825b80610c5b5750815b80610c635750805b610caf5760405162461bcd60e51b815260206004820152601d60248201527f4e6f20636f6e646974696f6e73206d657420666f7220726566756e642e00000060448201526064016108b7565b600c8501805463ff00000019166301000000179055604080518515158152841515602082015283151591810191909152811515606082015286907f8436c78cf1c919ad429cd807bb175fccb4ec9145b7c25f73e34211488275ad359060800160405180910390a25050505050610d2460018055565b50565b6000610d31613b24565b610d39613b7d565b604051806101a00160405280600254815260200189898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250604080516020601f8a0181900481028201810190925288815291810191908990899081908401838280828437600092019190915250505090825250604080516020601f8801819004810282018101909252868152918101919087908790819084018382808284376000920182905250938552505060408051602081810183528482528501523390840152506060820181905260808201524260a082015260c001610e338462015180614814565b610e3d90426147f1565b81526000602080830182905260408084018390528051608081018252600180825281840185905281830185905260608281018690529095015260025483526003825290912083518155908301519091820190610e99908261482b565b5060408201516002820190610eae908261482b565b5060608201516003820190610ec3908261482b565b5060808201516004820190610ed8908261482b565b5060a08201516005820180546001600160a01b03199081166001600160a01b039384161790915560c0840151600684015560e084015160078401556101008085015160088501556101208501516009850155610140850151600a850155610160850151600b850180549093169316929092179055610180909201518051600c9092018054602083015160408085015160609095015161ffff1990931695151561ff001916959095179015159095029490941763ffff00001916620100009215159290920263ff00000019169190911763010000009315159390930292909217909155600254905142919033907f9863e548efbd634df531441d89075234b4b0452e5ff9cdffe303349bd8f227d490600090a460405160019033907f6c1134fca06e5342d932bd5bf5463faf51f55d7922d40b1395ca99387ee93c4190600090a360028054906000611028836148eb565b91905055905061103760018055565b979650505050505050565b61104a613b24565b611052613b7d565b6000818152600360205260409020600c81015462010000900460ff16156110c65760405162461bcd60e51b815260206004820152602260248201527f4c6f676f2068617320616c7265616479206265656e2064697374726962757465604482015261321760f11b60648201526084016108b7565b600c8101546301000000900460ff161561113c5760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f7420646973747269627574652072657761726473206166746572206044820152702637b3b79034b9903932b33ab73232b21760791b60648201526084016108b7565b80600a015442116111c35760405162461bcd60e51b8152602060048201526044602482018190527f526577617264732063616e206f6e6c7920626520646973747269627574656420908201527f61667465722072656a656374696f6e20646561646c696e65206861732070617360648201526339b2b21760e11b608482015260a4016108b7565b60058101546001600160a01b031633146111ef5760405162461bcd60e51b81526004016108b790614671565b600b8101546001600160a01b03166112635760405162461bcd60e51b815260206004820152603160248201527f53706c6974732061646472657373206d75737420626520736574207072696f72604482015270103a37903234b9ba3934b13aba34b7b71760791b60648201526084016108b7565b60008281526005602052604081209061127b82613cc3565b90506000805b8251811015611313576000868152600460205260408120845182908690859081106112ae576112ae614904565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002090508060020160019054906101000a900460ff1661130a57600181015460028201805461ff00191661010017905592909201915b50600101611281565b50600c8401805462ff0000191662010000179055600b8401546040516000916001600160a01b03169083908381818185875af1925050503d8060008114611376576040519150601f19603f3d011682016040523d82523d6000602084013e61137b565b606091505b50509050806113cc5760405162461bcd60e51b815260206004820152601b60248201527f52657761726420646973747269627574696f6e206661696c65642e000000000060448201526064016108b7565b600b85015460405183916001600160a01b03169033907f92d8e67e11e35152e7b525077fc4cf66393423d128ce3b803453b22533c5764190600090a45050505050610d2460018055565b61141e613b24565b611426613b7d565b600082815260066020908152604080832080548251818502810185019093528083529192909190849084015b828210156116025760008481526020908190206040805160a0810182526004860290920180546001600160a01b0381168452600160a01b900461ffff1693830193909352600183018054929392918401916114ac90614637565b80601f01602080910402602001604051908101604052809291908181526020018280546114d890614637565b80156115255780601f106114fa57610100808354040283529160200191611525565b820191906000526020600020905b81548152906001019060200180831161150857829003601f168201915b5050505050815260200160028201805461153e90614637565b80601f016020809104026020016040519081016040528092919081815260200182805461156a90614637565b80156115b75780601f1061158c576101008083540402835291602001916115b7565b820191906000526020600020905b81548152906001019060200180831161159a57829003601f168201915b5050509183525050600382015460209091019060ff1660028111156115de576115de61422a565b60028111156115ef576115ef61422a565b8152505081526020019060010190611452565b50505050905060005b81518110156116ea57336001600160a01b031682828151811061163057611630614904565b6020026020010151600001516001600160a01b0316036116e25782600281111561165c5761165c61422a565b600085815260066020526040902080548390811061167c5761167c614904565b60009182526020909120600360049092020101805460ff191660018360028111156116a9576116a961422a565b02179055506040518390339086907f721baf174a66b27f7cbf75db11b4b81b19cf06b42d6f610a858e6380dbdb7bcd90600090a46116ea565b60010161160b565b50506116f560018055565b5050565b611701613b24565b611709613cd7565b60008161ffff1611801561172357506127108161ffff1611155b6117955760405162461bcd60e51b815260206004820152603a60248201527f52656a656374207468726573686f6c64206d757374206265206772656174657260448201527f207468616e203020616e64206c657373207468616e203130302e00000000000060648201526084016108b7565b6007805461ffff191661ffff83169081179091556040517f984a2537837a71a2541644e4364777b97512492def296b89db3cb13efcb8fa6e90600090a2610d2460018055565b6117e3613cd7565b6117ed6000613d31565b565b6117f7613b24565b6117ff613b7d565b6000828152600360205260409020600c81015460ff166118775760405162461bcd60e51b815260206004820152602d60248201527f43616e206f6e6c7920736574206d696e696d756d20706c65646765206475726960448201526c37339031b937bbb2333ab7321760991b60648201526084016108b7565b60058101546001600160a01b031633146118a35760405162461bcd60e51b81526004016108b790614671565b600082116119025760405162461bcd60e51b815260206004820152602660248201527f4d696e696d756d20706c65646765206d757374206265206772656174657220746044820152653430b710181760d11b60648201526084016108b7565b60078101829055604051829033907f13e8e9a235317a308fe41d194e033ff632a2ebd2ceb3559fa755b5d3b3ca08bc90600090a3506116f560018055565b611948613b24565b611950613b7d565b6000600360008b8152602001908152602001600020604051806101a00160405290816000820154815260200160018201805461198b90614637565b80601f01602080910402602001604051908101604052809291908181526020018280546119b790614637565b8015611a045780601f106119d957610100808354040283529160200191611a04565b820191906000526020600020905b8154815290600101906020018083116119e757829003601f168201915b50505050508152602001600282018054611a1d90614637565b80601f0160208091040260200160405190810160405280929190818152602001828054611a4990614637565b8015611a965780601f10611a6b57610100808354040283529160200191611a96565b820191906000526020600020905b815481529060010190602001808311611a7957829003601f168201915b50505050508152602001600382018054611aaf90614637565b80601f0160208091040260200160405190810160405280929190818152602001828054611adb90614637565b8015611b285780601f10611afd57610100808354040283529160200191611b28565b820191906000526020600020905b815481529060010190602001808311611b0b57829003601f168201915b50505050508152602001600482018054611b4190614637565b80601f0160208091040260200160405190810160405280929190818152602001828054611b6d90614637565b8015611bba5780601f10611b8f57610100808354040283529160200191611bba565b820191906000526020600020905b815481529060010190602001808311611b9d57829003601f168201915b505050918352505060058201546001600160a01b03908116602080840191909152600684015460408085019190915260078501546060808601919091526008860154608080870191909152600987015460a080880191909152600a88015460c0880152600b880154861660e088015283519182018452600c9097015460ff80821615158352610100808304821615159684019690965262010000820481161515948301949094526301000000900490921615159082015292019190915290820151919250163314611c9d5760405162461bcd60e51b81526004016108b790614671565b87611cf65760405162461bcd60e51b815260206004820152602360248201527f506c65617365207375626d6974206174206c65617374206f6e6520737065616b60448201526232b91760e91b60648201526084016108b7565b60648810611d525760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f742068617665206d6f7265207468616e2031303020737065616b6560448201526239399760e91b60648201526084016108b7565b8786148015611d6057508584145b8015611d6b57508382145b611dc85760405162461bcd60e51b815260206004820152602860248201527f4c656e677468206f662063616c6c6461746120617272617973206d7573742062604482015267329032b8bab0b61760c11b60648201526084016108b7565b60008a8152600660205260408120611ddf91613f7a565b60005b88811015611fd95760006040518060a001604052808c8c85818110611e0957611e09614904565b9050602002016020810190611e1e919061461c565b6001600160a01b031681526020018a8a85818110611e3e57611e3e614904565b9050602002016020810190611e539190614376565b61ffff168152602001888885818110611e6e57611e6e614904565b9050602002810190611e80919061491a565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250602001868685818110611ecc57611ecc614904565b9050602002810190611ede919061491a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250938552505060209092019150905260008d815260066020908152604080832080546001818101835591855293839020855160049095020180549386015161ffff16600160a01b026001600160b01b03199094166001600160a01b0390951694909417929092178355830151929350839290820190611f8c908261482b565b5060608201516002820190611fa1908261482b565b50608082015160038201805460ff19166001836002811115611fc557611fc561422a565b02179055505060019092019150611de29050565b50336001600160a01b03167fa67eebd088c1c632e4d075b03e26a7d4373785dd3411294a694a4359130be3988a8a8a8a8a8a8a8a604051612021989796959493929190614a21565b60405180910390a25061203360018055565b505050505050505050565b612046613b24565b61204e613b7d565b6000818152600360205260409020600c810154610100900460ff16156120d45760405162461bcd60e51b815260206004820152603560248201527f43616e6e6f7420746f67676c652063726f776466756e64206166746572204c6f60448201527433b79030b9b9b2ba1034b9903ab83637b0b232b21760591b60648201526084016108b7565b600c81015462010000900460ff161561214e5760405162461bcd60e51b815260206004820152603660248201527f43616e6e6f7420746f67676c652063726f776466756e642061667465722072656044820152753bb0b932399030b932903234b9ba3934b13aba32b21760511b60648201526084016108b7565b600c8101546301000000900460ff16156121c25760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420746f67676c652063726f776466756e64206166746572204c6f60448201526e33b79034b9903932b33ab73232b21760891b60648201526084016108b7565b60058101546001600160a01b0316331461223c5760405162461bcd60e51b815260206004820152603560248201527f4f6e6c7920746865204c6f676f2063726561746f7220697320616c6c6f776564604482015274103a37903a37b3b3b6329031b937bbb2333ab7321760591b60648201526084016108b7565b600c8101805460ff19811660ff91821615908117909255604051911615159033907f6c1134fca06e5342d932bd5bf5463faf51f55d7922d40b1395ca99387ee93c4190600090a350610d2460018055565b612295613b24565b61229d613b7d565b600060036000838152602001908152602001600020604051806101a0016040529081600082015481526020016001820180546122d890614637565b80601f016020809104026020016040519081016040528092919081815260200182805461230490614637565b80156123515780601f1061232657610100808354040283529160200191612351565b820191906000526020600020905b81548152906001019060200180831161233457829003601f168201915b5050505050815260200160028201805461236a90614637565b80601f016020809104026020016040519081016040528092919081815260200182805461239690614637565b80156123e35780601f106123b8576101008083540402835291602001916123e3565b820191906000526020600020905b8154815290600101906020018083116123c657829003601f168201915b505050505081526020016003820180546123fc90614637565b80601f016020809104026020016040519081016040528092919081815260200182805461242890614637565b80156124755780601f1061244a57610100808354040283529160200191612475565b820191906000526020600020905b81548152906001019060200180831161245857829003601f168201915b5050505050815260200160048201805461248e90614637565b80601f01602080910402602001604051908101604052809291908181526020018280546124ba90614637565b80156125075780601f106124dc57610100808354040283529160200191612507565b820191906000526020600020905b8154815290600101906020018083116124ea57829003601f168201915b505050918352505060058201546001600160a01b03908116602080840191909152600684015460408085019190915260078501546060808601919091526008860154608080870191909152600987015460a0870152600a87015460c0870152600b87015490941660e086015281519384018252600c9095015460ff8082161515855261010080830482161515948601949094526201000082048116151592850192909252630100000090041615159382019390935291015261014081015190915042106126165760405162461bcd60e51b815260206004820152601e60248201527f52656a656374696f6e20646561646c696e6520686173207061737365642e000060448201526064016108b7565b600082815260056020526040812061262e9033613d81565b90508061267d5760405162461bcd60e51b815260206004820152601b60248201527f6d73672e73656e646572206973206e6f742061206261636b65722e000000000060448201526064016108b7565b600083815260046020908152604080832033808552925280832060028101805460ff191660011790559051909286917f1dce50f50c15dd6fbb4969bc896f5f2c300686f62ea12fb4bd150c6c2cbfc1159190a3505050610d2460018055565b6126e4613b24565b6126ec613b7d565b600060036000838152602001908152602001600020604051806101a00160405290816000820154815260200160018201805461272790614637565b80601f016020809104026020016040519081016040528092919081815260200182805461275390614637565b80156127a05780601f10612775576101008083540402835291602001916127a0565b820191906000526020600020905b81548152906001019060200180831161278357829003601f168201915b505050505081526020016002820180546127b990614637565b80601f01602080910402602001604051908101604052809291908181526020018280546127e590614637565b80156128325780601f1061280757610100808354040283529160200191612832565b820191906000526020600020905b81548152906001019060200180831161281557829003601f168201915b5050505050815260200160038201805461284b90614637565b80601f016020809104026020016040519081016040528092919081815260200182805461287790614637565b80156128c45780601f10612899576101008083540402835291602001916128c4565b820191906000526020600020905b8154815290600101906020018083116128a757829003601f168201915b505050505081526020016004820180546128dd90614637565b80601f016020809104026020016040519081016040528092919081815260200182805461290990614637565b80156129565780601f1061292b57610100808354040283529160200191612956565b820191906000526020600020905b81548152906001019060200180831161293957829003601f168201915b505050918352505060058201546001600160a01b03908116602080840191909152600684015460408085019190915260078501546060808601919091526008860154608080870191909152600987015460a0870152600a87015460c0870152600b87015490941660e086015281519384018252600c9095015460ff8082161515855261010080830482161515948601949094526201000082048116151592850192909252630100000090041615159382019390935291015261018081015151909150612a5d5760405162461bcd60e51b815260206004820152601660248201527521b937bbb2333ab7321034b9903737ba1037b832b71760511b60448201526064016108b7565b8061018001516040015115612a845760405162461bcd60e51b81526004016108b790614adc565b8060e001513411612afd5760405162461bcd60e51b815260206004820152603860248201527f43726f776466756e642076616c7565206d75737420626520677265617465722060448201527f7468616e20746865206d696e696d756d20706c656467652e000000000000000060648201526084016108b7565b6000828152600560205260408120612b159033613d81565b90508015612b445760008381526004602090815260408083203384529091529020600101805434019055612cb2565b60008381526005602052604090206103e890612b5f90613da8565b10612bba5760405162461bcd60e51b815260206004820152602560248201527f41204c6f676f2063616e2068617665206174206d6f737420313030302062616360448201526435b2b9399760d91b60648201526084016108b7565b6040805160808101825233808252346020808401919091526000838501819052606084018190528781526005909152928320919291612bf891613db2565b905080612c3e5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379030b232103130b1b5b2b960611b60448201526064016108b7565b506000848152600460209081526040808320338452825291829020835181546001600160a01b03919091166001600160a01b0319909116178155908301516001820155908201516002909101805460609093015115156101000261ff00199215159290921661ffff19909316929092171790555b604051349033907ff789dfdfa750579d805bb98791bfcd6712b3b5765259a96d590f6982a18c80b190600090a35050610d2460018055565b612cf2613b24565b612cfa613b7d565b6000828152600360205260409020600c81015462010000900460ff1615612d7c5760405162461bcd60e51b815260206004820152603060248201527f43616e6e6f74207365742073706c69747320616674657220726577617264732060448201526f30b932903234b9ba3934b13aba32b21760811b60648201526084016108b7565b600c8101546301000000900460ff1615612dea5760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207365742073706c697473206166746572204c6f676f206973206044820152683932b33ab73232b21760b91b60648201526084016108b7565b60058101546001600160a01b03163314612e165760405162461bcd60e51b81526004016108b790614671565b600b810180546001600160a01b0319166001600160a01b038416179055600c8101805460ff19169055612e4c4262093a806147f1565b600a8201556040516001600160a01b0383169033907fd2e110bd2ea762a7c1a232fc1e5754583c21dfa282b11c041e37f4565a08543190600090a3506116f560018055565b606060066000838152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156130765760008481526020908190206040805160a0810182526004860290920180546001600160a01b0381168452600160a01b900461ffff169383019390935260018301805492939291840191612f2090614637565b80601f0160208091040260200160405190810160405280929190818152602001828054612f4c90614637565b8015612f995780601f10612f6e57610100808354040283529160200191612f99565b820191906000526020600020905b815481529060010190602001808311612f7c57829003601f168201915b50505050508152602001600282018054612fb290614637565b80601f0160208091040260200160405190810160405280929190818152602001828054612fde90614637565b801561302b5780601f106130005761010080835404028352916020019161302b565b820191906000526020600020905b81548152906001019060200180831161300e57829003601f168201915b5050509183525050600382015460209091019060ff1660028111156130525761305261422a565b60028111156130635761306361422a565b8152505081526020019060010190612ec6565b505050509050919050565b600081815260056020526040812060609161309b82613cc3565b90506000815167ffffffffffffffff8111156130b9576130b96146b4565b60405190808252806020026020018201604052801561310b57816020015b6040805160808101825260008082526020808301829052928201819052606082015282526000199092019101816130d75790505b50905060005b82518110156131ca5760046000878152602001908152602001600020600084838151811061314157613141614904565b6020908102919091018101516001600160a01b0390811683528282019390935260409182016000208251608081018452815490941684526001810154918401919091526002015460ff8082161515928401929092526101009004161515606082015282518390839081106131b7576131b7614904565b6020908102919091010152600101613111565b50949350505050565b6131db613b24565b6131e3613b7d565b600060036000848152602001908152602001600020604051806101a00160405290816000820154815260200160018201805461321e90614637565b80601f016020809104026020016040519081016040528092919081815260200182805461324a90614637565b80156132975780601f1061326c57610100808354040283529160200191613297565b820191906000526020600020905b81548152906001019060200180831161327a57829003601f168201915b505050505081526020016002820180546132b090614637565b80601f01602080910402602001604051908101604052809291908181526020018280546132dc90614637565b80156133295780601f106132fe57610100808354040283529160200191613329565b820191906000526020600020905b81548152906001019060200180831161330c57829003601f168201915b5050505050815260200160038201805461334290614637565b80601f016020809104026020016040519081016040528092919081815260200182805461336e90614637565b80156133bb5780601f10613390576101008083540402835291602001916133bb565b820191906000526020600020905b81548152906001019060200180831161339e57829003601f168201915b505050505081526020016004820180546133d490614637565b80601f016020809104026020016040519081016040528092919081815260200182805461340090614637565b801561344d5780601f106134225761010080835404028352916020019161344d565b820191906000526020600020905b81548152906001019060200180831161343057829003601f168201915b505050918352505060058201546001600160a01b03908116602080840191909152600684015460408085019190915260078501546060808601919091526008860154608080870191909152600987015460a0870152600a87015460c0870152600b87015490941660e086015281519384018252600c9095015460ff8082161515855261010080830482161515948601949094526201000082048116151592850192909252630100000090041615159382019390935291015261018081015151909150806135205750806101800151606001515b61358a5760405162461bcd60e51b815260206004820152603560248201527f4c6f676f206d7573742062652063726f776466756e64696e67206f72206265206044820152743932b33ab73232b2103a37903bb4ba34323930bb9760591b60648201526084016108b7565b600082116135da5760405162461bcd60e51b815260206004820152601e60248201527f416d6f756e74206d7573742062652067726561746572207468616e20302e000060448201526064016108b7565b60008381526005602052604081206135f29033613d81565b9050806136415760405162461bcd60e51b815260206004820152601b60248201527f6d73672e73656e646572206973206e6f742061206261636b65722e000000000060448201526064016108b7565b600084815260046020908152604080832033845290915290206002810154610100900460ff16156136c85760405162461bcd60e51b815260206004820152602b60248201527f4261636b65722066756e6473206861766520616c7265616479206265656e206460448201526a34b9ba3934b13aba32b21760a91b60648201526084016108b7565b838160010154146137515760405162461bcd60e51b815260206004820152604760248201527f526571756573746564207769746864726177616c20616d6f756e7420646f657360448201527f206e6f74206d6174636820746865206261636b6572277320706c65646765642060648201526630b6b7bab73a1760c91b608482015260a4016108b7565b6001810154600086815260056020526040812061376e9033613dc7565b9050806137bd5760405162461bcd60e51b815260206004820152601860248201527f4661696c656420746f2072656d6f7665206261636b65722e000000000000000060448201526064016108b7565b600087815260046020908152604080832033808552925280832080546001600160a01b031916815560018101849055600201805461ffff191690555184908381818185875af1925050503d8060008114613833576040519150601f19603f3d011682016040523d82523d6000602084013e613838565b606091505b505090508061387c5760405162461bcd60e51b815260206004820152601060248201526f2bb4ba34323930bb903330b4b632b21760811b60448201526064016108b7565b604051839033907feaff4b37086828766ad3268786972c0cd24259d4c87a80f9d3963a3c3d999b0d90600090a35050505050506116f560018055565b6138c0613cd7565b6001600160a01b0381166139255760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108b7565b610d2481613d31565b613936613b24565b61393e613b7d565b6000828152600360205260409020600c810154610100900460ff16156139bc5760405162461bcd60e51b815260206004820152602d60248201527f43616e6e6f74207365742064617465206166746572204c6f676f20617373657460448201526c1034b9903ab83637b0b232b21760991b60648201526084016108b7565b600c81015462010000900460ff16156139e75760405162461bcd60e51b81526004016108b790614adc565b600c8101546301000000900460ff1615613a535760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f74207365742064617465206166746572204c6f676f206973207265604482015266333ab73232b21760c91b60648201526084016108b7565b60058101546001600160a01b03163314613a7f5760405162461bcd60e51b81526004016108b790614671565b428211613ada5760405162461bcd60e51b8152602060048201526024808201527f50726f706f7365642064617465206d75737420626520696e20746865206675746044820152633ab9329760e11b60648201526084016108b7565b60068101829055600c8101805460ff19169055604051829033907fad4b88683e1e1c12a1a813d21f81f6efc8c74b3b64ff2d26e08cf519e843105490600090a3506116f560018055565b600260015403613b765760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108b7565b6002600155565b600054600160a01b900460ff16156117ed5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016108b7565b600081815260056020526040812081613be282613cc3565b905060008060005b82811015613c96576000848281518110613c0657613c06614904565b60209081029190910181015160008a81526004835260408082206001600160a01b0380851684529085529181902081516080810183528154909316835260018101549483019490945260029093015460ff80821615801595840195909552610100909104161515606082015290925090613c84578060200151840193505b60200151939093019250600101613bea565b50600082613ca683612710614814565b613cb09190614b2a565b60075461ffff1610979650505050505050565b60606000613cd083613ddc565b9392505050565b6000546001600160a01b031633146117ed5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b7565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116600090815260018301602052604081205415155b90505b92915050565b6000613da2825490565b6000613d9f836001600160a01b038416613e38565b6000613d9f836001600160a01b038416613e87565b606081600001805480602002602001604051908101604052809291908181526020018280548015613e2c57602002820191906000526020600020905b815481526020019060010190808311613e18575b50505050509050919050565b6000818152600183016020526040812054613e7f57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155613da2565b506000613da2565b60008181526001830160205260408120548015613f70576000613eab600183614b4c565b8554909150600090613ebf90600190614b4c565b9050818114613f24576000866000018281548110613edf57613edf614904565b9060005260206000200154905080876000018481548110613f0257613f02614904565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613f3557613f35614b5f565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050613da2565b6000915050613da2565b5080546000825560040290600052602060002090810190610d2491905b80821115613fdf5780546001600160b01b03191681556000613fbc6001830182613fe3565b613fca600283016000613fe3565b5060038101805460ff19169055600401613f97565b5090565b508054613fef90614637565b6000825580601f10613fff575050565b601f016020900490600052602060002090810190610d2491905b80821115613fdf5760008155600101614019565b60006020828403121561403f57600080fd5b5035919050565b6000815180845260005b8181101561406c57602081850181015186830182015201614050565b506000602082860101526020601f19601f83011685010191505092915050565b8d8152610200602082015260006140a761020083018f614046565b82810360408401526140b9818f614046565b905082810360608401526140cd818e614046565b905082810360808401526140e1818d614046565b9150506140f960a083018b6001600160a01b03169052565b8860c08301528760e08301528661010083015285610120830152846101408301526141306101608301856001600160a01b03169052565b82511515610180830152602083015115156101a0830152604083015115156101c0830152606083015115156101e08301529e9d5050505050505050505050505050565b60008083601f84011261418557600080fd5b50813567ffffffffffffffff81111561419d57600080fd5b6020830191508360208285010111156141b557600080fd5b9250929050565b6000806000604084860312156141d157600080fd5b83359250602084013567ffffffffffffffff8111156141ef57600080fd5b6141fb86828701614173565b9497909650939450505050565b6000806040838503121561421b57600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b6003811061425e57634e487b7160e01b600052602160045260246000fd5b9052565b6001600160a01b038616815261ffff8516602082015260a06040820181905260009061429090830186614046565b82810360608401526142a28186614046565b9150506142b26080830184614240565b9695505050505050565b60008060008060008060006080888a0312156142d757600080fd5b873567ffffffffffffffff808211156142ef57600080fd5b6142fb8b838c01614173565b909950975060208a013591508082111561431457600080fd5b6143208b838c01614173565b909750955060408a013591508082111561433957600080fd5b506143468a828b01614173565b989b979a50959894979596606090950135949350505050565b803561ffff8116811461437157600080fd5b919050565b60006020828403121561438857600080fd5b613d9f8261435f565b60008083601f8401126143a357600080fd5b50813567ffffffffffffffff8111156143bb57600080fd5b6020830191508360208260051b85010111156141b557600080fd5b600080600080600080600080600060a08a8c0312156143f457600080fd5b8935985060208a013567ffffffffffffffff8082111561441357600080fd5b61441f8d838e01614391565b909a50985060408c013591508082111561443857600080fd5b6144448d838e01614391565b909850965060608c013591508082111561445d57600080fd5b6144698d838e01614391565b909650945060808c013591508082111561448257600080fd5b5061448f8c828d01614391565b915080935050809150509295985092959850929598565b80356001600160a01b038116811461437157600080fd5b600080604083850312156144d057600080fd5b823591506144e0602084016144a6565b90509250929050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b8381101561459d57888303603f19018552815180516001600160a01b031684528781015161ffff16888501528681015160a08886018190529061455782870182614046565b915050606080830151868303828801526145718382614046565b92505050608080830151925061458981870184614240565b509588019593505090860190600101614512565b509098975050505050505050565b602080825282518282018190526000919060409081850190868401855b8281101561460f57815180516001600160a01b03168552868101518786015285810151151586860152606090810151151590850152608090930192908501906001016145c8565b5091979650505050505050565b60006020828403121561462e57600080fd5b613d9f826144a6565b600181811c9082168061464b57607f821691505b60208210810361466b57634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526023908201527f6d73672e73656e646572206973206e6f7420746865204c6f676f20637265617460408201526237b91760e91b606082015260800190565b634e487b7160e01b600052604160045260246000fd5b601f8211156109db576000816000526020600020601f850160051c810160208610156146f35750805b601f850160051c820191505b81811015614712578281556001016146ff565b505050505050565b67ffffffffffffffff831115614732576147326146b4565b614746836147408354614637565b836146ca565b6000601f84116001811461477a57600085156147625750838201355b600019600387901b1c1916600186901b1783556147d4565b600083815260209020601f19861690835b828110156147ab578685013582556020948501946001909201910161478b565b50868210156147c85760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115613da257613da26147db565b8183823760009101908152919050565b8082028115828204841417613da257613da26147db565b815167ffffffffffffffff811115614845576148456146b4565b614859816148538454614637565b846146ca565b602080601f83116001811461488e57600084156148765750858301515b600019600386901b1c1916600185901b178555614712565b600085815260208120601f198616915b828110156148bd5788860151825594840194600190910190840161489e565b50858210156148db5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000600182016148fd576148fd6147db565b5060010190565b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261493157600080fd5b83018035915067ffffffffffffffff82111561494c57600080fd5b6020019150368190038213156141b557600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000838385526020808601955060208560051b8301018460005b87811015614a1457848303601f19018952813536889003601e190181126149ca57600080fd5b8701848101903567ffffffffffffffff8111156149e657600080fd5b8036038213156149f557600080fd5b614a00858284614961565b9a86019a94505050908301906001016149a4565b5090979650505050505050565b6080808252810188905260008960a08301825b8b811015614a62576001600160a01b03614a4d846144a6565b16825260209283019290910190600101614a34565b5083810360208581019190915289825291508990820160005b8a811015614aa25761ffff614a8f8461435f565b1682529183019190830190600101614a7b565b508481036040860152614ab681898b61498a565b925050508281036060840152614acd81858761498a565b9b9a5050505050505050505050565b6020808252602e908201527f43616e6e6f74207365742064617465206166746572207265776172647320617260408201526d32903234b9ba3934b13aba32b21760911b606082015260800190565b600082614b4757634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115613da257613da26147db565b634e487b7160e01b600052603160045260246000fdfea26469706673582212209339730d2849fb4adedab4599e3c2078ea674903da5e4b33fa0c86a38786b00464736f6c63430008180033

Deployed ByteCode Sourcemap

4035:14749:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4240:37;;;;;;;;;;-1:-1:-1;4240:37:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;15078:695;;;;;;;;;;-1:-1:-1;15078:695:1;;;;;:::i;:::-;;:::i;:::-;;4531:49;;;;;;;;;;-1:-1:-1;4531:49:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;10746:862::-;;;;;;;;;;-1:-1:-1;10746:862:1;;;;;:::i;:::-;;:::i;5206:1002::-;;;;;;;;;;-1:-1:-1;5206:1002:1;;;;;:::i;:::-;;:::i;:::-;;;5902:25:7;;;5890:2;5875:18;5206:1002:1;5756:177:7;4628:36:1;;;;;;;;;;-1:-1:-1;4628:36:1;;;;;;;;;;;6112:6:7;6100:19;;;6082:38;;6070:2;6055:18;4628:36:1;5938:188:7;16573:1367:1;;;;;;;;;;-1:-1:-1;16573:1367:1;;;;;:::i;:::-;;:::i;1608:84:5:-;;;;;;;;;;-1:-1:-1;1655:4:5;1678:7;-1:-1:-1;;;1678:7:5;;;;1608:84;;6296:14:7;;6289:22;6271:41;;6259:2;6244:18;1608:84:5;6131:187:7;13537:483:1;;;;;;;;;;-1:-1:-1;13537:483:1;;;;;:::i;:::-;;:::i;4793:354::-;;;;;;;;;;-1:-1:-1;4793:354:1;;;;;:::i;:::-;;:::i;1817:101:4:-;;;;;;;;;;;;;:::i;8347:503:1:-;;;;;;;;;;-1:-1:-1;8347:503:1;;;;;:::i;:::-;;:::i;12224:1254::-;;;;;;;;;;-1:-1:-1;12224:1254:1;;;;;:::i;:::-;;:::i;1194:85:4:-;;;;;;;;;;-1:-1:-1;1240:7:4;1266:6;1194:85;;-1:-1:-1;;;;;1266:6:4;;;8695:51:7;;8683:2;8668:18;1194:85:4;8549:203:7;4338:65:1;;;;;;;;;;-1:-1:-1;4338:65:1;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4338:65:1;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9431:32:7;;;9413:51;;9495:2;9480:18;;9473:34;;;;9550:14;;9543:22;9523:18;;;9516:50;;;;9609:14;9602:22;9597:2;9582:18;;9575:50;9400:3;9385:19;4338:65:1;9194:437:7;6332:639:1;;;;;;;;;;-1:-1:-1;6332:639:1;;;;;:::i;:::-;;:::i;10173:512::-;;;;;;;;;;-1:-1:-1;10173:512:1;;;;;:::i;:::-;;:::i;7016:1258::-;;;;;;:::i;:::-;;:::i;15843:639::-;;;;;;;;;;-1:-1:-1;15843:639:1;;;;;:::i;:::-;;:::i;14094:145::-;;;;;;;;;;-1:-1:-1;14094:145:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11681:484::-;;;;;;;;;;-1:-1:-1;11681:484:1;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;8918:1172::-;;;;;;;;;;-1:-1:-1;8918:1172:1;;;;;:::i;:::-;;:::i;4175:25::-;;;;;;;;;;;;;;;;2067:198:4;;;;;;;;;;-1:-1:-1;2067:198:4;;;;;:::i;:::-;;:::i;14302:715:1:-;;;;;;;;;;-1:-1:-1;14302:715:1;;;;;:::i;:::-;;:::i;4240:37::-;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4240:37:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4240:37:1;;;;;;-1:-1:-1;4240:37:1;;-1:-1:-1;4240:37:1;;;;;;;;;;:::o;15078:695::-;2261:21:6;:19;:21::i;:::-;1232:19:5::1;:17;:19::i;:::-;15218:14:1::2;15235::::0;;;:5:::2;:14;::::0;;;;15268:8:::2;::::0;::::2;:22:::0;;;::::2;;;15267:23;15259:86;;;::::0;-1:-1:-1;;;15259:86:1;;12945:2:7;15259:86:1::2;::::0;::::2;12927:21:7::0;12984:2;12964:18;;;12957:30;13023:34;13003:18;;;12996:62;-1:-1:-1;;;13074:18:7;;;13067:48;13132:19;;15259:86:1::2;;;;;;;;;15364:8;::::0;::::2;:19:::0;;;::::2;;;15363:20;15355:76;;;::::0;-1:-1:-1;;;15355:76:1;;13364:2:7;15355:76:1::2;::::0;::::2;13346:21:7::0;13403:2;13383:18;;;13376:30;13442:34;13422:18;;;13415:62;-1:-1:-1;;;13493:18:7;;;13486:41;13544:19;;15355:76:1::2;13162:407:7::0;15355:76:1::2;15449:9;::::0;::::2;::::0;-1:-1:-1;;;;;15449:9:1::2;15462:10;15449:23;15441:71;;;;-1:-1:-1::0;;;15441:71:1::2;;;;;;;:::i;:::-;15522:15;::::0;::::2;:32;15540:14:::0;;15522:15;:32:::2;:::i;:::-;-1:-1:-1::0;15564:8:1::2;::::0;::::2;:31:::0;;-1:-1:-1;;15624:26:1;15564:31:::2;15624:26;::::0;;15682:28:::2;:15;15700:10;15682:28;:::i;:::-;15660:19;::::0;::::2;:50:::0;15725:41:::2;::::0;::::2;::::0;15751:14;;;;15725:41:::2;:::i;:::-;;::::0;;;;::::2;::::0;;;15739:10:::2;::::0;15725:41:::2;::::0;;;::::2;15208:565;2303:20:6::0;1716:1;2809:22;;2629:209;2303:20;15078:695:1;;;:::o;4531:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4531:49:1;;;-1:-1:-1;;;;4531:49:1;;;;;;-1:-1:-1;4531:49:1;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4531:49:1;;;;;;;-1:-1:-1;;4531:49:1;;;:::o;10746:862::-;2261:21:6;:19;:21::i;:::-;1232:19:5::1;:17;:19::i;:::-;10839:14:1::2;10856::::0;;;:5:::2;:14;::::0;;;;10889:8:::2;::::0;::::2;:22:::0;;;::::2;;;10888:23;10880:80;;;::::0;-1:-1:-1;;;10880:80:1;;16908:2:7;10880:80:1::2;::::0;::::2;16890:21:7::0;16947:2;16927:18;;;16920:30;16986:34;16966:18;;;16959:62;-1:-1:-1;;;17037:18:7;;;17030:42;17089:19;;10880:80:1::2;16706:408:7::0;10880:80:1::2;10980:9;::::0;::::2;::::0;11086:16:::2;::::0;::::2;::::0;11180:13:::2;::::0;::::2;::::0;-1:-1:-1;;;;;10980:9:1;;;::::2;10993:10;10980:23;::::0;11068:15:::2;:34:::0;;;::::2;::::0;10970:7:::2;::::0;11180:18;;::::2;::::0;:68:::2;;-1:-1:-1::0;11221:13:1::2;::::0;::::2;::::0;:26:::2;::::0;11237:10:::2;11221:26;:::i;:::-;11203:15;:44;11180:68;:92;;;;-1:-1:-1::0;11253:8:1::2;::::0;::::2;:19:::0;::::2;::::0;::::2;;;11252:20;11180:92;11170:102;;11356:7;11366:30;11388:7;11366:21;:30::i;:::-;11356:40;;11456:2;:8;;;;11462:2;11456:8;:14;;;;11468:2;11456:14;:20;;;;11474:2;11456:20;11448:62;;;::::0;-1:-1:-1;;;11448:62:1;;17321:2:7;11448:62:1::2;::::0;::::2;17303:21:7::0;17360:2;17340:18;;;17333:30;17399:31;17379:18;;;17372:59;17448:18;;11448:62:1::2;17119:353:7::0;11448:62:1::2;11520:8;::::0;::::2;:26:::0;;-1:-1:-1;;11520:26:1::2;::::0;::::2;::::0;;11561:40:::2;::::0;;17709:14:7;;17702:22;17684:41;;17768:14;;17761:22;17756:2;17741:18;;17734:50;17827:14;;17820:22;17800:18;;;17793:50;;;;17886:14;;17879:22;17874:2;17859:18;;17852:50;11577:7:1;;11561:40:::2;::::0;17671:3:7;17656:19;11561:40:1::2;;;;;;;10829:779;;;;;2303:20:6::0;1716:1;2809:22;;2629:209;2303:20;10746:862:1;:::o;5206:1002::-;5421:7;2261:21:6;:19;:21::i;:::-;1232:19:5::1;:17;:19::i;:::-;5456:569:1::2;;;;;;;;5479:6;;5456:569;;;;5506:6;;5456:569;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;;;5456:569:1;;;-1:-1:-1;5456:569:1::2;::::0;;::::2;;::::0;::::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;;;;;::::2;::::0;;5539:12;;;;;;5456:569;::::2;5539:12:::0;;;;5456:569;::::2;;::::0;::::2;::::0;;;;-1:-1:-1;;;5456:569:1;;;-1:-1:-1;5456:569:1::2;::::0;;::::2;;::::0;::::2;::::0;;::::2;::::0;::::2;::::0;;;;;;;;;;;;::::2;::::0;;5577:11;;;;;;5456:569;::::2;5577:11:::0;;;;5456:569;::::2;;::::0;::::2;::::0;;;-1:-1:-1;5456:569:1;;;-1:-1:-1;;5456:569:1::2;::::0;;::::2;::::0;;::::2;::::0;;;;;;::::2;::::0;5611:10:::2;5456:569:::0;;;;-1:-1:-1;5456:569:1;;;;;;;;;;5742:15:::2;5456:569:::0;;;;;;5805:31:::2;:22:::0;5830:6:::2;5805:31;:::i;:::-;5787:49;::::0;:15:::2;:49;:::i;:::-;5456:569:::0;;5901:1:::2;5456:569;::::0;;::::2;::::0;;;;;;;;;;5924:90;;::::2;::::0;::::2;::::0;;5967:4:::2;5924:90:::0;;;;;::::2;::::0;;;;;;;;;5456:569;5924:90;;;;;;5456:569;;;;5446:6:::2;::::0;5440:13;;:5:::2;:13:::0;;;;;:585;;;;;;::::2;::::0;:13;;:585;::::2;::::0;::::2;::::0;;::::2;:::i;:::-;-1:-1:-1::0;5440:585:1::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;:::i;:::-;-1:-1:-1::0;5440:585:1::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;:::i;:::-;-1:-1:-1::0;5440:585:1::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;:::i;:::-;-1:-1:-1::0;5440:585:1::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;-1:-1:-1;;;;;;5440:585:1;;::::2;-1:-1:-1::0;;;;;5440:585:1;;::::2;;::::0;;;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;::::2;::::0;;;::::2;::::0;;::::2;::::0;;::::2;::::0;;;::::2;::::0;;::::2;::::0;;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;::::0;-1:-1:-1;;5440:585:1;;;;::::2;;-1:-1:-1::0;;5440:585:1;;;;;;::::2;;::::0;;::::2;::::0;;;::::2;-1:-1:-1::0;;5440:585:1;;;::::2;;::::0;;;::::2;-1:-1:-1::0;;5440:585:1;;;;;;;::::2;;::::0;;;::::2;::::0;;;::::2;::::0;;;::::2;6064:6:::0;6040:48;;6072:15:::2;::::0;6064:6;6052:10:::2;::::0;6040:48:::2;::::0;-1:-1:-1;;6040:48:1::2;6103:34;::::0;6132:4:::2;::::0;6120:10:::2;::::0;6103:34:::2;::::0;;;::::2;6154:6;:8:::0;;;:6:::2;:8;::::0;::::2;:::i;:::-;;;;;6147:15;;2303:20:6::0;1716:1;2809:22;;2629:209;2303:20;5206:1002:1;;;;;;;;;:::o;16573:1367::-;2261:21:6;:19;:21::i;:::-;1232:19:5::1;:17;:19::i;:::-;16677:14:1::2;16694::::0;;;:5:::2;:14;::::0;;;;16727:8:::2;::::0;::::2;:22:::0;;;::::2;;;16726:23;16718:70;;;::::0;-1:-1:-1;;;16718:70:1;;19778:2:7;16718:70:1::2;::::0;::::2;19760:21:7::0;19817:2;19797:18;;;19790:30;19856:34;19836:18;;;19829:62;-1:-1:-1;;;19907:18:7;;;19900:32;19949:19;;16718:70:1::2;19576:398:7::0;16718:70:1::2;16807:8;::::0;::::2;:19:::0;;;::::2;;;16806:20;16798:82;;;::::0;-1:-1:-1;;;16798:82:1;;20181:2:7;16798:82:1::2;::::0;::::2;20163:21:7::0;20220:2;20200:18;;;20193:30;20259:34;20239:18;;;20232:62;-1:-1:-1;;;20310:18:7;;;20303:47;20367:19;;16798:82:1::2;19979:413:7::0;16798:82:1::2;16916:1;:19;;;16898:15;:37;16890:118;;;::::0;-1:-1:-1;;;16890:118:1;;20599:2:7;16890:118:1::2;::::0;::::2;20581:21:7::0;20638:2;20618:18;;;20611:30;;;20677:34;20657:18;;;20650:62;20748:34;20728:18;;;20721:62;-1:-1:-1;;;20799:19:7;;;20792:35;20844:19;;16890:118:1::2;20397:472:7::0;16890:118:1::2;17026:9;::::0;::::2;::::0;-1:-1:-1;;;;;17026:9:1::2;17039:10;17026:23;17018:71;;;;-1:-1:-1::0;;;17018:71:1::2;;;;;;;:::i;:::-;17107:8;::::0;::::2;::::0;-1:-1:-1;;;;;17107:8:1::2;17099:84;;;::::0;-1:-1:-1;;;17099:84:1;;21076:2:7;17099:84:1::2;::::0;::::2;21058:21:7::0;21115:2;21095:18;;;21088:30;21154:34;21134:18;;;21127:62;-1:-1:-1;;;21205:18:7;;;21198:47;21262:19;;17099:84:1::2;20874:413:7::0;17099:84:1::2;17193:48;17244:29:::0;;;:20:::2;:29;::::0;;;;;17314:24:::2;17244:29:::0;17314:22:::2;:24::i;:::-;17283:55;;17348:20;17387:9:::0;17382:311:::2;17406:11;:18;17402:1;:22;17382:311;;;17445:16;17464:20:::0;;;:11:::2;:20;::::0;;;;17485:14;;17445:16;;17485:11;;17497:1;;17485:14;::::2;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;17464:36:1::2;-1:-1:-1::0;;;;;17464:36:1::2;;;;;;;;;;;;17445:55;;17519:1;:15;;;;;;;;;;;;17514:169;;17602:8;::::0;::::2;::::0;17646:15:::2;::::0;::::2;:22:::0;;-1:-1:-1;;17646:22:1::2;;;::::0;;17586:24;;;::::2;::::0;17514:169:::2;-1:-1:-1::0;17426:3:1::2;;17382:311;;;-1:-1:-1::0;17702:8:1::2;::::0;::::2;:29:::0;;-1:-1:-1;;17702:29:1::2;::::0;::::2;::::0;;17768:8:::2;::::0;::::2;::::0;17760:47:::2;::::0;-1:-1:-1;;;;;;;17768:8:1::2;::::0;17790:12;;-1:-1:-1;17760:47:1;-1:-1:-1;17760:47:1;17790:12;17768:8;17760:47:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17741:66;;;17825:7;17817:47;;;::::0;-1:-1:-1;;;17817:47:1;;21836:2:7;17817:47:1::2;::::0;::::2;21818:21:7::0;21875:2;21855:18;;;21848:30;21914:29;21894:18;;;21887:57;21961:18;;17817:47:1::2;21634:351:7::0;17817:47:1::2;17910:8;::::0;::::2;::::0;17879:54:::2;::::0;17920:12;;-1:-1:-1;;;;;17910:8:1::2;::::0;17898:10:::2;::::0;17879:54:::2;::::0;17910:8:::2;::::0;17879:54:::2;16667:1273;;;;;2303:20:6::0;1716:1;2809:22;;2629:209;13537:483:1;2261:21:6;:19;:21::i;:::-;1232:19:5::1;:17;:19::i;:::-;13647:25:1::2;13675:21:::0;;;:12:::2;:21;::::0;;;;;;;13647:49;;;;;;::::2;::::0;;;;;;;;;;;;13675:21;;13647:49;:25;;:49;::::2;;;;;;;;;::::0;;;::::2;::::0;;;;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;::::0;;-1:-1:-1;;;;;13647:49:1;::::2;::::0;;-1:-1:-1;;;13647:49:1;::::2;;;::::0;;::::2;::::0;;;;;;::::2;::::0;;;;;;;;;::::2;::::0;::::2;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;13647:49:1;;;-1:-1:-1;;13647:49:1::2;::::0;::::2;::::0;::::2;::::0;;::::2;::::0;::::2;;;::::0;::::2;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;::::0;::::2;;;;;;;;;;;;;;;;;;13711:6;13706:308;13727:8;:15;13723:1;:19;13706:308;;;13796:10;-1:-1:-1::0;;;;;13767:39:1::2;13775:8;13784:1;13775:11;;;;;;;;:::i;:::-;;;;;;;:16;;;-1:-1:-1::0;;;;;13767:39:1::2;::::0;13763:241:::2;;13875:14;13861:29;;;;;;;;:::i;:::-;13827:21;::::0;;;:12:::2;:21;::::0;;;;:24;;13849:1;;13827:24;::::2;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;:31:::2;:24;::::0;;::::2;;:31;:63:::0;;-1:-1:-1;;13827:63:1::2;::::0;;::::2;::::0;::::2;;;;;;:::i;:::-;;;::::0;;-1:-1:-1;13913:53:1::2;::::0;13951:14;;13939:10:::2;::::0;13930:7;;13913:53:::2;::::0;;;::::2;13984:5;;13763:241;13744:3;;13706:308;;;;13637:383;2303:20:6::0;1716:1;2809:22;;2629:209;2303:20;13537:483:1;;:::o;4793:354::-;2261:21:6;:19;:21::i;:::-;1087:13:4::1;:11;:13::i;:::-;4928:1:1::2;4909:16;:20;;;:49;;;;;4953:5;4933:16;:25;;;;4909:49;4888:154;;;::::0;-1:-1:-1;;;4888:154:1;;22192:2:7;4888:154:1::2;::::0;::::2;22174:21:7::0;22231:2;22211:18;;;22204:30;22270:34;22250:18;;;22243:62;22341:28;22321:18;;;22314:56;22387:19;;4888:154:1::2;21990:422:7::0;4888:154:1::2;5052:15;:34:::0;;-1:-1:-1;;5052:34:1::2;;::::0;::::2;::::0;;::::2;::::0;;;5101:39:::2;::::0;::::2;::::0;-1:-1:-1;;5101:39:1::2;2303:20:6::0;1716:1;2809:22;;2629:209;1817:101:4;1087:13;:11;:13::i;:::-;1881:30:::1;1908:1;1881:18;:30::i;:::-;1817:101::o:0;8347:503:1:-;2261:21:6;:19;:21::i;:::-;1232:19:5::1;:17;:19::i;:::-;8460:14:1::2;8477::::0;;;:5:::2;:14;::::0;;;;8509:8:::2;::::0;::::2;:23:::0;::::2;;8501:81;;;::::0;-1:-1:-1;;;8501:81:1;;22619:2:7;8501:81:1::2;::::0;::::2;22601:21:7::0;22658:2;22638:18;;;22631:30;22697:34;22677:18;;;22670:62;-1:-1:-1;;;22748:18:7;;;22741:43;22801:19;;8501:81:1::2;22417:409:7::0;8501:81:1::2;8600:9;::::0;::::2;::::0;-1:-1:-1;;;;;8600:9:1::2;8613:10;8600:23;8592:71;;;;-1:-1:-1::0;;;8592:71:1::2;;;;;;;:::i;:::-;8698:1;8681:14;:18;8673:69;;;::::0;-1:-1:-1;;;8673:69:1;;23033:2:7;8673:69:1::2;::::0;::::2;23015:21:7::0;23072:2;23052:18;;;23045:30;23111:34;23091:18;;;23084:62;-1:-1:-1;;;23162:18:7;;;23155:36;23208:19;;8673:69:1::2;22831:402:7::0;8673:69:1::2;8752:15;::::0;::::2;:32:::0;;;8799:44:::2;::::0;8770:14;;8816:10:::2;::::0;8799:44:::2;::::0;;;::::2;8450:400;2303:20:6::0;1716:1;2809:22;;2629:209;12224:1254:1;2261:21:6;:19;:21::i;:::-;1232:19:5::1;:17;:19::i;:::-;12467:13:1::2;12483:5;:14;12489:7;12483:14;;;;;;;;;;;12467:30;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;12467:30:1;;;-1:-1:-1;;12467:30:1::2;::::0;::::2;::::0;-1:-1:-1;;;;;12467:30:1;;::::2;;::::0;;::::2;::::0;;;;::::2;::::0;::::2;::::0;;;;;;;;;::::2;::::0;::::2;::::0;;;;;;;;;::::2;::::0;::::2;::::0;;;;;;;;;::::2;::::0;::::2;::::0;;;;;;;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;::::2;::::0;;::::2;::::0;;;;;;;;::::2;::::0;;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;;;::::0;;::::2;::::0;;::::2;::::0;::::2;;;::::0;;::::2;::::0;;;;;;::::2;::::0;::::2;;;::::0;;;;;;;;;::::2;::::0;;::::2;;;::::0;;;;;;;;;;12515:9;;::::2;::::0;12467:30;;-1:-1:-1;12515:23:1::2;12528:10;12515:23;12507:71;;;;-1:-1:-1::0;;;12507:71:1::2;;;;;;;:::i;:::-;12596:20:::0;12588:68:::2;;;::::0;-1:-1:-1;;;12588:68:1;;23440:2:7;12588:68:1::2;::::0;::::2;23422:21:7::0;23479:2;23459:18;;;23452:30;23518:34;23498:18;;;23491:62;-1:-1:-1;;;23569:18:7;;;23562:33;23612:19;;12588:68:1::2;23238:399:7::0;12588:68:1::2;12693:3;12674:22:::0;::::2;12666:70;;;::::0;-1:-1:-1;;;12666:70:1;;23844:2:7;12666:70:1::2;::::0;::::2;23826:21:7::0;23883:2;23863:18;;;23856:30;23922:34;23902:18;;;23895:62;-1:-1:-1;;;23973:18:7;;;23966:33;24016:19;;12666:70:1::2;23642:399:7::0;12666:70:1::2;12767:32:::0;;::::2;:81:::0;::::2;;;-1:-1:-1::0;12815:33:1;;::::2;12767:81;:133;;;;-1:-1:-1::0;12864:36:1;;::::2;12767:133;12746:220;;;::::0;-1:-1:-1;;;12746:220:1;;24248:2:7;12746:220:1::2;::::0;::::2;24230:21:7::0;24287:2;24267:18;;;24260:30;24326:34;24306:18;;;24299:62;-1:-1:-1;;;24377:18:7;;;24370:38;24425:19;;12746:220:1::2;24046:404:7::0;12746:220:1::2;12983:21;::::0;;;:12:::2;:21;::::0;;;;12976:28:::2;::::0;::::2;:::i;:::-;13053:6;13048:346;13065:20:::0;;::::2;13048:346;;;13106:16;13125:215;;;;;;;;13157:9;;13167:1;13157:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;13125:215:1::2;;;;;13192:5;;13198:1;13192:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;13125:215;;;;;;13228:10;;13239:1;13228:13;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;13125:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;;;13125:215:1;;;-1:-1:-1;13125:215:1::2;;13267:8:::0;;13276:1;13267:11;;::::2;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;13125:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;-1:-1:-1;13125:215:1;;;-1:-1:-1;;13125:215:1::2;::::0;;::::2;::::0;-1:-1:-1;13125:215:1;;13354:21:::2;::::0;;;:12:::2;:21;::::0;;;;;;;:29;;::::2;::::0;;::::2;::::0;;;;;;;;;;;::::2;::::0;;::::2;;::::0;;;;::::2;::::0;::::2;;-1:-1:-1::0;;;13354:29:1::2;-1:-1:-1::0;;;;;;13354:29:1;;;-1:-1:-1;;;;;13354:29:1;;::::2;::::0;;;;;;;::::2;::::0;;;::::2;::::0;13106:234;;-1:-1:-1;13106:234:1;;13354:29;;::::2;::::0;::::2;::::0;;::::2;:::i;:::-;-1:-1:-1::0;13354:29:1::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;::::2;:::i;:::-;-1:-1:-1::0;13354:29:1::2;::::0;::::2;::::0;::::2;::::0;::::2;::::0;;-1:-1:-1;;13354:29:1::2;::::0;;::::2;::::0;::::2;;;;;;:::i;:::-;;;::::0;;-1:-1:-1;;13087:3:1::2;::::0;;::::2;::::0;-1:-1:-1;13048:346:1::2;::::0;-1:-1:-1;13048:346:1::2;;;13420:10;-1:-1:-1::0;;;;;13408:63:1::2;;13432:9;;13443:5;;13450:10;;13462:8;;13408:63;;;;;;;;;;;;;:::i;:::-;;;;;;;;12457:1021;2303:20:6::0;1716:1;2809:22;;2629:209;2303:20;12224:1254:1;;;;;;;;;:::o;6332:639::-;2261:21:6;:19;:21::i;:::-;1232:19:5::1;:17;:19::i;:::-;6420:14:1::2;6437::::0;;;:5:::2;:14;::::0;;;;6470:8:::2;::::0;::::2;:19:::0;::::2;::::0;::::2;;;6469:20;6461:86;;;::::0;-1:-1:-1;;;6461:86:1;;28179:2:7;6461:86:1::2;::::0;::::2;28161:21:7::0;28218:2;28198:18;;;28191:30;28257:34;28237:18;;;28230:62;-1:-1:-1;;;28308:18:7;;;28301:51;28369:19;;6461:86:1::2;27977:417:7::0;6461:86:1::2;6566:8;::::0;::::2;:22:::0;;;::::2;;;6565:23;6557:90;;;::::0;-1:-1:-1;;;6557:90:1;;28601:2:7;6557:90:1::2;::::0;::::2;28583:21:7::0;28640:2;28620:18;;;28613:30;28679:34;28659:18;;;28652:62;-1:-1:-1;;;28730:18:7;;;28723:52;28792:19;;6557:90:1::2;28399:418:7::0;6557:90:1::2;6666:8;::::0;::::2;:19:::0;;;::::2;;;6665:20;6657:80;;;::::0;-1:-1:-1;;;6657:80:1;;29024:2:7;6657:80:1::2;::::0;::::2;29006:21:7::0;29063:2;29043:18;;;29036:30;29102:34;29082:18;;;29075:62;-1:-1:-1;;;29153:18:7;;;29146:45;29208:19;;6657:80:1::2;28822:411:7::0;6657:80:1::2;6755:9;::::0;::::2;::::0;-1:-1:-1;;;;;6755:9:1::2;6768:10;6755:23;6747:89;;;::::0;-1:-1:-1;;;6747:89:1;;29440:2:7;6747:89:1::2;::::0;::::2;29422:21:7::0;29479:2;29459:18;;;29452:30;29518:34;29498:18;;;29491:62;-1:-1:-1;;;29569:18:7;;;29562:51;29630:19;;6747:89:1::2;29238:417:7::0;6747:89:1::2;6873:8;::::0;::::2;:23:::0;;-1:-1:-1;;6846:50:1;::::2;6873:23;::::0;;::::2;6872:24;6846:50:::0;;::::2;::::0;;;6911:53:::2;::::0;6940:23;;6911:53:::2;;::::0;6928:10:::2;::::0;6911:53:::2;::::0;6873:23:::2;::::0;6911:53:::2;6410:561;2303:20:6::0;1716:1;2809:22;;2629:209;10173:512:1;2261:21:6;:19;:21::i;:::-;1232:19:5::1;:17;:19::i;:::-;10266:13:1::2;10282:5;:14;10288:7;10282:14;;;;;;;;;;;10266:30;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;10266:30:1;;;-1:-1:-1;;10266:30:1::2;::::0;::::2;::::0;-1:-1:-1;;;;;10266:30:1;;::::2;;::::0;;::::2;::::0;;;;::::2;::::0;::::2;::::0;;;;;;;;;::::2;::::0;::::2;::::0;;;;;;;;;::::2;::::0;::::2;::::0;;;;;;;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;::::2;::::0;;;::::2;::::0;;;;;;;;::::2;::::0;;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;;;::::0;;::::2;::::0;;::::2;::::0;::::2;;;::::0;;::::2;::::0;;;;;;::::2;::::0;::::2;;;::::0;;;;;;;;;::::2;;;;::::0;;;;;;;;;;10332:19:::2;::::0;::::2;::::0;10266:30;;-1:-1:-1;10314:15:1::2;:37;10306:80;;;::::0;-1:-1:-1;;;10306:80:1;;29862:2:7;10306:80:1::2;::::0;::::2;29844:21:7::0;29901:2;29881:18;;;29874:30;29940:32;29920:18;;;29913:60;29990:18;;10306:80:1::2;29660:354:7::0;10306:80:1::2;10396:13;10412:29:::0;;;:20:::2;:29;::::0;;;;:50:::2;::::0;10451:10:::2;10412:38;:50::i;:::-;10396:66;;10481:8;10472:49;;;::::0;-1:-1:-1;;;10472:49:1;;30221:2:7;10472:49:1::2;::::0;::::2;30203:21:7::0;30260:2;30240:18;;;30233:30;30299:29;30279:18;;;30272:57;30346:18;;10472:49:1::2;30019:351:7::0;10472:49:1::2;10531:21;10555:20:::0;;;:11:::2;:20;::::0;;;;;;;10576:10:::2;10555:32:::0;;;;;;;;10597:20:::2;::::0;::::2;:27:::0;;-1:-1:-1;;10597:27:1::2;10620:4;10597:27;::::0;;10639:39;;10555:32;;10567:7;;10639:39:::2;::::0;10531:21;10639:39:::2;10256:429;;;2303:20:6::0;1716:1;2809:22;;2629:209;7016:1258:1;2261:21:6;:19;:21::i;:::-;1232:19:5::1;:17;:19::i;:::-;7106:13:1::2;7122:5;:14;7128:7;7122:14;;;;;;;;;;;7106:30;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;7106:30:1;;;-1:-1:-1;;7106:30:1::2;::::0;::::2;::::0;-1:-1:-1;;;;;7106:30:1;;::::2;;::::0;;::::2;::::0;;;;::::2;::::0;::::2;::::0;;;;;;;;;::::2;::::0;::::2;::::0;;;;;;;;;::::2;::::0;::::2;::::0;;;;;;;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;::::2;::::0;;;::::2;::::0;;;;;;;;::::2;::::0;;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;;;::::0;;::::2;::::0;;::::2;::::0;::::2;;;::::0;;::::2;::::0;;;;;;::::2;::::0;::::2;;;::::0;;;;;;;;;::::2;;;;::::0;;;;;;;;;;7154:8:::2;::::0;::::2;::::0;:23;7106:30;;-1:-1:-1;7146:58:1::2;;;::::0;-1:-1:-1;;;7146:58:1;;30577:2:7;7146:58:1::2;::::0;::::2;30559:21:7::0;30616:2;30596:18;;;30589:30;-1:-1:-1;;;30635:18:7;;;30628:52;30697:18;;7146:58:1::2;30375:346:7::0;7146:58:1::2;7223:1;:8;;;:22;;;7222:23;7214:82;;;;-1:-1:-1::0;;;7214:82:1::2;;;;;;;:::i;:::-;7326:1;:15;;;7314:9;:27;7306:96;;;::::0;-1:-1:-1;;;7306:96:1;;31343:2:7;7306:96:1::2;::::0;::::2;31325:21:7::0;31382:2;31362:18;;;31355:30;31421:34;31401:18;;;31394:62;31492:26;31472:18;;;31465:54;31536:19;;7306:96:1::2;31141:420:7::0;7306:96:1::2;7412:13;7428:29:::0;;;:20:::2;:29;::::0;;;;:50:::2;::::0;7467:10:::2;7428:38;:50::i;:::-;7412:66;;7492:8;7488:729;;;7515:21;7539:20:::0;;;:11:::2;:20;::::0;;;;;;;7560:10:::2;7539:32:::0;;;;;;;7613:13:::2;;:26:::0;;7630:9:::2;7613:26;::::0;;7488:729:::2;;;7746:29;::::0;;;:20:::2;:29;::::0;;;;7787:4:::2;::::0;7746:38:::2;::::0;:36:::2;:38::i;:::-;:45;7737:96;;;::::0;-1:-1:-1;;;7737:96:1;;31768:2:7;7737:96:1::2;::::0;::::2;31750:21:7::0;31807:2;31787:18;;;31780:30;31846:34;31826:18;;;31819:62;-1:-1:-1;;;31897:18:7;;;31890:35;31942:19;;7737:96:1::2;31566:401:7::0;7737:96:1::2;7865:167;::::0;;::::2;::::0;::::2;::::0;;7896:10:::2;7865:167:::0;;;7932:9:::2;7865:167;::::0;;::::2;::::0;;;;7847:15:::2;7865:167:::0;;;;;;;;;;;;8059:29;;;:20:::2;:29:::0;;;;;;7865:167;;7847:15;8059:45:::2;::::0;:33:::2;:45::i;:::-;8046:58;;8126:5;8118:38;;;::::0;-1:-1:-1;;;8118:38:1;;32174:2:7;8118:38:1::2;::::0;::::2;32156:21:7::0;32213:2;32193:18;;;32186:30;-1:-1:-1;;;32232:18:7;;;32225:50;32292:18;;8118:38:1::2;31972:344:7::0;8118:38:1::2;-1:-1:-1::0;8170:20:1::2;::::0;;;:11:::2;:20;::::0;;;;;;;8191:10:::2;8170:32:::0;;;;;;;;:36;;;;-1:-1:-1;;;;;8170:36:1;;;::::2;-1:-1:-1::0;;;;;;8170:36:1;;::::2;;::::0;;;;::::2;::::0;;;::::2;::::0;;;::::2;::::0;::::2;::::0;;::::2;::::0;;::::2;::::0;;::::2;::::0;::::2;;;;-1:-1:-1::0;;8170:36:1;::::2;;::::0;;;;-1:-1:-1;;8170:36:1;;;;;;;::::2;::::0;;7488:729:::2;8231:32;::::0;8253:9:::2;::::0;8241:10:::2;::::0;8231:32:::2;::::0;;;::::2;7096:1178;;2303:20:6::0;1716:1;2809:22;;2629:209;15843:639:1;2261:21:6;:19;:21::i;:::-;1232:19:5::1;:17;:19::i;:::-;15978:14:1::2;15995::::0;;;:5:::2;:14;::::0;;;;16028:8:::2;::::0;::::2;:22:::0;;;::::2;;;16027:23;16019:84;;;::::0;-1:-1:-1;;;16019:84:1;;32523:2:7;16019:84:1::2;::::0;::::2;32505:21:7::0;32562:2;32542:18;;;32535:30;32601:34;32581:18;;;32574:62;-1:-1:-1;;;32652:18:7;;;32645:46;32708:19;;16019:84:1::2;32321:412:7::0;16019:84:1::2;16122:8;::::0;::::2;:19:::0;;;::::2;;;16121:20;16113:74;;;::::0;-1:-1:-1;;;16113:74:1;;32940:2:7;16113:74:1::2;::::0;::::2;32922:21:7::0;32979:2;32959:18;;;32952:30;33018:34;32998:18;;;32991:62;-1:-1:-1;;;33069:18:7;;;33062:39;33118:19;;16113:74:1::2;32738:405:7::0;16113:74:1::2;16205:9;::::0;::::2;::::0;-1:-1:-1;;;;;16205:9:1::2;16218:10;16205:23;16197:71;;;;-1:-1:-1::0;;;16197:71:1::2;;;;;;;:::i;:::-;16278:8;::::0;::::2;:25:::0;;-1:-1:-1;;;;;;16278:25:1::2;-1:-1:-1::0;;;;;16278:25:1;::::2;;::::0;;16313:8:::2;::::0;::::2;:31:::0;;-1:-1:-1;;16313:31:1::2;::::0;;16395:28:::2;:15;16413:10;16395:28;:::i;:::-;16373:19;::::0;::::2;:50:::0;16438:37:::2;::::0;-1:-1:-1;;;;;16438:37:1;::::2;::::0;16448:10:::2;::::0;16438:37:::2;::::0;;;::::2;15968:514;2303:20:6::0;1716:1;2809:22;;2629:209;14094:145:1;14176:16;14211:12;:21;14224:7;14211:21;;;;;;;;;;;14204:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14204:28:1;;;;-1:-1:-1;;;14204:28:1;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14204:28:1;;;-1:-1:-1;;14204:28:1;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;14094:145;;;:::o;11681:484::-;11789:48;11840:29;;;:20;:29;;;;;11762:15;;11910:24;11840:29;11910:22;:24::i;:::-;11879:55;;11944:23;11983:11;:18;11970:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11970:32:1;;-1:-1:-1;;11970:32:1;;;;;;;;;;;;11944:58;;12017:9;12012:123;12036:11;:18;12032:1;:22;12012:123;;;12088:11;:20;12100:7;12088:20;;;;;;;;;;;:36;12109:11;12121:1;12109:14;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;12088:36:1;;;;;;;;;;;;;;;;-1:-1:-1;12088:36:1;12075:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:10;;:7;;12083:1;;12075:10;;;;;;:::i;:::-;;;;;;;;;;:49;12056:3;;12012:123;;;-1:-1:-1;12151:7:1;11681:484;-1:-1:-1;;;;11681:484:1:o;8918:1172::-;2261:21:6;:19;:21::i;:::-;1232:19:5::1;:17;:19::i;:::-;9043:13:1::2;9059:5;:14;9065:7;9059:14;;;;;;;;;;;9043:30;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;9043:30:1;;;-1:-1:-1;;9043:30:1::2;::::0;::::2;::::0;-1:-1:-1;;;;;9043:30:1;;::::2;;::::0;;::::2;::::0;;;;::::2;::::0;::::2;::::0;;;;;;;;;::::2;::::0;::::2;::::0;;;;;;;;;::::2;::::0;::::2;::::0;;;;;;;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;::::2;::::0;;;;;::::2;::::0;::::2;::::0;;;::::2;::::0;;;;;;;;::::2;::::0;;::::2;::::0;;::::2;::::0;::::2;::::0;;::::2;;;::::0;;::::2;::::0;;::::2;::::0;::::2;;;::::0;;::::2;::::0;;;;;;::::2;::::0;::::2;;;::::0;;;;;;;;;::::2;;;;::::0;;;;;;;;;;9104:8:::2;::::0;::::2;::::0;:23;9043:30;;-1:-1:-1;9104:23:1;:46:::2;;;9131:1;:8;;;:19;;;9104:46;9083:146;;;::::0;-1:-1:-1;;;9083:146:1;;33350:2:7;9083:146:1::2;::::0;::::2;33332:21:7::0;33389:2;33369:18;;;33362:30;33428:34;33408:18;;;33401:62;-1:-1:-1;;;33479:18:7;;;33472:51;33540:19;;9083:146:1::2;33148:417:7::0;9083:146:1::2;9257:1;9247:7;:11;9239:54;;;::::0;-1:-1:-1;;;9239:54:1;;33772:2:7;9239:54:1::2;::::0;::::2;33754:21:7::0;33811:2;33791:18;;;33784:30;33850:32;33830:18;;;33823:60;33900:18;;9239:54:1::2;33570:354:7::0;9239:54:1::2;9304:13;9320:29:::0;;;:20:::2;:29;::::0;;;;:50:::2;::::0;9359:10:::2;9320:38;:50::i;:::-;9304:66;;9389:8;9380:49;;;::::0;-1:-1:-1;;;9380:49:1;;30221:2:7;9380:49:1::2;::::0;::::2;30203:21:7::0;30260:2;30240:18;;;30233:30;30299:29;30279:18;;;30272:57;30346:18;;9380:49:1::2;30019:351:7::0;9380:49:1::2;9439:21;9463:20:::0;;;:11:::2;:20;::::0;;;;;;;9484:10:::2;9463:32:::0;;;;;;;9514:20:::2;::::0;::::2;::::0;::::2;::::0;::::2;;;9513:21;9505:77;;;::::0;-1:-1:-1;;;9505:77:1;;34131:2:7;9505:77:1::2;::::0;::::2;34113:21:7::0;34170:2;34150:18;;;34143:30;34209:34;34189:18;;;34182:62;-1:-1:-1;;;34260:18:7;;;34253:41;34311:19;;9505:77:1::2;33929:407:7::0;9505:77:1::2;9617:7;9600:6;:13;;;:24;9592:108;;;::::0;-1:-1:-1;;;9592:108:1;;34543:2:7;9592:108:1::2;::::0;::::2;34525:21:7::0;34582:2;34562:18;;;34555:30;34621:34;34601:18;;;34594:62;34692:34;34672:18;;;34665:62;-1:-1:-1;;;34743:19:7;;;34736:38;34791:19;;9592:108:1::2;34341:475:7::0;9592:108:1::2;9727:13;::::0;::::2;::::0;9710:14:::2;9765:29:::0;;;:20:::2;:29;::::0;;;;:48:::2;::::0;9802:10:::2;9765:36;:48::i;:::-;9750:63;;9831:7;9823:44;;;::::0;-1:-1:-1;;;9823:44:1;;35023:2:7;9823:44:1::2;::::0;::::2;35005:21:7::0;35062:2;35042:18;;;35035:30;35101:26;35081:18;;;35074:54;35145:18;;9823:44:1::2;34821:348:7::0;9823:44:1::2;9884:20;::::0;;;:11:::2;:20;::::0;;;;;;;9905:10:::2;9884:32:::0;;;;;;;;9877:39;;-1:-1:-1;;;;;;9877:39:1::2;::::0;;-1:-1:-1;9877:39:1;::::2;::::0;;;::::2;;::::0;;-1:-1:-1;;9877:39:1;;;9945:43;9977:6;;9884:20;9945:43;9884:20;9945:43;9977:6;9905:10;9945:43:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9926:62;;;10006:7;9998:36;;;::::0;-1:-1:-1;;;9998:36:1;;35376:2:7;9998:36:1::2;::::0;::::2;35358:21:7::0;35415:2;35395:18;;;35388:30;-1:-1:-1;;;35434:18:7;;;35427:46;35490:18;;9998:36:1::2;35174:340:7::0;9998:36:1::2;10049:34;::::0;10076:6;;10064:10:::2;::::0;10049:34:::2;::::0;;;::::2;9033:1057;;;;;;2303:20:6::0;1716:1;2809:22;;2629:209;2067:198:4;1087:13;:11;:13::i;:::-;-1:-1:-1;;;;;2155:22:4;::::1;2147:73;;;::::0;-1:-1:-1;;;2147:73:4;;35721:2:7;2147:73:4::1;::::0;::::1;35703:21:7::0;35760:2;35740:18;;;35733:30;35799:34;35779:18;;;35772:62;-1:-1:-1;;;35850:18:7;;;35843:36;35896:19;;2147:73:4::1;35519:402:7::0;2147:73:4::1;2230:28;2249:8;2230:18;:28::i;14302:715:1:-:0;2261:21:6;:19;:21::i;:::-;1232:19:5::1;:17;:19::i;:::-;14401:14:1::2;14418::::0;;;:5:::2;:14;::::0;;;;14451:8:::2;::::0;::::2;:19:::0;::::2;::::0;::::2;;;14450:20;14442:78;;;::::0;-1:-1:-1;;;14442:78:1;;36128:2:7;14442:78:1::2;::::0;::::2;36110:21:7::0;36167:2;36147:18;;;36140:30;36206:34;36186:18;;;36179:62;-1:-1:-1;;;36257:18:7;;;36250:43;36310:19;;14442:78:1::2;35926:409:7::0;14442:78:1::2;14539:8;::::0;::::2;:22:::0;;;::::2;;;14538:23;14530:82;;;;-1:-1:-1::0;;;14530:82:1::2;;;;;;;:::i;:::-;14631:8;::::0;::::2;:19:::0;;;::::2;;;14630:20;14622:72;;;::::0;-1:-1:-1;;;14622:72:1;;36542:2:7;14622:72:1::2;::::0;::::2;36524:21:7::0;36581:2;36561:18;;;36554:30;36620:34;36600:18;;;36593:62;-1:-1:-1;;;36671:18:7;;;36664:37;36718:19;;14622:72:1::2;36340:403:7::0;14622:72:1::2;14712:9;::::0;::::2;::::0;-1:-1:-1;;;;;14712:9:1::2;14725:10;14712:23;14704:71;;;;-1:-1:-1::0;;;14704:71:1::2;;;;;;;:::i;:::-;14808:15;14793:12;:30;14785:79;;;::::0;-1:-1:-1;;;14785:79:1;;36950:2:7;14785:79:1::2;::::0;::::2;36932:21:7::0;36989:2;36969:18;;;36962:30;37028:34;37008:18;;;37001:62;-1:-1:-1;;;37079:18:7;;;37072:34;37123:19;;14785:79:1::2;36748:400:7::0;14785:79:1::2;14874:13;::::0;::::2;:28:::0;;;14912:8:::2;::::0;::::2;:31:::0;;-1:-1:-1;;14912:31:1::2;::::0;;14977:33:::2;::::0;14890:12;;14985:10:::2;::::0;14977:33:::2;::::0;14938:5:::2;::::0;14977:33:::2;14391:626;2303:20:6::0;1716:1;2809:22;;2629:209;2336:287;1759:1;2468:7;;:19;2460:63;;;;-1:-1:-1;;;2460:63:6;;37355:2:7;2460:63:6;;;37337:21:7;37394:2;37374:18;;;37367:30;37433:33;37413:18;;;37406:61;37484:18;;2460:63:6;37153:355:7;2460:63:6;1759:1;2598:7;:18;2336:287::o;1760:106:5:-;1655:4;1678:7;-1:-1:-1;;;1678:7:5;;;;1829:9;1821:38;;;;-1:-1:-1;;;1821:38:5;;37715:2:7;1821:38:5;;;37697:21:7;37754:2;37734:18;;;37727:30;-1:-1:-1;;;37773:18:7;;;37766:46;37829:18;;1821:38:5;37513:340:7;18033:749:1;18117:4;18184:29;;;:20;:29;;;;;18117:4;18254:24;18184:29;18254:22;:24::i;:::-;18223:55;;18288:13;18315:16;18350:6;18345:325;18366:5;18362:1;:9;18345:325;;;18392:16;18411:11;18423:1;18411:14;;;;;;;;:::i;:::-;;;;;;;;;;;;18439:15;18457:20;;;:11;:20;;;;;;-1:-1:-1;;;;;18457:30:1;;;;;;;;;;;;18439:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18411:14;;-1:-1:-1;18439:48:1;18529:82;;18584:1;:8;;;18572:20;;;;18529:82;18637:8;;;18628:17;;;;;-1:-1:-1;18373:3:1;;18345:325;;;-1:-1:-1;18679:17:1;18719:5;18699:17;:8;18710:6;18699:17;:::i;:::-;:25;;;;:::i;:::-;18760:15;;;;-1:-1:-1;18748:27:1;18033:749;-1:-1:-1;;;;;;;18033:749:1:o;10259:300:2:-;10322:16;10350:22;10375:19;10383:3;10375:7;:19::i;:::-;10350:44;10259:300;-1:-1:-1;;;10259:300:2:o;1352:130:4:-;1240:7;1266:6;-1:-1:-1;;;;;1266:6:4;719:10:0;1415:23:4;1407:68;;;;-1:-1:-1;;;1407:68:4;;38282:2:7;1407:68:4;;;38264:21:7;;;38301:18;;;38294:30;38360:34;38340:18;;;38333:62;38412:18;;1407:68:4;38080:356:7;2419:187:4;2492:16;2511:6;;-1:-1:-1;;;;;2527:17:4;;;-1:-1:-1;;;;;;2527:17:4;;;;;;2559:40;;2511:6;;;;;;;2559:40;;2492:16;2559:40;2482:124;2419:187;:::o;8860:165:2:-;-1:-1:-1;;;;;8993:23:2;;8940:4;4351:19;;;:12;;;:19;;;;;;:24;;8963:55;8956:62;;8860:165;;;;;:::o;9106:115::-;9169:7;9195:19;9203:3;4545:18;;4463:107;8305:150;8375:4;8398:50;8403:3;-1:-1:-1;;;;;8423:23:2;;8398:4;:50::i;8623:156::-;8696:4;8719:53;8727:3;-1:-1:-1;;;;;8747:23:2;;8719:7;:53::i;5570:109::-;5626:16;5661:3;:11;;5654:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5570:109;;;:::o;2214:404::-;2277:4;4351:19;;;:12;;;:19;;;;;;2293:319;;-1:-1:-1;2335:23:2;;;;;;;;:11;:23;;;;;;;;;;;;;2515:18;;2493:19;;;:12;;;:19;;;;;;:40;;;;2547:11;;2293:319;-1:-1:-1;2596:5:2;2589:12;;2786:1388;2852:4;2989:19;;;:12;;;:19;;;;;;3023:15;;3019:1149;;3392:21;3416:14;3429:1;3416:10;:14;:::i;:::-;3464:18;;3392:38;;-1:-1:-1;3444:17:2;;3464:22;;3485:1;;3464:22;:::i;:::-;3444:42;;3518:13;3505:9;:26;3501:398;;3551:17;3571:3;:11;;3583:9;3571:22;;;;;;;;:::i;:::-;;;;;;;;;3551:42;;3722:9;3693:3;:11;;3705:13;3693:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;3805:23;;;:12;;;:23;;;;;:36;;;3501:398;3977:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;4069:3;:12;;:19;4082:5;4069:19;;;;;;;;;;;4062:26;;;4110:4;4103:11;;;;;;;3019:1149;4152:5;4145:12;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:180:7;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:7;;14:180;-1:-1:-1;14:180:7:o;199:423::-;241:3;279:5;273:12;306:6;301:3;294:19;331:1;341:162;355:6;352:1;349:13;341:162;;;417:4;473:13;;;469:22;;463:29;445:11;;;441:20;;434:59;370:12;341:162;;;345:3;548:1;541:4;532:6;527:3;523:16;519:27;512:38;611:4;604:2;600:7;595:2;587:6;583:15;579:29;574:3;570:39;566:50;559:57;;;199:423;;;;:::o;1064:1455::-;1660:6;1649:9;1642:25;1703:3;1698:2;1687:9;1683:18;1676:31;1623:4;1730:46;1771:3;1760:9;1756:19;1748:6;1730:46;:::i;:::-;1824:9;1816:6;1812:22;1807:2;1796:9;1792:18;1785:50;1858:33;1884:6;1876;1858:33;:::i;:::-;1844:47;;1939:9;1931:6;1927:22;1922:2;1911:9;1907:18;1900:50;1973:33;1999:6;1991;1973:33;:::i;:::-;1959:47;;2055:9;2047:6;2043:22;2037:3;2026:9;2022:19;2015:51;2083:33;2109:6;2101;2083:33;:::i;:::-;2075:41;;;2125:47;2167:3;2156:9;2152:19;2144:6;-1:-1:-1;;;;;693:31:7;681:44;;627:104;2125:47;2209:6;2203:3;2192:9;2188:19;2181:35;2253:6;2247:3;2236:9;2232:19;2225:35;2297:6;2291:3;2280:9;2276:19;2269:35;2341:6;2335:3;2324:9;2320:19;2313:35;2385:7;2379:3;2368:9;2364:19;2357:36;2402:48;2445:3;2434:9;2430:19;2421:7;-1:-1:-1;;;;;693:31:7;681:44;;627:104;2402:48;822:12;;815:20;808:28;2508:3;2493:19;;796:41;900:4;889:16;;883:23;876:31;869:39;853:14;;;846:63;972:4;961:16;;955:23;948:31;941:39;925:14;;;918:63;1044:4;1033:16;;1027:23;1020:31;1013:39;997:14;;;990:63;1064:1455;;;;;;;;;;;;;;;;:::o;2524:348::-;2576:8;2586:6;2640:3;2633:4;2625:6;2621:17;2617:27;2607:55;;2658:1;2655;2648:12;2607:55;-1:-1:-1;2681:20:7;;2724:18;2713:30;;2710:50;;;2756:1;2753;2746:12;2710:50;2793:4;2785:6;2781:17;2769:29;;2845:3;2838:4;2829:6;2821;2817:19;2813:30;2810:39;2807:59;;;2862:1;2859;2852:12;2807:59;2524:348;;;;;:::o;2877:479::-;2957:6;2965;2973;3026:2;3014:9;3005:7;3001:23;2997:32;2994:52;;;3042:1;3039;3032:12;2994:52;3078:9;3065:23;3055:33;;3139:2;3128:9;3124:18;3111:32;3166:18;3158:6;3155:30;3152:50;;;3198:1;3195;3188:12;3152:50;3237:59;3288:7;3279:6;3268:9;3264:22;3237:59;:::i;:::-;2877:479;;3315:8;;-1:-1:-1;3211:85:7;;-1:-1:-1;;;;2877:479:7:o;3361:248::-;3429:6;3437;3490:2;3478:9;3469:7;3465:23;3461:32;3458:52;;;3506:1;3503;3496:12;3458:52;-1:-1:-1;;3529:23:7;;;3599:2;3584:18;;;3571:32;;-1:-1:-1;3361:248:7:o;3614:127::-;3675:10;3670:3;3666:20;3663:1;3656:31;3706:4;3703:1;3696:15;3730:4;3727:1;3720:15;3746:241;3831:1;3824:5;3821:12;3811:143;;3876:10;3871:3;3867:20;3864:1;3857:31;3911:4;3908:1;3901:15;3939:4;3936:1;3929:15;3811:143;3963:18;;3746:241::o;3992:675::-;-1:-1:-1;;;;;4287:32:7;;4269:51;;4368:6;4356:19;;4351:2;4336:18;;4329:47;4307:3;4407:2;4392:18;;4385:31;;;-1:-1:-1;;4439:46:7;;4465:19;;4457:6;4439:46;:::i;:::-;4533:9;4525:6;4521:22;4516:2;4505:9;4501:18;4494:50;4561:33;4587:6;4579;4561:33;:::i;:::-;4553:41;;;4603:58;4656:3;4645:9;4641:19;4633:6;4603:58;:::i;:::-;3992:675;;;;;;;;:::o;4672:1079::-;4794:6;4802;4810;4818;4826;4834;4842;4895:3;4883:9;4874:7;4870:23;4866:33;4863:53;;;4912:1;4909;4902:12;4863:53;4952:9;4939:23;4981:18;5022:2;5014:6;5011:14;5008:34;;;5038:1;5035;5028:12;5008:34;5077:59;5128:7;5119:6;5108:9;5104:22;5077:59;:::i;:::-;5155:8;;-1:-1:-1;5051:85:7;-1:-1:-1;5243:2:7;5228:18;;5215:32;;-1:-1:-1;5259:16:7;;;5256:36;;;5288:1;5285;5278:12;5256:36;5327:61;5380:7;5369:8;5358:9;5354:24;5327:61;:::i;:::-;5407:8;;-1:-1:-1;5301:87:7;-1:-1:-1;5495:2:7;5480:18;;5467:32;;-1:-1:-1;5511:16:7;;;5508:36;;;5540:1;5537;5530:12;5508:36;;5579:61;5632:7;5621:8;5610:9;5606:24;5579:61;:::i;:::-;4672:1079;;;;-1:-1:-1;4672:1079:7;;;;;;5741:2;5726:18;;;5713:32;;4672:1079;-1:-1:-1;;;;4672:1079:7:o;6323:159::-;6390:20;;6450:6;6439:18;;6429:29;;6419:57;;6472:1;6469;6462:12;6419:57;6323:159;;;:::o;6487:184::-;6545:6;6598:2;6586:9;6577:7;6573:23;6569:32;6566:52;;;6614:1;6611;6604:12;6566:52;6637:28;6655:9;6637:28;:::i;6676:367::-;6739:8;6749:6;6803:3;6796:4;6788:6;6784:17;6780:27;6770:55;;6821:1;6818;6811:12;6770:55;-1:-1:-1;6844:20:7;;6887:18;6876:30;;6873:50;;;6919:1;6916;6909:12;6873:50;6956:4;6948:6;6944:17;6932:29;;7016:3;7009:4;6999:6;6996:1;6992:14;6984:6;6980:27;6976:38;6973:47;6970:67;;;7033:1;7030;7023:12;7048:1496;7274:6;7282;7290;7298;7306;7314;7322;7330;7338;7391:3;7379:9;7370:7;7366:23;7362:33;7359:53;;;7408:1;7405;7398:12;7359:53;7444:9;7431:23;7421:33;;7505:2;7494:9;7490:18;7477:32;7528:18;7569:2;7561:6;7558:14;7555:34;;;7585:1;7582;7575:12;7555:34;7624:70;7686:7;7677:6;7666:9;7662:22;7624:70;:::i;:::-;7713:8;;-1:-1:-1;7598:96:7;-1:-1:-1;7801:2:7;7786:18;;7773:32;;-1:-1:-1;7817:16:7;;;7814:36;;;7846:1;7843;7836:12;7814:36;7885:72;7949:7;7938:8;7927:9;7923:24;7885:72;:::i;:::-;7976:8;;-1:-1:-1;7859:98:7;-1:-1:-1;8064:2:7;8049:18;;8036:32;;-1:-1:-1;8080:16:7;;;8077:36;;;8109:1;8106;8099:12;8077:36;8148:72;8212:7;8201:8;8190:9;8186:24;8148:72;:::i;:::-;8239:8;;-1:-1:-1;8122:98:7;-1:-1:-1;8327:3:7;8312:19;;8299:33;;-1:-1:-1;8344:16:7;;;8341:36;;;8373:1;8370;8363:12;8341:36;;8412:72;8476:7;8465:8;8454:9;8450:24;8412:72;:::i;:::-;8386:98;;8503:8;8493:18;;;8530:8;8520:18;;;7048:1496;;;;;;;;;;;:::o;8757:173::-;8825:20;;-1:-1:-1;;;;;8874:31:7;;8864:42;;8854:70;;8920:1;8917;8910:12;8935:254;9003:6;9011;9064:2;9052:9;9043:7;9039:23;9035:32;9032:52;;;9080:1;9077;9070:12;9032:52;9116:9;9103:23;9093:33;;9145:38;9179:2;9168:9;9164:18;9145:38;:::i;:::-;9135:48;;8935:254;;;;;:::o;9636:1542::-;9828:4;9857:2;9897;9886:9;9882:18;9927:2;9916:9;9909:21;9950:6;9985;9979:13;10016:6;10008;10001:22;10042:2;10032:12;;10075:2;10064:9;10060:18;10053:25;;10137:2;10127:6;10124:1;10120:14;10109:9;10105:30;10101:39;10175:2;10167:6;10163:15;10196:1;10206:943;10220:6;10217:1;10214:13;10206:943;;;10285:22;;;-1:-1:-1;;10281:36:7;10269:49;;10341:13;;10413:9;;-1:-1:-1;;;;;10409:35:7;10394:51;;10492:11;;;10486:18;10506:6;10482:31;10465:15;;;10458:56;10553:11;;;10547:18;10377:4;10585:15;;;10578:27;;;10377:4;10632:48;10664:15;;;10547:18;10632:48;:::i;:::-;10618:62;;;10703:4;10756:2;10752;10748:11;10742:18;10809:6;10801;10797:19;10792:2;10784:6;10780:15;10773:44;10844:41;10878:6;10862:14;10844:41;:::i;:::-;10830:55;;;;10908:4;10961:2;10957;10953:11;10947:18;10925:40;;10978:62;11036:2;11028:6;11024:15;11008:14;10978:62;:::i;:::-;-1:-1:-1;11127:12:7;;;;11063:6;-1:-1:-1;;11092:15:7;;;;10242:1;10235:9;10206:943;;;-1:-1:-1;11166:6:7;;9636:1542;-1:-1:-1;;;;;;;;9636:1542:7:o;11183:979::-;11402:2;11454:21;;;11524:13;;11427:18;;;11546:22;;;11373:4;;11402:2;11587;;11605:18;;;;11646:15;;;11373:4;11689:447;11703:6;11700:1;11697:13;11689:447;;;11762:13;;11804:9;;-1:-1:-1;;;;;11800:35:7;11788:48;;11876:11;;;11870:18;11856:12;;;11849:40;11943:11;;;11937:18;11930:26;11923:34;11909:12;;;11902:56;11981:4;12039:11;;;12033:18;12026:26;12019:34;12005:12;;;11998:56;12083:4;12074:14;;;;12111:15;;;;11832:1;11718:9;11689:447;;;-1:-1:-1;12153:3:7;;11183:979;-1:-1:-1;;;;;;;11183:979:7:o;12167:186::-;12226:6;12279:2;12267:9;12258:7;12254:23;12250:32;12247:52;;;12295:1;12292;12285:12;12247:52;12318:29;12337:9;12318:29;:::i;12358:380::-;12437:1;12433:12;;;;12480;;;12501:61;;12555:4;12547:6;12543:17;12533:27;;12501:61;12608:2;12600:6;12597:14;12577:18;12574:38;12571:161;;12654:10;12649:3;12645:20;12642:1;12635:31;12689:4;12686:1;12679:15;12717:4;12714:1;12707:15;12571:161;;12358:380;;;:::o;13574:399::-;13776:2;13758:21;;;13815:2;13795:18;;;13788:30;13854:34;13849:2;13834:18;;13827:62;-1:-1:-1;;;13920:2:7;13905:18;;13898:33;13963:3;13948:19;;13574:399::o;13978:127::-;14039:10;14034:3;14030:20;14027:1;14020:31;14070:4;14067:1;14060:15;14094:4;14091:1;14084:15;14236:543;14338:2;14333:3;14330:11;14327:446;;;14374:1;14398:5;14395:1;14388:16;14442:4;14439:1;14429:18;14512:2;14500:10;14496:19;14493:1;14489:27;14483:4;14479:38;14548:4;14536:10;14533:20;14530:47;;;-1:-1:-1;14571:4:7;14530:47;14626:2;14621:3;14617:12;14614:1;14610:20;14604:4;14600:31;14590:41;;14681:82;14699:2;14692:5;14689:13;14681:82;;;14744:17;;;14725:1;14714:13;14681:82;;;14685:3;;;14236:543;;;:::o;14955:1206::-;15079:18;15074:3;15071:27;15068:53;;;15101:18;;:::i;:::-;15130:94;15220:3;15180:38;15212:4;15206:11;15180:38;:::i;:::-;15174:4;15130:94;:::i;:::-;15250:1;15275:2;15270:3;15267:11;15292:1;15287:616;;;;15947:1;15964:3;15961:93;;;-1:-1:-1;16020:19:7;;;16007:33;15961:93;-1:-1:-1;;14912:1:7;14908:11;;;14904:24;14900:29;14890:40;14936:1;14932:11;;;14887:57;16067:78;;15260:895;;15287:616;14183:1;14176:14;;;14220:4;14207:18;;-1:-1:-1;;15323:17:7;;;15424:9;15446:229;15460:7;15457:1;15454:14;15446:229;;;15549:19;;;15536:33;15521:49;;15656:4;15641:20;;;;15609:1;15597:14;;;;15476:12;15446:229;;;15450:3;15703;15694:7;15691:16;15688:159;;;15827:1;15823:6;15817:3;15811;15808:1;15804:11;15800:21;15796:34;15792:39;15779:9;15774:3;15770:19;15757:33;15753:79;15745:6;15738:95;15688:159;;;15890:1;15884:3;15881:1;15877:11;15873:19;15867:4;15860:33;15260:895;;;14955:1206;;;:::o;16166:127::-;16227:10;16222:3;16218:20;16215:1;16208:31;16258:4;16255:1;16248:15;16282:4;16279:1;16272:15;16298:125;16363:9;;;16384:10;;;16381:36;;;16397:18;;:::i;16428:273::-;16613:6;16605;16600:3;16587:33;16569:3;16639:16;;16664:13;;;16639:16;16428:273;-1:-1:-1;16428:273:7:o;17913:168::-;17986:9;;;18017;;18034:15;;;18028:22;;18014:37;18004:71;;18055:18;;:::i;18086:1345::-;18212:3;18206:10;18239:18;18231:6;18228:30;18225:56;;;18261:18;;:::i;:::-;18290:97;18380:6;18340:38;18372:4;18366:11;18340:38;:::i;:::-;18334:4;18290:97;:::i;:::-;18442:4;;18499:2;18488:14;;18516:1;18511:663;;;;19218:1;19235:6;19232:89;;;-1:-1:-1;19287:19:7;;;19281:26;19232:89;-1:-1:-1;;14912:1:7;14908:11;;;14904:24;14900:29;14890:40;14936:1;14932:11;;;14887:57;19334:81;;18481:944;;18511:663;14183:1;14176:14;;;14220:4;14207:18;;-1:-1:-1;;18547:20:7;;;18665:236;18679:7;18676:1;18673:14;18665:236;;;18768:19;;;18762:26;18747:42;;18860:27;;;;18828:1;18816:14;;;;18695:19;;18665:236;;;18669:3;18929:6;18920:7;18917:19;18914:201;;;18990:19;;;18984:26;-1:-1:-1;;19073:1:7;19069:14;;;19085:3;19065:24;19061:37;19057:42;19042:58;19027:74;;18914:201;-1:-1:-1;;;;;19161:1:7;19145:14;;;19141:22;19128:36;;-1:-1:-1;18086:1345:7:o;19436:135::-;19475:3;19496:17;;;19493:43;;19516:18;;:::i;:::-;-1:-1:-1;19563:1:7;19552:13;;19436:135::o;21292:127::-;21353:10;21348:3;21344:20;21341:1;21334:31;21384:4;21381:1;21374:15;21408:4;21405:1;21398:15;24455:522;24533:4;24539:6;24599:11;24586:25;24693:2;24689:7;24678:8;24662:14;24658:29;24654:43;24634:18;24630:68;24620:96;;24712:1;24709;24702:12;24620:96;24739:33;;24791:20;;;-1:-1:-1;24834:18:7;24823:30;;24820:50;;;24866:1;24863;24856:12;24820:50;24899:4;24887:17;;-1:-1:-1;24930:14:7;24926:27;;;24916:38;;24913:58;;;24967:1;24964;24957:12;24982:267;25071:6;25066:3;25059:19;25123:6;25116:5;25109:4;25104:3;25100:14;25087:43;-1:-1:-1;25175:1:7;25150:16;;;25168:4;25146:27;;;25139:38;;;;25231:2;25210:15;;;-1:-1:-1;;25206:29:7;25197:39;;;25193:50;;24982:267::o;25254:1049::-;25332:3;25363;25387:6;25382:3;25375:19;25413:4;25442;25437:3;25433:14;25426:21;;25500:4;25490:6;25487:1;25483:14;25476:5;25472:26;25468:37;25528:5;25551:1;25561:716;25575:6;25572:1;25569:13;25561:716;;;25640:16;;;-1:-1:-1;;25636:30:7;25624:43;;25706:20;;25781:14;25777:26;;;-1:-1:-1;;25773:40:7;25749:65;;25739:93;;25828:1;25825;25818:12;25739:93;25860:30;;25968:16;;;;25919:21;26013:18;26000:32;;25997:52;;;26045:1;26042;26035:12;25997:52;26098:8;26082:14;26078:29;26069:7;26065:43;26062:63;;;26121:1;26118;26111:12;26062:63;26146:51;26192:4;26182:8;26173:7;26146:51;:::i;:::-;26255:12;;;;26138:59;-1:-1:-1;;;26220:15:7;;;;25597:1;25590:9;25561:716;;;-1:-1:-1;26293:4:7;;25254:1049;-1:-1:-1;;;;;;;25254:1049:7:o;26308:1664::-;26814:3;26827:22;;;26799:19;;26884:22;;;26766:4;26964:6;26937:3;26922:19;;26766:4;26998:235;27012:6;27009:1;27006:13;26998:235;;;-1:-1:-1;;;;;27077:26:7;27096:6;27077:26;:::i;:::-;27073:52;27061:65;;27149:4;27208:15;;;;27173:12;;;;27034:1;27027:9;26998:235;;;-1:-1:-1;27294:19:7;;;27252:4;27272:20;;;27265:49;;;;27348:19;;;27252:4;-1:-1:-1;27424:6:7;;27385:14;;27450:1;27460:212;27476:6;27471:3;27468:15;27460:212;;;27576:6;27547:27;27565:8;27547:27;:::i;:::-;27543:40;27529:55;;27645:17;;;;27606:14;;;;27502:1;27493:11;27460:212;;;27464:3;27719:9;27712:5;27708:21;27703:2;27692:9;27688:18;27681:49;27753:68;27815:5;27807:6;27799;27753:68;:::i;:::-;27739:82;;;;27869:9;27861:6;27857:22;27852:2;27841:9;27837:18;27830:50;27897:69;27959:6;27951;27943;27897:69;:::i;:::-;27889:77;26308:1664;-1:-1:-1;;;;;;;;;;;26308:1664:7:o;30726:410::-;30928:2;30910:21;;;30967:2;30947:18;;;30940:30;31006:34;31001:2;30986:18;;30979:62;-1:-1:-1;;;31072:2:7;31057:18;;31050:44;31126:3;31111:19;;30726:410::o;37858:217::-;37898:1;37924;37914:132;;37968:10;37963:3;37959:20;37956:1;37949:31;38003:4;38000:1;37993:15;38031:4;38028:1;38021:15;37914:132;-1:-1:-1;38060:9:7;;37858:217::o;38441:128::-;38508:9;;;38529:11;;;38526:37;;;38543:18;;:::i;38574:127::-;38635:10;38630:3;38626:20;38623:1;38616:31;38666:4;38663:1;38656:15;38690:4;38687:1;38680:15

Swarm Source

ipfs://9339730d2849fb4adedab4599e3c2078ea674903da5e4b33fa0c86a38786b004
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading