prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  ok.ru VODs
  <!--
  Thanks for reporting a plugin issue!
  USE THE TEMPLATE. Otherwise your plugin issue may be rejected.
  
  First, see the contribution guidelines:
  https://github.com/streamlink/streamlink/blob/master/CONTRIBUTING.md#contributing-to-streamlink
  
  Also check the list of open and closed plugin issues:
  https://github.com/streamlink/streamlink/issues?q=is%3Aissue+label%3A%22plugin+issue%22
  
  Please see the text preview to avoid unnecessary formatting errors.
  -->
  
  
  ## Plugin Issue
  
  <!-- Replace [ ] with [x] in order to check the box -->
  - [x ] This is a plugin issue and I have read the contribution guidelines.
  
  
  ### Description
  i enter link in #1884 but "https://raw.githubusercontent.com/back-to/plugins/master/plugins/ok_live.py" 404: Not Found. Thanks
  <!-- Explain the plugin issue as thoroughly as you can. -->
  
  
  ### Reproduction steps / Explicit stream URLs to test
  
  <!-- How can we reproduce this? Please note the exact steps below using the list format supplied. If you need more steps please add them. -->
  
  1. D:\my\Streamlinkl\bin>streamlink -l debug "https://ok.ru/video/266205792931" best
  
  
  
  ### Log output
  
  <!--
  TEXT LOG OUTPUT IS REQUIRED for a plugin issue!
  Use the `--loglevel debug` parameter and avoid using parameters which suppress log output.
  https://streamlink.github.io/cli.html#cmdoption-l
  
  Make sure to **remove usernames and passwords**
  You can copy the output to https://gist.github.com/ or paste it below.
  -->
  
  ```
  [cli][debug] OS:         Windows 8.1
  [cli][debug] Python:     3.5.2
  [cli][debug] Streamlink: 0.14.2
  [cli][debug] Requests(2.19.1), Socks(1.6.7), Websocket(0.48.0)
  error: No plugin can handle URL: https://ok.ru/video/266205792931
  
  ```
  
  
  ### Additional comments, screenshots, etc.
  
  
  
  [Love Streamlink? Please consider supporting our collective. Thanks!](https://opencollective.com/streamlink/donate)
  
  
  </issue>
  <code>
  [start of src/streamlink/plugins/ok_live.py]
  1 import re
  2 
  3 from streamlink.plugin import Plugin
  4 from streamlink.plugin.api import validate
  5 from streamlink.plugin.api import useragents
  6 from streamlink.stream import HLSStream
  7 
  8 _url_re = re.compile(r"https?://(www\.)?ok\.ru/live/\d+")
  9 _vod_re = re.compile(r";(?P<hlsurl>[^;]+video\.m3u8.+?)\\&quot;")
  10 
  11 _schema = validate.Schema(
  12     validate.transform(_vod_re.search),
  13     validate.any(
  14         None,
  15         validate.all(
  16             validate.get("hlsurl"),
  17             validate.url()
  18         )
  19     )
  20 )
  21 
  22 class OK_live(Plugin):
  23     """
  24     Support for ok.ru live stream: http://www.ok.ru/live/
  25     """
  26     @classmethod
  27     def can_handle_url(cls, url):
  28         return _url_re.match(url) is not None
  29 
  30     def _get_streams(self):
  31         headers = {
  32             'User-Agent': useragents.CHROME,
  33             'Referer': self.url
  34         }
  35 
  36         hls  = self.session.http.get(self.url, headers=headers, schema=_schema)
  37         if hls:
  38             hls = hls.replace(u'\\\\u0026', u'&')
  39         return HLSStream.parse_variant_playlist(self.session, hls, headers=headers)
  40 
  41 
  42 __plugin__ = OK_live
  [end of src/streamlink/plugins/ok_live.py]
  </code>
  
  I need you to solve this issue by generating a single patch file that I can apply directly to this repository using git apply. Please respond with a single patch file in the following format.
  <patch>
  diff --git a/file.py b/file.py
  --- a/file.py
  +++ b/file.py
  @@ -1,27 +1,35 @@
   def euclidean(a, b):
  -    while b:
  -        a, b = b, a % b
  -    return a
  +    if b == 0:
  +        return a
  +    return euclidean(b, a % b)
   
   
   def bresenham(x0, y0, x1, y1):
       points = []
       dx = abs(x1 - x0)
       dy = abs(y1 - y0)
  -    sx = 1 if x0 < x1 else -1
  -    sy = 1 if y0 < y1 else -1
  -    err = dx - dy
  +    x, y = x0, y0
  +    sx = -1 if x0 > x1 else 1
  +    sy = -1 if y0 > y1 else 1
   
  -    while True:
  -        points.append((x0, y0))
  -        if x0 == x1 and y0 == y1:
  -            break
  -        e2 = 2 * err
  -        if e2 > -dy:
  -            err -= dy
  -            x0 += sx
  -        if e2 < dx:
  -            err += dx
  -            y0 += sy
  +    if dx > dy:
  +        err = dx / 2.0
  +        while x != x1:
  +            points.append((x, y))
  +            err -= dy
  +            if err < 0:
  +                y += sy
  +                err += dx
  +            x += sx
  +    else:
  +        err = dy / 2.0
  +        while y != y1:
  +            points.append((x, y))
  +            err -= dx
  +            if err < 0:
  +                x += sx
  +                err += dy
  +            y += sy
  +
  +    points.append((x, y))
       return points
  
  </patch>
golden_diff: diff --git a/src/streamlink/plugins/ok_live.py b/src/streamlink/plugins/ok_live.py
  --- a/src/streamlink/plugins/ok_live.py
  +++ b/src/streamlink/plugins/ok_live.py
  @@ -5,7 +5,7 @@
   from streamlink.plugin.api import useragents
   from streamlink.stream import HLSStream
   
  -_url_re = re.compile(r"https?://(www\.)?ok\.ru/live/\d+")
  +_url_re = re.compile(r"https?://(www\.)?ok\.ru/(live|video)/\d+")
   _vod_re = re.compile(r";(?P<hlsurl>[^;]+video\.m3u8.+?)\\&quot;")
   
   _schema = validate.Schema(
  @@ -21,7 +21,7 @@
   
   class OK_live(Plugin):
       """
  -    Support for ok.ru live stream: http://www.ok.ru/live/
  +    Support for ok.ru live stream: http://www.ok.ru/live/ and for ok.ru VoDs: http://www.ok.ru/video/
       """
       @classmethod
       def can_handle_url(cls, url):
  
verification_info: {"golden_diff": "diff --git a/src/streamlink/plugins/ok_live.py b/src/streamlink/plugins/ok_live.py\n--- a/src/streamlink/plugins/ok_live.py\n+++ b/src/streamlink/plugins/ok_live.py\n@@ -5,7 +5,7 @@\n from streamlink.plugin.api import useragents\n from streamlink.stream import HLSStream\n \n-_url_re = re.compile(r\"https?://(www\\.)?ok\\.ru/live/\\d+\")\n+_url_re = re.compile(r\"https?://(www\\.)?ok\\.ru/(live|video)/\\d+\")\n _vod_re = re.compile(r\";(?P<hlsurl>[^;]+video\\.m3u8.+?)\\\\&quot;\")\n \n _schema = validate.Schema(\n@@ -21,7 +21,7 @@\n \n class OK_live(Plugin):\n     \"\"\"\n-    Support for ok.ru live stream: http://www.ok.ru/live/\n+    Support for ok.ru live stream: http://www.ok.ru/live/ and for ok.ru VoDs: http://www.ok.ru/video/\n     \"\"\"\n     @classmethod\n     def can_handle_url(cls, url):\n", "issue": "ok.ru VODs\n<!--\r\nThanks for reporting a plugin issue!\r\nUSE THE TEMPLATE. Otherwise your plugin issue may be rejected.\r\n\r\nFirst, see the contribution guidelines:\r\nhttps://github.com/streamlink/streamlink/blob/master/CONTRIBUTING.md#contributing-to-streamlink\r\n\r\nAlso check the list of open and closed plugin issues:\r\nhttps://github.com/streamlink/streamlink/issues?q=is%3Aissue+label%3A%22plugin+issue%22\r\n\r\nPlease see the text preview to avoid unnecessary formatting errors.\r\n-->\r\n\r\n\r\n## Plugin Issue\r\n\r\n<!-- Replace [ ] with [x] in order to check the box -->\r\n- [x ] This is a plugin issue and I have read the contribution guidelines.\r\n\r\n\r\n### Description\r\ni enter link in #1884 but \"https://raw.githubusercontent.com/back-to/plugins/master/plugins/ok_live.py\" 404: Not Found. Thanks\r\n<!-- Explain the plugin issue as thoroughly as you can. -->\r\n\r\n\r\n### Reproduction steps / Explicit stream URLs to test\r\n\r\n<!-- How can we reproduce this? Please note the exact steps below using the list format supplied. If you need more steps please add them. -->\r\n\r\n1. D:\\my\\Streamlinkl\\bin>streamlink -l debug \"https://ok.ru/video/266205792931\" best\r\n\r\n\r\n\r\n### Log output\r\n\r\n<!--\r\nTEXT LOG OUTPUT IS REQUIRED for a plugin issue!\r\nUse the `--loglevel debug` parameter and avoid using parameters which suppress log output.\r\nhttps://streamlink.github.io/cli.html#cmdoption-l\r\n\r\nMake sure to **remove usernames and passwords**\r\nYou can copy the output to https://gist.github.com/ or paste it below.\r\n-->\r\n\r\n```\r\n[cli][debug] OS:         Windows 8.1\r\n[cli][debug] Python:     3.5.2\r\n[cli][debug] Streamlink: 0.14.2\r\n[cli][debug] Requests(2.19.1), Socks(1.6.7), Websocket(0.48.0)\r\nerror: No plugin can handle URL: https://ok.ru/video/266205792931\r\n\r\n```\r\n\r\n\r\n### Additional comments, screenshots, etc.\r\n\r\n\r\n\r\n[Love Streamlink? Please consider supporting our collective. Thanks!](https://opencollective.com/streamlink/donate)\r\n\n", "before_files": [{"content": "import re\n\nfrom streamlink.plugin import Plugin\nfrom streamlink.plugin.api import validate\nfrom streamlink.plugin.api import useragents\nfrom streamlink.stream import HLSStream\n\n_url_re = re.compile(r\"https?://(www\\.)?ok\\.ru/live/\\d+\")\n_vod_re = re.compile(r\";(?P<hlsurl>[^;]+video\\.m3u8.+?)\\\\&quot;\")\n\n_schema = validate.Schema(\n    validate.transform(_vod_re.search),\n    validate.any(\n        None,\n        validate.all(\n            validate.get(\"hlsurl\"),\n            validate.url()\n        )\n    )\n)\n\nclass OK_live(Plugin):\n    \"\"\"\n    Support for ok.ru live stream: http://www.ok.ru/live/\n    \"\"\"\n    @classmethod\n    def can_handle_url(cls, url):\n        return _url_re.match(url) is not None\n\n    def _get_streams(self):\n        headers = {\n            'User-Agent': useragents.CHROME,\n            'Referer': self.url\n        }\n\n        hls  = self.session.http.get(self.url, headers=headers, schema=_schema)\n        if hls:\n            hls = hls.replace(u'\\\\\\\\u0026', u'&')\n        return HLSStream.parse_variant_playlist(self.session, hls, headers=headers)\n\n\n__plugin__ = OK_live", "path": "src/streamlink/plugins/ok_live.py"}]}