We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Add 'PermissionsBoundary' properties to AWS::IAM::Role and AWS::IAM::User
This property has been released on November 9 by AWS.
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/ReleaseHistory.html
```
PermissionsBoundary

    The ARN of the policy that is used to set the permissions boundary for the role. Minimum length of 20. Maximum length of 2048.

    Required: No

    Type: String

    Update requires: No interruption

```

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `troposphere/iam.py`
Content:
```
1 # Copyright (c) 2012-2013, Mark Peek <mark@peek.org>
2 # All rights reserved.
3 #
4 # See LICENSE file for full license.
5 
6 from . import AWSObject, AWSProperty
7 from .validators import integer, boolean, status
8 from .validators import iam_path, iam_role_name, iam_group_name, iam_user_name
9 
10 try:
11     from awacs.aws import Policy
12     policytypes = (dict, Policy)
13 except ImportError:
14     policytypes = dict,
15 
16 
17 Active = "Active"
18 Inactive = "Inactive"
19 
20 
21 class AccessKey(AWSObject):
22     resource_type = "AWS::IAM::AccessKey"
23 
24     props = {
25         'Serial': (integer, False),
26         'Status': (status, False),
27         'UserName': (basestring, True),
28     }
29 
30 
31 class PolicyType(AWSObject):
32     resource_type = "AWS::IAM::Policy"
33 
34     props = {
35         'Groups': ([basestring], False),
36         'PolicyDocument': (policytypes, True),
37         'PolicyName': (basestring, True),
38         'Roles': ([basestring], False),
39         'Users': ([basestring], False),
40     }
41 
42 
43 class Policy(AWSProperty):
44     props = {
45         'PolicyDocument': (policytypes, True),
46         'PolicyName': (basestring, True),
47     }
48 
49 
50 PolicyProperty = Policy
51 
52 
53 class Group(AWSObject):
54     resource_type = "AWS::IAM::Group"
55 
56     props = {
57         'GroupName': (iam_group_name, False),
58         'ManagedPolicyArns': ([basestring], False),
59         'Path': (iam_path, False),
60         'Policies': ([Policy], False),
61     }
62 
63 
64 class InstanceProfile(AWSObject):
65     resource_type = "AWS::IAM::InstanceProfile"
66 
67     props = {
68         'Path': (iam_path, False),
69         'Roles': (list, True),
70         'InstanceProfileName': (basestring, False),
71     }
72 
73 
74 class Role(AWSObject):
75     resource_type = "AWS::IAM::Role"
76 
77     props = {
78         'AssumeRolePolicyDocument': (policytypes, True),
79         'ManagedPolicyArns': ([basestring], False),
80         'MaxSessionDuration': (integer, False),
81         'Path': (iam_path, False),
82         'Policies': ([Policy], False),
83         'RoleName': (iam_role_name, False),
84     }
85 
86 
87 class ServiceLinkedRole(AWSObject):
88     resource_type = "AWS::IAM::ServiceLinkedRole"
89 
90     props = {
91         'AWSServiceName': (basestring, True),
92         'CustomSuffix': (basestring, False),
93         'Description': (basestring, False),
94     }
95 
96 
97 class LoginProfile(AWSProperty):
98     props = {
99         'Password': (basestring, True),
100         'PasswordResetRequired': (boolean, False),
101     }
102 
103 
104 class User(AWSObject):
105     resource_type = "AWS::IAM::User"
106 
107     props = {
108         'Path': (iam_path, False),
109         'Groups': ([basestring], False),
110         'ManagedPolicyArns': ([basestring], False),
111         'LoginProfile': (LoginProfile, False),
112         'Policies': ([Policy], False),
113         'UserName': (iam_user_name, False),
114     }
115 
116 
117 class UserToGroupAddition(AWSObject):
118     resource_type = "AWS::IAM::UserToGroupAddition"
119 
120     props = {
121         'GroupName': (basestring, True),
122         'Users': (list, True),
123     }
124 
125 
126 class ManagedPolicy(AWSObject):
127     resource_type = "AWS::IAM::ManagedPolicy"
128 
129     props = {
130         'Description': (basestring, False),
131         'Groups': ([basestring], False),
132         'ManagedPolicyName': (basestring, False),
133         'Path': (iam_path, False),
134         'PolicyDocument': (policytypes, True),
135         'Roles': ([basestring], False),
136         'Users': ([basestring], False),
137     }
138
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/troposphere/iam.py b/troposphere/iam.py
--- a/troposphere/iam.py
+++ b/troposphere/iam.py
@@ -79,6 +79,7 @@
         'ManagedPolicyArns': ([basestring], False),
         'MaxSessionDuration': (integer, False),
         'Path': (iam_path, False),
+        'PermissionsBoundary': (basestring, False),
         'Policies': ([Policy], False),
         'RoleName': (iam_role_name, False),
     }
@@ -105,10 +106,11 @@
     resource_type = "AWS::IAM::User"
 
     props = {
-        'Path': (iam_path, False),
         'Groups': ([basestring], False),
-        'ManagedPolicyArns': ([basestring], False),
         'LoginProfile': (LoginProfile, False),
+        'ManagedPolicyArns': ([basestring], False),
+        'Path': (iam_path, False),
+        'PermissionsBoundary': (basestring, False),
         'Policies': ([Policy], False),
         'UserName': (iam_user_name, False),
     }

{"golden_diff": "diff --git a/troposphere/iam.py b/troposphere/iam.py\n--- a/troposphere/iam.py\n+++ b/troposphere/iam.py\n@@ -79,6 +79,7 @@\n         'ManagedPolicyArns': ([basestring], False),\n         'MaxSessionDuration': (integer, False),\n         'Path': (iam_path, False),\n+        'PermissionsBoundary': (basestring, False),\n         'Policies': ([Policy], False),\n         'RoleName': (iam_role_name, False),\n     }\n@@ -105,10 +106,11 @@\n     resource_type = \"AWS::IAM::User\"\n \n     props = {\n-        'Path': (iam_path, False),\n         'Groups': ([basestring], False),\n-        'ManagedPolicyArns': ([basestring], False),\n         'LoginProfile': (LoginProfile, False),\n+        'ManagedPolicyArns': ([basestring], False),\n+        'Path': (iam_path, False),\n+        'PermissionsBoundary': (basestring, False),\n         'Policies': ([Policy], False),\n         'UserName': (iam_user_name, False),\n     }\n", "issue": "Add 'PermissionsBoundary' properties to AWS::IAM::Role and AWS::IAM::User\nThis property has been released on November 9 by AWS.\r\nhttps://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/ReleaseHistory.html\r\n```\r\nPermissionsBoundary\r\n\r\n    The ARN of the policy that is used to set the permissions boundary for the role. Minimum length of 20. Maximum length of 2048.\r\n\r\n    Required: No\r\n\r\n    Type: String\r\n\r\n    Update requires: No interruption\r\n\r\n```\n", "before_files": [{"content": "# Copyright (c) 2012-2013, Mark Peek <mark@peek.org>\n# All rights reserved.\n#\n# See LICENSE file for full license.\n\nfrom . import AWSObject, AWSProperty\nfrom .validators import integer, boolean, status\nfrom .validators import iam_path, iam_role_name, iam_group_name, iam_user_name\n\ntry:\n    from awacs.aws import Policy\n    policytypes = (dict, Policy)\nexcept ImportError:\n    policytypes = dict,\n\n\nActive = \"Active\"\nInactive = \"Inactive\"\n\n\nclass AccessKey(AWSObject):\n    resource_type = \"AWS::IAM::AccessKey\"\n\n    props = {\n        'Serial': (integer, False),\n        'Status': (status, False),\n        'UserName': (basestring, True),\n    }\n\n\nclass PolicyType(AWSObject):\n    resource_type = \"AWS::IAM::Policy\"\n\n    props = {\n        'Groups': ([basestring], False),\n        'PolicyDocument': (policytypes, True),\n        'PolicyName': (basestring, True),\n        'Roles': ([basestring], False),\n        'Users': ([basestring], False),\n    }\n\n\nclass Policy(AWSProperty):\n    props = {\n        'PolicyDocument': (policytypes, True),\n        'PolicyName': (basestring, True),\n    }\n\n\nPolicyProperty = Policy\n\n\nclass Group(AWSObject):\n    resource_type = \"AWS::IAM::Group\"\n\n    props = {\n        'GroupName': (iam_group_name, False),\n        'ManagedPolicyArns': ([basestring], False),\n        'Path': (iam_path, False),\n        'Policies': ([Policy], False),\n    }\n\n\nclass InstanceProfile(AWSObject):\n    resource_type = \"AWS::IAM::InstanceProfile\"\n\n    props = {\n        'Path': (iam_path, False),\n        'Roles': (list, True),\n        'InstanceProfileName': (basestring, False),\n    }\n\n\nclass Role(AWSObject):\n    resource_type = \"AWS::IAM::Role\"\n\n    props = {\n        'AssumeRolePolicyDocument': (policytypes, True),\n        'ManagedPolicyArns': ([basestring], False),\n        'MaxSessionDuration': (integer, False),\n        'Path': (iam_path, False),\n        'Policies': ([Policy], False),\n        'RoleName': (iam_role_name, False),\n    }\n\n\nclass ServiceLinkedRole(AWSObject):\n    resource_type = \"AWS::IAM::ServiceLinkedRole\"\n\n    props = {\n        'AWSServiceName': (basestring, True),\n        'CustomSuffix': (basestring, False),\n        'Description': (basestring, False),\n    }\n\n\nclass LoginProfile(AWSProperty):\n    props = {\n        'Password': (basestring, True),\n        'PasswordResetRequired': (boolean, False),\n    }\n\n\nclass User(AWSObject):\n    resource_type = \"AWS::IAM::User\"\n\n    props = {\n        'Path': (iam_path, False),\n        'Groups': ([basestring], False),\n        'ManagedPolicyArns': ([basestring], False),\n        'LoginProfile': (LoginProfile, False),\n        'Policies': ([Policy], False),\n        'UserName': (iam_user_name, False),\n    }\n\n\nclass UserToGroupAddition(AWSObject):\n    resource_type = \"AWS::IAM::UserToGroupAddition\"\n\n    props = {\n        'GroupName': (basestring, True),\n        'Users': (list, True),\n    }\n\n\nclass ManagedPolicy(AWSObject):\n    resource_type = \"AWS::IAM::ManagedPolicy\"\n\n    props = {\n        'Description': (basestring, False),\n        'Groups': ([basestring], False),\n        'ManagedPolicyName': (basestring, False),\n        'Path': (iam_path, False),\n        'PolicyDocument': (policytypes, True),\n        'Roles': ([basestring], False),\n        'Users': ([basestring], False),\n    }\n", "path": "troposphere/iam.py"}], "after_files": [{"content": "# Copyright (c) 2012-2013, Mark Peek <mark@peek.org>\n# All rights reserved.\n#\n# See LICENSE file for full license.\n\nfrom . import AWSObject, AWSProperty\nfrom .validators import integer, boolean, status\nfrom .validators import iam_path, iam_role_name, iam_group_name, iam_user_name\n\ntry:\n    from awacs.aws import Policy\n    policytypes = (dict, Policy)\nexcept ImportError:\n    policytypes = dict,\n\n\nActive = \"Active\"\nInactive = \"Inactive\"\n\n\nclass AccessKey(AWSObject):\n    resource_type = \"AWS::IAM::AccessKey\"\n\n    props = {\n        'Serial': (integer, False),\n        'Status': (status, False),\n        'UserName': (basestring, True),\n    }\n\n\nclass PolicyType(AWSObject):\n    resource_type = \"AWS::IAM::Policy\"\n\n    props = {\n        'Groups': ([basestring], False),\n        'PolicyDocument': (policytypes, True),\n        'PolicyName': (basestring, True),\n        'Roles': ([basestring], False),\n        'Users': ([basestring], False),\n    }\n\n\nclass Policy(AWSProperty):\n    props = {\n        'PolicyDocument': (policytypes, True),\n        'PolicyName': (basestring, True),\n    }\n\n\nPolicyProperty = Policy\n\n\nclass Group(AWSObject):\n    resource_type = \"AWS::IAM::Group\"\n\n    props = {\n        'GroupName': (iam_group_name, False),\n        'ManagedPolicyArns': ([basestring], False),\n        'Path': (iam_path, False),\n        'Policies': ([Policy], False),\n    }\n\n\nclass InstanceProfile(AWSObject):\n    resource_type = \"AWS::IAM::InstanceProfile\"\n\n    props = {\n        'Path': (iam_path, False),\n        'Roles': (list, True),\n        'InstanceProfileName': (basestring, False),\n    }\n\n\nclass Role(AWSObject):\n    resource_type = \"AWS::IAM::Role\"\n\n    props = {\n        'AssumeRolePolicyDocument': (policytypes, True),\n        'ManagedPolicyArns': ([basestring], False),\n        'MaxSessionDuration': (integer, False),\n        'Path': (iam_path, False),\n        'PermissionsBoundary': (basestring, False),\n        'Policies': ([Policy], False),\n        'RoleName': (iam_role_name, False),\n    }\n\n\nclass ServiceLinkedRole(AWSObject):\n    resource_type = \"AWS::IAM::ServiceLinkedRole\"\n\n    props = {\n        'AWSServiceName': (basestring, True),\n        'CustomSuffix': (basestring, False),\n        'Description': (basestring, False),\n    }\n\n\nclass LoginProfile(AWSProperty):\n    props = {\n        'Password': (basestring, True),\n        'PasswordResetRequired': (boolean, False),\n    }\n\n\nclass User(AWSObject):\n    resource_type = \"AWS::IAM::User\"\n\n    props = {\n        'Groups': ([basestring], False),\n        'LoginProfile': (LoginProfile, False),\n        'ManagedPolicyArns': ([basestring], False),\n        'Path': (iam_path, False),\n        'PermissionsBoundary': (basestring, False),\n        'Policies': ([Policy], False),\n        'UserName': (iam_user_name, False),\n    }\n\n\nclass UserToGroupAddition(AWSObject):\n    resource_type = \"AWS::IAM::UserToGroupAddition\"\n\n    props = {\n        'GroupName': (basestring, True),\n        'Users': (list, True),\n    }\n\n\nclass ManagedPolicy(AWSObject):\n    resource_type = \"AWS::IAM::ManagedPolicy\"\n\n    props = {\n        'Description': (basestring, False),\n        'Groups': ([basestring], False),\n        'ManagedPolicyName': (basestring, False),\n        'Path': (iam_path, False),\n        'PolicyDocument': (policytypes, True),\n        'Roles': ([basestring], False),\n        'Users': ([basestring], False),\n    }\n", "path": "troposphere/iam.py"}]}