def republish(self, hash, count=None, sources=None, destinations=None):
        """
        Rebroadcast blocks starting at **hash** to the network

        :param hash: Hash of block to start rebroadcasting from
        :type hash: str

        :param count: Max number of blocks to rebroadcast
        :type count: int

        :param sources: If set, additionally rebroadcasts source chain blocks
                        for receive/open up to **sources** depth
        :type sources: int

        :param destinations: If set, additionally rebroadcasts destination chain
                             blocks for receive/open up to **destinations** depth
        :type destinations: int

        :raises: :py:exc:`nano.rpc.RPCException`

        >>> rpc.republish(
        ...     hash="991CF190094C00F0B68E2E5F75F6BEE95A2E0BD93CEAA4A6734DB9F19B728948"
        ... )
        [
            "991CF190094C00F0B68E2E5F75F6BEE95A2E0BD93CEAA4A6734DB9F19B728948",
            "A170D51B94E00371ACE76E35AC81DC9405D5D04D4CEBC399AEACE07AE05DD293"
        ]

        """

        hash = self._process_value(hash, 'block')

        payload = {"hash": hash}

        if count is not None:
            payload['count'] = self._process_value(count, 'int')

        if sources is not None:
            payload['sources'] = self._process_value(sources, 'int')

        if destinations is not None:
            payload['destinations'] = self._process_value(destinations, 'int')

        resp = self.call('republish', payload)

        return resp.get('blocks') or []