function createJobEscrow(
    bytes16 _jobId,
    address _hirer,
    address _contractor,
    uint256 _value,
    uint256 _fee,
    uint32 _jobStartedWindowInSeconds,
    uint32 _secondsToComplete
  ) payable external whenNotPaused onlyHirer(_hirer)
  {

    
    require(msg.value == _value && msg.value > 0);

    
    require(_fee < _value);

    
    require(msg.value <= MAX_SEND);

    
    require(_jobStartedWindowInSeconds > 0);

    
    require(_secondsToComplete > 0);

    
    bytes32 jobHash = getJobHash(
      _jobId,
      _hirer,
      _contractor,
      _value,
      _fee);

    
    require(!jobEscrows[jobHash].exists);

    
    jobEscrows[jobHash] = JobEscrow(
      true,
      uint32(block.timestamp) + _jobStartedWindowInSeconds,
      STATUS_JOB_CREATED,
      0,
      _secondsToComplete,
      0);

    
    totalInEscrow = totalInEscrow.add(msg.value);

    
    hirerEscrowMap[msg.sender][jobHash] = msg.value;

    
    emit JobCreated(jobHash, msg.sender, msg.value);
  }