false
false

Contract Address Details

0x178Ce4b3D09aD7634D3Ee42fEbDa9b18274f352B

Contract Name
cityVerse
Creator
0x864f78–c6436b at 0x2adf68–3b3d19
Balance
0
Tokens
Fetching tokens...
Transactions
0 Transactions
Transfers
0 Transfers
Gas Used
Fetching gas used...
Last Balance Update
14751797
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
cityVerse




Optimization enabled
true
Compiler version
v0.8.0+commit.c7dfd78e




Optimization runs
200
EVM Version
default




Verified at
2024-09-12T09:47:18.913432Z

Contract source code

Sol2uml
new
pragma solidity ^0.8.0;

contract cityVerse {
    struct DigitalTwin {
        string name;
        string metadataURI;
        address owner;
        bool active;
    }

    struct Location {
        int256 latitude;
        int256 longitude;
    }

    struct MetaverseObject {
        string name;
        string objectType;
        Location location;
        address owner;
        bool active;
    }

    address public cityAdmin;
    mapping(uint256 => DigitalTwin) public digitalTwins;
    mapping(uint256 => MetaverseObject) public metaverseObjects;
    uint256 public digitalTwinCount;
    uint256 public metaverseObjectCount;

    event DigitalTwinCreated(uint256 indexed twinId, string name, address owner);
    event MetaverseObjectCreated(uint256 indexed objectId, string name, string objectType, address owner);
    event ObjectLocationUpdated(uint256 indexed objectId, int256 latitude, int256 longitude);
    event OwnershipTransferred(uint256 indexed itemId, address indexed from, address indexed to);

    modifier onlyCityAdmin() {
        require(msg.sender == cityAdmin, "Only city admin can call this function");
        _;
    }

    modifier onlyOwner(uint256 _itemId, bool _isDigitalTwin) {
        if (_isDigitalTwin) {
            require(msg.sender == digitalTwins[_itemId].owner, "Only owner can call this function");
        } else {
            require(msg.sender == metaverseObjects[_itemId].owner, "Only owner can call this function");
        }
        _;
    }

    constructor() {
        cityAdmin = msg.sender;
    }

    function createDigitalTwin(string memory _name, string memory _metadataURI) public {
        digitalTwinCount++;
        digitalTwins[digitalTwinCount] = DigitalTwin(_name, _metadataURI, msg.sender, true);
        emit DigitalTwinCreated(digitalTwinCount, _name, msg.sender);
    }

    function createMetaverseObject(string memory _name, string memory _objectType, int256 _latitude, int256 _longitude) public {
        metaverseObjectCount++;
        metaverseObjects[metaverseObjectCount] = MetaverseObject(_name, _objectType, Location(_latitude, _longitude), msg.sender, true);
        emit MetaverseObjectCreated(metaverseObjectCount, _name, _objectType, msg.sender);
    }

    function updateObjectLocation(uint256 _objectId, int256 _latitude, int256 _longitude) public onlyOwner(_objectId, false) {
        require(metaverseObjects[_objectId].active, "Object is not active");
        metaverseObjects[_objectId].location = Location(_latitude, _longitude);
        emit ObjectLocationUpdated(_objectId, _latitude, _longitude);
    }

    function transferOwnership(uint256 _itemId, address _newOwner, bool _isDigitalTwin) public {
        if (_isDigitalTwin) {
            require(msg.sender == digitalTwins[_itemId].owner, "Only owner can transfer ownership");
            address previousOwner = digitalTwins[_itemId].owner;
            digitalTwins[_itemId].owner = _newOwner;
            emit OwnershipTransferred(_itemId, previousOwner, _newOwner);
        } else {
            require(msg.sender == metaverseObjects[_itemId].owner, "Only owner can transfer ownership");
            address previousOwner = metaverseObjects[_itemId].owner;
            metaverseObjects[_itemId].owner = _newOwner;
            emit OwnershipTransferred(_itemId, previousOwner, _newOwner);
        }
    }

    function getDigitalTwinDetails(uint256 _twinId) public view returns (string memory, string memory, address, bool) {
        DigitalTwin memory twin = digitalTwins[_twinId];
        return (twin.name, twin.metadataURI, twin.owner, twin.active);
    }

    function getMetaverseObjectDetails(uint256 _objectId) public view returns (string memory, string memory, int256, int256, address, bool) {
        MetaverseObject memory obj = metaverseObjects[_objectId];
        return (obj.name, obj.objectType, obj.location.latitude, obj.location.longitude, obj.owner, obj.active);
    }

    function toggleItemStatus(uint256 _itemId, bool _isDigitalTwin) public onlyCityAdmin {
        if (_isDigitalTwin) {
            digitalTwins[_itemId].active = !digitalTwins[_itemId].active;
        } else {
            metaverseObjects[_itemId].active = !metaverseObjects[_itemId].active;
        }
    }
}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"DigitalTwinCreated","inputs":[{"type":"uint256","name":"twinId","internalType":"uint256","indexed":true},{"type":"string","name":"name","internalType":"string","indexed":false},{"type":"address","name":"owner","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"MetaverseObjectCreated","inputs":[{"type":"uint256","name":"objectId","internalType":"uint256","indexed":true},{"type":"string","name":"name","internalType":"string","indexed":false},{"type":"string","name":"objectType","internalType":"string","indexed":false},{"type":"address","name":"owner","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"ObjectLocationUpdated","inputs":[{"type":"uint256","name":"objectId","internalType":"uint256","indexed":true},{"type":"int256","name":"latitude","internalType":"int256","indexed":false},{"type":"int256","name":"longitude","internalType":"int256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"uint256","name":"itemId","internalType":"uint256","indexed":true},{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"cityAdmin","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"createDigitalTwin","inputs":[{"type":"string","name":"_name","internalType":"string"},{"type":"string","name":"_metadataURI","internalType":"string"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"createMetaverseObject","inputs":[{"type":"string","name":"_name","internalType":"string"},{"type":"string","name":"_objectType","internalType":"string"},{"type":"int256","name":"_latitude","internalType":"int256"},{"type":"int256","name":"_longitude","internalType":"int256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"digitalTwinCount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"name","internalType":"string"},{"type":"string","name":"metadataURI","internalType":"string"},{"type":"address","name":"owner","internalType":"address"},{"type":"bool","name":"active","internalType":"bool"}],"name":"digitalTwins","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"},{"type":"string","name":"","internalType":"string"},{"type":"address","name":"","internalType":"address"},{"type":"bool","name":"","internalType":"bool"}],"name":"getDigitalTwinDetails","inputs":[{"type":"uint256","name":"_twinId","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"","internalType":"string"},{"type":"string","name":"","internalType":"string"},{"type":"int256","name":"","internalType":"int256"},{"type":"int256","name":"","internalType":"int256"},{"type":"address","name":"","internalType":"address"},{"type":"bool","name":"","internalType":"bool"}],"name":"getMetaverseObjectDetails","inputs":[{"type":"uint256","name":"_objectId","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"metaverseObjectCount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"string","name":"name","internalType":"string"},{"type":"string","name":"objectType","internalType":"string"},{"type":"tuple","name":"location","internalType":"struct cityVerse.Location","components":[{"type":"int256","name":"latitude","internalType":"int256"},{"type":"int256","name":"longitude","internalType":"int256"}]},{"type":"address","name":"owner","internalType":"address"},{"type":"bool","name":"active","internalType":"bool"}],"name":"metaverseObjects","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"toggleItemStatus","inputs":[{"type":"uint256","name":"_itemId","internalType":"uint256"},{"type":"bool","name":"_isDigitalTwin","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"uint256","name":"_itemId","internalType":"uint256"},{"type":"address","name":"_newOwner","internalType":"address"},{"type":"bool","name":"_isDigitalTwin","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"updateObjectLocation","inputs":[{"type":"uint256","name":"_objectId","internalType":"uint256"},{"type":"int256","name":"_latitude","internalType":"int256"},{"type":"int256","name":"_longitude","internalType":"int256"}]}]
              

Contract Creation Code

0x608060405234801561001057600080fd5b50600080546001600160a01b0319163317905561130d806100326000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063b5deae0311610071578063b5deae031461013f578063be7fe8eb14610162578063c2e596d614610177578063df56ead01461018a578063e62a9e1d146101ae578063ec1edd39146101c1576100b4565b80631b73e46d146100b95780632ef64933146100ce5780635fb78973146100ec5780636f2537e9146100f45780638547db7114610107578063aec0d6981461011a575b600080fd5b6100cc6100c7366004610ef8565b6101d4565b005b6100d661031a565b6040516100e39190611256565b60405180910390f35b6100d6610320565b6100cc610102366004610e0e565b610326565b6100cc610115366004610f40565b610422565b61012d610128366004610ee0565b6104b8565b6040516100e3969594939291906110b2565b61015261014d366004610ee0565b61067e565b6040516100e3949392919061106b565b61016a6107c6565b6040516100e39190610fe1565b6100cc610185366004610e6f565b6107d5565b61019d610198366004610ee0565b6108fd565b6040516100e3959493929190611108565b6101526101bc366004610ee0565b610a62565b6100cc6101cf366004610f6b565b610bf9565b801561027e576000838152600160205260409020600201546001600160a01b0316331461021c5760405162461bcd60e51b8152600401610213906111e7565b60405180910390fd5b60008381526001602052604080822060020180546001600160a01b031981166001600160a01b038781169182179093559251911692839187917f16b85f49bf01212961345d3016c9a531894accf62eb7680f2045d79185cc0ec091a450610315565b6000838152600260205260409020600401546001600160a01b031633146102b75760405162461bcd60e51b8152600401610213906111e7565b60008381526002602052604080822060040180546001600160a01b031981166001600160a01b038781169182179093559251911692839187917f16b85f49bf01212961345d3016c9a531894accf62eb7680f2045d79185cc0ec091a4505b505050565b60035481565b60045481565b600380549060006103368361129a565b9091555050604080516080810182528381526020808201849052338284015260016060830181905260035460009081529082529290922081518051929391926103829284920190610cdf565b50602082810151805161039b9260018501920190610cdf565b50604082810151600290920180546060909401511515600160a01b0260ff60a01b196001600160a01b039094166001600160a01b0319909516949094179290921692909217905560035490517f98fe6653e2d94278a86e7068271f6af74b0336fa0150e13cf5b7b1a254baf0dc906104169085903390611003565b60405180910390a25050565b6000546001600160a01b0316331461044c5760405162461bcd60e51b8152600401610213906111a1565b8015610485576000828152600160205260409020600201805460ff60a01b198116600160a01b9182900460ff16159091021790556104b4565b6000828152600260205260409020600401805460ff60a01b198116600160a01b9182900460ff16159091021790555b5050565b6060806000806000806000600260008981526020019081526020016000206040518060a00160405290816000820180546104f19061125f565b80601f016020809104026020016040519081016040528092919081815260200182805461051d9061125f565b801561056a5780601f1061053f5761010080835404028352916020019161056a565b820191906000526020600020905b81548152906001019060200180831161054d57829003601f168201915b505050505081526020016001820180546105839061125f565b80601f01602080910402602001604051908101604052809291908181526020018280546105af9061125f565b80156105fc5780601f106105d1576101008083540402835291602001916105fc565b820191906000526020600020905b8154815290600101906020018083116105df57829003601f168201915b5050509183525050604080518082018252600284015481526003840154602080830191909152808401919091526004909301546001600160a01b03811682840152600160a01b900460ff16151560609283015283518484015191850151805194015192850151608090950151909d919c50929a50909850919650945092505050565b6001602052600090815260409020805481906106999061125f565b80601f01602080910402602001604051908101604052809291908181526020018280546106c59061125f565b80156107125780601f106106e757610100808354040283529160200191610712565b820191906000526020600020905b8154815290600101906020018083116106f557829003601f168201915b5050505050908060010180546107279061125f565b80601f01602080910402602001604051908101604052809291908181526020018280546107539061125f565b80156107a05780601f10610775576101008083540402835291602001916107a0565b820191906000526020600020905b81548152906001019060200180831161078357829003601f168201915b505050600290930154919250506001600160a01b0381169060ff600160a01b9091041684565b6000546001600160a01b031681565b600480549060006107e58361129a565b90915550506040805160a08101825285815260208082018690528251808401845285815280820185905282840152336060830152600160808301526004546000908152600282529290922081518051929391926108459284920190610cdf565b50602082810151805161085e9260018501920190610cdf565b50604082810151805160028401556020015160038301556060830151600492830180546080909501511515600160a01b0260ff60a01b196001600160a01b039093166001600160a01b03199096169590951791909116939093179092555490517f386afc92c511fc4f859eb63b940684aeee6eaa05494d862b84ec5d60972852c8906108ef9087908790339061102d565b60405180910390a250505050565b6002602052600090815260409020805481906109189061125f565b80601f01602080910402602001604051908101604052809291908181526020018280546109449061125f565b80156109915780601f1061096657610100808354040283529160200191610991565b820191906000526020600020905b81548152906001019060200180831161097457829003601f168201915b5050505050908060010180546109a69061125f565b80601f01602080910402602001604051908101604052809291908181526020018280546109d29061125f565b8015610a1f5780601f106109f457610100808354040283529160200191610a1f565b820191906000526020600020905b815481529060010190602001808311610a0257829003601f168201915b50506040805180820190915260028601548152600386015460208201526004909501549394936001600160a01b0381169350600160a01b900460ff169150869050565b606080600080600060016000878152602001908152602001600020604051806080016040529081600082018054610a989061125f565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac49061125f565b8015610b115780601f10610ae657610100808354040283529160200191610b11565b820191906000526020600020905b815481529060010190602001808311610af457829003601f168201915b50505050508152602001600182018054610b2a9061125f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b569061125f565b8015610ba35780601f10610b7857610100808354040283529160200191610ba3565b820191906000526020600020905b815481529060010190602001808311610b8657829003601f168201915b5050509183525050600291909101546001600160a01b038116602080840191909152600160a01b90910460ff16151560409283015282519083015191830151606090930151909991985091965090945092505050565b82600080828152600260205260409020600401546001600160a01b03163314610c345760405162461bcd60e51b815260040161021390611160565b600085815260026020526040902060040154600160a01b900460ff16610c6c5760405162461bcd60e51b815260040161021390611228565b60408051808201825285815260208082018681526000898152600292839052849020925191830191909155516003909101555185907fccabd8ed8755a93fbdf27d5a744f3c6ce778bd9aeb5bbeb6cbb208893009adca90610cd09087908790610ff5565b60405180910390a25050505050565b828054610ceb9061125f565b90600052602060002090601f016020900481019282610d0d5760008555610d53565b82601f10610d2657805160ff1916838001178555610d53565b82800160010185558215610d53579182015b82811115610d53578251825591602001919060010190610d38565b50610d5f929150610d63565b5090565b5b80821115610d5f5760008155600101610d64565b80358015158114610d8857600080fd5b919050565b600082601f830112610d9d578081fd5b813567ffffffffffffffff80821115610db857610db86112c1565b604051601f8301601f191681016020018281118282101715610ddc57610ddc6112c1565b604052828152848301602001861015610df3578384fd5b82602086016020830137918201602001929092529392505050565b60008060408385031215610e20578182fd5b823567ffffffffffffffff80821115610e37578384fd5b610e4386838701610d8d565b93506020850135915080821115610e58578283fd5b50610e6585828601610d8d565b9150509250929050565b60008060008060808587031215610e84578182fd5b843567ffffffffffffffff80821115610e9b578384fd5b610ea788838901610d8d565b95506020870135915080821115610ebc578384fd5b50610ec987828801610d8d565b949794965050505060408301359260600135919050565b600060208284031215610ef1578081fd5b5035919050565b600080600060608486031215610f0c578283fd5b8335925060208401356001600160a01b0381168114610f29578283fd5b9150610f3760408501610d78565b90509250925092565b60008060408385031215610f52578182fd5b82359150610f6260208401610d78565b90509250929050565b600080600060608486031215610f7f578283fd5b505081359360208301359350604090920135919050565b60008151808452815b81811015610fbb57602081850181015186830182015201610f9f565b81811115610fcc5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b918252602082015260400190565b6000604082526110166040830185610f96565b905060018060a01b03831660208301529392505050565b6000606082526110406060830186610f96565b82810360208401526110528186610f96565b91505060018060a01b0383166040830152949350505050565b60006080825261107e6080830187610f96565b82810360208401526110908187610f96565b6001600160a01b03959095166040840152505090151560609091015292915050565b600060c082526110c560c0830189610f96565b82810360208401526110d78189610f96565b6040840197909752505060608101939093526001600160a01b03919091166080830152151560a09091015292915050565b600060c0825261111b60c0830188610f96565b828103602084015261112d8188610f96565b86516040850152602090960151606084015250506001600160a01b03929092166080830152151560a09091015292915050565b60208082526021908201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6040820152603760f91b606082015260800190565b60208082526026908201527f4f6e6c7920636974792061646d696e2063616e2063616c6c20746869732066756040820152653731ba34b7b760d11b606082015260800190565b60208082526021908201527f4f6e6c79206f776e65722063616e207472616e73666572206f776e65727368696040820152600760fc1b606082015260800190565b6020808252601490820152734f626a656374206973206e6f742061637469766560601b604082015260600190565b90815260200190565b60028104600182168061127357607f821691505b6020821081141561129457634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156112ba57634e487b7160e01b81526011600452602481fd5b5060010190565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220b19f69af9d175c36af0ca319010a3b88cfa0be3a0aa94ed0fb0982b28c7fb5a764736f6c63430008000033

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106100b45760003560e01c8063b5deae0311610071578063b5deae031461013f578063be7fe8eb14610162578063c2e596d614610177578063df56ead01461018a578063e62a9e1d146101ae578063ec1edd39146101c1576100b4565b80631b73e46d146100b95780632ef64933146100ce5780635fb78973146100ec5780636f2537e9146100f45780638547db7114610107578063aec0d6981461011a575b600080fd5b6100cc6100c7366004610ef8565b6101d4565b005b6100d661031a565b6040516100e39190611256565b60405180910390f35b6100d6610320565b6100cc610102366004610e0e565b610326565b6100cc610115366004610f40565b610422565b61012d610128366004610ee0565b6104b8565b6040516100e3969594939291906110b2565b61015261014d366004610ee0565b61067e565b6040516100e3949392919061106b565b61016a6107c6565b6040516100e39190610fe1565b6100cc610185366004610e6f565b6107d5565b61019d610198366004610ee0565b6108fd565b6040516100e3959493929190611108565b6101526101bc366004610ee0565b610a62565b6100cc6101cf366004610f6b565b610bf9565b801561027e576000838152600160205260409020600201546001600160a01b0316331461021c5760405162461bcd60e51b8152600401610213906111e7565b60405180910390fd5b60008381526001602052604080822060020180546001600160a01b031981166001600160a01b038781169182179093559251911692839187917f16b85f49bf01212961345d3016c9a531894accf62eb7680f2045d79185cc0ec091a450610315565b6000838152600260205260409020600401546001600160a01b031633146102b75760405162461bcd60e51b8152600401610213906111e7565b60008381526002602052604080822060040180546001600160a01b031981166001600160a01b038781169182179093559251911692839187917f16b85f49bf01212961345d3016c9a531894accf62eb7680f2045d79185cc0ec091a4505b505050565b60035481565b60045481565b600380549060006103368361129a565b9091555050604080516080810182528381526020808201849052338284015260016060830181905260035460009081529082529290922081518051929391926103829284920190610cdf565b50602082810151805161039b9260018501920190610cdf565b50604082810151600290920180546060909401511515600160a01b0260ff60a01b196001600160a01b039094166001600160a01b0319909516949094179290921692909217905560035490517f98fe6653e2d94278a86e7068271f6af74b0336fa0150e13cf5b7b1a254baf0dc906104169085903390611003565b60405180910390a25050565b6000546001600160a01b0316331461044c5760405162461bcd60e51b8152600401610213906111a1565b8015610485576000828152600160205260409020600201805460ff60a01b198116600160a01b9182900460ff16159091021790556104b4565b6000828152600260205260409020600401805460ff60a01b198116600160a01b9182900460ff16159091021790555b5050565b6060806000806000806000600260008981526020019081526020016000206040518060a00160405290816000820180546104f19061125f565b80601f016020809104026020016040519081016040528092919081815260200182805461051d9061125f565b801561056a5780601f1061053f5761010080835404028352916020019161056a565b820191906000526020600020905b81548152906001019060200180831161054d57829003601f168201915b505050505081526020016001820180546105839061125f565b80601f01602080910402602001604051908101604052809291908181526020018280546105af9061125f565b80156105fc5780601f106105d1576101008083540402835291602001916105fc565b820191906000526020600020905b8154815290600101906020018083116105df57829003601f168201915b5050509183525050604080518082018252600284015481526003840154602080830191909152808401919091526004909301546001600160a01b03811682840152600160a01b900460ff16151560609283015283518484015191850151805194015192850151608090950151909d919c50929a50909850919650945092505050565b6001602052600090815260409020805481906106999061125f565b80601f01602080910402602001604051908101604052809291908181526020018280546106c59061125f565b80156107125780601f106106e757610100808354040283529160200191610712565b820191906000526020600020905b8154815290600101906020018083116106f557829003601f168201915b5050505050908060010180546107279061125f565b80601f01602080910402602001604051908101604052809291908181526020018280546107539061125f565b80156107a05780601f10610775576101008083540402835291602001916107a0565b820191906000526020600020905b81548152906001019060200180831161078357829003601f168201915b505050600290930154919250506001600160a01b0381169060ff600160a01b9091041684565b6000546001600160a01b031681565b600480549060006107e58361129a565b90915550506040805160a08101825285815260208082018690528251808401845285815280820185905282840152336060830152600160808301526004546000908152600282529290922081518051929391926108459284920190610cdf565b50602082810151805161085e9260018501920190610cdf565b50604082810151805160028401556020015160038301556060830151600492830180546080909501511515600160a01b0260ff60a01b196001600160a01b039093166001600160a01b03199096169590951791909116939093179092555490517f386afc92c511fc4f859eb63b940684aeee6eaa05494d862b84ec5d60972852c8906108ef9087908790339061102d565b60405180910390a250505050565b6002602052600090815260409020805481906109189061125f565b80601f01602080910402602001604051908101604052809291908181526020018280546109449061125f565b80156109915780601f1061096657610100808354040283529160200191610991565b820191906000526020600020905b81548152906001019060200180831161097457829003601f168201915b5050505050908060010180546109a69061125f565b80601f01602080910402602001604051908101604052809291908181526020018280546109d29061125f565b8015610a1f5780601f106109f457610100808354040283529160200191610a1f565b820191906000526020600020905b815481529060010190602001808311610a0257829003601f168201915b50506040805180820190915260028601548152600386015460208201526004909501549394936001600160a01b0381169350600160a01b900460ff169150869050565b606080600080600060016000878152602001908152602001600020604051806080016040529081600082018054610a989061125f565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac49061125f565b8015610b115780601f10610ae657610100808354040283529160200191610b11565b820191906000526020600020905b815481529060010190602001808311610af457829003601f168201915b50505050508152602001600182018054610b2a9061125f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b569061125f565b8015610ba35780601f10610b7857610100808354040283529160200191610ba3565b820191906000526020600020905b815481529060010190602001808311610b8657829003601f168201915b5050509183525050600291909101546001600160a01b038116602080840191909152600160a01b90910460ff16151560409283015282519083015191830151606090930151909991985091965090945092505050565b82600080828152600260205260409020600401546001600160a01b03163314610c345760405162461bcd60e51b815260040161021390611160565b600085815260026020526040902060040154600160a01b900460ff16610c6c5760405162461bcd60e51b815260040161021390611228565b60408051808201825285815260208082018681526000898152600292839052849020925191830191909155516003909101555185907fccabd8ed8755a93fbdf27d5a744f3c6ce778bd9aeb5bbeb6cbb208893009adca90610cd09087908790610ff5565b60405180910390a25050505050565b828054610ceb9061125f565b90600052602060002090601f016020900481019282610d0d5760008555610d53565b82601f10610d2657805160ff1916838001178555610d53565b82800160010185558215610d53579182015b82811115610d53578251825591602001919060010190610d38565b50610d5f929150610d63565b5090565b5b80821115610d5f5760008155600101610d64565b80358015158114610d8857600080fd5b919050565b600082601f830112610d9d578081fd5b813567ffffffffffffffff80821115610db857610db86112c1565b604051601f8301601f191681016020018281118282101715610ddc57610ddc6112c1565b604052828152848301602001861015610df3578384fd5b82602086016020830137918201602001929092529392505050565b60008060408385031215610e20578182fd5b823567ffffffffffffffff80821115610e37578384fd5b610e4386838701610d8d565b93506020850135915080821115610e58578283fd5b50610e6585828601610d8d565b9150509250929050565b60008060008060808587031215610e84578182fd5b843567ffffffffffffffff80821115610e9b578384fd5b610ea788838901610d8d565b95506020870135915080821115610ebc578384fd5b50610ec987828801610d8d565b949794965050505060408301359260600135919050565b600060208284031215610ef1578081fd5b5035919050565b600080600060608486031215610f0c578283fd5b8335925060208401356001600160a01b0381168114610f29578283fd5b9150610f3760408501610d78565b90509250925092565b60008060408385031215610f52578182fd5b82359150610f6260208401610d78565b90509250929050565b600080600060608486031215610f7f578283fd5b505081359360208301359350604090920135919050565b60008151808452815b81811015610fbb57602081850181015186830182015201610f9f565b81811115610fcc5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b918252602082015260400190565b6000604082526110166040830185610f96565b905060018060a01b03831660208301529392505050565b6000606082526110406060830186610f96565b82810360208401526110528186610f96565b91505060018060a01b0383166040830152949350505050565b60006080825261107e6080830187610f96565b82810360208401526110908187610f96565b6001600160a01b03959095166040840152505090151560609091015292915050565b600060c082526110c560c0830189610f96565b82810360208401526110d78189610f96565b6040840197909752505060608101939093526001600160a01b03919091166080830152151560a09091015292915050565b600060c0825261111b60c0830188610f96565b828103602084015261112d8188610f96565b86516040850152602090960151606084015250506001600160a01b03929092166080830152151560a09091015292915050565b60208082526021908201527f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f6040820152603760f91b606082015260800190565b60208082526026908201527f4f6e6c7920636974792061646d696e2063616e2063616c6c20746869732066756040820152653731ba34b7b760d11b606082015260800190565b60208082526021908201527f4f6e6c79206f776e65722063616e207472616e73666572206f776e65727368696040820152600760fc1b606082015260800190565b6020808252601490820152734f626a656374206973206e6f742061637469766560601b604082015260600190565b90815260200190565b60028104600182168061127357607f821691505b6020821081141561129457634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156112ba57634e487b7160e01b81526011600452602481fd5b5060010190565b634e487b7160e01b600052604160045260246000fdfea2646970667358221220b19f69af9d175c36af0ca319010a3b88cfa0be3a0aa94ed0fb0982b28c7fb5a764736f6c63430008000033