prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  boto.vpc.routetable.Route does not contain route origin
  RouteSet responses will contain an origin for each route, but boto.vpc.routetable.Route is not populated with the route origin:
  
  Example response before:
  
  ```
  In [8]: vars(all_route_tables[1].routes[1])
  Out[8]:
  {'destination_cidr_block': u'0.0.0.0/0',
   'gateway_id': None,
   'instance_id': u'i-123',
   'interface_id': u'eni-123',
   'state': u'active',
   'vpc_peering_connection_id': None}
  ```
  
  After:
  
  ```
  In [25]: vars(all_route_tables[1].routes[1])
  Out[25]:
  {'destination_cidr_block': u'0.0.0.0/0',
   'gateway_id': None,
   'instance_id': u'i-123',
   'interface_id': u'eni-123',
   'origin': u'CreateRoute',
   'state': u'active',
   'vpc_peering_connection_id': None}
  ```
  
  
  </issue>
  <code>
  [start of boto/vpc/routetable.py]
  1 # Copyright (c) 2009-2010 Mitch Garnaat http://garnaat.org/
  2 #
  3 # Permission is hereby granted, free of charge, to any person obtaining a
  4 # copy of this software and associated documentation files (the
  5 # "Software"), to deal in the Software without restriction, including
  6 # without limitation the rights to use, copy, modify, merge, publish, dis-
  7 # tribute, sublicense, and/or sell copies of the Software, and to permit
  8 # persons to whom the Software is furnished to do so, subject to the fol-
  9 # lowing conditions:
  10 #
  11 # The above copyright notice and this permission notice shall be included
  12 # in all copies or substantial portions of the Software.
  13 #
  14 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  15 # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
  16 # ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
  17 # SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  18 # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  19 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  20 # IN THE SOFTWARE.
  21 
  22 """
  23 Represents a Route Table
  24 """
  25 
  26 from boto.ec2.ec2object import TaggedEC2Object
  27 from boto.resultset import ResultSet
  28 
  29 class RouteTable(TaggedEC2Object):
  30 
  31     def __init__(self, connection=None):
  32         super(RouteTable, self).__init__(connection)
  33         self.id = None
  34         self.vpc_id = None
  35         self.routes = []
  36         self.associations = []
  37 
  38     def __repr__(self):
  39         return 'RouteTable:%s' % self.id
  40 
  41     def startElement(self, name, attrs, connection):
  42         result = super(RouteTable, self).startElement(name, attrs, connection)
  43 
  44         if result is not None:
  45             # Parent found an interested element, just return it
  46             return result
  47 
  48         if name == 'routeSet':
  49             self.routes = ResultSet([('item', Route)])
  50             return self.routes
  51         elif name == 'associationSet':
  52             self.associations = ResultSet([('item', RouteAssociation)])
  53             return self.associations
  54         else:
  55             return None
  56 
  57     def endElement(self, name, value, connection):
  58         if name == 'routeTableId':
  59             self.id = value
  60         elif name == 'vpcId':
  61             self.vpc_id = value
  62         else:
  63             setattr(self, name, value)
  64 
  65 class Route(object):
  66     def __init__(self, connection=None):
  67         self.destination_cidr_block = None
  68         self.gateway_id = None
  69         self.instance_id = None
  70         self.interface_id = None
  71         self.vpc_peering_connection_id = None
  72         self.state = None
  73 
  74     def __repr__(self):
  75         return 'Route:%s' % self.destination_cidr_block
  76 
  77     def startElement(self, name, attrs, connection):
  78         return None
  79 
  80     def endElement(self, name, value, connection):
  81         if name == 'destinationCidrBlock':
  82             self.destination_cidr_block = value
  83         elif name == 'gatewayId':
  84             self.gateway_id = value
  85         elif name == 'instanceId':
  86             self.instance_id = value
  87         elif name == 'networkInterfaceId':
  88             self.interface_id = value
  89         elif name == 'vpcPeeringConnectionId':
  90             self.vpc_peering_connection_id = value
  91         elif name == 'state':
  92             self.state = value
  93 
  94 class RouteAssociation(object):
  95     def __init__(self, connection=None):
  96         self.id = None
  97         self.route_table_id = None
  98         self.subnet_id = None
  99         self.main = False
  100 
  101     def __repr__(self):
  102         return 'RouteAssociation:%s' % self.id
  103 
  104     def startElement(self, name, attrs, connection):
  105         return None
  106 
  107     def endElement(self, name, value, connection):
  108         if name == 'routeTableAssociationId':
  109             self.id = value
  110         elif name == 'routeTableId':
  111             self.route_table_id = value
  112         elif name == 'subnetId':
  113             self.subnet_id = value
  114         elif name == 'main':
  115             self.main = value == 'true'
  116
  [end of boto/vpc/routetable.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/boto/vpc/routetable.py b/boto/vpc/routetable.py
  --- a/boto/vpc/routetable.py
  +++ b/boto/vpc/routetable.py
  @@ -70,6 +70,7 @@
           self.interface_id = None
           self.vpc_peering_connection_id = None
           self.state = None
  +        self.origin = None
   
       def __repr__(self):
           return 'Route:%s' % self.destination_cidr_block
  @@ -90,6 +91,8 @@
               self.vpc_peering_connection_id = value
           elif name == 'state':
               self.state = value
  +        elif name == 'origin':
  +            self.origin = value
   
   class RouteAssociation(object):
       def __init__(self, connection=None):
  
verification_info: {"golden_diff": "diff --git a/boto/vpc/routetable.py b/boto/vpc/routetable.py\n--- a/boto/vpc/routetable.py\n+++ b/boto/vpc/routetable.py\n@@ -70,6 +70,7 @@\n         self.interface_id = None\n         self.vpc_peering_connection_id = None\n         self.state = None\n+        self.origin = None\n \n     def __repr__(self):\n         return 'Route:%s' % self.destination_cidr_block\n@@ -90,6 +91,8 @@\n             self.vpc_peering_connection_id = value\n         elif name == 'state':\n             self.state = value\n+        elif name == 'origin':\n+            self.origin = value\n \n class RouteAssociation(object):\n     def __init__(self, connection=None):\n", "issue": "boto.vpc.routetable.Route does not contain route origin\nRouteSet responses will contain an origin for each route, but boto.vpc.routetable.Route is not populated with the route origin:\n\nExample response before:\n\n```\nIn [8]: vars(all_route_tables[1].routes[1])\nOut[8]:\n{'destination_cidr_block': u'0.0.0.0/0',\n 'gateway_id': None,\n 'instance_id': u'i-123',\n 'interface_id': u'eni-123',\n 'state': u'active',\n 'vpc_peering_connection_id': None}\n```\n\nAfter:\n\n```\nIn [25]: vars(all_route_tables[1].routes[1])\nOut[25]:\n{'destination_cidr_block': u'0.0.0.0/0',\n 'gateway_id': None,\n 'instance_id': u'i-123',\n 'interface_id': u'eni-123',\n 'origin': u'CreateRoute',\n 'state': u'active',\n 'vpc_peering_connection_id': None}\n```\n\n", "before_files": [{"content": "# Copyright (c) 2009-2010 Mitch Garnaat http://garnaat.org/\n#\n# Permission is hereby granted, free of charge, to any person obtaining a\n# copy of this software and associated documentation files (the\n# \"Software\"), to deal in the Software without restriction, including\n# without limitation the rights to use, copy, modify, merge, publish, dis-\n# tribute, sublicense, and/or sell copies of the Software, and to permit\n# persons to whom the Software is furnished to do so, subject to the fol-\n# lowing conditions:\n#\n# The above copyright notice and this permission notice shall be included\n# in all copies or substantial portions of the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-\n# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT\n# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n# IN THE SOFTWARE.\n\n\"\"\"\nRepresents a Route Table\n\"\"\"\n\nfrom boto.ec2.ec2object import TaggedEC2Object\nfrom boto.resultset import ResultSet\n\nclass RouteTable(TaggedEC2Object):\n\n    def __init__(self, connection=None):\n        super(RouteTable, self).__init__(connection)\n        self.id = None\n        self.vpc_id = None\n        self.routes = []\n        self.associations = []\n\n    def __repr__(self):\n        return 'RouteTable:%s' % self.id\n\n    def startElement(self, name, attrs, connection):\n        result = super(RouteTable, self).startElement(name, attrs, connection)\n\n        if result is not None:\n            # Parent found an interested element, just return it\n            return result\n\n        if name == 'routeSet':\n            self.routes = ResultSet([('item', Route)])\n            return self.routes\n        elif name == 'associationSet':\n            self.associations = ResultSet([('item', RouteAssociation)])\n            return self.associations\n        else:\n            return None\n\n    def endElement(self, name, value, connection):\n        if name == 'routeTableId':\n            self.id = value\n        elif name == 'vpcId':\n            self.vpc_id = value\n        else:\n            setattr(self, name, value)\n\nclass Route(object):\n    def __init__(self, connection=None):\n        self.destination_cidr_block = None\n        self.gateway_id = None\n        self.instance_id = None\n        self.interface_id = None\n        self.vpc_peering_connection_id = None\n        self.state = None\n\n    def __repr__(self):\n        return 'Route:%s' % self.destination_cidr_block\n\n    def startElement(self, name, attrs, connection):\n        return None\n\n    def endElement(self, name, value, connection):\n        if name == 'destinationCidrBlock':\n            self.destination_cidr_block = value\n        elif name == 'gatewayId':\n            self.gateway_id = value\n        elif name == 'instanceId':\n            self.instance_id = value\n        elif name == 'networkInterfaceId':\n            self.interface_id = value\n        elif name == 'vpcPeeringConnectionId':\n            self.vpc_peering_connection_id = value\n        elif name == 'state':\n            self.state = value\n\nclass RouteAssociation(object):\n    def __init__(self, connection=None):\n        self.id = None\n        self.route_table_id = None\n        self.subnet_id = None\n        self.main = False\n\n    def __repr__(self):\n        return 'RouteAssociation:%s' % self.id\n\n    def startElement(self, name, attrs, connection):\n        return None\n\n    def endElement(self, name, value, connection):\n        if name == 'routeTableAssociationId':\n            self.id = value\n        elif name == 'routeTableId':\n            self.route_table_id = value\n        elif name == 'subnetId':\n            self.subnet_id = value\n        elif name == 'main':\n            self.main = value == 'true'\n", "path": "boto/vpc/routetable.py"}]}