false
false
0

Contract Address Details

0x9dBea03c9274a7293b3f2e15046D4326433Dcc3a

Contract Name
AstralCards
Creator
0xebe894–7a24f6 at 0x91590a–e78c01
Balance
20 CLO
Tokens
Fetching tokens...
Transactions
12 Transactions
Transfers
0 Transfers
Gas Used
1,079,274
Last Balance Update
18597362
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
AstralCards




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




EVM Version
default




Verified at
2025-08-17T06:58:13.192846Z

Contract source code

// SPDX-License-Identifier: GPL-3.0-only
// Author: Upaut

pragma solidity ^0.8.16;

contract AstralCards {

    struct User{ // структура описывающая настройки пользователя
        uint8 avatar; // индекс аватара игрока
        string lang; // язык интерфейса игрока
        string name; // имя игрока
    }

    struct Room{ // структура описывающая игровую комнату
        uint256 bankRoom; // сумма всех взносов в комнату
        uint256 bet; // ставка внесенная каждым игроком (переплата одним из игроков вернется к нему обратно)
        uint256 fees; // комиссия (%) взымаемая с банка игровой комнаты
        uint256 status; // состояние комнаты. 0 - комната не активна, 1 - оплачено первым игроком, 2 - идет игра, 3 - можно принимать ставки на игроков
        address[] player1_users; // пользовательские адреса что ставят на игрока 1
        uint256[] player1_bets; // пользовательские ставки что ставят на игрока 1
        address[] player2_users; // пользовательские адреса что ставят на игрока 2
        uint256[] player2_bets; // пользовательские ставки что ставят на игрока 2
    }

    struct RoomList{ // элемент двухсвязного списка содержащего все активные комнаты
        uint256 room; // комната
        uint256 next; // следующая комната
        uint256 prev; // предыдущая комната
    }

    struct ActiveRoom{
        uint256 room; // комната
        uint256 bankRoom; // сумма всех взносов в комнату
        uint256 bet; // ставка внесенная каждым игроком
        uint256 status; // состояние комнаты
        address player1; // адрес игрока 1
        address player2; // адрес игрока 2
    }

    uint256 public gameRoom = 1; // номер последней созданной игровой комнаты
    uint256 public amountGames; // всегда показывает количество созданных игровых комнат
    uint256 public minGameBet = 10 * 1e18; // минимальная игровая ставка в нативной монете
    uint256 public gamerBetPool = 25 * 1e18; // (%) Процент, сколько от ставки игрока будет поставлено на его победу в пул ставок
    uint256 public maxUsersPerPlayer = 30; // максимальное количество пользователей, которые могут ставить на одного игрока
    uint256 public fees = 5 * 1e18; // комиссия (%) взымаемая с банка игровой комнаты
    address public owner = msg.sender; // владелец должен иметь возможность настраивать минимальный размер ставки
    address public oracle = msg.sender; // игровой сервер будет выступать оракулом
    address public commission = msg.sender; // адрес на который будет перечисляться комиссия для дальнейшего распределения

    mapping(address => User) private settings; // маппирование настроек пользователя
    mapping(uint256 => Room) private rooms; // маппирование игровой комнаты
    mapping(uint256 => RoomList) private roomList; // маппирование списка комнат

/*
    constructor(address _oracle) {
        oracle = _oracle;
    }
*/
    event UsedRoom(uint indexed room);


    modifier onlyOwner() {
        require(msg.sender == owner, "Only owner");
        _;
    }
    
    modifier onlyOracle() {
        require(msg.sender == oracle, "Only oracle");
        _;
    }



    receive() external payable {
        depositGame();
    }

    // Функция приема взноса игрока за участие
    function depositGame() public payable {
        require(msg.sender == tx.origin, "Only EOA"); // другие контракты не могут вызывать данную функцию
        require(msg.value >= minGameBet, "low bet"); // минимальный взнос за участие
        if(rooms[gameRoom].status == 0){ // комната создается игроком 1
            rooms[gameRoom].bet = msg.value;
            rooms[gameRoom].status = 1;
            rooms[gameRoom].player1_users.push(msg.sender);
            _addRoom(gameRoom); // добавляем комнату в список созданых комнат
            emit UsedRoom(gameRoom); // события использования комнаты
        }
        else{ // в созданную комнату вносится оплата игроком 2
            require(msg.sender != rooms[gameRoom].player1_users[0], "already added"); // одинаковый адрес не может быть противником
            if(msg.value > rooms[gameRoom].bet){ // если второй игрок заплатил больше первого, то вернем назад его переплату
                payable(msg.sender).transfer(msg.value - rooms[gameRoom].bet);
            } else if(msg.value < rooms[gameRoom].bet){ // если второй игрок заплатил меньше первого, то вернем назад переплату первому игроку
                payable(rooms[gameRoom].player1_users[0]).transfer(rooms[gameRoom].bet - msg.value);
                rooms[gameRoom].bet = msg.value;
            }
            rooms[gameRoom].bankRoom = rooms[gameRoom].bet * 2; // вносим точную сумму в банк комнаты
            // разбиваем ставки игроков на игровую ставку и пул ставок на игроков
            uint _pool_bet = rooms[gameRoom].bet * gamerBetPool / (100 * 1e18); // находим процент от ставки игрока, который должен уйти в пул ставок
            rooms[gameRoom].bet -= _pool_bet;

            
            rooms[gameRoom].player1_bets.push(_pool_bet);
            rooms[gameRoom].player2_users.push(msg.sender);
            rooms[gameRoom].player2_bets.push(_pool_bet);

            rooms[gameRoom].fees = fees;
            rooms[gameRoom].status = 3; // можно принимать ставки на игроков
            emit UsedRoom(gameRoom); // события использования комнаты
            gameRoom++; // создаем новую пустую комнату
        }
    }

    // отмена игрового взноса, доступно только если игрок внес оплату один
    function depositCancel() external {
        require(msg.sender == rooms[gameRoom].player1_users[0], "not your bet"); // ставку может вернуть только тот адрес что создал комнату
        require(rooms[gameRoom].status == 1); // статус комнаты должен быть 1, т.е. комната создана, но игрок 2 еще не внес оплату
        payable(msg.sender).transfer(rooms[gameRoom].bet);
        rooms[gameRoom].bet = 0;        
        rooms[gameRoom].status = 0;
        delete rooms[gameRoom].player1_users[0];
        _delRoom(gameRoom); // Удаляем игровую комнату из списка созданных комнат
        emit UsedRoom(gameRoom); // события использования комнаты
    }

    // ставка на Игрока 1
    function betOnPlayer1(uint256 _room) public payable {
        require(msg.sender == tx.origin, "Only EOA"); // другие контракты не могут вызывать данную функцию
        require(msg.value >= minGameBet / 4, "low bet"); // минимальная ставка должна быть не меньше 1/4 от минимальной игровой ставки
        require(rooms[_room].status == 3, "bets are prohibited"); // статус комнаты должен быть 3, т.е. можно принимать ставки на игроков
        require(rooms[_room].player1_users.length <= maxUsersPerPlayer, "Many users with bets"); // количество ставящих пользователей не должно превышать максимум
        uint256 _index;
        bool _check;
        (_index, _check) = _getIndex(rooms[_room].player1_users);
        if(_check){ // если пользователь ранее делал ставки
            rooms[_room].player1_bets[_index] += msg.value;
        } else {
            rooms[_room].player1_users.push(msg.sender);
            rooms[_room].player1_bets.push(msg.value);
        }
        rooms[_room].bankRoom += msg.value; // добавляем ставку в банк комнаты
        emit UsedRoom(_room); // события использования комнаты
    }

    // ставка на Игрока 2
    function betOnPlayer2(uint256 _room) public payable {
        require(msg.sender == tx.origin, "Only EOA"); // другие контракты не могут вызывать данную функцию
        require(msg.value >= minGameBet / 4, "low bet"); // минимальная ставка должна быть не меньше 1/4 от минимальной игровой ставки
        require(rooms[_room].status == 3, "bets are prohibited"); // статус комнаты должен быть 3, т.е. можно принимать ставки на игроков
        require(rooms[_room].player2_users.length <= maxUsersPerPlayer, "Many users with bets"); // количество ставящих пользователей не должно превышать максимум
        uint256 _index;
        bool _check;
        (_index, _check) = _getIndex(rooms[_room].player2_users);
        if(_check){ // если пользователь ранее делал ставки
            rooms[_room].player2_bets[_index] += msg.value;
        } else {
            rooms[_room].player2_users.push(msg.sender);
            rooms[_room].player2_bets.push(msg.value);
        }
        rooms[_room].bankRoom += msg.value; // добавляем ставку в банк комнаты
        emit UsedRoom(_room); // события использования комнаты
    }

    // приватная фунция возвращает индекс в массиве ставящих пользователей по заданному адресу
    function _getIndex(address[] storage _arr) private view returns (uint256, bool) {
        for(uint256 i = 0; i < _arr.length; i++){
            if(msg.sender == _arr[i]){
                return (i, true);
            }
        }
        return (0, false);
    }


    // Завершить игру в комнате с определением победителя может только оракул
    function setWinner(uint256 _room, address _winner) external onlyOracle { 
        require((rooms[_room].player1_users[0] == _winner) || (rooms[_room].player2_users[0] == _winner)); // адрес победителя должен быть адресом одного из игроков комнаты
        uint256 _fee = rooms[_room].bankRoom * rooms[_room].fees / (100 * 1e18); // находим комиссию
        rooms[_room].bet *= 2; // находим выигрыш победителя за победу, пока без учета его ставки
        rooms[_room].bankRoom -= (_fee + rooms[_room].bet); // уменьшаем банк комнаты на комиссию + выигрыш победителя
        // весь оставшийся банк комнаты надо распределить по ставкам победителей
        if(rooms[_room].player1_users[0] == _winner){ // если победил игрок 1
            _winnerPay(rooms[_room].bankRoom, rooms[_room].bet, rooms[_room].player1_users, rooms[_room].player1_bets);
        }
        else{ // если победил игрок 2
            _winnerPay(rooms[_room].bankRoom, rooms[_room].bet, rooms[_room].player2_users, rooms[_room].player2_bets);
        }
        // Производим последнюю выплату - это игровая комиссия
        payable(commission).transfer(_fee); // выплачиваем комиссию
        // Уничтожаем игровую комнату
        _delRoom(_room); // Удаляем игровую комнату из списка созданных комнат
        delete rooms[_room];
        emit UsedRoom(_room); // события использования комнаты
    }

    // приватная фунция расчета и выплат всем победителям
    function _winnerPay(uint256 _bank, uint256 _amountWin, address[] storage _arrAddress, uint256[] storage _arrBet) private {
        uint _sum; // сумма всех ставок
        uint[] memory _arrPay = new uint[](_arrAddress.length); // выплаты которые должны получить пользователи
        for(uint256 i = 0; i < _arrAddress.length; i++){
            _sum += _arrBet[i];
        }
        for(uint256 i = 0; i < _arrAddress.length; i++){
            _arrPay[i] = _arrBet[i] * (100 * 1e18) / _sum; // находим процент от суммы ставок, который должен получить пользователь
            _arrPay[i] = _bank * _arrPay[i] / (100 * 1e18);
        }
        _arrPay[0] += _amountWin; // к ставки игрока добавляется его награда за победу в игре
        for(uint256 i = 0; i < _arrAddress.length; i++){ // производим выплаты
            payable(_arrAddress[i]).transfer(_arrPay[i]);
        }
    }

    // Принудительное закрытие комнаты с возвратом всех ставок игрокам, служит на тот случай если с игровым сервером что-то случится
    function closeRoom(uint256 _room) external onlyOwner { 
        require((rooms[_room].status == 3) || (rooms[_room].status == 2), "bad status"); // статус комнаты должен быть 3 или 2
        rooms[_room].player1_bets[0] += rooms[_room].bet; // к ставке игрока 1 добавляем его игровую ставку
        rooms[_room].player2_bets[0] += rooms[_room].bet; // к ставке игрока 2 добавляем его игровую ставку

        for(uint256 i = 0; i < rooms[_room].player1_users.length; i++){
            payable(rooms[_room].player1_users[i]).transfer(rooms[_room].player1_bets[i]); // выплачиваем все ставки на игрока 1
        }
        for(uint256 i = 0; i < rooms[_room].player2_users.length; i++){
            payable(rooms[_room].player2_users[i]).transfer(rooms[_room].player2_bets[i]); // выплачиваем все ставки на игрока 2
        }
        // Уничтожаем игровую комнату
        _delRoom(_room); // Удаляем игровую комнату из списка созданных комнат
        delete rooms[_room];
        emit UsedRoom(_room); // события использования комнаты
    }

    // сохранение настроек пользователя
    function saveSettings(uint8 _avatar, string memory _lang, string memory _name) external { 
        settings[msg.sender].avatar = _avatar;
        settings[msg.sender].lang = _lang;
        settings[msg.sender].name = _name;
    }

    // Изменение минимальной игровой ставки
    function setMinGameBet(uint256 _minGameBet) external onlyOwner {
        minGameBet = _minGameBet;
    }

    // Изменение процента, сколько от своей ставки игрок ставит на свою победу
    function setGamerBetPool(uint256 _gamerBetPool) external onlyOwner {
        gamerBetPool = _gamerBetPool;
    }

    // Изменение комиссионных сборов
    function setFees(uint256 _fees) external onlyOwner {
        fees = _fees;
    }

    // Изменение максимальное количество человек которые могут ставить на одного игрока
    function setMaxUsersPerPlayer(uint256 _maxUsersPerPlayer) external onlyOwner {
        maxUsersPerPlayer = _maxUsersPerPlayer;
    }

    // назначить нового оракула может только владелец
    function setNewOracle(address _newOracle) external onlyOwner { 
        oracle = _newOracle;
    }

    // назначить новый адрес для получения комиссий может только владелец
    function setNewCommission(address _commission) external onlyOwner { 
        commission = _commission;
    }

    // назначить новый статус комнаты может только оракул (статус 2 - идет игра, ставки запрещены; статус 3 - идет игра, ставки разрешены)
    function setRoomStatus(uint256 _room, uint256 _status) external onlyOracle { 
        require(_status == 2 || _status == 3); // статус комнаты может быть установлен только на 2 или 3
        require((rooms[_room].status == 2) || (rooms[_room].status == 3)); // комната где планируется изменение статуса должна быть на статусе 2 или 3
        rooms[_room].status = _status;
        emit UsedRoom(_room); // события использования комнаты
    }


    function _addRoom(uint _room) private { // добавление новой комнаты в список комнат
        roomList[_room].room = _room;
        roomList[_room].next = 0;
        roomList[_room].prev = roomList[0].prev;
        roomList[roomList[0].prev].next = _room;
        roomList[0].prev = _room;
        amountGames++; // увеличиваем количество созданных игровых комнат
    }

    function _delRoom(uint _room) private { // удаление комнаты из списка комнат
        roomList[roomList[_room].prev].next = roomList[_room].next;
        roomList[roomList[_room].next].prev = roomList[_room].prev;
        amountGames--; // уменьшаем количество созданных игровых комнат
        delete roomList[_room];
    }



    // Возвращаем настройки пользователя
    function getSettings(address _user) public view returns (User memory){
        return (settings[_user]);
    }

    // Возвращаем структуру игровой комнаты
    function getRoom(uint256 _room) public view returns (Room memory){
        return (rooms[_room]);
    }

    // Возвращаем информацию по всем созданным игровым комнатам
    function getCreatedRooms() public view returns (ActiveRoom[] memory){
        ActiveRoom[] memory _result = new ActiveRoom[](amountGames);
        uint _index = roomList[0].next;
        for(uint i; i < amountGames; i++){
            _result[i].room = _index;
            _result[i].bankRoom = rooms[_index].bankRoom;
            _result[i].bet = rooms[_index].bet;
            _result[i].status = rooms[_index].status;
            _result[i].player1 = rooms[_index].player1_users[0];
            _result[i].player2 = rooms[_index].player2_users[0];
            _index = roomList[_index].next;
        }
        return (_result);
    }

    // Возвращаем продварительный расчет выплат победителям
    function getPreview(uint256 _room) public view returns (uint256, address [] memory, uint [] memory, address [] memory, uint [] memory){
        address [] memory _arrPlayer1 = new address[](rooms[_room].player1_users.length); // адреса поставивщие на победу игрока 1
        uint[] memory _arrPay1 = new uint[](rooms[_room].player1_users.length); // выплаты которые должны получить пользователи
        address [] memory _arrPlayer2 = new address[](rooms[_room].player2_users.length); // адреса поставивщие на победу игрока 2
        uint[] memory _arrPay2 = new uint[](rooms[_room].player2_users.length); // выплаты которые должны получить пользователи
        uint _bank = rooms[_room].bankRoom;
        _bank -= (rooms[_room].bet * 2 + (_bank * rooms[_room].fees / (100 * 1e18))); // уменьшаем банк комнаты на комиссию + выигрыш победителя

        uint _sum; // сумма всех ставок
        for(uint256 i = 0; i < rooms[_room].player1_users.length; i++){
            _arrPlayer1[i] = rooms[_room].player1_users[i]; // копируем всех кто ставил на игрока 1
            _arrPay1[i] = rooms[_room].player1_bets[i]; // копируем все ставки на игрока 1
            _sum += _arrPay1[i]; // ссумируем все их ставки, для точного определения процента каждого
        }
        for(uint256 i = 0; i < rooms[_room].player1_users.length; i++){
            _arrPay1[i] = _arrPay1[i] * (100 * 1e18) / _sum; // находим процент от суммы ставок, который должен получить пользователь
            _arrPay1[i] = _bank * _arrPay1[i] / (100 * 1e18); // находим выплату по проценту
        }
        _arrPay1[0] += (rooms[_room].bet * 2); // к ставки игрока добавляется его награда за победу в игре
        _sum = 0; // обнуляем сумму для расчета других победителей

        for(uint256 i = 0; i < rooms[_room].player2_users.length; i++){
            _arrPlayer2[i] = rooms[_room].player2_users[i]; // копируем всех кто ставил на игрока 2
            _arrPay2[i] = rooms[_room].player2_bets[i]; // копируем все ставки на игрока 2
            _sum += _arrPay2[i]; // ссумируем все их ставки, для точного определения процента каждого
        }
        for(uint256 i = 0; i < rooms[_room].player2_users.length; i++){
            _arrPay2[i] = _arrPay2[i] * (100 * 1e18) / _sum; // находим процент от суммы ставок, который должен получить пользователь
            _arrPay2[i] = _bank * _arrPay2[i] / (100 * 1e18); // находим выплату по проценту
        }
        _arrPay2[0] += (rooms[_room].bet * 2); // к ставки игрока добавляется его награда за победу в игре        

        // Возвращаем банк комнаты и 4 массива (игроки1, выплаты1, игроки2, выплаты2)
        return (rooms[_room].bankRoom, _arrPlayer1, _arrPay1, _arrPlayer2, _arrPay2);
    }    
}
        

Contract ABI

[{"type":"event","name":"UsedRoom","inputs":[{"type":"uint256","name":"room","internalType":"uint256","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"amountGames","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[],"name":"betOnPlayer1","inputs":[{"type":"uint256","name":"_room","internalType":"uint256"}]},{"type":"function","stateMutability":"payable","outputs":[],"name":"betOnPlayer2","inputs":[{"type":"uint256","name":"_room","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"closeRoom","inputs":[{"type":"uint256","name":"_room","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"commission","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"depositCancel","inputs":[]},{"type":"function","stateMutability":"payable","outputs":[],"name":"depositGame","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"fees","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"gameRoom","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"gamerBetPool","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple[]","name":"","internalType":"struct AstralCards.ActiveRoom[]","components":[{"type":"uint256","name":"room","internalType":"uint256"},{"type":"uint256","name":"bankRoom","internalType":"uint256"},{"type":"uint256","name":"bet","internalType":"uint256"},{"type":"uint256","name":"status","internalType":"uint256"},{"type":"address","name":"player1","internalType":"address"},{"type":"address","name":"player2","internalType":"address"}]}],"name":"getCreatedRooms","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"},{"type":"address[]","name":"","internalType":"address[]"},{"type":"uint256[]","name":"","internalType":"uint256[]"},{"type":"address[]","name":"","internalType":"address[]"},{"type":"uint256[]","name":"","internalType":"uint256[]"}],"name":"getPreview","inputs":[{"type":"uint256","name":"_room","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple","name":"","internalType":"struct AstralCards.Room","components":[{"type":"uint256","name":"bankRoom","internalType":"uint256"},{"type":"uint256","name":"bet","internalType":"uint256"},{"type":"uint256","name":"fees","internalType":"uint256"},{"type":"uint256","name":"status","internalType":"uint256"},{"type":"address[]","name":"player1_users","internalType":"address[]"},{"type":"uint256[]","name":"player1_bets","internalType":"uint256[]"},{"type":"address[]","name":"player2_users","internalType":"address[]"},{"type":"uint256[]","name":"player2_bets","internalType":"uint256[]"}]}],"name":"getRoom","inputs":[{"type":"uint256","name":"_room","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"tuple","name":"","internalType":"struct AstralCards.User","components":[{"type":"uint8","name":"avatar","internalType":"uint8"},{"type":"string","name":"lang","internalType":"string"},{"type":"string","name":"name","internalType":"string"}]}],"name":"getSettings","inputs":[{"type":"address","name":"_user","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"maxUsersPerPlayer","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"minGameBet","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"oracle","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"saveSettings","inputs":[{"type":"uint8","name":"_avatar","internalType":"uint8"},{"type":"string","name":"_lang","internalType":"string"},{"type":"string","name":"_name","internalType":"string"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setFees","inputs":[{"type":"uint256","name":"_fees","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setGamerBetPool","inputs":[{"type":"uint256","name":"_gamerBetPool","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMaxUsersPerPlayer","inputs":[{"type":"uint256","name":"_maxUsersPerPlayer","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMinGameBet","inputs":[{"type":"uint256","name":"_minGameBet","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setNewCommission","inputs":[{"type":"address","name":"_commission","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setNewOracle","inputs":[{"type":"address","name":"_newOracle","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setRoomStatus","inputs":[{"type":"uint256","name":"_room","internalType":"uint256"},{"type":"uint256","name":"_status","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setWinner","inputs":[{"type":"uint256","name":"_room","internalType":"uint256"},{"type":"address","name":"_winner","internalType":"address"}]},{"type":"receive","stateMutability":"payable"}]
              

Contract Creation Code

Verify & Publish
0x60806040526001600055678ac7230489e8000060025568015af1d78b58c40000600355601e600455674563918244f4000060055533600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561010257600080fd5b50614b5f806101126000396000f3fe6080604052600436106101a05760003560e01c80638d617c1c116100ec578063bdd42aee1161008a578063d1c4cd8311610064578063d1c4cd8314610566578063e034d87b1461058f578063e1489191146105ba578063e1e6f150146105e5576101af565b8063bdd42aee146104fb578063ca01e33614610524578063cc28f73d1461054f576101af565b80639c623683116100c65780639c62368314610472578063aab30a3b1461049b578063ae94058e146104a5578063afa723a0146104d0576101af565b80638d617c1c146103db5780638da5cb5b1461041c5780639af1d35a14610447576101af565b806341b1311a116101595780636d8a74cb116101335780636d8a74cb1461030d5780637706d1f61461034a5780637dc0d1d0146103875780638699aa0b146103b2576101af565b806341b1311a1461029f5780634c42e4b4146102c85780635ccf3e93146102f1576101af565b80630ceb14fa146101b457806314777822146101df5780631c3a8892146101fb57806327081703146102245780633d18678e1461024d5780633d6a366414610276576101af565b366101af576101ad610610565b005b600080fd5b3480156101c057600080fd5b506101c9610c3e565b6040516101d691906138b3565b60405180910390f35b6101f960048036038101906101f4919061390e565b610c44565b005b34801561020757600080fd5b50610222600480360381019061021d919061390e565b610f4b565b005b34801561023057600080fd5b5061024b6004803603810190610246919061390e565b6113ca565b005b34801561025957600080fd5b50610274600480360381019061026f919061390e565b611464565b005b34801561028257600080fd5b5061029d60048036038101906102989190613999565b6114fe565b005b3480156102ab57600080fd5b506102c660048036038101906102c1919061390e565b6115d2565b005b3480156102d457600080fd5b506102ef60048036038101906102ea919061390e565b61166c565b005b61030b6004803603810190610306919061390e565b611706565b005b34801561031957600080fd5b50610334600480360381019061032f919061390e565b611a0d565b6040516103419190613c07565b60405180910390f35b34801561035657600080fd5b50610371600480360381019061036c9190613999565b611c2f565b60405161037e9190613d2c565b60405180910390f35b34801561039357600080fd5b5061039c611dc9565b6040516103a99190613d5d565b60405180910390f35b3480156103be57600080fd5b506103d960048036038101906103d49190613999565b611def565b005b3480156103e757600080fd5b5061040260048036038101906103fd919061390e565b611ec3565b604051610413959493929190613e56565b60405180910390f35b34801561042857600080fd5b50610431612647565b60405161043e9190613d5d565b60405180910390f35b34801561045357600080fd5b5061045c61266d565b60405161046991906138b3565b60405180910390f35b34801561047e57600080fd5b5061049960048036038101906104949190613ec5565b612673565b005b6104a3610610565b005b3480156104b157600080fd5b506104ba612b4d565b6040516104c7919061402f565b60405180910390f35b3480156104dc57600080fd5b506104e5612e22565b6040516104f291906138b3565b60405180910390f35b34801561050757600080fd5b50610522600480360381019061051d91906141b2565b612e28565b005b34801561053057600080fd5b50610539612f28565b60405161054691906138b3565b60405180910390f35b34801561055b57600080fd5b50610564612f2e565b005b34801561057257600080fd5b5061058d6004803603810190610588919061423d565b61313f565b005b34801561059b57600080fd5b506105a4613277565b6040516105b191906138b3565b60405180910390f35b3480156105c657600080fd5b506105cf61327d565b6040516105dc9190613d5d565b60405180910390f35b3480156105f157600080fd5b506105fa6132a3565b60405161060791906138b3565b60405180910390f35b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461067e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610675906142da565b60405180910390fd5b6002543410156106c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ba90614346565b60405180910390fd5b6000600a60008054815260200190815260200160002060030154036107d25734600a600080548152602001908152602001600020600101819055506001600a60008054815260200190815260200160002060030181905550600a600080548152602001908152602001600020600401339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061079e6000546132a9565b6000547fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2610c3c565b600a6000805481526020019081526020016000206004016000815481106107fc576107fb614366565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088b906143e1565b60405180910390fd5b600a60008054815260200190815260200160002060010154341115610921573373ffffffffffffffffffffffffffffffffffffffff166108fc600a60008054815260200190815260200160002060010154346108f09190614430565b9081150290604051600060405180830381858888f1935050505015801561091b573d6000803e3d6000fd5b50610a1b565b600a60008054815260200190815260200160002060010154341015610a1a57600a60008054815260200190815260200160002060040160008154811061096a57610969614366565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc34600a600080548152602001908152602001600020600101546109d19190614430565b9081150290604051600060405180830381858888f193505050501580156109fc573d6000803e3d6000fd5b5034600a600080548152602001908152602001600020600101819055505b5b6002600a60008054815260200190815260200160002060010154610a3f9190614464565b600a60008054815260200190815260200160002060000181905550600068056bc75e2d63100000600354600a60008054815260200190815260200160002060010154610a8b9190614464565b610a9591906144ed565b905080600a6000805481526020019081526020016000206001016000828254610abe9190614430565b92505081905550600a600080548152602001908152602001600020600501819080600181540180825580915050600190039060005260206000200160009091909190915055600a600080548152602001908152602001600020600601339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a600080548152602001908152602001600020600701819080600181540180825580915050600190039060005260206000200160009091909190915055600554600a600080548152602001908152602001600020600201819055506003600a600080548152602001908152602001600020600301819055506000547fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2600080815480929190610c359061451e565b9190505550505b565b60015481565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca9906142da565b60405180910390fd5b6004600254610cc191906144ed565b341015610d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfa90614346565b60405180910390fd5b6003600a60008381526020019081526020016000206003015414610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d53906145b2565b60405180910390fd5b600454600a6000838152602001908152602001600020600601805490501115610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db19061461e565b60405180910390fd5b600080610ddb600a6000858152602001908152602001600020600601613378565b80925081935050508015610e375734600a60008581526020019081526020016000206007018381548110610e1257610e11614366565b5b906000526020600020016000828254610e2b919061463e565b92505081905550610eec565b600a6000848152602001908152602001600020600601339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60008481526020019081526020016000206007013490806001815401808255809150506001900390600052602060002001600090919091909150555b34600a60008581526020019081526020016000206000016000828254610f12919061463e565b92505081905550827fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd2906146be565b60405180910390fd5b6003600a600083815260200190815260200160002060030154148061101657506002600a600083815260200190815260200160002060030154145b611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c9061472a565b60405180910390fd5b600a600082815260200190815260200160002060010154600a600083815260200190815260200160002060050160008154811061109557611094614366565b5b9060005260206000200160008282546110ae919061463e565b92505081905550600a600082815260200190815260200160002060010154600a60008381526020019081526020016000206007016000815481106110f5576110f4614366565b5b90600052602060002001600082825461110e919061463e565b9250508190555060005b600a60008381526020019081526020016000206004018054905081101561121757600a6000838152602001908152602001600020600401818154811061116157611160614366565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a600085815260200190815260200160002060050183815481106111cd576111cc614366565b5b90600052602060002001549081150290604051600060405180830381858888f19350505050158015611203573d6000803e3d6000fd5b50808061120f9061451e565b915050611118565b5060005b600a60008381526020019081526020016000206006018054905081101561131a57600a6000838152602001908152602001600020600601818154811061126457611263614366565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a600085815260200190815260200160002060070183815481106112d0576112cf614366565b5b90600052602060002001549081150290604051600060405180830381858888f19350505050158015611306573d6000803e3d6000fd5b5080806113129061451e565b91505061121b565b5061132481613428565b600a60008281526020019081526020016000206000808201600090556001820160009055600282016000905560038201600090556004820160006113689190613770565b6005820160006113789190613791565b6006820160006113889190613770565b6007820160006113989190613791565b5050807fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461145a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611451906146be565b60405180910390fd5b8060028190555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114eb906146be565b60405180910390fd5b8060058190555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461158e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611585906146be565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611662576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611659906146be565b60405180910390fd5b8060038190555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f3906146be565b60405180910390fd5b8060048190555050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176b906142da565b60405180910390fd5b600460025461178391906144ed565b3410156117c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bc90614346565b60405180910390fd5b6003600a6000838152602001908152602001600020600301541461181e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611815906145b2565b60405180910390fd5b600454600a600083815260200190815260200160002060040180549050111561187c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118739061461e565b60405180910390fd5b60008061189d600a6000858152602001908152602001600020600401613378565b809250819350505080156118f95734600a600085815260200190815260200160002060050183815481106118d4576118d3614366565b5b9060005260206000200160008282546118ed919061463e565b925050819055506119ae565b600a6000848152602001908152602001600020600401339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60008481526020019081526020016000206005013490806001815401808255809150506001900390600052602060002001600090919091909150555b34600a600085815260200190815260200160002060000160008282546119d4919061463e565b92505081905550827fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2505050565b611a156137b2565b600a6000838152602001908152602001600020604051806101000160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201805480602002602001604051908101604052809291908181526020018280548015611ae157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611a97575b5050505050815260200160058201805480602002602001604051908101604052809291908181526020018280548015611b3957602002820191906000526020600020905b815481526020019060010190808311611b25575b5050505050815260200160068201805480602002602001604051908101604052809291908181526020018280548015611bc757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611b7d575b5050505050815260200160078201805480602002602001604051908101604052809291908181526020018280548015611c1f57602002820191906000526020600020905b815481526020019060010190808311611c0b575b5050505050815250509050919050565b611c376137f7565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a900460ff1660ff1660ff168152602001600182018054611cae90614779565b80601f0160208091040260200160405190810160405280929190818152602001828054611cda90614779565b8015611d275780601f10611cfc57610100808354040283529160200191611d27565b820191906000526020600020905b815481529060010190602001808311611d0a57829003601f168201915b50505050508152602001600282018054611d4090614779565b80601f0160208091040260200160405190810160405280929190818152602001828054611d6c90614779565b8015611db95780601f10611d8e57610100808354040283529160200191611db9565b820191906000526020600020905b815481529060010190602001808311611d9c57829003601f168201915b5050505050815250509050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e76906146be565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006060806060806000600a60008881526020019081526020016000206004018054905067ffffffffffffffff811115611f0057611eff614087565b5b604051908082528060200260200182016040528015611f2e5781602001602082028036833780820191505090505b5090506000600a60008981526020019081526020016000206004018054905067ffffffffffffffff811115611f6657611f65614087565b5b604051908082528060200260200182016040528015611f945781602001602082028036833780820191505090505b5090506000600a60008a81526020019081526020016000206006018054905067ffffffffffffffff811115611fcc57611fcb614087565b5b604051908082528060200260200182016040528015611ffa5781602001602082028036833780820191505090505b5090506000600a60008b81526020019081526020016000206006018054905067ffffffffffffffff81111561203257612031614087565b5b6040519080825280602002602001820160405280156120605781602001602082028036833780820191505090505b5090506000600a60008c815260200190815260200160002060000154905068056bc75e2d63100000600a60008d815260200190815260200160002060020154826120aa9190614464565b6120b491906144ed565b6002600a60008e8152602001908152602001600020600101546120d79190614464565b6120e1919061463e565b816120ec9190614430565b9050600080600090505b600a60008e81526020019081526020016000206004018054905081101561224457600a60008e8152602001908152602001600020600401818154811061213f5761213e614366565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687828151811061217d5761217c614366565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a60008e815260200190815260200160002060050181815481106121df576121de614366565b5b90600052602060002001548682815181106121fd576121fc614366565b5b60200260200101818152505085818151811061221c5761221b614366565b5b60200260200101518261222f919061463e565b9150808061223c9061451e565b9150506120f6565b5060005b600a60008e81526020019081526020016000206004018054905081101561232e578168056bc75e2d6310000087838151811061228757612286614366565b5b60200260200101516122999190614464565b6122a391906144ed565b8682815181106122b6576122b5614366565b5b60200260200101818152505068056bc75e2d631000008682815181106122df576122de614366565b5b6020026020010151846122f29190614464565b6122fc91906144ed565b86828151811061230f5761230e614366565b5b60200260200101818152505080806123269061451e565b915050612248565b506002600a60008e8152602001908152602001600020600101546123529190614464565b8560008151811061236657612365614366565b5b6020026020010181815161237a919061463e565b915081815250506000905060005b600a60008e8152602001908152602001600020600601805490508110156124d657600a60008e815260200190815260200160002060060181815481106123d1576123d0614366565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685828151811061240f5761240e614366565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a60008e8152602001908152602001600020600701818154811061247157612470614366565b5b906000526020600020015484828151811061248f5761248e614366565b5b6020026020010181815250508381815181106124ae576124ad614366565b5b6020026020010151826124c1919061463e565b915080806124ce9061451e565b915050612388565b5060005b600a60008e8152602001908152602001600020600601805490508110156125c0578168056bc75e2d6310000085838151811061251957612518614366565b5b602002602001015161252b9190614464565b61253591906144ed565b84828151811061254857612547614366565b5b60200260200101818152505068056bc75e2d6310000084828151811061257157612570614366565b5b6020026020010151846125849190614464565b61258e91906144ed565b8482815181106125a1576125a0614366565b5b60200260200101818152505080806125b89061451e565b9150506124da565b506002600a60008e8152602001908152602001600020600101546125e49190614464565b836000815181106125f8576125f7614366565b5b6020026020010181815161260c919061463e565b91508181525050600a60008d815260200190815260200160002060000154868686869a509a509a509a509a5050505050505091939590929450565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fa906147f6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a600084815260200190815260200160002060040160008154811061274357612742614366565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061280e57508073ffffffffffffffffffffffffffffffffffffffff16600a60008481526020019081526020016000206006016000815481106127cb576127ca614366565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61281757600080fd5b600068056bc75e2d63100000600a600085815260200190815260200160002060020154600a60008681526020019081526020016000206000015461285b9190614464565b61286591906144ed565b90506002600a6000858152602001908152602001600020600101600082825461288e9190614464565b92505081905550600a600084815260200190815260200160002060010154816128b7919061463e565b600a600085815260200190815260200160002060000160008282546128dc9190614430565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600a600085815260200190815260200160002060040160008154811061292357612922614366565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036129d0576129cb600a600085815260200190815260200160002060000154600a600086815260200190815260200160002060010154600a6000878152602001908152602001600020600401600a60008881526020019081526020016000206005016134ff565b612a33565b612a32600a600085815260200190815260200160002060000154600a600086815260200190815260200160002060010154600a6000878152602001908152602001600020600601600a60008881526020019081526020016000206007016134ff565b5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612a9b573d6000803e3d6000fd5b50612aa583613428565b600a6000848152602001908152602001600020600080820160009055600182016000905560028201600090556003820160009055600482016000612ae99190613770565b600582016000612af99190613791565b600682016000612b099190613770565b600782016000612b199190613791565b5050827fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2505050565b6060600060015467ffffffffffffffff811115612b6d57612b6c614087565b5b604051908082528060200260200182016040528015612ba657816020015b612b9361381b565b815260200190600190039081612b8b5790505b5090506000600b600080815260200190815260200160002060010154905060005b600154811015612e195781838281518110612be557612be4614366565b5b60200260200101516000018181525050600a600083815260200190815260200160002060000154838281518110612c1f57612c1e614366565b5b60200260200101516020018181525050600a600083815260200190815260200160002060010154838281518110612c5957612c58614366565b5b60200260200101516040018181525050600a600083815260200190815260200160002060030154838281518110612c9357612c92614366565b5b60200260200101516060018181525050600a6000838152602001908152602001600020600401600081548110612ccc57612ccb614366565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838281518110612d0a57612d09614366565b5b60200260200101516080019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a6000838152602001908152602001600020600601600081548110612d7157612d70614366565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838281518110612daf57612dae614366565b5b602002602001015160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600b60008381526020019081526020016000206001015491508080612e119061451e565b915050612bc7565b50819250505090565b60025481565b82600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908360ff16021790555081600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001019081612ed291906149c2565b5080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002019081612f2291906149c2565b50505050565b60035481565b600a600080548152602001908152602001600020600401600081548110612f5857612f57614366565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe790614ae0565b60405180910390fd5b6001600a600080548152602001908152602001600020600301541461301457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc600a600080548152602001908152602001600020600101549081150290604051600060405180830381858888f19350505050158015613071573d6000803e3d6000fd5b506000600a600080548152602001908152602001600020600101819055506000600a60008054815260200190815260200160002060030181905550600a6000805481526020019081526020016000206004016000815481106130d6576130d5614366565b5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905561310e600054613428565b6000547fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146131cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c6906147f6565b60405180910390fd5b60028114806131de5750600381145b6131e757600080fd5b6002600a600084815260200190815260200160002060030154148061322257506003600a600084815260200190815260200160002060030154145b61322b57600080fd5b80600a600084815260200190815260200160002060030181905550817fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a25050565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b80600b6000838152602001908152602001600020600001819055506000600b600083815260200190815260200160002060010181905550600b600080815260200190815260200160002060020154600b60008381526020019081526020016000206002018190555080600b6000600b60008081526020019081526020016000206002015481526020019081526020016000206001018190555080600b600080815260200190815260200160002060020181905550600160008154809291906133709061451e565b919050555050565b60008060005b838054905081101561341a5783818154811061339d5761339c614366565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603613407578060019250925050613423565b80806134129061451e565b91505061337e565b50600080915091505b915091565b600b600082815260200190815260200160002060010154600b6000600b600085815260200190815260200160002060020154815260200190815260200160002060010181905550600b600082815260200190815260200160002060020154600b6000600b600085815260200190815260200160002060010154815260200190815260200160002060020181905550600160008154809291906134c990614b00565b9190505550600b600082815260200190815260200160002060008082016000905560018201600090556002820160009055505050565b600080838054905067ffffffffffffffff8111156135205761351f614087565b5b60405190808252806020026020018201604052801561354e5781602001602082028036833780820191505090505b50905060005b848054905081101561359e5783818154811061357357613572614366565b5b906000526020600020015483613589919061463e565b925080806135969061451e565b915050613554565b5060005b8480549050811015613676578268056bc75e2d631000008583815481106135cc576135cb614366565b5b90600052602060002001546135e19190614464565b6135eb91906144ed565b8282815181106135fe576135fd614366565b5b60200260200101818152505068056bc75e2d6310000082828151811061362757613626614366565b5b60200260200101518861363a9190614464565b61364491906144ed565b82828151811061365757613656614366565b5b602002602001018181525050808061366e9061451e565b9150506135a2565b50848160008151811061368c5761368b614366565b5b602002602001018181516136a0919061463e565b9150818152505060005b8480549050811015613767578481815481106136c9576136c8614366565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8383815181106137205761371f614366565b5b60200260200101519081150290604051600060405180830381858888f19350505050158015613753573d6000803e3d6000fd5b50808061375f9061451e565b9150506136aa565b50505050505050565b508054600082559060005260206000209081019061378e919061387d565b50565b50805460008255906000526020600020908101906137af919061387d565b50565b60405180610100016040528060008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040518060600160405280600060ff16815260200160608152602001606081525090565b6040518060c0016040528060008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b5b8082111561389657600081600090555060010161387e565b5090565b6000819050919050565b6138ad8161389a565b82525050565b60006020820190506138c860008301846138a4565b92915050565b6000604051905090565b600080fd5b600080fd5b6138eb8161389a565b81146138f657600080fd5b50565b600081359050613908816138e2565b92915050565b600060208284031215613924576139236138d8565b5b6000613932848285016138f9565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139668261393b565b9050919050565b6139768161395b565b811461398157600080fd5b50565b6000813590506139938161396d565b92915050565b6000602082840312156139af576139ae6138d8565b5b60006139bd84828501613984565b91505092915050565b6139cf8161389a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a0a8161395b565b82525050565b6000613a1c8383613a01565b60208301905092915050565b6000602082019050919050565b6000613a40826139d5565b613a4a81856139e0565b9350613a55836139f1565b8060005b83811015613a86578151613a6d8882613a10565b9750613a7883613a28565b925050600181019050613a59565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000613acb83836139c6565b60208301905092915050565b6000602082019050919050565b6000613aef82613a93565b613af98185613a9e565b9350613b0483613aaf565b8060005b83811015613b35578151613b1c8882613abf565b9750613b2783613ad7565b925050600181019050613b08565b5085935050505092915050565b600061010083016000830151613b5b60008601826139c6565b506020830151613b6e60208601826139c6565b506040830151613b8160408601826139c6565b506060830151613b9460608601826139c6565b5060808301518482036080860152613bac8282613a35565b91505060a083015184820360a0860152613bc68282613ae4565b91505060c083015184820360c0860152613be08282613a35565b91505060e083015184820360e0860152613bfa8282613ae4565b9150508091505092915050565b60006020820190508181036000830152613c218184613b42565b905092915050565b600060ff82169050919050565b613c3f81613c29565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c7f578082015181840152602081019050613c64565b60008484015250505050565b6000601f19601f8301169050919050565b6000613ca782613c45565b613cb18185613c50565b9350613cc1818560208601613c61565b613cca81613c8b565b840191505092915050565b6000606083016000830151613ced6000860182613c36565b5060208301518482036020860152613d058282613c9c565b91505060408301518482036040860152613d1f8282613c9c565b9150508091505092915050565b60006020820190508181036000830152613d468184613cd5565b905092915050565b613d578161395b565b82525050565b6000602082019050613d726000830184613d4e565b92915050565b600082825260208201905092915050565b6000613d94826139d5565b613d9e8185613d78565b9350613da9836139f1565b8060005b83811015613dda578151613dc18882613a10565b9750613dcc83613a28565b925050600181019050613dad565b5085935050505092915050565b600082825260208201905092915050565b6000613e0382613a93565b613e0d8185613de7565b9350613e1883613aaf565b8060005b83811015613e49578151613e308882613abf565b9750613e3b83613ad7565b925050600181019050613e1c565b5085935050505092915050565b600060a082019050613e6b60008301886138a4565b8181036020830152613e7d8187613d89565b90508181036040830152613e918186613df8565b90508181036060830152613ea58185613d89565b90508181036080830152613eb98184613df8565b90509695505050505050565b60008060408385031215613edc57613edb6138d8565b5b6000613eea858286016138f9565b9250506020613efb85828601613984565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60c082016000820151613f4760008501826139c6565b506020820151613f5a60208501826139c6565b506040820151613f6d60408501826139c6565b506060820151613f8060608501826139c6565b506080820151613f936080850182613a01565b5060a0820151613fa660a0850182613a01565b50505050565b6000613fb88383613f31565b60c08301905092915050565b6000602082019050919050565b6000613fdc82613f05565b613fe68185613f10565b9350613ff183613f21565b8060005b838110156140225781516140098882613fac565b975061401483613fc4565b925050600181019050613ff5565b5085935050505092915050565b600060208201905081810360008301526140498184613fd1565b905092915050565b61405a81613c29565b811461406557600080fd5b50565b60008135905061407781614051565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6140bf82613c8b565b810181811067ffffffffffffffff821117156140de576140dd614087565b5b80604052505050565b60006140f16138ce565b90506140fd82826140b6565b919050565b600067ffffffffffffffff82111561411d5761411c614087565b5b61412682613c8b565b9050602081019050919050565b82818337600083830152505050565b600061415561415084614102565b6140e7565b90508281526020810184848401111561417157614170614082565b5b61417c848285614133565b509392505050565b600082601f8301126141995761419861407d565b5b81356141a9848260208601614142565b91505092915050565b6000806000606084860312156141cb576141ca6138d8565b5b60006141d986828701614068565b935050602084013567ffffffffffffffff8111156141fa576141f96138dd565b5b61420686828701614184565b925050604084013567ffffffffffffffff811115614227576142266138dd565b5b61423386828701614184565b9150509250925092565b60008060408385031215614254576142536138d8565b5b6000614262858286016138f9565b9250506020614273858286016138f9565b9150509250929050565b600082825260208201905092915050565b7f4f6e6c7920454f41000000000000000000000000000000000000000000000000600082015250565b60006142c460088361427d565b91506142cf8261428e565b602082019050919050565b600060208201905081810360008301526142f3816142b7565b9050919050565b7f6c6f772062657400000000000000000000000000000000000000000000000000600082015250565b600061433060078361427d565b915061433b826142fa565b602082019050919050565b6000602082019050818103600083015261435f81614323565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f616c726561647920616464656400000000000000000000000000000000000000600082015250565b60006143cb600d8361427d565b91506143d682614395565b602082019050919050565b600060208201905081810360008301526143fa816143be565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061443b8261389a565b91506144468361389a565b925082820390508181111561445e5761445d614401565b5b92915050565b600061446f8261389a565b915061447a8361389a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144b3576144b2614401565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144f88261389a565b91506145038361389a565b925082614513576145126144be565b5b828204905092915050565b60006145298261389a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361455b5761455a614401565b5b600182019050919050565b7f62657473206172652070726f6869626974656400000000000000000000000000600082015250565b600061459c60138361427d565b91506145a782614566565b602082019050919050565b600060208201905081810360008301526145cb8161458f565b9050919050565b7f4d616e7920757365727320776974682062657473000000000000000000000000600082015250565b600061460860148361427d565b9150614613826145d2565b602082019050919050565b60006020820190508181036000830152614637816145fb565b9050919050565b60006146498261389a565b91506146548361389a565b925082820190508082111561466c5761466b614401565b5b92915050565b7f4f6e6c79206f776e657200000000000000000000000000000000000000000000600082015250565b60006146a8600a8361427d565b91506146b382614672565b602082019050919050565b600060208201905081810360008301526146d78161469b565b9050919050565b7f6261642073746174757300000000000000000000000000000000000000000000600082015250565b6000614714600a8361427d565b915061471f826146de565b602082019050919050565b6000602082019050818103600083015261474381614707565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061479157607f821691505b6020821081036147a4576147a361474a565b5b50919050565b7f4f6e6c79206f7261636c65000000000000000000000000000000000000000000600082015250565b60006147e0600b8361427d565b91506147eb826147aa565b602082019050919050565b6000602082019050818103600083015261480f816147d3565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026148787fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261483b565b614882868361483b565b95508019841693508086168417925050509392505050565b6000819050919050565b60006148bf6148ba6148b58461389a565b61489a565b61389a565b9050919050565b6000819050919050565b6148d9836148a4565b6148ed6148e5826148c6565b848454614848565b825550505050565b600090565b6149026148f5565b61490d8184846148d0565b505050565b5b81811015614931576149266000826148fa565b600181019050614913565b5050565b601f8211156149765761494781614816565b6149508461482b565b8101602085101561495f578190505b61497361496b8561482b565b830182614912565b50505b505050565b600082821c905092915050565b60006149996000198460080261497b565b1980831691505092915050565b60006149b28383614988565b9150826002028217905092915050565b6149cb82613c45565b67ffffffffffffffff8111156149e4576149e3614087565b5b6149ee8254614779565b6149f9828285614935565b600060209050601f831160018114614a2c5760008415614a1a578287015190505b614a2485826149a6565b865550614a8c565b601f198416614a3a86614816565b60005b82811015614a6257848901518255600182019150602085019450602081019050614a3d565b86831015614a7f5784890151614a7b601f891682614988565b8355505b6001600288020188555050505b505050505050565b7f6e6f7420796f7572206265740000000000000000000000000000000000000000600082015250565b6000614aca600c8361427d565b9150614ad582614a94565b602082019050919050565b60006020820190508181036000830152614af981614abd565b9050919050565b6000614b0b8261389a565b915060008203614b1e57614b1d614401565b5b60018203905091905056fea2646970667358221220bea1106e5c962061dd49fb834ac8479805138214dd117a57a1b809c9b0e6d69964736f6c63430008100033

Deployed ByteCode

0x6080604052600436106101a05760003560e01c80638d617c1c116100ec578063bdd42aee1161008a578063d1c4cd8311610064578063d1c4cd8314610566578063e034d87b1461058f578063e1489191146105ba578063e1e6f150146105e5576101af565b8063bdd42aee146104fb578063ca01e33614610524578063cc28f73d1461054f576101af565b80639c623683116100c65780639c62368314610472578063aab30a3b1461049b578063ae94058e146104a5578063afa723a0146104d0576101af565b80638d617c1c146103db5780638da5cb5b1461041c5780639af1d35a14610447576101af565b806341b1311a116101595780636d8a74cb116101335780636d8a74cb1461030d5780637706d1f61461034a5780637dc0d1d0146103875780638699aa0b146103b2576101af565b806341b1311a1461029f5780634c42e4b4146102c85780635ccf3e93146102f1576101af565b80630ceb14fa146101b457806314777822146101df5780631c3a8892146101fb57806327081703146102245780633d18678e1461024d5780633d6a366414610276576101af565b366101af576101ad610610565b005b600080fd5b3480156101c057600080fd5b506101c9610c3e565b6040516101d691906138b3565b60405180910390f35b6101f960048036038101906101f4919061390e565b610c44565b005b34801561020757600080fd5b50610222600480360381019061021d919061390e565b610f4b565b005b34801561023057600080fd5b5061024b6004803603810190610246919061390e565b6113ca565b005b34801561025957600080fd5b50610274600480360381019061026f919061390e565b611464565b005b34801561028257600080fd5b5061029d60048036038101906102989190613999565b6114fe565b005b3480156102ab57600080fd5b506102c660048036038101906102c1919061390e565b6115d2565b005b3480156102d457600080fd5b506102ef60048036038101906102ea919061390e565b61166c565b005b61030b6004803603810190610306919061390e565b611706565b005b34801561031957600080fd5b50610334600480360381019061032f919061390e565b611a0d565b6040516103419190613c07565b60405180910390f35b34801561035657600080fd5b50610371600480360381019061036c9190613999565b611c2f565b60405161037e9190613d2c565b60405180910390f35b34801561039357600080fd5b5061039c611dc9565b6040516103a99190613d5d565b60405180910390f35b3480156103be57600080fd5b506103d960048036038101906103d49190613999565b611def565b005b3480156103e757600080fd5b5061040260048036038101906103fd919061390e565b611ec3565b604051610413959493929190613e56565b60405180910390f35b34801561042857600080fd5b50610431612647565b60405161043e9190613d5d565b60405180910390f35b34801561045357600080fd5b5061045c61266d565b60405161046991906138b3565b60405180910390f35b34801561047e57600080fd5b5061049960048036038101906104949190613ec5565b612673565b005b6104a3610610565b005b3480156104b157600080fd5b506104ba612b4d565b6040516104c7919061402f565b60405180910390f35b3480156104dc57600080fd5b506104e5612e22565b6040516104f291906138b3565b60405180910390f35b34801561050757600080fd5b50610522600480360381019061051d91906141b2565b612e28565b005b34801561053057600080fd5b50610539612f28565b60405161054691906138b3565b60405180910390f35b34801561055b57600080fd5b50610564612f2e565b005b34801561057257600080fd5b5061058d6004803603810190610588919061423d565b61313f565b005b34801561059b57600080fd5b506105a4613277565b6040516105b191906138b3565b60405180910390f35b3480156105c657600080fd5b506105cf61327d565b6040516105dc9190613d5d565b60405180910390f35b3480156105f157600080fd5b506105fa6132a3565b60405161060791906138b3565b60405180910390f35b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461067e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610675906142da565b60405180910390fd5b6002543410156106c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ba90614346565b60405180910390fd5b6000600a60008054815260200190815260200160002060030154036107d25734600a600080548152602001908152602001600020600101819055506001600a60008054815260200190815260200160002060030181905550600a600080548152602001908152602001600020600401339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061079e6000546132a9565b6000547fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2610c3c565b600a6000805481526020019081526020016000206004016000815481106107fc576107fb614366565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088b906143e1565b60405180910390fd5b600a60008054815260200190815260200160002060010154341115610921573373ffffffffffffffffffffffffffffffffffffffff166108fc600a60008054815260200190815260200160002060010154346108f09190614430565b9081150290604051600060405180830381858888f1935050505015801561091b573d6000803e3d6000fd5b50610a1b565b600a60008054815260200190815260200160002060010154341015610a1a57600a60008054815260200190815260200160002060040160008154811061096a57610969614366565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc34600a600080548152602001908152602001600020600101546109d19190614430565b9081150290604051600060405180830381858888f193505050501580156109fc573d6000803e3d6000fd5b5034600a600080548152602001908152602001600020600101819055505b5b6002600a60008054815260200190815260200160002060010154610a3f9190614464565b600a60008054815260200190815260200160002060000181905550600068056bc75e2d63100000600354600a60008054815260200190815260200160002060010154610a8b9190614464565b610a9591906144ed565b905080600a6000805481526020019081526020016000206001016000828254610abe9190614430565b92505081905550600a600080548152602001908152602001600020600501819080600181540180825580915050600190039060005260206000200160009091909190915055600a600080548152602001908152602001600020600601339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a600080548152602001908152602001600020600701819080600181540180825580915050600190039060005260206000200160009091909190915055600554600a600080548152602001908152602001600020600201819055506003600a600080548152602001908152602001600020600301819055506000547fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2600080815480929190610c359061451e565b9190505550505b565b60015481565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca9906142da565b60405180910390fd5b6004600254610cc191906144ed565b341015610d03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfa90614346565b60405180910390fd5b6003600a60008381526020019081526020016000206003015414610d5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d53906145b2565b60405180910390fd5b600454600a6000838152602001908152602001600020600601805490501115610dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db19061461e565b60405180910390fd5b600080610ddb600a6000858152602001908152602001600020600601613378565b80925081935050508015610e375734600a60008581526020019081526020016000206007018381548110610e1257610e11614366565b5b906000526020600020016000828254610e2b919061463e565b92505081905550610eec565b600a6000848152602001908152602001600020600601339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60008481526020019081526020016000206007013490806001815401808255809150506001900390600052602060002001600090919091909150555b34600a60008581526020019081526020016000206000016000828254610f12919061463e565b92505081905550827fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610fdb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd2906146be565b60405180910390fd5b6003600a600083815260200190815260200160002060030154148061101657506002600a600083815260200190815260200160002060030154145b611055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104c9061472a565b60405180910390fd5b600a600082815260200190815260200160002060010154600a600083815260200190815260200160002060050160008154811061109557611094614366565b5b9060005260206000200160008282546110ae919061463e565b92505081905550600a600082815260200190815260200160002060010154600a60008381526020019081526020016000206007016000815481106110f5576110f4614366565b5b90600052602060002001600082825461110e919061463e565b9250508190555060005b600a60008381526020019081526020016000206004018054905081101561121757600a6000838152602001908152602001600020600401818154811061116157611160614366565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a600085815260200190815260200160002060050183815481106111cd576111cc614366565b5b90600052602060002001549081150290604051600060405180830381858888f19350505050158015611203573d6000803e3d6000fd5b50808061120f9061451e565b915050611118565b5060005b600a60008381526020019081526020016000206006018054905081101561131a57600a6000838152602001908152602001600020600601818154811061126457611263614366565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a600085815260200190815260200160002060070183815481106112d0576112cf614366565b5b90600052602060002001549081150290604051600060405180830381858888f19350505050158015611306573d6000803e3d6000fd5b5080806113129061451e565b91505061121b565b5061132481613428565b600a60008281526020019081526020016000206000808201600090556001820160009055600282016000905560038201600090556004820160006113689190613770565b6005820160006113789190613791565b6006820160006113889190613770565b6007820160006113989190613791565b5050807fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a250565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461145a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611451906146be565b60405180910390fd5b8060028190555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146114f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114eb906146be565b60405180910390fd5b8060058190555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461158e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611585906146be565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611662576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611659906146be565b60405180910390fd5b8060038190555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f3906146be565b60405180910390fd5b8060048190555050565b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176b906142da565b60405180910390fd5b600460025461178391906144ed565b3410156117c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bc90614346565b60405180910390fd5b6003600a6000838152602001908152602001600020600301541461181e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611815906145b2565b60405180910390fd5b600454600a600083815260200190815260200160002060040180549050111561187c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118739061461e565b60405180910390fd5b60008061189d600a6000858152602001908152602001600020600401613378565b809250819350505080156118f95734600a600085815260200190815260200160002060050183815481106118d4576118d3614366565b5b9060005260206000200160008282546118ed919061463e565b925050819055506119ae565b600a6000848152602001908152602001600020600401339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600a60008481526020019081526020016000206005013490806001815401808255809150506001900390600052602060002001600090919091909150555b34600a600085815260200190815260200160002060000160008282546119d4919061463e565b92505081905550827fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2505050565b611a156137b2565b600a6000838152602001908152602001600020604051806101000160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201805480602002602001604051908101604052809291908181526020018280548015611ae157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611a97575b5050505050815260200160058201805480602002602001604051908101604052809291908181526020018280548015611b3957602002820191906000526020600020905b815481526020019060010190808311611b25575b5050505050815260200160068201805480602002602001604051908101604052809291908181526020018280548015611bc757602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611b7d575b5050505050815260200160078201805480602002602001604051908101604052809291908181526020018280548015611c1f57602002820191906000526020600020905b815481526020019060010190808311611c0b575b5050505050815250509050919050565b611c376137f7565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206040518060600160405290816000820160009054906101000a900460ff1660ff1660ff168152602001600182018054611cae90614779565b80601f0160208091040260200160405190810160405280929190818152602001828054611cda90614779565b8015611d275780601f10611cfc57610100808354040283529160200191611d27565b820191906000526020600020905b815481529060010190602001808311611d0a57829003601f168201915b50505050508152602001600282018054611d4090614779565b80601f0160208091040260200160405190810160405280929190818152602001828054611d6c90614779565b8015611db95780601f10611d8e57610100808354040283529160200191611db9565b820191906000526020600020905b815481529060010190602001808311611d9c57829003601f168201915b5050505050815250509050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611e7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e76906146be565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006060806060806000600a60008881526020019081526020016000206004018054905067ffffffffffffffff811115611f0057611eff614087565b5b604051908082528060200260200182016040528015611f2e5781602001602082028036833780820191505090505b5090506000600a60008981526020019081526020016000206004018054905067ffffffffffffffff811115611f6657611f65614087565b5b604051908082528060200260200182016040528015611f945781602001602082028036833780820191505090505b5090506000600a60008a81526020019081526020016000206006018054905067ffffffffffffffff811115611fcc57611fcb614087565b5b604051908082528060200260200182016040528015611ffa5781602001602082028036833780820191505090505b5090506000600a60008b81526020019081526020016000206006018054905067ffffffffffffffff81111561203257612031614087565b5b6040519080825280602002602001820160405280156120605781602001602082028036833780820191505090505b5090506000600a60008c815260200190815260200160002060000154905068056bc75e2d63100000600a60008d815260200190815260200160002060020154826120aa9190614464565b6120b491906144ed565b6002600a60008e8152602001908152602001600020600101546120d79190614464565b6120e1919061463e565b816120ec9190614430565b9050600080600090505b600a60008e81526020019081526020016000206004018054905081101561224457600a60008e8152602001908152602001600020600401818154811061213f5761213e614366565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687828151811061217d5761217c614366565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a60008e815260200190815260200160002060050181815481106121df576121de614366565b5b90600052602060002001548682815181106121fd576121fc614366565b5b60200260200101818152505085818151811061221c5761221b614366565b5b60200260200101518261222f919061463e565b9150808061223c9061451e565b9150506120f6565b5060005b600a60008e81526020019081526020016000206004018054905081101561232e578168056bc75e2d6310000087838151811061228757612286614366565b5b60200260200101516122999190614464565b6122a391906144ed565b8682815181106122b6576122b5614366565b5b60200260200101818152505068056bc75e2d631000008682815181106122df576122de614366565b5b6020026020010151846122f29190614464565b6122fc91906144ed565b86828151811061230f5761230e614366565b5b60200260200101818152505080806123269061451e565b915050612248565b506002600a60008e8152602001908152602001600020600101546123529190614464565b8560008151811061236657612365614366565b5b6020026020010181815161237a919061463e565b915081815250506000905060005b600a60008e8152602001908152602001600020600601805490508110156124d657600a60008e815260200190815260200160002060060181815481106123d1576123d0614366565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685828151811061240f5761240e614366565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a60008e8152602001908152602001600020600701818154811061247157612470614366565b5b906000526020600020015484828151811061248f5761248e614366565b5b6020026020010181815250508381815181106124ae576124ad614366565b5b6020026020010151826124c1919061463e565b915080806124ce9061451e565b915050612388565b5060005b600a60008e8152602001908152602001600020600601805490508110156125c0578168056bc75e2d6310000085838151811061251957612518614366565b5b602002602001015161252b9190614464565b61253591906144ed565b84828151811061254857612547614366565b5b60200260200101818152505068056bc75e2d6310000084828151811061257157612570614366565b5b6020026020010151846125849190614464565b61258e91906144ed565b8482815181106125a1576125a0614366565b5b60200260200101818152505080806125b89061451e565b9150506124da565b506002600a60008e8152602001908152602001600020600101546125e49190614464565b836000815181106125f8576125f7614366565b5b6020026020010181815161260c919061463e565b91508181525050600a60008d815260200190815260200160002060000154868686869a509a509a509a509a5050505050505091939590929450565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60055481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fa906147f6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a600084815260200190815260200160002060040160008154811061274357612742614366565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061280e57508073ffffffffffffffffffffffffffffffffffffffff16600a60008481526020019081526020016000206006016000815481106127cb576127ca614366565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61281757600080fd5b600068056bc75e2d63100000600a600085815260200190815260200160002060020154600a60008681526020019081526020016000206000015461285b9190614464565b61286591906144ed565b90506002600a6000858152602001908152602001600020600101600082825461288e9190614464565b92505081905550600a600084815260200190815260200160002060010154816128b7919061463e565b600a600085815260200190815260200160002060000160008282546128dc9190614430565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600a600085815260200190815260200160002060040160008154811061292357612922614366565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036129d0576129cb600a600085815260200190815260200160002060000154600a600086815260200190815260200160002060010154600a6000878152602001908152602001600020600401600a60008881526020019081526020016000206005016134ff565b612a33565b612a32600a600085815260200190815260200160002060000154600a600086815260200190815260200160002060010154600a6000878152602001908152602001600020600601600a60008881526020019081526020016000206007016134ff565b5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612a9b573d6000803e3d6000fd5b50612aa583613428565b600a6000848152602001908152602001600020600080820160009055600182016000905560028201600090556003820160009055600482016000612ae99190613770565b600582016000612af99190613791565b600682016000612b099190613770565b600782016000612b199190613791565b5050827fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2505050565b6060600060015467ffffffffffffffff811115612b6d57612b6c614087565b5b604051908082528060200260200182016040528015612ba657816020015b612b9361381b565b815260200190600190039081612b8b5790505b5090506000600b600080815260200190815260200160002060010154905060005b600154811015612e195781838281518110612be557612be4614366565b5b60200260200101516000018181525050600a600083815260200190815260200160002060000154838281518110612c1f57612c1e614366565b5b60200260200101516020018181525050600a600083815260200190815260200160002060010154838281518110612c5957612c58614366565b5b60200260200101516040018181525050600a600083815260200190815260200160002060030154838281518110612c9357612c92614366565b5b60200260200101516060018181525050600a6000838152602001908152602001600020600401600081548110612ccc57612ccb614366565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838281518110612d0a57612d09614366565b5b60200260200101516080019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a6000838152602001908152602001600020600601600081548110612d7157612d70614366565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838281518110612daf57612dae614366565b5b602002602001015160a0019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600b60008381526020019081526020016000206001015491508080612e119061451e565b915050612bc7565b50819250505090565b60025481565b82600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548160ff021916908360ff16021790555081600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001019081612ed291906149c2565b5080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002019081612f2291906149c2565b50505050565b60035481565b600a600080548152602001908152602001600020600401600081548110612f5857612f57614366565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612ff0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe790614ae0565b60405180910390fd5b6001600a600080548152602001908152602001600020600301541461301457600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc600a600080548152602001908152602001600020600101549081150290604051600060405180830381858888f19350505050158015613071573d6000803e3d6000fd5b506000600a600080548152602001908152602001600020600101819055506000600a60008054815260200190815260200160002060030181905550600a6000805481526020019081526020016000206004016000815481106130d6576130d5614366565b5b9060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905561310e600054613428565b6000547fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a2565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146131cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c6906147f6565b60405180910390fd5b60028114806131de5750600381145b6131e757600080fd5b6002600a600084815260200190815260200160002060030154148061322257506003600a600084815260200190815260200160002060030154145b61322b57600080fd5b80600a600084815260200190815260200160002060030181905550817fcf6bdd0e70780d1e7e0dec074afc12e39456708a253e7a17db2ad92d4fca2d1d60405160405180910390a25050565b60045481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b80600b6000838152602001908152602001600020600001819055506000600b600083815260200190815260200160002060010181905550600b600080815260200190815260200160002060020154600b60008381526020019081526020016000206002018190555080600b6000600b60008081526020019081526020016000206002015481526020019081526020016000206001018190555080600b600080815260200190815260200160002060020181905550600160008154809291906133709061451e565b919050555050565b60008060005b838054905081101561341a5783818154811061339d5761339c614366565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603613407578060019250925050613423565b80806134129061451e565b91505061337e565b50600080915091505b915091565b600b600082815260200190815260200160002060010154600b6000600b600085815260200190815260200160002060020154815260200190815260200160002060010181905550600b600082815260200190815260200160002060020154600b6000600b600085815260200190815260200160002060010154815260200190815260200160002060020181905550600160008154809291906134c990614b00565b9190505550600b600082815260200190815260200160002060008082016000905560018201600090556002820160009055505050565b600080838054905067ffffffffffffffff8111156135205761351f614087565b5b60405190808252806020026020018201604052801561354e5781602001602082028036833780820191505090505b50905060005b848054905081101561359e5783818154811061357357613572614366565b5b906000526020600020015483613589919061463e565b925080806135969061451e565b915050613554565b5060005b8480549050811015613676578268056bc75e2d631000008583815481106135cc576135cb614366565b5b90600052602060002001546135e19190614464565b6135eb91906144ed565b8282815181106135fe576135fd614366565b5b60200260200101818152505068056bc75e2d6310000082828151811061362757613626614366565b5b60200260200101518861363a9190614464565b61364491906144ed565b82828151811061365757613656614366565b5b602002602001018181525050808061366e9061451e565b9150506135a2565b50848160008151811061368c5761368b614366565b5b602002602001018181516136a0919061463e565b9150818152505060005b8480549050811015613767578481815481106136c9576136c8614366565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8383815181106137205761371f614366565b5b60200260200101519081150290604051600060405180830381858888f19350505050158015613753573d6000803e3d6000fd5b50808061375f9061451e565b9150506136aa565b50505050505050565b508054600082559060005260206000209081019061378e919061387d565b50565b50805460008255906000526020600020908101906137af919061387d565b50565b60405180610100016040528060008152602001600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b6040518060600160405280600060ff16815260200160608152602001606081525090565b6040518060c0016040528060008152602001600081526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b5b8082111561389657600081600090555060010161387e565b5090565b6000819050919050565b6138ad8161389a565b82525050565b60006020820190506138c860008301846138a4565b92915050565b6000604051905090565b600080fd5b600080fd5b6138eb8161389a565b81146138f657600080fd5b50565b600081359050613908816138e2565b92915050565b600060208284031215613924576139236138d8565b5b6000613932848285016138f9565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139668261393b565b9050919050565b6139768161395b565b811461398157600080fd5b50565b6000813590506139938161396d565b92915050565b6000602082840312156139af576139ae6138d8565b5b60006139bd84828501613984565b91505092915050565b6139cf8161389a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a0a8161395b565b82525050565b6000613a1c8383613a01565b60208301905092915050565b6000602082019050919050565b6000613a40826139d5565b613a4a81856139e0565b9350613a55836139f1565b8060005b83811015613a86578151613a6d8882613a10565b9750613a7883613a28565b925050600181019050613a59565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000613acb83836139c6565b60208301905092915050565b6000602082019050919050565b6000613aef82613a93565b613af98185613a9e565b9350613b0483613aaf565b8060005b83811015613b35578151613b1c8882613abf565b9750613b2783613ad7565b925050600181019050613b08565b5085935050505092915050565b600061010083016000830151613b5b60008601826139c6565b506020830151613b6e60208601826139c6565b506040830151613b8160408601826139c6565b506060830151613b9460608601826139c6565b5060808301518482036080860152613bac8282613a35565b91505060a083015184820360a0860152613bc68282613ae4565b91505060c083015184820360c0860152613be08282613a35565b91505060e083015184820360e0860152613bfa8282613ae4565b9150508091505092915050565b60006020820190508181036000830152613c218184613b42565b905092915050565b600060ff82169050919050565b613c3f81613c29565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c7f578082015181840152602081019050613c64565b60008484015250505050565b6000601f19601f8301169050919050565b6000613ca782613c45565b613cb18185613c50565b9350613cc1818560208601613c61565b613cca81613c8b565b840191505092915050565b6000606083016000830151613ced6000860182613c36565b5060208301518482036020860152613d058282613c9c565b91505060408301518482036040860152613d1f8282613c9c565b9150508091505092915050565b60006020820190508181036000830152613d468184613cd5565b905092915050565b613d578161395b565b82525050565b6000602082019050613d726000830184613d4e565b92915050565b600082825260208201905092915050565b6000613d94826139d5565b613d9e8185613d78565b9350613da9836139f1565b8060005b83811015613dda578151613dc18882613a10565b9750613dcc83613a28565b925050600181019050613dad565b5085935050505092915050565b600082825260208201905092915050565b6000613e0382613a93565b613e0d8185613de7565b9350613e1883613aaf565b8060005b83811015613e49578151613e308882613abf565b9750613e3b83613ad7565b925050600181019050613e1c565b5085935050505092915050565b600060a082019050613e6b60008301886138a4565b8181036020830152613e7d8187613d89565b90508181036040830152613e918186613df8565b90508181036060830152613ea58185613d89565b90508181036080830152613eb98184613df8565b90509695505050505050565b60008060408385031215613edc57613edb6138d8565b5b6000613eea858286016138f9565b9250506020613efb85828601613984565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60c082016000820151613f4760008501826139c6565b506020820151613f5a60208501826139c6565b506040820151613f6d60408501826139c6565b506060820151613f8060608501826139c6565b506080820151613f936080850182613a01565b5060a0820151613fa660a0850182613a01565b50505050565b6000613fb88383613f31565b60c08301905092915050565b6000602082019050919050565b6000613fdc82613f05565b613fe68185613f10565b9350613ff183613f21565b8060005b838110156140225781516140098882613fac565b975061401483613fc4565b925050600181019050613ff5565b5085935050505092915050565b600060208201905081810360008301526140498184613fd1565b905092915050565b61405a81613c29565b811461406557600080fd5b50565b60008135905061407781614051565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6140bf82613c8b565b810181811067ffffffffffffffff821117156140de576140dd614087565b5b80604052505050565b60006140f16138ce565b90506140fd82826140b6565b919050565b600067ffffffffffffffff82111561411d5761411c614087565b5b61412682613c8b565b9050602081019050919050565b82818337600083830152505050565b600061415561415084614102565b6140e7565b90508281526020810184848401111561417157614170614082565b5b61417c848285614133565b509392505050565b600082601f8301126141995761419861407d565b5b81356141a9848260208601614142565b91505092915050565b6000806000606084860312156141cb576141ca6138d8565b5b60006141d986828701614068565b935050602084013567ffffffffffffffff8111156141fa576141f96138dd565b5b61420686828701614184565b925050604084013567ffffffffffffffff811115614227576142266138dd565b5b61423386828701614184565b9150509250925092565b60008060408385031215614254576142536138d8565b5b6000614262858286016138f9565b9250506020614273858286016138f9565b9150509250929050565b600082825260208201905092915050565b7f4f6e6c7920454f41000000000000000000000000000000000000000000000000600082015250565b60006142c460088361427d565b91506142cf8261428e565b602082019050919050565b600060208201905081810360008301526142f3816142b7565b9050919050565b7f6c6f772062657400000000000000000000000000000000000000000000000000600082015250565b600061433060078361427d565b915061433b826142fa565b602082019050919050565b6000602082019050818103600083015261435f81614323565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f616c726561647920616464656400000000000000000000000000000000000000600082015250565b60006143cb600d8361427d565b91506143d682614395565b602082019050919050565b600060208201905081810360008301526143fa816143be565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061443b8261389a565b91506144468361389a565b925082820390508181111561445e5761445d614401565b5b92915050565b600061446f8261389a565b915061447a8361389a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144b3576144b2614401565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144f88261389a565b91506145038361389a565b925082614513576145126144be565b5b828204905092915050565b60006145298261389a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361455b5761455a614401565b5b600182019050919050565b7f62657473206172652070726f6869626974656400000000000000000000000000600082015250565b600061459c60138361427d565b91506145a782614566565b602082019050919050565b600060208201905081810360008301526145cb8161458f565b9050919050565b7f4d616e7920757365727320776974682062657473000000000000000000000000600082015250565b600061460860148361427d565b9150614613826145d2565b602082019050919050565b60006020820190508181036000830152614637816145fb565b9050919050565b60006146498261389a565b91506146548361389a565b925082820190508082111561466c5761466b614401565b5b92915050565b7f4f6e6c79206f776e657200000000000000000000000000000000000000000000600082015250565b60006146a8600a8361427d565b91506146b382614672565b602082019050919050565b600060208201905081810360008301526146d78161469b565b9050919050565b7f6261642073746174757300000000000000000000000000000000000000000000600082015250565b6000614714600a8361427d565b915061471f826146de565b602082019050919050565b6000602082019050818103600083015261474381614707565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061479157607f821691505b6020821081036147a4576147a361474a565b5b50919050565b7f4f6e6c79206f7261636c65000000000000000000000000000000000000000000600082015250565b60006147e0600b8361427d565b91506147eb826147aa565b602082019050919050565b6000602082019050818103600083015261480f816147d3565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026148787fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261483b565b614882868361483b565b95508019841693508086168417925050509392505050565b6000819050919050565b60006148bf6148ba6148b58461389a565b61489a565b61389a565b9050919050565b6000819050919050565b6148d9836148a4565b6148ed6148e5826148c6565b848454614848565b825550505050565b600090565b6149026148f5565b61490d8184846148d0565b505050565b5b81811015614931576149266000826148fa565b600181019050614913565b5050565b601f8211156149765761494781614816565b6149508461482b565b8101602085101561495f578190505b61497361496b8561482b565b830182614912565b50505b505050565b600082821c905092915050565b60006149996000198460080261497b565b1980831691505092915050565b60006149b28383614988565b9150826002028217905092915050565b6149cb82613c45565b67ffffffffffffffff8111156149e4576149e3614087565b5b6149ee8254614779565b6149f9828285614935565b600060209050601f831160018114614a2c5760008415614a1a578287015190505b614a2485826149a6565b865550614a8c565b601f198416614a3a86614816565b60005b82811015614a6257848901518255600182019150602085019450602081019050614a3d565b86831015614a7f5784890151614a7b601f891682614988565b8355505b6001600288020188555050505b505050505050565b7f6e6f7420796f7572206265740000000000000000000000000000000000000000600082015250565b6000614aca600c8361427d565b9150614ad582614a94565b602082019050919050565b60006020820190508181036000830152614af981614abd565b9050919050565b6000614b0b8261389a565b915060008203614b1e57614b1d614401565b5b60018203905091905056fea2646970667358221220bea1106e5c962061dd49fb834ac8479805138214dd117a57a1b809c9b0e6d69964736f6c63430008100033