false
false
0

Contract Address Details

0xFe2bbc3D86C3e4666D3E352f68B2a224cAC28238

Contract Name
GraphicsLibrary
Creator
0xebe894–7a24f6 at 0xc624c6–9983a8
Balance
0 CLO
Tokens
Fetching tokens...
Transactions
33 Transactions
Transfers
0 Transfers
Gas Used
68,184,224
Last Balance Update
16286858
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
GraphicsLibrary




Optimization enabled
false
Compiler version
v0.8.16+commit.07a7930e




EVM Version
default




Verified at
2024-11-15T17:33:57.875912Z

Constructor Arguments

0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000926646174613a696d6167652f706e673b6261736536342c6956424f5277304b47676f414141414e53556845556741414145414141414241434159414141437161584865414141414358424957584d41414148594141414232414836584b5a7941414141475852465748525462325a30643246795a514233643363756157357263324e686347557562334a6e6d2b343847674141426c6c4a52454655654a7a746d6d317355315559782f2f50376573474346536d307777556e646e5743674d334d45484137695551536643447751392b45424d684d535269416967674c61544b4f706b4a666f49454e52726a467a56385554457851626f74444348697875526c48516744596b5a673868356d74335874656679776464783732397664647430745966306c54653835357a6e502b5a2b6e3539357a6573344663755359304a41656f7a78587861776f78454a69504d6b6b38735a62314667676c766f59664e5645706a2f364f74722b4764552b576148645656346c424e55525956486d4a426f484d34354b456e76374f30343261646d594e50496c75374f386e6b4666456d486d4f4f6b62643461303032704c77655032795057654a674373746b6b59674f484f6278313368635a414143323246425261497465764e53596f56474a336c56637855357a6851774354684f722b4d333831797a4d6c745a5551564765594a474d68466f6a726d324945354c6b715a676d4f586c626e7132726342584345474b476b7a54466d4d3645794c616c7854654a50426d34417141566753574153424841425144574179636c5553575978712b2f5571653559686c6c65476f5659534d6c6e686c36536f692f306e7a3539555939776d327665703242386f4d645747397254483278664477443273766c4c6d62675a536f302f44675366577758736a39704b357062414a4a30416b4b2f6c4c426f31765168674a41434b5734416743704e7159527a5632336b415943472b315775723753507952657936763750394d49447a43674f4a76774c3252774667344e79706332416353656150494a35515646655657354f71495254443754596e745648596b314f337252596d30357a59356554692b51565154637373614f3549346d6d3348595452326c54305558396e686e6a4739752b646e3967353778754a36626157455a75454249614c6d5477702b6f2b444748747472764a43417430635a4e3441686d496c5373414f7132752b47637864784866574169684b78582b7141514341465153735949706255397848554578634a7067477074314a57724d52383066704e686733445534304a6e7741464c63414d2f5649684c5a73695445437764535462513035636a78414b43614f327135645578486c52374d6c7868424d645050517331767678704c4b6832413473675a4d753431585a5342523367546773316879776b2b447551426b573043327951556732774b7954533441325261516256494a774c7457797853374a50454341484648546754366a6f454b4a6e34567747554e487963414c4850776f433367394a4438342b424247354f30484f42326a627158514c52536b46514a34507634396e4842424d7935453570684a6359614a44674553595465445a4757674e4f7a642f69367461616a766837452b32546c505a4765384f726d4b6c384577496e717a6a6f513038387148386444552f4c6378325a7537457655774836584c777a67344d70573335465176715556514a6e43674f6939514e6d3258774441336552373031526f7251627a5937466941545163636e724f4443652f72676e3633774b77644c534f36526f42424f705770496d3756535958687a7350414744697639552b6d4869445675666c484b6a306853536964657038516447527a64446d4b6c38457a46337963676d3471744a385a6253326875735a516d396a7165655958755066536a3838444978793770416830746b54544964376f507562694b39332b4b793379484a50627041664770782b6f4e493331476b695274422f463972372b786b6a4b374e4172395642474e716548766b4d57435a6c614138314e584c54594c59465a4274397a77446953664c6b3764434d67336e57573435596d7131534a4c35535a6a46467a59726e5162396b586b35684d614b2f4c2b7a6f546365767267417738384b4b31733874625a587644414c41384c666d796444344942594447466b6b2f563636355634535939336f7641576f634e716b472b396e6f7346305957447a4b2b6672437a4c74562f387a674f4776436459314c4f2f774f5559334867634952514e68506c7a6275644d4e356f7a4e474b6d73417769677a524779624b774a2b712b41455a5756745164636e6c575a457155706746444b4c445856647462663567362f3868593059573267314b50354e706757365379457a41436555683145476e726177734230454b624c3830696b74326961384e4e674c67414774574f544a3334745868384730534c355a3948632f39542f464131354a64656f50304f4f5a5764337a6a355975763053414943494134446933324641647533752b4b5159454e4f4d454a61684563423265636f636c654a2b76616951664871396d596b2f546c5742494835456c544e565437304d42594363565764336c74775867396353474b32754366723376485332595971576c39717558564e724f76333747507847796770596574743979576348674756422f2f4d4d656c6c5850586d6970724e7534786a4f426d387838414d78696b42596d635175424b414e6f41466c4e7473425647424d397a3566412b6a6973423962516850695459457937386a5a594361664151344331756c3455536b6677424b6465355970516f55416b722f7271454a78437a41517a716965427846576a6a7a6c6d364a43756d617347754d684973586d715849456d4d55786a4d2f5966464467534e6830584a36684345426a6966634b4d34346171386c515770724c74796932394f4f6d51556b53586a79636f3444423546566e78675867554e6e325a6a42324761504a4f426a734437693274616a7a457936456c6a67487653437578384d784570674166324f5a5a3065697771537a646e577762696d423667417348733332415951427449444a6d2b69586a364772552b3654445557535a5843427846516b61507850613861437841674a346d3659634c7978784b7672664442486a676e4d2f7766512f645a643478715a4141414141456c46546b5375516d43430000000000000000000000000000000000000000000000000000

Arg [0] (string) : data:image/png;base64,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

              

Contract source code

// SPDX-License-Identifier: GPL-3.0-only
// Author: Upaut (CallistoDAO)

pragma solidity ^0.8.16;

contract GraphicsLibrary {

    struct Resource{ // структура описывающая графический элемент
        bytes32 hash; // хэш графического элемента
        bytes32 next; // указатель на следующий графический элемент
        string base64; // данные графического элемента представленные в base64
    }    

    address public owner = msg.sender; // Владелец
    bytes32 public last_elem; // Хэш последнего элемента в списке графических элементов

    mapping(bytes32 => Resource) private resources; // односвязный список всех графических элементов
    mapping(address => bool) private admins; // доверенные адреса которые могут добавлять новые иконки 

    modifier onlyOwner() {
        require(msg.sender == owner, "Only owner can call this");
        _;
    }

    modifier onlyAdmins() {
        require(admins[msg.sender] == true, "Only admins can call this");
        _;
    }


    constructor(string memory _base64) { // добавим графический элемент который будет возвращаться всегда при запросе некорректного хэша графического элемента
        resources[last_elem] = Resource(0, 0, _base64); // добавление нового графического элемента
    }


    function addIcon(string memory _base64) external onlyAdmins { // Добавление нового графического элемента
        require(bytes(_base64).length != 0); // данные графического элемента в base64 не могут быть пустой строкой
        bytes32 _hash = keccak256(abi.encodePacked(_base64)); // получаем хэш данных графического элемента
        require(resources[_hash].hash == 0, "Such a picture exists");
        resources[last_elem].next = _hash; // последний элемент списка должен указывать на новый элемент
        last_elem = _hash; // новый элемент становится последним в списке
        resources[_hash] = Resource(_hash, 0, _base64); // добавление нового графического элемента
    }

    function getIcon(bytes32 _hash) public view returns (string memory) { // возвращаем графический элемент в base64 по его хэшу
        bytes32 check_hash = resources[_hash].hash; // контрольная проверка хэша, если не существует графического элемента по данному хэшу будем возвращен элемент заданный конструктором контракта
        return (resources[check_hash].base64);
    }

    function getIconsList(bytes32 _hash_start, uint _amount) public view returns (Resource[] memory) { // возвращаем указанное количество графических элементов списка начиная со стартового
        _hash_start = resources[_hash_start].hash; // контрольная проверка, если хэша не существует, то список формируется сначала
        Resource[] memory result = new Resource[](_amount);  
        for(uint i; i < _amount; i++){
            result[i] = resources[_hash_start]; // добавляем в массив графический элемент
            if(resources[_hash_start].next == 0){ // достигли конца списка
                break; 
            } else {
                _hash_start = resources[_hash_start].next;
            }
        }
        return (result); // возвращаем массив с инфой по токенам
    }

    function getHash(string memory _base64) public pure returns (bytes32) { // возвращаем хэш графического элемента переданного в формате base64
        return (keccak256(abi.encodePacked(_base64)));
    }


    // ФУНКЦИИ ВЛАДЕЛЬЦА

    function addAdmin(address _admin) external onlyOwner { // добавить админа
        admins[_admin] = true;
    }

    function delAdmin(address _admin) external onlyOwner { // удалить админа
        admins[_admin] = false;
    }

    function isAdmin(address _admin) public view returns (bool) { // проверяем является ли адрес админом
        return (admins[_admin]);
    }
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"string","name":"_base64","internalType":"string"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addAdmin","inputs":[{"type":"address","name":"_admin","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addIcon","inputs":[{"type":"string","name":"_base64","internalType":"string"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"delAdmin","inputs":[{"type":"address","name":"_admin","internalType":"address"}]},{"type":"function","stateMutability":"pure","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"getHash","inputs":[{"type":"string","name":"_base64","internalType":"string"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"getIcon","inputs":[{"type":"bytes32","name":"_hash","internalType":"bytes32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple[]","name":"","internalType":"struct GraphicsLibrary.Resource[]","components":[{"type":"bytes32","name":"hash","internalType":"bytes32"},{"type":"bytes32","name":"next","internalType":"bytes32"},{"type":"string","name":"base64","internalType":"string"}]}],"name":"getIconsList","inputs":[{"type":"bytes32","name":"_hash_start","internalType":"bytes32"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isAdmin","inputs":[{"type":"address","name":"_admin","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"last_elem","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]}]
              

Contract Creation Code

Verify & Publish
0x6080604052336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200005157600080fd5b50604051620019d3380380620019d3833981810160405281019062000077919062000276565b60405180606001604052806000801b81526020016000801b81526020018281525060026000600154815260200190815260200160002060008201518160000155602082015181600101556040820151816002019081620000d8919062000512565b5090505050620005f9565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200014c8262000101565b810181811067ffffffffffffffff821117156200016e576200016d62000112565b5b80604052505050565b600062000183620000e3565b905062000191828262000141565b919050565b600067ffffffffffffffff821115620001b457620001b362000112565b5b620001bf8262000101565b9050602081019050919050565b60005b83811015620001ec578082015181840152602081019050620001cf565b60008484015250505050565b60006200020f620002098462000196565b62000177565b9050828152602081018484840111156200022e576200022d620000fc565b5b6200023b848285620001cc565b509392505050565b600082601f8301126200025b576200025a620000f7565b5b81516200026d848260208601620001f8565b91505092915050565b6000602082840312156200028f576200028e620000ed565b5b600082015167ffffffffffffffff811115620002b057620002af620000f2565b5b620002be8482850162000243565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200031a57607f821691505b60208210810362000330576200032f620002d2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200039a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200035b565b620003a686836200035b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003f3620003ed620003e784620003be565b620003c8565b620003be565b9050919050565b6000819050919050565b6200040f83620003d2565b620004276200041e82620003fa565b84845462000368565b825550505050565b600090565b6200043e6200042f565b6200044b81848462000404565b505050565b5b8181101562000473576200046760008262000434565b60018101905062000451565b5050565b601f821115620004c2576200048c8162000336565b62000497846200034b565b81016020851015620004a7578190505b620004bf620004b6856200034b565b83018262000450565b50505b505050565b600082821c905092915050565b6000620004e760001984600802620004c7565b1980831691505092915050565b6000620005028383620004d4565b9150826002028217905092915050565b6200051d82620002c7565b67ffffffffffffffff81111562000539576200053862000112565b5b62000545825462000301565b6200055282828562000477565b600060209050601f8311600181146200058a576000841562000575578287015190505b620005818582620004f4565b865550620005f1565b601f1984166200059a8662000336565b60005b82811015620005c4578489015182556001820191506020850194506020810190506200059d565b86831015620005e45784890151620005e0601f891682620004d4565b8355505b6001600288020188555050505b505050505050565b6113ca80620006096000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c806362d918551161006657806362d9185514610132578063704802751461014e57806378c1dbd01461016a5780638da5cb5b1461019a578063bac6dd6d146101b857610093565b806324506c671461009857806324d7806c146100b45780633735d8a9146100e45780635b6beeb914610102575b600080fd5b6100b260048036038101906100ad9190610a14565b6101e8565b005b6100ce60048036038101906100c99190610abb565b610395565b6040516100db9190610b03565b60405180910390f35b6100ec6103eb565b6040516100f99190610b37565b60405180910390f35b61011c60048036038101906101179190610a14565b6103f1565b6040516101299190610b37565b60405180910390f35b61014c60048036038101906101479190610abb565b610421565b005b61016860048036038101906101639190610abb565b61050a565b005b610184600480360381019061017f9190610bb4565b6105f3565b6040516101919190610d94565b60405180910390f35b6101a26107ab565b6040516101af9190610dc5565b60405180910390f35b6101d260048036038101906101cd9190610de0565b6107cf565b6040516101df9190610e57565b60405180910390f35b60011515600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461027b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027290610ec5565b60405180910390fd5b600081510361028957600080fd5b60008160405160200161029c9190610f21565b6040516020818303038152906040528051906020012090506000801b60026000838152602001908152602001600020600001541461030f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030690610f84565b60405180910390fd5b80600260006001548152602001908152602001600020600101819055508060018190555060405180606001604052808281526020016000801b815260200183815250600260008381526020019081526020016000206000820151816000015560208201518160010155604082015181600201908161038d91906111b0565b509050505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60015481565b6000816040516020016104049190610f21565b604051602081830303815290604052805190602001209050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a6906112ce565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058f906112ce565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60606002600084815260200190815260200160002060000154925060008267ffffffffffffffff81111561062a576106296108e9565b5b60405190808252806020026020018201604052801561066357816020015b610650610893565b8152602001906001900390816106485790505b50905060005b838110156107a0576002600086815260200190815260200160002060405180606001604052908160008201548152602001600182015481526020016002820180546106b390610fd3565b80601f01602080910402602001604051908101604052809291908181526020018280546106df90610fd3565b801561072c5780601f106107015761010080835404028352916020019161072c565b820191906000526020600020905b81548152906001019060200180831161070f57829003601f168201915b505050505081525050828281518110610748576107476112ee565b5b60200260200101819052506000801b600260008781526020019081526020016000206001015403156107a0576002600086815260200190815260200160002060010154945080806107989061134c565b915050610669565b508091505092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060006002600084815260200190815260200160002060000154905060026000828152602001908152602001600020600201805461080d90610fd3565b80601f016020809104026020016040519081016040528092919081815260200182805461083990610fd3565b80156108865780601f1061085b57610100808354040283529160200191610886565b820191906000526020600020905b81548152906001019060200180831161086957829003601f168201915b5050505050915050919050565b60405180606001604052806000801916815260200160008019168152602001606081525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610921826108d8565b810181811067ffffffffffffffff821117156109405761093f6108e9565b5b80604052505050565b60006109536108ba565b905061095f8282610918565b919050565b600067ffffffffffffffff82111561097f5761097e6108e9565b5b610988826108d8565b9050602081019050919050565b82818337600083830152505050565b60006109b76109b284610964565b610949565b9050828152602081018484840111156109d3576109d26108d3565b5b6109de848285610995565b509392505050565b600082601f8301126109fb576109fa6108ce565b5b8135610a0b8482602086016109a4565b91505092915050565b600060208284031215610a2a57610a296108c4565b5b600082013567ffffffffffffffff811115610a4857610a476108c9565b5b610a54848285016109e6565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610a8882610a5d565b9050919050565b610a9881610a7d565b8114610aa357600080fd5b50565b600081359050610ab581610a8f565b92915050565b600060208284031215610ad157610ad06108c4565b5b6000610adf84828501610aa6565b91505092915050565b60008115159050919050565b610afd81610ae8565b82525050565b6000602082019050610b186000830184610af4565b92915050565b6000819050919050565b610b3181610b1e565b82525050565b6000602082019050610b4c6000830184610b28565b92915050565b610b5b81610b1e565b8114610b6657600080fd5b50565b600081359050610b7881610b52565b92915050565b6000819050919050565b610b9181610b7e565b8114610b9c57600080fd5b50565b600081359050610bae81610b88565b92915050565b60008060408385031215610bcb57610bca6108c4565b5b6000610bd985828601610b69565b9250506020610bea85828601610b9f565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610c2981610b1e565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610c69578082015181840152602081019050610c4e565b60008484015250505050565b6000610c8082610c2f565b610c8a8185610c3a565b9350610c9a818560208601610c4b565b610ca3816108d8565b840191505092915050565b6000606083016000830151610cc66000860182610c20565b506020830151610cd96020860182610c20565b5060408301518482036040860152610cf18282610c75565b9150508091505092915050565b6000610d0a8383610cae565b905092915050565b6000602082019050919050565b6000610d2a82610bf4565b610d348185610bff565b935083602082028501610d4685610c10565b8060005b85811015610d825784840389528151610d638582610cfe565b9450610d6e83610d12565b925060208a01995050600181019050610d4a565b50829750879550505050505092915050565b60006020820190508181036000830152610dae8184610d1f565b905092915050565b610dbf81610a7d565b82525050565b6000602082019050610dda6000830184610db6565b92915050565b600060208284031215610df657610df56108c4565b5b6000610e0484828501610b69565b91505092915050565b600082825260208201905092915050565b6000610e2982610c2f565b610e338185610e0d565b9350610e43818560208601610c4b565b610e4c816108d8565b840191505092915050565b60006020820190508181036000830152610e718184610e1e565b905092915050565b7f4f6e6c792061646d696e732063616e2063616c6c207468697300000000000000600082015250565b6000610eaf601983610e0d565b9150610eba82610e79565b602082019050919050565b60006020820190508181036000830152610ede81610ea2565b9050919050565b600081905092915050565b6000610efb82610c2f565b610f058185610ee5565b9350610f15818560208601610c4b565b80840191505092915050565b6000610f2d8284610ef0565b915081905092915050565b7f5375636820612070696374757265206578697374730000000000000000000000600082015250565b6000610f6e601583610e0d565b9150610f7982610f38565b602082019050919050565b60006020820190508181036000830152610f9d81610f61565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610feb57607f821691505b602082108103610ffe57610ffd610fa4565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026110667fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611029565b6110708683611029565b95508019841693508086168417925050509392505050565b6000819050919050565b60006110ad6110a86110a384610b7e565b611088565b610b7e565b9050919050565b6000819050919050565b6110c783611092565b6110db6110d3826110b4565b848454611036565b825550505050565b600090565b6110f06110e3565b6110fb8184846110be565b505050565b5b8181101561111f576111146000826110e8565b600181019050611101565b5050565b601f8211156111645761113581611004565b61113e84611019565b8101602085101561114d578190505b61116161115985611019565b830182611100565b50505b505050565b600082821c905092915050565b600061118760001984600802611169565b1980831691505092915050565b60006111a08383611176565b9150826002028217905092915050565b6111b982610c2f565b67ffffffffffffffff8111156111d2576111d16108e9565b5b6111dc8254610fd3565b6111e7828285611123565b600060209050601f83116001811461121a5760008415611208578287015190505b6112128582611194565b86555061127a565b601f19841661122886611004565b60005b828110156112505784890151825560018201915060208501945060208101905061122b565b8683101561126d5784890151611269601f891682611176565b8355505b6001600288020188555050505b505050505050565b7f4f6e6c79206f776e65722063616e2063616c6c20746869730000000000000000600082015250565b60006112b8601883610e0d565b91506112c382611282565b602082019050919050565b600060208201905081810360008301526112e7816112ab565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061135782610b7e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036113895761138861131d565b5b60018201905091905056fea2646970667358221220ad4a4f6e9ec370339ea0c84d0460e73017be769687ead40cda44e0702a8cef8b64736f6c6343000810003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000926646174613a696d6167652f706e673b6261736536342c6956424f5277304b47676f414141414e53556845556741414145414141414241434159414141437161584865414141414358424957584d41414148594141414232414836584b5a7941414141475852465748525462325a30643246795a514233643363756157357263324e686347557562334a6e6d2b343847674141426c6c4a52454655654a7a746d6d317355315559782f2f50376573474346536d307777556e646e5743674d334d45484137695551536643447751392b45424d684d535269416967674c61544b4f706b4a666f49454e52726a467a56385554457851626f74444348697875526c48516744596b5a673868356d74335874656679776464783732397664647430745966306c54653835357a6e502b5a2b6e3539357a6573344663755359304a41656f7a78587861776f78454a69504d6b6b38735a62314667676c766f59664e5645706a2f364f74722b4764552b576148645656346c424e55525956486d4a426f484d34354b456e76374f30343261646d594e50496c75374f386e6b4666456d486d4f4f6b62643461303032704c77655032795057654a674373746b6b59674f484f6278313368635a414143323246425261497465764e53596f56474a336c56637855357a6851774354684f722b4d333831797a4d6c745a5551564765594a474d68466f6a726d324945354c6b715a676d4f586c626e7132726342584345474b476b7a54466d4d3645794c616c7854654a50426d34417141566753574153424841425144574179636c5553575978712b2f5571653559686c6c65476f5659534d6c6e686c36536f692f306e7a3539555939776d327665703242386f4d645747397254483278664477443273766c4c6d62675a536f302f44675366577758736a39704b357062414a4a30416b4b2f6c4c426f31765168674a41434b5734416743704e7159527a5632336b415943472b315775723753507952657936763750394d49447a43674f4a76774c3252774667344e79706332416353656150494a35515646655657354f71495254443754596e745648596b314f337252596d30357a59356554692b51565154637373614f3549346d6d3348595452326c54305558396e686e6a4739752b646e3967353778754a36626157455a75454249614c6d5477702b6f2b444748747472764a43417430635a4e3441686d496c5373414f7132752b47637864784866574169684b78582b7141514341465153735949706255397848554578634a7067477074314a57724d52383066704e686733445534304a6e7741464c63414d2f5649684c5a73695445437764535462513035636a78414b43614f327135645578486c52374d6c7868424d645050517331767678704c4b6832413473675a4d753431585a5342523367546773316879776b2b447551426b573043327951556732774b7954533441325261516256494a774c7457797853374a50454341484648546754366a6f454b4a6e34567747554e487963414c4850776f433367394a4438342b424247354f30484f42326a627158514c52536b46514a34507634396e4842424d7935453570684a6359614a44674553595465445a4757674e4f7a642f69367461616a766837452b32546c505a4765384f726d4b6c384577496e717a6a6f513038387148386444552f4c6378325a7537457655774836584c777a67344d70573335465176715556514a6e43674f6939514e6d3258774441336552373031526f7251627a5937466941545163636e724f4443652f72676e3633774b77644c534f36526f42424f705770496d3756535958687a7350414744697639552b6d4869445675666c484b6a306853536964657038516447527a64446d4b6c38457a46337963676d3471744a385a6253326875735a516d396a7165655958755066536a3838444978793770416830746b54544964376f507562694b39332b4b793379484a50627041664770782b6f4e493331476b695274422f463972372b786b6a4b374e4172395642474e716548766b4d57435a6c614138314e584c54594c59465a4274397a77446953664c6b3764434d67336e57573435596d7131534a4c35535a6a46467a59726e5162396b586b35684d614b2f4c2b7a6f546365767267417738384b4b31733874625a587644414c41384c666d796444344942594447466b6b2f563636355634535939336f7641576f634e716b472b396e6f7346305957447a4b2b6672437a4c74562f387a674f4776436459314c4f2f774f5559334867634952514e68506c7a6275644d4e356f7a4e474b6d73417769677a524779624b774a2b712b41455a5756745164636e6c575a457155706746444b4c445856647462663567362f3868593059573267314b50354e706757365379457a41436555683145476e726177734230454b624c3830696b74326961384e4e674c67414774574f544a3334745868384730534c355a3948632f39542f464131354a64656f50304f4f5a5764337a6a355975763053414943494134446933324641647533752b4b5159454e4f4d454a61684563423265636f636c654a2b76616951664871396d596b2f546c5742494835456c544e565437304d42594363565764336c74775867396353474b32754366723376485332595971576c39717558564e724f76333747507847796770596574743979576348674756422f2f4d4d656c6c5850586d6970724e7534786a4f426d387838414d78696b42596d635175424b414e6f41466c4e7473425647424d397a3566412b6a6973423962516850695459457937386a5a594361664151344331756c3455536b6677424b6465355970516f55416b722f7271454a78437a41517a716965427846576a6a7a6c6d364a43756d617347754d684973586d715849456d4d55786a4d2f5966464467534e6830584a36684345426a6966634b4d34346171386c515770724c74796932394f4f6d51556b53586a79636f3444423546566e78675867554e6e325a6a42324761504a4f426a734437693274616a7a457936456c6a67487653437578384d784570674166324f5a5a3065697771537a646e577762696d423667417348733332415951427449444a6d2b69586a364772552b3654445557535a5843427846516b61507850613861437841674a346d3659634c7978784b7672664442486a676e4d2f7766512f645a643478715a4141414141456c46546b5375516d43430000000000000000000000000000000000000000000000000000

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106100935760003560e01c806362d918551161006657806362d9185514610132578063704802751461014e57806378c1dbd01461016a5780638da5cb5b1461019a578063bac6dd6d146101b857610093565b806324506c671461009857806324d7806c146100b45780633735d8a9146100e45780635b6beeb914610102575b600080fd5b6100b260048036038101906100ad9190610a14565b6101e8565b005b6100ce60048036038101906100c99190610abb565b610395565b6040516100db9190610b03565b60405180910390f35b6100ec6103eb565b6040516100f99190610b37565b60405180910390f35b61011c60048036038101906101179190610a14565b6103f1565b6040516101299190610b37565b60405180910390f35b61014c60048036038101906101479190610abb565b610421565b005b61016860048036038101906101639190610abb565b61050a565b005b610184600480360381019061017f9190610bb4565b6105f3565b6040516101919190610d94565b60405180910390f35b6101a26107ab565b6040516101af9190610dc5565b60405180910390f35b6101d260048036038101906101cd9190610de0565b6107cf565b6040516101df9190610e57565b60405180910390f35b60011515600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151461027b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161027290610ec5565b60405180910390fd5b600081510361028957600080fd5b60008160405160200161029c9190610f21565b6040516020818303038152906040528051906020012090506000801b60026000838152602001908152602001600020600001541461030f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030690610f84565b60405180910390fd5b80600260006001548152602001908152602001600020600101819055508060018190555060405180606001604052808281526020016000801b815260200183815250600260008381526020019081526020016000206000820151816000015560208201518160010155604082015181600201908161038d91906111b0565b509050505050565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60015481565b6000816040516020016104049190610f21565b604051602081830303815290604052805190602001209050919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104a6906112ce565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610598576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161058f906112ce565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60606002600084815260200190815260200160002060000154925060008267ffffffffffffffff81111561062a576106296108e9565b5b60405190808252806020026020018201604052801561066357816020015b610650610893565b8152602001906001900390816106485790505b50905060005b838110156107a0576002600086815260200190815260200160002060405180606001604052908160008201548152602001600182015481526020016002820180546106b390610fd3565b80601f01602080910402602001604051908101604052809291908181526020018280546106df90610fd3565b801561072c5780601f106107015761010080835404028352916020019161072c565b820191906000526020600020905b81548152906001019060200180831161070f57829003601f168201915b505050505081525050828281518110610748576107476112ee565b5b60200260200101819052506000801b600260008781526020019081526020016000206001015403156107a0576002600086815260200190815260200160002060010154945080806107989061134c565b915050610669565b508091505092915050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060006002600084815260200190815260200160002060000154905060026000828152602001908152602001600020600201805461080d90610fd3565b80601f016020809104026020016040519081016040528092919081815260200182805461083990610fd3565b80156108865780601f1061085b57610100808354040283529160200191610886565b820191906000526020600020905b81548152906001019060200180831161086957829003601f168201915b5050505050915050919050565b60405180606001604052806000801916815260200160008019168152602001606081525090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610921826108d8565b810181811067ffffffffffffffff821117156109405761093f6108e9565b5b80604052505050565b60006109536108ba565b905061095f8282610918565b919050565b600067ffffffffffffffff82111561097f5761097e6108e9565b5b610988826108d8565b9050602081019050919050565b82818337600083830152505050565b60006109b76109b284610964565b610949565b9050828152602081018484840111156109d3576109d26108d3565b5b6109de848285610995565b509392505050565b600082601f8301126109fb576109fa6108ce565b5b8135610a0b8482602086016109a4565b91505092915050565b600060208284031215610a2a57610a296108c4565b5b600082013567ffffffffffffffff811115610a4857610a476108c9565b5b610a54848285016109e6565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610a8882610a5d565b9050919050565b610a9881610a7d565b8114610aa357600080fd5b50565b600081359050610ab581610a8f565b92915050565b600060208284031215610ad157610ad06108c4565b5b6000610adf84828501610aa6565b91505092915050565b60008115159050919050565b610afd81610ae8565b82525050565b6000602082019050610b186000830184610af4565b92915050565b6000819050919050565b610b3181610b1e565b82525050565b6000602082019050610b4c6000830184610b28565b92915050565b610b5b81610b1e565b8114610b6657600080fd5b50565b600081359050610b7881610b52565b92915050565b6000819050919050565b610b9181610b7e565b8114610b9c57600080fd5b50565b600081359050610bae81610b88565b92915050565b60008060408385031215610bcb57610bca6108c4565b5b6000610bd985828601610b69565b9250506020610bea85828601610b9f565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610c2981610b1e565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610c69578082015181840152602081019050610c4e565b60008484015250505050565b6000610c8082610c2f565b610c8a8185610c3a565b9350610c9a818560208601610c4b565b610ca3816108d8565b840191505092915050565b6000606083016000830151610cc66000860182610c20565b506020830151610cd96020860182610c20565b5060408301518482036040860152610cf18282610c75565b9150508091505092915050565b6000610d0a8383610cae565b905092915050565b6000602082019050919050565b6000610d2a82610bf4565b610d348185610bff565b935083602082028501610d4685610c10565b8060005b85811015610d825784840389528151610d638582610cfe565b9450610d6e83610d12565b925060208a01995050600181019050610d4a565b50829750879550505050505092915050565b60006020820190508181036000830152610dae8184610d1f565b905092915050565b610dbf81610a7d565b82525050565b6000602082019050610dda6000830184610db6565b92915050565b600060208284031215610df657610df56108c4565b5b6000610e0484828501610b69565b91505092915050565b600082825260208201905092915050565b6000610e2982610c2f565b610e338185610e0d565b9350610e43818560208601610c4b565b610e4c816108d8565b840191505092915050565b60006020820190508181036000830152610e718184610e1e565b905092915050565b7f4f6e6c792061646d696e732063616e2063616c6c207468697300000000000000600082015250565b6000610eaf601983610e0d565b9150610eba82610e79565b602082019050919050565b60006020820190508181036000830152610ede81610ea2565b9050919050565b600081905092915050565b6000610efb82610c2f565b610f058185610ee5565b9350610f15818560208601610c4b565b80840191505092915050565b6000610f2d8284610ef0565b915081905092915050565b7f5375636820612070696374757265206578697374730000000000000000000000600082015250565b6000610f6e601583610e0d565b9150610f7982610f38565b602082019050919050565b60006020820190508181036000830152610f9d81610f61565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610feb57607f821691505b602082108103610ffe57610ffd610fa4565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026110667fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611029565b6110708683611029565b95508019841693508086168417925050509392505050565b6000819050919050565b60006110ad6110a86110a384610b7e565b611088565b610b7e565b9050919050565b6000819050919050565b6110c783611092565b6110db6110d3826110b4565b848454611036565b825550505050565b600090565b6110f06110e3565b6110fb8184846110be565b505050565b5b8181101561111f576111146000826110e8565b600181019050611101565b5050565b601f8211156111645761113581611004565b61113e84611019565b8101602085101561114d578190505b61116161115985611019565b830182611100565b50505b505050565b600082821c905092915050565b600061118760001984600802611169565b1980831691505092915050565b60006111a08383611176565b9150826002028217905092915050565b6111b982610c2f565b67ffffffffffffffff8111156111d2576111d16108e9565b5b6111dc8254610fd3565b6111e7828285611123565b600060209050601f83116001811461121a5760008415611208578287015190505b6112128582611194565b86555061127a565b601f19841661122886611004565b60005b828110156112505784890151825560018201915060208501945060208101905061122b565b8683101561126d5784890151611269601f891682611176565b8355505b6001600288020188555050505b505050505050565b7f4f6e6c79206f776e65722063616e2063616c6c20746869730000000000000000600082015250565b60006112b8601883610e0d565b91506112c382611282565b602082019050919050565b600060208201905081810360008301526112e7816112ab565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061135782610b7e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036113895761138861131d565b5b60018201905091905056fea2646970667358221220ad4a4f6e9ec370339ea0c84d0460e73017be769687ead40cda44e0702a8cef8b64736f6c63430008100033