Merge pull request #45600 from nikhiljindal/waitForDel

Automatic merge from submit-queue (batch tested with PRs 41331, 45591, 45600, 45176, 45658)

Updating generic registry to return UID of the deleted resource

Ref https://github.com/kubernetes/kubernetes/issues/42594

cc @kubernetes/sig-api-machinery-pr-reviews @smarterclayton 

```release-note
Updating apiserver to return UID of the deleted resource. Clients can use this UID to verify that the resource was deleted or waiting for finalizers.
```
This commit is contained in:
Kubernetes Submit Queue 2017-05-15 13:25:47 -07:00 committed by GitHub
commit a4307eb7a2
44 changed files with 501 additions and 158 deletions

View File

@ -41172,6 +41172,10 @@
"description": "If specified, the time in seconds before the operation should be retried.", "description": "If specified, the time in seconds before the operation should be retried.",
"type": "integer", "type": "integer",
"format": "int32" "format": "int32"
},
"uid": {
"description": "UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids",
"type": "string"
} }
} }
}, },

View File

@ -4558,6 +4558,10 @@
"type": "string", "type": "string",
"description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds" "description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds"
}, },
"uid": {
"type": "string",
"description": "UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids"
},
"causes": { "causes": {
"type": "array", "type": "array",
"items": { "items": {

View File

@ -1329,6 +1329,10 @@
"type": "string", "type": "string",
"description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds" "description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds"
}, },
"uid": {
"type": "string",
"description": "UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids"
},
"causes": { "causes": {
"type": "array", "type": "array",
"items": { "items": {

View File

@ -1511,6 +1511,10 @@
"type": "string", "type": "string",
"description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds" "description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds"
}, },
"uid": {
"type": "string",
"description": "UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids"
},
"causes": { "causes": {
"type": "array", "type": "array",
"items": { "items": {

View File

@ -3296,6 +3296,10 @@
"type": "string", "type": "string",
"description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds" "description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds"
}, },
"uid": {
"type": "string",
"description": "UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids"
},
"causes": { "causes": {
"type": "array", "type": "array",
"items": { "items": {

View File

@ -4310,6 +4310,10 @@
"type": "string", "type": "string",
"description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds" "description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds"
}, },
"uid": {
"type": "string",
"description": "UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids"
},
"causes": { "causes": {
"type": "array", "type": "array",
"items": { "items": {

View File

@ -1034,6 +1034,10 @@
"type": "string", "type": "string",
"description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds" "description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds"
}, },
"uid": {
"type": "string",
"description": "UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids"
},
"causes": { "causes": {
"type": "array", "type": "array",
"items": { "items": {

View File

@ -8765,6 +8765,10 @@
"type": "string", "type": "string",
"description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds" "description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds"
}, },
"uid": {
"type": "string",
"description": "UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids"
},
"causes": { "causes": {
"type": "array", "type": "array",
"items": { "items": {

View File

@ -1339,6 +1339,10 @@
"type": "string", "type": "string",
"description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds" "description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds"
}, },
"uid": {
"type": "string",
"description": "UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids"
},
"causes": { "causes": {
"type": "array", "type": "array",
"items": { "items": {

View File

@ -3050,6 +3050,10 @@
"type": "string", "type": "string",
"description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds" "description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds"
}, },
"uid": {
"type": "string",
"description": "UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids"
},
"causes": { "causes": {
"type": "array", "type": "array",
"items": { "items": {

View File

@ -3050,6 +3050,10 @@
"type": "string", "type": "string",
"description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds" "description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds"
}, },
"uid": {
"type": "string",
"description": "UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids"
},
"causes": { "causes": {
"type": "array", "type": "array",
"items": { "items": {

View File

@ -2267,6 +2267,10 @@
"type": "string", "type": "string",
"description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds" "description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds"
}, },
"uid": {
"type": "string",
"description": "UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids"
},
"causes": { "causes": {
"type": "array", "type": "array",
"items": { "items": {

View File

@ -852,6 +852,10 @@
"type": "string", "type": "string",
"description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds" "description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds"
}, },
"uid": {
"type": "string",
"description": "UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids"
},
"causes": { "causes": {
"type": "array", "type": "array",
"items": { "items": {

View File

@ -852,6 +852,10 @@
"type": "string", "type": "string",
"description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds" "description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds"
}, },
"uid": {
"type": "string",
"description": "UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids"
},
"causes": { "causes": {
"type": "array", "type": "array",
"items": { "items": {

View File

@ -17099,6 +17099,10 @@
"type": "string", "type": "string",
"description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds" "description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds"
}, },
"uid": {
"type": "string",
"description": "UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids"
},
"causes": { "causes": {
"type": "array", "type": "array",
"items": { "items": {

View File

@ -5032,6 +5032,13 @@ Examples:<br>
<td class="tableblock halign-left valign-top"></td> <td class="tableblock halign-left valign-top"></td>
</tr> </tr>
<tr> <tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">uid</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UID of the resource. (when there is a single resource which can be described). More info: <a href="http://kubernetes.io/docs/user-guide/identifiers#uids">http://kubernetes.io/docs/user-guide/identifiers#uids</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
@ -6347,7 +6354,7 @@ Examples:<br>
</div> </div>
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Last updated 2017-05-04 11:35:33 UTC Last updated 2017-05-11 23:50:28 UTC
</div> </div>
</div> </div>
</body> </body>

View File

@ -653,6 +653,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
<td class="tableblock halign-left valign-top"></td> <td class="tableblock halign-left valign-top"></td>
</tr> </tr>
<tr> <tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">uid</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UID of the resource. (when there is a single resource which can be described). More info: <a href="http://kubernetes.io/docs/user-guide/identifiers#uids">http://kubernetes.io/docs/user-guide/identifiers#uids</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
@ -1407,7 +1414,7 @@ Examples:<br>
</div> </div>
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Last updated 2017-03-21 14:22:47 UTC Last updated 2017-05-11 23:51:01 UTC
</div> </div>
</div> </div>
</body> </body>

View File

@ -1224,6 +1224,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
<td class="tableblock halign-left valign-top"></td> <td class="tableblock halign-left valign-top"></td>
</tr> </tr>
<tr> <tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">uid</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UID of the resource. (when there is a single resource which can be described). More info: <a href="http://kubernetes.io/docs/user-guide/identifiers#uids">http://kubernetes.io/docs/user-guide/identifiers#uids</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
@ -1791,7 +1798,7 @@ Examples:<br>
</div> </div>
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Last updated 2017-03-27 13:42:39 UTC Last updated 2017-05-11 23:51:06 UTC
</div> </div>
</div> </div>
</body> </body>

View File

@ -1714,6 +1714,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
<td class="tableblock halign-left valign-top"></td> <td class="tableblock halign-left valign-top"></td>
</tr> </tr>
<tr> <tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">uid</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UID of the resource. (when there is a single resource which can be described). More info: <a href="http://kubernetes.io/docs/user-guide/identifiers#uids">http://kubernetes.io/docs/user-guide/identifiers#uids</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
@ -5589,7 +5596,7 @@ Examples:<br>
</div> </div>
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Last updated 2017-04-26 21:11:54 UTC Last updated 2017-05-11 23:51:10 UTC
</div> </div>
</div> </div>
</body> </body>

View File

@ -4168,6 +4168,13 @@ Examples:<br>
<td class="tableblock halign-left valign-top"></td> <td class="tableblock halign-left valign-top"></td>
</tr> </tr>
<tr> <tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">uid</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UID of the resource. (when there is a single resource which can be described). More info: <a href="http://kubernetes.io/docs/user-guide/identifiers#uids">http://kubernetes.io/docs/user-guide/identifiers#uids</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
@ -5685,7 +5692,7 @@ Examples:<br>
</div> </div>
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Last updated 2017-05-04 11:36:07 UTC Last updated 2017-05-11 23:51:16 UTC
</div> </div>
</div> </div>
</body> </body>

View File

@ -668,6 +668,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
<td class="tableblock halign-left valign-top"></td> <td class="tableblock halign-left valign-top"></td>
</tr> </tr>
<tr> <tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">uid</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UID of the resource. (when there is a single resource which can be described). More info: <a href="http://kubernetes.io/docs/user-guide/identifiers#uids">http://kubernetes.io/docs/user-guide/identifiers#uids</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
@ -1403,7 +1410,7 @@ Examples:<br>
</div> </div>
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Last updated 2017-03-21 14:23:06 UTC Last updated 2017-05-11 23:51:22 UTC
</div> </div>
</div> </div>
</body> </body>

View File

@ -6008,6 +6008,13 @@ Both these may change in the future. Incoming requests are matched against the h
<td class="tableblock halign-left valign-top"></td> <td class="tableblock halign-left valign-top"></td>
</tr> </tr>
<tr> <tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">uid</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UID of the resource. (when there is a single resource which can be described). More info: <a href="http://kubernetes.io/docs/user-guide/identifiers#uids">http://kubernetes.io/docs/user-guide/identifiers#uids</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
@ -7994,7 +8001,7 @@ Both these may change in the future. Incoming requests are matched against the h
</div> </div>
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Last updated 2017-04-26 21:12:08 UTC Last updated 2017-05-11 23:51:27 UTC
</div> </div>
</div> </div>
</body> </body>

View File

@ -660,6 +660,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
<td class="tableblock halign-left valign-top"></td> <td class="tableblock halign-left valign-top"></td>
</tr> </tr>
<tr> <tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">uid</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UID of the resource. (when there is a single resource which can be described). More info: <a href="http://kubernetes.io/docs/user-guide/identifiers#uids">http://kubernetes.io/docs/user-guide/identifiers#uids</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
@ -1441,7 +1448,7 @@ Examples:<br>
</div> </div>
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Last updated 2017-03-21 14:23:16 UTC Last updated 2017-05-11 23:51:32 UTC
</div> </div>
</div> </div>
</body> </body>

View File

@ -1009,6 +1009,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
<td class="tableblock halign-left valign-top"></td> <td class="tableblock halign-left valign-top"></td>
</tr> </tr>
<tr> <tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">uid</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UID of the resource. (when there is a single resource which can be described). More info: <a href="http://kubernetes.io/docs/user-guide/identifiers#uids">http://kubernetes.io/docs/user-guide/identifiers#uids</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
@ -1762,7 +1769,7 @@ Examples:<br>
</div> </div>
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Last updated 2017-03-21 14:23:25 UTC Last updated 2017-05-11 23:51:43 UTC
</div> </div>
</div> </div>
</body> </body>

View File

@ -788,6 +788,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
<td class="tableblock halign-left valign-top"></td> <td class="tableblock halign-left valign-top"></td>
</tr> </tr>
<tr> <tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">uid</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UID of the resource. (when there is a single resource which can be described). More info: <a href="http://kubernetes.io/docs/user-guide/identifiers#uids">http://kubernetes.io/docs/user-guide/identifiers#uids</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
@ -1762,7 +1769,7 @@ Examples:<br>
</div> </div>
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Last updated 2017-03-21 14:23:20 UTC Last updated 2017-05-11 23:51:38 UTC
</div> </div>
</div> </div>
</body> </body>

View File

@ -1439,6 +1439,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
<td class="tableblock halign-left valign-top"></td> <td class="tableblock halign-left valign-top"></td>
</tr> </tr>
<tr> <tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">uid</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UID of the resource. (when there is a single resource which can be described). More info: <a href="http://kubernetes.io/docs/user-guide/identifiers#uids">http://kubernetes.io/docs/user-guide/identifiers#uids</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
@ -3827,7 +3834,7 @@ Examples:<br>
</div> </div>
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Last updated 2017-04-05 12:45:49 UTC Last updated 2017-05-11 23:51:48 UTC
</div> </div>
</div> </div>
</body> </body>

View File

@ -598,6 +598,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
<td class="tableblock halign-left valign-top"></td> <td class="tableblock halign-left valign-top"></td>
</tr> </tr>
<tr> <tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">uid</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UID of the resource. (when there is a single resource which can be described). More info: <a href="http://kubernetes.io/docs/user-guide/identifiers#uids">http://kubernetes.io/docs/user-guide/identifiers#uids</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
@ -1245,7 +1252,7 @@ Examples:<br>
</div> </div>
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Last updated 2017-03-21 14:23:39 UTC Last updated 2017-05-11 23:51:57 UTC
</div> </div>
</div> </div>
</body> </body>

View File

@ -653,6 +653,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
<td class="tableblock halign-left valign-top"></td> <td class="tableblock halign-left valign-top"></td>
</tr> </tr>
<tr> <tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">uid</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UID of the resource. (when there is a single resource which can be described). More info: <a href="http://kubernetes.io/docs/user-guide/identifiers#uids">http://kubernetes.io/docs/user-guide/identifiers#uids</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
@ -1245,7 +1252,7 @@ Examples:<br>
</div> </div>
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Last updated 2017-03-21 14:23:34 UTC Last updated 2017-05-11 23:51:52 UTC
</div> </div>
</div> </div>
</body> </body>

View File

@ -6743,6 +6743,13 @@ Examples:<br>
<td class="tableblock halign-left valign-top"></td> <td class="tableblock halign-left valign-top"></td>
</tr> </tr>
<tr> <tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">uid</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UID of the resource. (when there is a single resource which can be described). More info: <a href="http://kubernetes.io/docs/user-guide/identifiers#uids">http://kubernetes.io/docs/user-guide/identifiers#uids</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
@ -9941,7 +9948,7 @@ Examples:<br>
</div> </div>
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Last updated 2017-05-07 16:52:23 UTC Last updated 2017-05-15 00:09:19 UTC
</div> </div>
</div> </div>
</body> </body>

View File

@ -9860,6 +9860,10 @@
"description": "If specified, the time in seconds before the operation should be retried.", "description": "If specified, the time in seconds before the operation should be retried.",
"type": "integer", "type": "integer",
"format": "int32" "format": "int32"
},
"uid": {
"description": "UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids",
"type": "string"
} }
} }
}, },

View File

@ -6621,6 +6621,10 @@
"type": "string", "type": "string",
"description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds" "description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds"
}, },
"uid": {
"type": "string",
"description": "UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids"
},
"causes": { "causes": {
"type": "array", "type": "array",
"items": { "items": {

View File

@ -1008,6 +1008,10 @@
"type": "string", "type": "string",
"description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds" "description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds"
}, },
"uid": {
"type": "string",
"description": "UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids"
},
"causes": { "causes": {
"type": "array", "type": "array",
"items": { "items": {

View File

@ -4456,6 +4456,10 @@
"type": "string", "type": "string",
"description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds" "description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds"
}, },
"uid": {
"type": "string",
"description": "UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids"
},
"causes": { "causes": {
"type": "array", "type": "array",
"items": { "items": {

View File

@ -5433,6 +5433,13 @@ Both these may change in the future. Incoming requests are matched against the h
<td class="tableblock halign-left valign-top"></td> <td class="tableblock halign-left valign-top"></td>
</tr> </tr>
<tr> <tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">uid</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UID of the resource. (when there is a single resource which can be described). More info: <a href="http://kubernetes.io/docs/user-guide/identifiers#uids">http://kubernetes.io/docs/user-guide/identifiers#uids</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
@ -7074,7 +7081,7 @@ Both these may change in the future. Incoming requests are matched against the h
</div> </div>
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Last updated 2017-05-12 00:39:57 UTC Last updated 2017-05-15 06:10:18 UTC
</div> </div>
</div> </div>
</body> </body>

View File

@ -694,6 +694,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
<td class="tableblock halign-left valign-top"></td> <td class="tableblock halign-left valign-top"></td>
</tr> </tr>
<tr> <tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">uid</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UID of the resource. (when there is a single resource which can be described). More info: <a href="http://kubernetes.io/docs/user-guide/identifiers#uids">http://kubernetes.io/docs/user-guide/identifiers#uids</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
@ -1475,7 +1482,7 @@ Examples:<br>
</div> </div>
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Last updated 2017-03-21 14:39:26 UTC Last updated 2017-05-15 06:10:07 UTC
</div> </div>
</div> </div>
</body> </body>

View File

@ -1386,6 +1386,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
<td class="tableblock halign-left valign-top"></td> <td class="tableblock halign-left valign-top"></td>
</tr> </tr>
<tr> <tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">uid</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">UID of the resource. (when there is a single resource which can be described). More info: <a href="http://kubernetes.io/docs/user-guide/identifiers#uids">http://kubernetes.io/docs/user-guide/identifiers#uids</a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">causes</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
@ -2240,7 +2247,7 @@ Examples:<br>
</div> </div>
<div id="footer"> <div id="footer">
<div id="footer-text"> <div id="footer-text">
Last updated 2017-05-15 00:18:23 UTC Last updated 2017-05-15 06:10:12 UTC
</div> </div>
</div> </div>
</body> </body>

View File

@ -1319,6 +1319,10 @@ func (m *StatusDetails) MarshalTo(dAtA []byte) (int, error) {
dAtA[i] = 0x28 dAtA[i] = 0x28
i++ i++
i = encodeVarintGenerated(dAtA, i, uint64(m.RetryAfterSeconds)) i = encodeVarintGenerated(dAtA, i, uint64(m.RetryAfterSeconds))
dAtA[i] = 0x32
i++
i = encodeVarintGenerated(dAtA, i, uint64(len(m.UID)))
i += copy(dAtA[i:], m.UID)
return i, nil return i, nil
} }
@ -1877,6 +1881,8 @@ func (m *StatusDetails) Size() (n int) {
} }
} }
n += 1 + sovGenerated(uint64(m.RetryAfterSeconds)) n += 1 + sovGenerated(uint64(m.RetryAfterSeconds))
l = len(m.UID)
n += 1 + l + sovGenerated(uint64(l))
return n return n
} }
@ -2222,6 +2228,7 @@ func (this *StatusDetails) String() string {
`Kind:` + fmt.Sprintf("%v", this.Kind) + `,`, `Kind:` + fmt.Sprintf("%v", this.Kind) + `,`,
`Causes:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Causes), "StatusCause", "StatusCause", 1), `&`, ``, 1) + `,`, `Causes:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Causes), "StatusCause", "StatusCause", 1), `&`, ``, 1) + `,`,
`RetryAfterSeconds:` + fmt.Sprintf("%v", this.RetryAfterSeconds) + `,`, `RetryAfterSeconds:` + fmt.Sprintf("%v", this.RetryAfterSeconds) + `,`,
`UID:` + fmt.Sprintf("%v", this.UID) + `,`,
`}`, `}`,
}, "") }, "")
return s return s
@ -6319,6 +6326,35 @@ func (m *StatusDetails) Unmarshal(dAtA []byte) error {
break break
} }
} }
case 6:
if wireType != 2 {
return fmt.Errorf("proto: wrong wireType = %d for field UID", wireType)
}
var stringLen uint64
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowGenerated
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := dAtA[iNdEx]
iNdEx++
stringLen |= (uint64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
intStringLen := int(stringLen)
if intStringLen < 0 {
return ErrInvalidLengthGenerated
}
postIndex := iNdEx + intStringLen
if postIndex > l {
return io.ErrUnexpectedEOF
}
m.UID = k8s_io_apimachinery_pkg_types.UID(dAtA[iNdEx:postIndex])
iNdEx = postIndex
default: default:
iNdEx = preIndex iNdEx = preIndex
skippy, err := skipGenerated(dAtA[iNdEx:]) skippy, err := skipGenerated(dAtA[iNdEx:])
@ -6834,142 +6870,142 @@ func init() {
} }
var fileDescriptorGenerated = []byte{ var fileDescriptorGenerated = []byte{
// 2183 bytes of a gzipped FileDescriptorProto // 2189 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x19, 0x4b, 0x6c, 0x23, 0x49, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x39, 0x4b, 0x6c, 0x23, 0x49,
0x35, 0x6d, 0xc7, 0x1e, 0xfb, 0x39, 0xce, 0xa7, 0x36, 0x03, 0xde, 0x48, 0xd8, 0xd9, 0xde, 0x15, 0xd9, 0x69, 0x3b, 0xf6, 0xd8, 0x9f, 0xe3, 0x3c, 0x6a, 0x33, 0xff, 0xef, 0x8d, 0x84, 0x9d, 0xed,
0xca, 0xc2, 0xac, 0x4d, 0xb2, 0xb0, 0x1a, 0x06, 0x18, 0x48, 0xc7, 0x99, 0x28, 0xda, 0xc9, 0x24, 0x5d, 0xa1, 0x2c, 0xcc, 0xda, 0x24, 0x0b, 0xab, 0x61, 0x80, 0x81, 0x74, 0x9c, 0x89, 0xa2, 0x9d,
0xaa, 0xec, 0x0c, 0x62, 0x18, 0x21, 0x3a, 0xdd, 0x15, 0xa7, 0x49, 0xbb, 0xbb, 0xa9, 0x6a, 0x7b, 0x4c, 0xa2, 0xca, 0xce, 0x20, 0x86, 0x11, 0xa2, 0xd3, 0x5d, 0x71, 0x9a, 0xb4, 0xbb, 0x9b, 0xaa,
0x62, 0xf6, 0xc0, 0x4a, 0x80, 0xc4, 0x01, 0xa1, 0x39, 0x72, 0x40, 0x68, 0x47, 0x70, 0xe3, 0xc6, 0xb6, 0x27, 0x66, 0x0f, 0xac, 0x04, 0x48, 0x1c, 0x10, 0x9a, 0x23, 0x27, 0xb4, 0x23, 0xb8, 0x71,
0x9d, 0x1b, 0x12, 0x73, 0x5c, 0x89, 0x0b, 0x07, 0x64, 0x31, 0xde, 0x03, 0x47, 0xee, 0x39, 0xa1, 0xe3, 0xce, 0x0d, 0x89, 0x39, 0xae, 0xc4, 0x85, 0x03, 0xb2, 0x76, 0xbc, 0x07, 0x8e, 0xdc, 0x73,
0xaa, 0xae, 0xfe, 0xd9, 0xf1, 0xa6, 0xcd, 0xee, 0x61, 0x4f, 0x71, 0xbf, 0x7f, 0xbd, 0xf7, 0xea, 0x42, 0x55, 0x5d, 0xfd, 0xb2, 0xe3, 0x4d, 0x9b, 0xd9, 0x03, 0xa7, 0xb8, 0xbf, 0x77, 0x7d, 0xef,
0x7d, 0x2a, 0x70, 0x70, 0x7e, 0x9b, 0x35, 0x2d, 0xb7, 0x75, 0xde, 0x3b, 0x21, 0xd4, 0x21, 0x3e, 0xaa, 0xc0, 0xc1, 0xf9, 0x6d, 0xd6, 0xb4, 0xdc, 0xd6, 0x79, 0xef, 0x84, 0x50, 0x87, 0xf8, 0x84,
0x61, 0xad, 0x3e, 0x71, 0x4c, 0x97, 0xb6, 0x24, 0x42, 0xf7, 0xac, 0xae, 0x6e, 0x9c, 0x59, 0x0e, 0xb5, 0xfa, 0xc4, 0x31, 0x5d, 0xda, 0x92, 0x08, 0xdd, 0xb3, 0xba, 0xba, 0x71, 0x66, 0x39, 0x84,
0xa1, 0x83, 0x96, 0x77, 0xde, 0xe1, 0x00, 0xd6, 0xea, 0x12, 0x5f, 0x6f, 0xf5, 0x37, 0x5b, 0x1d, 0x0e, 0x5a, 0xde, 0x79, 0x87, 0x03, 0x58, 0xab, 0x4b, 0x7c, 0xbd, 0xd5, 0xdf, 0x6c, 0x75, 0x88,
0xe2, 0x10, 0xaa, 0xfb, 0xc4, 0x6c, 0x7a, 0xd4, 0xf5, 0x5d, 0xf4, 0x46, 0xc0, 0xd5, 0x4c, 0x72, 0x43, 0xa8, 0xee, 0x13, 0xb3, 0xe9, 0x51, 0xd7, 0x77, 0xd1, 0x5b, 0x01, 0x57, 0x33, 0xc9, 0xd5,
0x35, 0xbd, 0xf3, 0x0e, 0x07, 0xb0, 0x26, 0xe7, 0x6a, 0xf6, 0x37, 0xd7, 0xde, 0xea, 0x58, 0xfe, 0xf4, 0xce, 0x3b, 0x1c, 0xc0, 0x9a, 0x9c, 0xab, 0xd9, 0xdf, 0x5c, 0x7b, 0xa7, 0x63, 0xf9, 0x67,
0x59, 0xef, 0xa4, 0x69, 0xb8, 0xdd, 0x56, 0xc7, 0xed, 0xb8, 0x2d, 0xc1, 0x7c, 0xd2, 0x3b, 0x15, 0xbd, 0x93, 0xa6, 0xe1, 0x76, 0x5b, 0x1d, 0xb7, 0xe3, 0xb6, 0x04, 0xf3, 0x49, 0xef, 0x54, 0x7c,
0x5f, 0xe2, 0x43, 0xfc, 0x0a, 0x84, 0xae, 0x4d, 0x35, 0x85, 0xf6, 0x1c, 0xdf, 0xea, 0x92, 0x71, 0x89, 0x0f, 0xf1, 0x2b, 0x10, 0xba, 0x36, 0xd5, 0x14, 0xda, 0x73, 0x7c, 0xab, 0x4b, 0xc6, 0xad,
0x2b, 0xd6, 0xde, 0xb9, 0x8e, 0x81, 0x19, 0x67, 0xa4, 0xab, 0x4f, 0xf0, 0xbd, 0x3d, 0x8d, 0xaf, 0x58, 0x7b, 0xef, 0x3a, 0x06, 0x66, 0x9c, 0x91, 0xae, 0x3e, 0xc1, 0xf7, 0xee, 0x34, 0xbe, 0x9e,
0xe7, 0x5b, 0x76, 0xcb, 0x72, 0x7c, 0xe6, 0xd3, 0x71, 0x26, 0xf5, 0xef, 0x79, 0x28, 0x6d, 0x1f, 0x6f, 0xd9, 0x2d, 0xcb, 0xf1, 0x99, 0x4f, 0xc7, 0x99, 0xd4, 0xbf, 0xe5, 0xa1, 0xb4, 0x7d, 0xb4,
0xed, 0xef, 0x51, 0xb7, 0xe7, 0xa1, 0x75, 0x98, 0x77, 0xf4, 0x2e, 0xa9, 0x29, 0xeb, 0xca, 0x46, 0xbf, 0x47, 0xdd, 0x9e, 0x87, 0xd6, 0x61, 0xde, 0xd1, 0xbb, 0xa4, 0xa6, 0xac, 0x2b, 0x1b, 0x65,
0x59, 0x5b, 0x78, 0x31, 0x6c, 0xcc, 0x8d, 0x86, 0x8d, 0xf9, 0x07, 0x7a, 0x97, 0x60, 0x81, 0x41, 0x6d, 0xe1, 0xc5, 0xb0, 0x31, 0x37, 0x1a, 0x36, 0xe6, 0x1f, 0xe8, 0x5d, 0x82, 0x05, 0x06, 0xd9,
0x36, 0x94, 0xfa, 0x84, 0x32, 0xcb, 0x75, 0x58, 0x2d, 0xb7, 0x9e, 0xdf, 0xa8, 0x6c, 0xdd, 0x6d, 0x50, 0xea, 0x13, 0xca, 0x2c, 0xd7, 0x61, 0xb5, 0xdc, 0x7a, 0x7e, 0xa3, 0xb2, 0x75, 0xb7, 0x99,
0x66, 0x71, 0x5a, 0x53, 0x28, 0x78, 0x14, 0xb0, 0xde, 0x73, 0x69, 0xdb, 0x62, 0x86, 0xdb, 0x27, 0xc5, 0x69, 0x4d, 0xa1, 0xe0, 0x51, 0xc0, 0x7a, 0xcf, 0xa5, 0x6d, 0x8b, 0x19, 0x6e, 0x9f, 0xd0,
0x74, 0xa0, 0x2d, 0x4b, 0x2d, 0x25, 0x89, 0x64, 0x38, 0xd2, 0x80, 0x7e, 0xa9, 0xc0, 0xb2, 0x47, 0x81, 0xb6, 0x2c, 0xb5, 0x94, 0x24, 0x92, 0xe1, 0x48, 0x03, 0xfa, 0xa5, 0x02, 0xcb, 0x1e, 0x25,
0xc9, 0x29, 0xa1, 0x94, 0x98, 0x12, 0x5f, 0xcb, 0xaf, 0x2b, 0x9f, 0x81, 0xda, 0x9a, 0x54, 0xbb, 0xa7, 0x84, 0x52, 0x62, 0x4a, 0x7c, 0x2d, 0xbf, 0xae, 0x7c, 0x01, 0x6a, 0x6b, 0x52, 0xed, 0xf2,
0x7c, 0x34, 0x26, 0x1f, 0x4f, 0x68, 0x44, 0x7f, 0x54, 0x60, 0x8d, 0x11, 0xda, 0x27, 0x74, 0xdb, 0xd1, 0x98, 0x7c, 0x3c, 0xa1, 0x11, 0xfd, 0x41, 0x81, 0x35, 0x46, 0x68, 0x9f, 0xd0, 0x6d, 0xd3,
0x34, 0x29, 0x61, 0x4c, 0x1b, 0xec, 0xd8, 0x16, 0x71, 0xfc, 0x9d, 0xfd, 0x36, 0x66, 0xb5, 0x79, 0xa4, 0x84, 0x31, 0x6d, 0xb0, 0x63, 0x5b, 0xc4, 0xf1, 0x77, 0xf6, 0xdb, 0x98, 0xd5, 0xe6, 0x85,
0xe1, 0x87, 0xef, 0x66, 0x33, 0xe8, 0x78, 0x9a, 0x1c, 0x4d, 0x95, 0x16, 0xad, 0x4d, 0x25, 0x61, 0x1f, 0xbe, 0x9b, 0xcd, 0xa0, 0xe3, 0x69, 0x72, 0x34, 0x55, 0x5a, 0xb4, 0x36, 0x95, 0x84, 0xe1,
0xf8, 0x13, 0xcc, 0x50, 0x4f, 0x61, 0x21, 0x0c, 0xe4, 0x7d, 0x8b, 0xf9, 0xe8, 0x11, 0x14, 0x3b, 0xcf, 0x31, 0x43, 0x3d, 0x85, 0x85, 0x30, 0x90, 0xf7, 0x2d, 0xe6, 0xa3, 0x47, 0x50, 0xec, 0xf0,
0xfc, 0x83, 0xd5, 0x14, 0x61, 0x60, 0x33, 0x9b, 0x81, 0xa1, 0x0c, 0x6d, 0x51, 0xda, 0x53, 0x14, 0x0f, 0x56, 0x53, 0x84, 0x81, 0xcd, 0x6c, 0x06, 0x86, 0x32, 0xb4, 0x45, 0x69, 0x4f, 0x51, 0x7c,
0x9f, 0x0c, 0x4b, 0x69, 0xea, 0x5f, 0x73, 0x50, 0xd9, 0x3e, 0xda, 0xc7, 0x84, 0xb9, 0x3d, 0x6a, 0x32, 0x2c, 0xa5, 0xa9, 0x7f, 0xc9, 0x41, 0x65, 0xfb, 0x68, 0x1f, 0x13, 0xe6, 0xf6, 0xa8, 0x41,
0x90, 0x0c, 0x49, 0xb3, 0x05, 0xc0, 0xff, 0x32, 0x4f, 0x37, 0x88, 0x59, 0xcb, 0xad, 0x2b, 0x1b, 0x32, 0x24, 0xcd, 0x16, 0x00, 0xff, 0xcb, 0x3c, 0xdd, 0x20, 0x66, 0x2d, 0xb7, 0xae, 0x6c, 0x94,
0x25, 0x0d, 0x49, 0x3a, 0x78, 0x10, 0x61, 0x70, 0x82, 0x8a, 0x4b, 0x3d, 0xb7, 0x1c, 0x53, 0x44, 0x34, 0x24, 0xe9, 0xe0, 0x41, 0x84, 0xc1, 0x09, 0x2a, 0x2e, 0xf5, 0xdc, 0x72, 0x4c, 0x11, 0xed,
0x3b, 0x21, 0xf5, 0x5d, 0xcb, 0x31, 0xb1, 0xc0, 0xa0, 0xfb, 0x50, 0xe8, 0x13, 0x7a, 0xc2, 0xfd, 0x84, 0xd4, 0xf7, 0x2d, 0xc7, 0xc4, 0x02, 0x83, 0xee, 0x43, 0xa1, 0x4f, 0xe8, 0x09, 0xf7, 0x3f,
0xcf, 0x13, 0xe2, 0xab, 0xd9, 0x8e, 0xf7, 0x88, 0xb3, 0x68, 0xe5, 0xd1, 0xb0, 0x51, 0x10, 0x3f, 0x4f, 0x88, 0xaf, 0x66, 0x3b, 0xde, 0x23, 0xce, 0xa2, 0x95, 0x47, 0xc3, 0x46, 0x41, 0xfc, 0xc4,
0x71, 0x20, 0x04, 0x35, 0x01, 0xd8, 0x99, 0x4b, 0x7d, 0x61, 0x4e, 0xad, 0xb0, 0x9e, 0xdf, 0x28, 0x81, 0x10, 0xd4, 0x04, 0x60, 0x67, 0x2e, 0xf5, 0x85, 0x39, 0xb5, 0xc2, 0x7a, 0x7e, 0xa3, 0xac,
0x6b, 0x8b, 0xdc, 0xbe, 0xe3, 0x08, 0x8a, 0x13, 0x14, 0xe8, 0x36, 0x2c, 0x30, 0xcb, 0xe9, 0xf4, 0x2d, 0x72, 0xfb, 0x8e, 0x23, 0x28, 0x4e, 0x50, 0xa0, 0xdb, 0xb0, 0xc0, 0x2c, 0xa7, 0xd3, 0xb3,
0x6c, 0x9d, 0x72, 0x40, 0xad, 0x28, 0xec, 0x5c, 0x95, 0x76, 0x2e, 0x1c, 0x27, 0x70, 0x38, 0x45, 0x75, 0xca, 0x01, 0xb5, 0xa2, 0xb0, 0x73, 0x55, 0xda, 0xb9, 0x70, 0x9c, 0xc0, 0xe1, 0x14, 0xa5,
0xa9, 0xfe, 0x45, 0x81, 0xa5, 0x84, 0xff, 0x44, 0xac, 0x6e, 0xc3, 0x42, 0x27, 0x91, 0xa9, 0xd2, 0xfa, 0x67, 0x05, 0x96, 0x12, 0xfe, 0x13, 0xb1, 0xba, 0x0d, 0x0b, 0x9d, 0x44, 0xa6, 0x4a, 0x5f,
0x97, 0x91, 0xb4, 0x64, 0x16, 0xe3, 0x14, 0x25, 0x22, 0x50, 0xa6, 0x52, 0x52, 0x78, 0x23, 0x37, 0x46, 0xd2, 0x92, 0x59, 0x8c, 0x53, 0x94, 0x88, 0x40, 0x99, 0x4a, 0x49, 0x61, 0x45, 0x6e, 0x66,
0x33, 0x07, 0x3a, 0xb4, 0x21, 0xd6, 0x94, 0x00, 0x32, 0x1c, 0x4b, 0x56, 0xff, 0xa3, 0x88, 0xa0, 0x0e, 0x74, 0x68, 0x43, 0xac, 0x29, 0x01, 0x64, 0x38, 0x96, 0xac, 0xfe, 0x4b, 0x11, 0x41, 0x0f,
0x87, 0x77, 0x14, 0x6d, 0x24, 0xea, 0x80, 0x22, 0x9c, 0xb5, 0x30, 0xe5, 0x0e, 0x5f, 0x73, 0x79, 0x6b, 0x14, 0x6d, 0x24, 0xfa, 0x80, 0x22, 0x9c, 0xb5, 0x30, 0xa5, 0x86, 0xaf, 0x29, 0x9e, 0xdc,
0x72, 0x9f, 0x8b, 0xcb, 0x73, 0xa7, 0xf4, 0xbb, 0x0f, 0x1b, 0x73, 0x1f, 0xfc, 0x6b, 0x7d, 0x4e, 0xff, 0x44, 0xf1, 0xdc, 0x29, 0xfd, 0xee, 0xe3, 0xc6, 0xdc, 0x47, 0xff, 0x5c, 0x9f, 0x53, 0x3f,
0xfd, 0x38, 0x07, 0xd5, 0x36, 0xb1, 0x89, 0x4f, 0x0e, 0x3d, 0x5f, 0x9c, 0xe0, 0x1e, 0xa0, 0x0e, 0xcb, 0x41, 0xb5, 0x4d, 0x6c, 0xe2, 0x93, 0x43, 0xcf, 0x17, 0x27, 0xb8, 0x07, 0xa8, 0x43, 0x75,
0xd5, 0x0d, 0x72, 0x44, 0xa8, 0xe5, 0x9a, 0xc7, 0xc4, 0x70, 0x1d, 0x93, 0x89, 0x10, 0xe5, 0xb5, 0x83, 0x1c, 0x11, 0x6a, 0xb9, 0xe6, 0x31, 0x31, 0x5c, 0xc7, 0x64, 0x22, 0x44, 0x79, 0xed, 0xff,
0x2f, 0x8c, 0x86, 0x0d, 0xb4, 0x37, 0x81, 0xc5, 0x57, 0x70, 0x20, 0x1b, 0xaa, 0x1e, 0x15, 0xbf, 0x46, 0xc3, 0x06, 0xda, 0x9b, 0xc0, 0xe2, 0x2b, 0x38, 0x90, 0x0d, 0x55, 0x8f, 0x8a, 0xdf, 0x96,
0x2d, 0x5f, 0x16, 0x50, 0x9e, 0xb8, 0x6f, 0x67, 0x3b, 0xfb, 0x51, 0x92, 0x55, 0x5b, 0x19, 0x0d, 0x2f, 0x1b, 0x28, 0x4f, 0xdc, 0x77, 0xb3, 0x9d, 0xfd, 0x28, 0xc9, 0xaa, 0xad, 0x8c, 0x86, 0x8d,
0x1b, 0xd5, 0x14, 0x08, 0xa7, 0x85, 0xa3, 0xef, 0xc1, 0xb2, 0x4b, 0xbd, 0x33, 0xdd, 0x69, 0x13, 0x6a, 0x0a, 0x84, 0xd3, 0xc2, 0xd1, 0xf7, 0x60, 0xd9, 0xa5, 0xde, 0x99, 0xee, 0xb4, 0x89, 0x47,
0x8f, 0x38, 0x26, 0x71, 0x7c, 0x26, 0x2e, 0x53, 0x49, 0x5b, 0xe5, 0x65, 0xef, 0x70, 0x0c, 0x87, 0x1c, 0x93, 0x38, 0x3e, 0x13, 0xc5, 0x54, 0xd2, 0x56, 0x79, 0xdb, 0x3b, 0x1c, 0xc3, 0xe1, 0x09,
0x27, 0xa8, 0xd1, 0x63, 0x58, 0xf1, 0xa8, 0xeb, 0xe9, 0x1d, 0x9d, 0x4b, 0x3c, 0x72, 0x6d, 0xcb, 0x6a, 0xf4, 0x18, 0x56, 0x3c, 0xea, 0x7a, 0x7a, 0x47, 0xe7, 0x12, 0x8f, 0x5c, 0xdb, 0x32, 0x06,
0x18, 0x88, 0xcb, 0x56, 0xd6, 0x6e, 0x8d, 0x86, 0x8d, 0x95, 0xa3, 0x71, 0xe4, 0xe5, 0xb0, 0xf1, 0xa2, 0xd8, 0xca, 0xda, 0xad, 0xd1, 0xb0, 0xb1, 0x72, 0x34, 0x8e, 0xbc, 0x1c, 0x36, 0x5e, 0x13,
0x8a, 0x70, 0x1d, 0x87, 0xc4, 0x48, 0x3c, 0x29, 0x46, 0xdd, 0x87, 0x52, 0xbb, 0x47, 0x05, 0x04, 0xae, 0xe3, 0x90, 0x18, 0x89, 0x27, 0xc5, 0xa8, 0xfb, 0x50, 0x6a, 0xf7, 0xa8, 0x80, 0xa0, 0xef,
0x7d, 0x07, 0x4a, 0xa6, 0xfc, 0x2d, 0xbd, 0xfa, 0x5a, 0xd8, 0x13, 0x42, 0x9a, 0xcb, 0x61, 0xa3, 0x40, 0xc9, 0x94, 0xbf, 0xa5, 0x57, 0xdf, 0x08, 0x67, 0x42, 0x48, 0x73, 0x39, 0x6c, 0x54, 0xf9,
0xca, 0x5b, 0x5f, 0x33, 0x04, 0xe0, 0x88, 0x45, 0x7d, 0x02, 0xd5, 0xdd, 0x0b, 0xcf, 0xa5, 0x7e, 0xe8, 0x6b, 0x86, 0x00, 0x1c, 0xb1, 0xa8, 0x4f, 0xa0, 0xba, 0x7b, 0xe1, 0xb9, 0xd4, 0x0f, 0xe3,
0x18, 0xaf, 0x2f, 0x43, 0x91, 0x08, 0x80, 0x90, 0x56, 0x8a, 0x0b, 0x59, 0x40, 0x86, 0x25, 0x16, 0xf5, 0x65, 0x28, 0x12, 0x01, 0x10, 0xd2, 0x4a, 0x71, 0x23, 0x0b, 0xc8, 0xb0, 0xc4, 0xa2, 0x37,
0xbd, 0x0e, 0x05, 0x72, 0xa1, 0x1b, 0xbe, 0xac, 0x48, 0x55, 0x49, 0x56, 0xd8, 0xe5, 0x40, 0x1c, 0xa1, 0x40, 0x2e, 0x74, 0xc3, 0x97, 0x1d, 0xa9, 0x2a, 0xc9, 0x0a, 0xbb, 0x1c, 0x88, 0x03, 0x9c,
0xe0, 0xd4, 0x43, 0x80, 0x3d, 0x12, 0x89, 0xde, 0x86, 0xa5, 0xf0, 0x4e, 0xa4, 0xaf, 0xea, 0x17, 0x7a, 0x08, 0xb0, 0x47, 0x22, 0xd1, 0xdb, 0xb0, 0x14, 0xd6, 0x44, 0xba, 0x54, 0xff, 0x5f, 0x32,
0x25, 0xf3, 0x12, 0x4e, 0xa3, 0xf1, 0x38, 0xbd, 0xfa, 0x04, 0xca, 0xe2, 0x3a, 0xf3, 0x4a, 0xc6, 0x2f, 0xe1, 0x34, 0x1a, 0x8f, 0xd3, 0xab, 0x4f, 0xa0, 0x2c, 0xca, 0x99, 0x77, 0x32, 0x6e, 0x82,
0x4d, 0x10, 0xb7, 0x59, 0x4a, 0x89, 0x4c, 0x10, 0x14, 0x38, 0xc0, 0x45, 0xa5, 0x30, 0x37, 0xad, 0xa8, 0x66, 0x29, 0x25, 0x32, 0x41, 0x50, 0xe0, 0x00, 0x17, 0xb5, 0xc2, 0xdc, 0xb4, 0x56, 0x98,
0x14, 0x26, 0xb2, 0xd7, 0x86, 0x6a, 0xc0, 0x1b, 0x56, 0xe7, 0x4c, 0x1a, 0x6e, 0x41, 0x29, 0x34, 0xc8, 0x5e, 0x1b, 0xaa, 0x01, 0x6f, 0xd8, 0x9d, 0x33, 0x69, 0xb8, 0x05, 0xa5, 0xd0, 0x4c, 0xa9,
0x53, 0x6a, 0x89, 0xba, 0x72, 0x28, 0x08, 0x47, 0x14, 0x09, 0x6d, 0x67, 0x90, 0x2a, 0x4d, 0xd9, 0x25, 0x9a, 0xca, 0xa1, 0x20, 0x1c, 0x51, 0x24, 0xb4, 0x9d, 0x41, 0xaa, 0x35, 0x65, 0x53, 0xf6,
0x94, 0xbd, 0x09, 0x37, 0x64, 0x71, 0x90, 0xba, 0x96, 0x24, 0xd9, 0x8d, 0xd0, 0x67, 0x21, 0x3e, 0x36, 0xdc, 0x90, 0xcd, 0x41, 0xea, 0x5a, 0x92, 0x64, 0x37, 0x42, 0x9f, 0x85, 0xf8, 0x84, 0xa6,
0xa1, 0xe9, 0xe7, 0x50, 0x9b, 0xd6, 0xca, 0x3f, 0x45, 0xf1, 0xcc, 0x6e, 0x8a, 0xfa, 0x5b, 0x05, 0x9f, 0x43, 0x6d, 0xda, 0x28, 0x7f, 0x85, 0xe6, 0x99, 0xdd, 0x14, 0xf5, 0xb7, 0x0a, 0x2c, 0x27,
0x96, 0x93, 0x92, 0xb2, 0x87, 0x2f, 0xbb, 0x92, 0xeb, 0x9b, 0x5e, 0xc2, 0x23, 0x7f, 0x50, 0x60, 0x25, 0x65, 0x0f, 0x5f, 0x76, 0x25, 0xd7, 0x0f, 0xbd, 0x84, 0x47, 0x7e, 0xaf, 0xc0, 0x6a, 0xea,
0x35, 0x75, 0xb4, 0x99, 0x22, 0x3e, 0x83, 0x51, 0xc9, 0xe4, 0xc8, 0xcf, 0x90, 0x1c, 0xff, 0xc8, 0x68, 0x33, 0x45, 0x7c, 0x06, 0xa3, 0x92, 0xc9, 0x91, 0x9f, 0x21, 0x39, 0xfe, 0x9e, 0x83, 0xea,
0x41, 0xf5, 0xbe, 0x7e, 0x42, 0xec, 0x63, 0x62, 0x13, 0xc3, 0x77, 0x29, 0x7a, 0x1f, 0x2a, 0x5d, 0x7d, 0xfd, 0x84, 0xd8, 0xc7, 0xc4, 0x26, 0x86, 0xef, 0x52, 0xf4, 0x21, 0x54, 0xba, 0xba, 0x6f,
0xdd, 0x37, 0xce, 0x04, 0x34, 0x1c, 0x4b, 0xda, 0xd9, 0xca, 0x5f, 0x4a, 0x52, 0xf3, 0x20, 0x16, 0x9c, 0x09, 0x68, 0xb8, 0x96, 0xb4, 0xb3, 0xb5, 0xbf, 0x94, 0xa4, 0xe6, 0x41, 0x2c, 0x66, 0xd7,
0xb3, 0xeb, 0xf8, 0x74, 0xa0, 0xbd, 0x22, 0x4d, 0xaa, 0x24, 0x30, 0x38, 0xa9, 0x4d, 0xcc, 0x92, 0xf1, 0xe9, 0x40, 0x7b, 0x4d, 0x9a, 0x54, 0x49, 0x60, 0x70, 0x52, 0x9b, 0xd8, 0x25, 0xc5, 0xf7,
0xe2, 0x7b, 0xf7, 0xc2, 0xe3, 0xf5, 0x7f, 0xf6, 0x11, 0x36, 0x65, 0x02, 0x26, 0x3f, 0xed, 0x59, 0xee, 0x85, 0xc7, 0xfb, 0xff, 0xec, 0x2b, 0x6c, 0xca, 0x04, 0x4c, 0x7e, 0xda, 0xb3, 0x28, 0xe9,
0x94, 0x74, 0x89, 0xe3, 0xc7, 0xb3, 0xe4, 0xc1, 0x98, 0x7c, 0x3c, 0xa1, 0x71, 0xed, 0x2e, 0x2c, 0x12, 0xc7, 0x8f, 0x77, 0xc9, 0x83, 0x31, 0xf9, 0x78, 0x42, 0xe3, 0xda, 0x5d, 0x58, 0x1e, 0x37,
0x8f, 0x1b, 0x8f, 0x96, 0x21, 0x7f, 0x4e, 0x06, 0x41, 0xbc, 0x30, 0xff, 0x89, 0x56, 0xa1, 0xd0, 0x1e, 0x2d, 0x43, 0xfe, 0x9c, 0x0c, 0x82, 0x78, 0x61, 0xfe, 0x13, 0xad, 0x42, 0xa1, 0xaf, 0xdb,
0xd7, 0xed, 0x9e, 0xbc, 0x8d, 0x38, 0xf8, 0xb8, 0x93, 0xbb, 0xad, 0xa8, 0x7f, 0x52, 0xa0, 0x36, 0x3d, 0x59, 0x8d, 0x38, 0xf8, 0xb8, 0x93, 0xbb, 0xad, 0xa8, 0x7f, 0x54, 0xa0, 0x36, 0xcd, 0x10,
0xcd, 0x10, 0xf4, 0xa5, 0x84, 0x20, 0xad, 0x22, 0xad, 0xca, 0xbf, 0x4b, 0x06, 0x81, 0xd4, 0x5d, 0xf4, 0xa5, 0x84, 0x20, 0xad, 0x22, 0xad, 0xca, 0xbf, 0x4f, 0x06, 0x81, 0xd4, 0x5d, 0x28, 0xb9,
0x28, 0xb9, 0x1e, 0x9f, 0xfe, 0x5d, 0x2a, 0xa3, 0xfe, 0x66, 0x18, 0xc9, 0x43, 0x09, 0xbf, 0x1c, 0x1e, 0xdf, 0xfe, 0x5d, 0x2a, 0xa3, 0xfe, 0x76, 0x18, 0xc9, 0x43, 0x09, 0xbf, 0x1c, 0x36, 0x6e,
0x36, 0x6e, 0xa6, 0xc4, 0x87, 0x08, 0x1c, 0xb1, 0x22, 0x15, 0x8a, 0xc2, 0x1e, 0xde, 0x4f, 0x78, 0xa6, 0xc4, 0x87, 0x08, 0x1c, 0xb1, 0x22, 0x15, 0x8a, 0xc2, 0x1e, 0x3e, 0x4f, 0xf8, 0xe4, 0x07,
0xe7, 0x07, 0x5e, 0x5b, 0x1f, 0x09, 0x08, 0x96, 0x18, 0xf5, 0x7d, 0x28, 0xf1, 0xc1, 0xe6, 0x80, 0xde, 0x5b, 0x1f, 0x09, 0x08, 0x96, 0x18, 0xf5, 0x43, 0x28, 0xf1, 0xc5, 0xe6, 0x80, 0xf8, 0x3a,
0xf8, 0x3a, 0x4f, 0x20, 0x46, 0xec, 0xd3, 0xfb, 0x96, 0x73, 0x2e, 0x4d, 0x8b, 0x12, 0xe8, 0x58, 0x4f, 0x20, 0x46, 0xec, 0xd3, 0xfb, 0x96, 0x73, 0x2e, 0x4d, 0x8b, 0x12, 0xe8, 0x58, 0xc2, 0x71,
0xc2, 0x71, 0x44, 0x71, 0x55, 0x89, 0xcd, 0xcd, 0x58, 0x62, 0xff, 0x9c, 0x83, 0x0a, 0xd7, 0x1e, 0x44, 0x71, 0x55, 0x8b, 0xcd, 0xcd, 0xd8, 0x62, 0xff, 0x94, 0x83, 0x0a, 0xd7, 0x1e, 0x76, 0xed,
0x56, 0xed, 0x6f, 0x41, 0xd5, 0x4e, 0x9e, 0x49, 0x5a, 0x71, 0x53, 0x0a, 0x4c, 0x67, 0x29, 0x4e, 0x6f, 0x41, 0xd5, 0x4e, 0x9e, 0x49, 0x5a, 0x71, 0x53, 0x0a, 0x4c, 0x67, 0x29, 0x4e, 0xd3, 0x72,
0xd3, 0x72, 0xe6, 0x53, 0x8b, 0xd8, 0x66, 0xc4, 0x9c, 0x4b, 0x33, 0xdf, 0x4b, 0x22, 0x71, 0x9a, 0xe6, 0x53, 0x8b, 0xd8, 0x66, 0xc4, 0x9c, 0x4b, 0x33, 0xdf, 0x4b, 0x22, 0x71, 0x9a, 0x96, 0xd7,
0x96, 0xdf, 0xc5, 0xa7, 0x3c, 0xda, 0xb2, 0xf3, 0x46, 0x77, 0xf1, 0xfb, 0x1c, 0x88, 0x03, 0xdc, 0xe2, 0x53, 0x1e, 0x6d, 0x39, 0x79, 0xa3, 0x5a, 0xfc, 0x3e, 0x07, 0xe2, 0x00, 0x77, 0xd5, 0x89,
0x55, 0x27, 0x9e, 0x9f, 0xed, 0xc4, 0xe8, 0x0e, 0x2c, 0xf2, 0xf6, 0xe8, 0xf6, 0xfc, 0x70, 0x3c, 0xe7, 0x67, 0x3b, 0x31, 0xba, 0x03, 0x8b, 0x7c, 0x3c, 0xba, 0x3d, 0x3f, 0x5c, 0x4f, 0x0a, 0x62,
0x29, 0x88, 0x46, 0x8a, 0x46, 0xc3, 0xc6, 0xe2, 0x7b, 0x29, 0x0c, 0x1e, 0xa3, 0x54, 0x7f, 0x01, 0x90, 0xa2, 0xd1, 0xb0, 0xb1, 0xf8, 0x41, 0x0a, 0x83, 0xc7, 0x28, 0xd5, 0x5f, 0x00, 0xc0, 0xe1,
0x00, 0x87, 0x27, 0x3f, 0x21, 0x46, 0x10, 0xad, 0xeb, 0xc7, 0x79, 0x5e, 0x6f, 0xe5, 0x16, 0x29, 0xc9, 0x4f, 0x88, 0x11, 0x44, 0xeb, 0xfa, 0x75, 0x9e, 0xf7, 0x5b, 0x79, 0x8b, 0x14, 0xab, 0x6f,
0x46, 0xdf, 0xdc, 0x58, 0xbd, 0x4d, 0xe0, 0x70, 0x8a, 0x12, 0xb5, 0xa0, 0x1c, 0x8d, 0xf8, 0xb2, 0x6e, 0xac, 0xdf, 0x26, 0x70, 0x38, 0x45, 0x89, 0x5a, 0x50, 0x8e, 0x56, 0x7c, 0xd9, 0x4b, 0x56,
0x96, 0xac, 0x48, 0xb6, 0x72, 0xb4, 0x07, 0xe0, 0x98, 0x26, 0x95, 0x3a, 0xf3, 0xd7, 0xa6, 0x8e, 0x24, 0x5b, 0x39, 0xba, 0x07, 0xe0, 0x98, 0x26, 0x95, 0x3a, 0xf3, 0xd7, 0xa6, 0x8e, 0x06, 0xf9,
0x06, 0xf9, 0x9e, 0x65, 0x8a, 0xa3, 0x97, 0xb5, 0xaf, 0x85, 0xe9, 0xff, 0x70, 0xbf, 0x7d, 0x39, 0x9e, 0x65, 0x8a, 0xa3, 0x97, 0xb5, 0xaf, 0x85, 0xe9, 0xff, 0x70, 0xbf, 0x7d, 0x39, 0x6c, 0xbc,
0x6c, 0xbc, 0x36, 0x6d, 0x39, 0xf6, 0x07, 0x1e, 0x61, 0xcd, 0x87, 0xfb, 0x6d, 0xcc, 0x99, 0xaf, 0x31, 0xed, 0x72, 0xec, 0x0f, 0x3c, 0xc2, 0x9a, 0x0f, 0xf7, 0xdb, 0x98, 0x33, 0x5f, 0x15, 0x8c,
0x0a, 0x46, 0x71, 0xc6, 0x60, 0x6c, 0x01, 0xc8, 0x53, 0x73, 0xee, 0x1b, 0x41, 0x20, 0xc2, 0x75, 0xe2, 0x8c, 0xc1, 0xd8, 0x02, 0x90, 0xa7, 0xe6, 0xdc, 0x37, 0x82, 0x40, 0x84, 0xd7, 0x9d, 0xbd,
0x67, 0x2f, 0xc2, 0xe0, 0x04, 0x15, 0x62, 0xb0, 0x62, 0x50, 0x22, 0x7e, 0xf3, 0x70, 0x31, 0x5f, 0x08, 0x83, 0x13, 0x54, 0x88, 0xc1, 0x8a, 0x41, 0x89, 0xf8, 0xcd, 0xc3, 0xc5, 0x7c, 0xbd, 0xeb,
0xef, 0x7a, 0xb5, 0x92, 0x98, 0x0f, 0xbf, 0x92, 0xad, 0x3a, 0x71, 0x36, 0xed, 0x55, 0xa9, 0x66, 0xd5, 0x4a, 0x62, 0x3f, 0xfc, 0x4a, 0xb6, 0xee, 0xc4, 0xd9, 0xb4, 0xd7, 0xa5, 0x9a, 0x95, 0x9d,
0x65, 0x67, 0x5c, 0x18, 0x9e, 0x94, 0x8f, 0x5c, 0x58, 0x31, 0xe5, 0xb8, 0x16, 0x2b, 0x2d, 0xcf, 0x71, 0x61, 0x78, 0x52, 0x3e, 0x72, 0x61, 0xc5, 0x94, 0xeb, 0x5a, 0xac, 0xb4, 0x3c, 0xb3, 0xd2,
0xac, 0xf4, 0x26, 0x57, 0xd8, 0x1e, 0x17, 0x84, 0x27, 0x65, 0xa3, 0x1f, 0xc1, 0x5a, 0x08, 0x9c, 0x9b, 0x5c, 0x61, 0x7b, 0x5c, 0x10, 0x9e, 0x94, 0x8d, 0x7e, 0x04, 0x6b, 0x21, 0x70, 0x72, 0x67,
0x9c, 0x99, 0x6b, 0x20, 0x3c, 0x55, 0xe7, 0x53, 0x7c, 0x7b, 0x2a, 0x15, 0xfe, 0x04, 0x09, 0xc8, 0xae, 0x81, 0xf0, 0x54, 0x9d, 0x6f, 0xf1, 0xed, 0xa9, 0x54, 0xf8, 0x73, 0x24, 0x20, 0x13, 0x8a,
0x84, 0xa2, 0x1d, 0xf4, 0x96, 0x8a, 0x28, 0xec, 0xdf, 0xce, 0x76, 0x8a, 0x38, 0xfb, 0x9b, 0xc9, 0x76, 0x30, 0x5b, 0x2a, 0xa2, 0xb1, 0x7f, 0x3b, 0xdb, 0x29, 0xe2, 0xec, 0x6f, 0x26, 0x67, 0x4a,
0x9e, 0x12, 0xcd, 0x8d, 0xb2, 0x9d, 0x48, 0xd9, 0xe8, 0x02, 0x2a, 0xba, 0xe3, 0xb8, 0xbe, 0x1e, 0xb4, 0x37, 0xca, 0x71, 0x22, 0x65, 0xa3, 0x0b, 0xa8, 0xe8, 0x8e, 0xe3, 0xfa, 0x7a, 0xb0, 0xc5,
0x4c, 0xf1, 0x0b, 0x42, 0xd5, 0xf6, 0xcc, 0xaa, 0xb6, 0x63, 0x19, 0x63, 0x3d, 0x2c, 0x81, 0xc1, 0x2f, 0x08, 0x55, 0xdb, 0x33, 0xab, 0xda, 0x8e, 0x65, 0x8c, 0xcd, 0xb0, 0x04, 0x06, 0x27, 0x55,
0x49, 0x55, 0xe8, 0x29, 0x2c, 0xb9, 0x4f, 0x1d, 0x42, 0x31, 0x39, 0x25, 0x94, 0x38, 0x7c, 0xe5, 0xa1, 0xa7, 0xb0, 0xe4, 0x3e, 0x75, 0x08, 0xc5, 0xe4, 0x94, 0x50, 0xe2, 0xf0, 0x2b, 0x5f, 0x55,
0xab, 0x0a, 0xed, 0x5f, 0xcf, 0xa8, 0x3d, 0xc5, 0x1c, 0xa7, 0x74, 0x1a, 0xce, 0xf0, 0xb8, 0x16, 0x68, 0xff, 0x7a, 0x46, 0xed, 0x29, 0xe6, 0x38, 0xa5, 0xd3, 0x70, 0x86, 0xc7, 0xb5, 0xf0, 0xdb,
0xbe, 0x1d, 0x9f, 0x5a, 0x8e, 0x6e, 0x5b, 0x3f, 0x23, 0x94, 0xd5, 0x16, 0xe3, 0xed, 0xf8, 0x5e, 0xf1, 0xa9, 0xe5, 0xe8, 0xb6, 0xf5, 0x33, 0x42, 0x59, 0x6d, 0x31, 0xbe, 0x1d, 0xdf, 0x8b, 0xa0,
0x04, 0xc5, 0x09, 0x0a, 0xf4, 0x0d, 0xa8, 0x18, 0x76, 0x8f, 0xf9, 0x24, 0x58, 0x8e, 0x97, 0xc4, 0x38, 0x41, 0x81, 0xbe, 0x01, 0x15, 0xc3, 0xee, 0x31, 0x9f, 0x04, 0x97, 0xe3, 0x25, 0x51, 0x41,
0x0d, 0x8a, 0xce, 0xb7, 0x13, 0xa3, 0x70, 0x92, 0x6e, 0xed, 0x9b, 0x50, 0xf9, 0x3f, 0xfb, 0x22, 0xd1, 0xf9, 0x76, 0x62, 0x14, 0x4e, 0xd2, 0xad, 0x7d, 0x13, 0x2a, 0xff, 0xe5, 0x5c, 0xe4, 0x73,
0xef, 0xab, 0xe3, 0x0e, 0x9d, 0xa9, 0xaf, 0xfe, 0x2d, 0x07, 0x8b, 0x69, 0x37, 0x44, 0xd3, 0x98, 0x75, 0xdc, 0xa1, 0x33, 0xcd, 0xd5, 0xbf, 0xe6, 0x60, 0x31, 0xed, 0x86, 0x68, 0x1b, 0x53, 0xa6,
0x32, 0xf5, 0x09, 0x22, 0xac, 0x95, 0xf9, 0xa9, 0xb5, 0x52, 0x96, 0xa4, 0xf9, 0x4f, 0x53, 0x92, 0x3e, 0x41, 0x84, 0xbd, 0x32, 0x3f, 0xb5, 0x57, 0xca, 0x96, 0x34, 0xff, 0x2a, 0x2d, 0x69, 0x0b,
0xb6, 0x00, 0x74, 0xcf, 0x0a, 0xab, 0x51, 0x50, 0xdd, 0xa2, 0x7a, 0x12, 0x2f, 0xe5, 0x38, 0x41, 0x40, 0xf7, 0xac, 0xb0, 0x1b, 0x05, 0xdd, 0x2d, 0xea, 0x27, 0xf1, 0xa5, 0x1c, 0x27, 0xa8, 0x78,
0xc5, 0x03, 0x66, 0xb8, 0x8e, 0x4f, 0x5d, 0xdb, 0x26, 0x54, 0x54, 0xb0, 0x52, 0x10, 0xb0, 0x9d, 0xc0, 0x0c, 0xd7, 0xf1, 0xa9, 0x6b, 0xdb, 0x84, 0x8a, 0x0e, 0x56, 0x0a, 0x02, 0xb6, 0x13, 0x41,
0x08, 0x8a, 0x13, 0x14, 0x7c, 0xc7, 0x3d, 0xb1, 0x5d, 0xe3, 0x5c, 0xb8, 0x20, 0xbc, 0x7d, 0xa2, 0x71, 0x82, 0x82, 0xdf, 0x71, 0x4f, 0x6c, 0xd7, 0x38, 0x17, 0x2e, 0x08, 0xab, 0x4f, 0xf4, 0xae,
0x76, 0x95, 0x82, 0x1d, 0x57, 0x9b, 0xc0, 0xe2, 0x2b, 0x38, 0xd4, 0x43, 0x48, 0x6f, 0xa5, 0xe8, 0x52, 0x70, 0xc7, 0xd5, 0x26, 0xb0, 0xf8, 0x0a, 0x0e, 0xf5, 0x10, 0xd2, 0xb7, 0x52, 0x74, 0x37,
0x6e, 0xe0, 0x00, 0x25, 0x5a, 0x1b, 0x67, 0x3b, 0xbc, 0x7a, 0x0b, 0xca, 0xd8, 0x75, 0xfd, 0x23, 0x70, 0x80, 0x12, 0x5d, 0x1b, 0x67, 0x3b, 0xbc, 0x7a, 0x0b, 0xca, 0xd8, 0x75, 0xfd, 0x23, 0xdd,
0xdd, 0x3f, 0x63, 0xa8, 0x01, 0x05, 0x8f, 0xff, 0x90, 0x4f, 0x0e, 0xe2, 0x15, 0x47, 0x60, 0x70, 0x3f, 0x63, 0xa8, 0x01, 0x05, 0x8f, 0xff, 0x90, 0x4f, 0x0e, 0xe2, 0x15, 0x47, 0x60, 0x70, 0x00,
0x00, 0x57, 0x7f, 0xa3, 0xc0, 0xab, 0x53, 0x5f, 0x00, 0xb8, 0x23, 0x8d, 0xe8, 0x4b, 0x9a, 0x14, 0x57, 0x7f, 0xa3, 0xc0, 0xeb, 0x53, 0x5f, 0x00, 0xb8, 0x23, 0x8d, 0xe8, 0x4b, 0x9a, 0x14, 0x39,
0x39, 0x32, 0xa6, 0xc3, 0x09, 0x2a, 0xde, 0xfe, 0x53, 0xcf, 0x06, 0xe3, 0xed, 0x3f, 0xa5, 0x0d, 0x32, 0xa6, 0xc3, 0x09, 0x2a, 0x3e, 0xfe, 0x53, 0xcf, 0x06, 0xe3, 0xe3, 0x3f, 0xa5, 0x0d, 0xa7,
0xa7, 0x69, 0xd5, 0xff, 0xe6, 0xa0, 0x78, 0xec, 0xeb, 0x7e, 0x8f, 0xa1, 0x27, 0x50, 0xe2, 0xb7, 0x69, 0xd5, 0x7f, 0xe7, 0xa0, 0x78, 0xec, 0xeb, 0x7e, 0x8f, 0xa1, 0x27, 0x50, 0xe2, 0x55, 0x68,
0xd0, 0xd4, 0x7d, 0x5d, 0x68, 0xce, 0xfc, 0x1e, 0x17, 0x8e, 0x51, 0x71, 0xe7, 0x0b, 0x21, 0x38, 0xea, 0xbe, 0x2e, 0x34, 0x67, 0x7e, 0x8f, 0x0b, 0xd7, 0xa8, 0x78, 0xf2, 0x85, 0x10, 0x1c, 0x49,
0x92, 0xc8, 0x57, 0x5e, 0x26, 0xf4, 0x48, 0xf3, 0xa2, 0xd2, 0x15, 0x68, 0xc7, 0x12, 0xcb, 0xc7, 0xe4, 0x57, 0x5e, 0x26, 0xf4, 0x48, 0xf3, 0xa2, 0xd6, 0x15, 0x68, 0xc7, 0x12, 0xcb, 0xd7, 0xfe,
0xfe, 0x2e, 0x61, 0x4c, 0xef, 0x84, 0x39, 0x1b, 0x8d, 0xfd, 0x07, 0x01, 0x18, 0x87, 0x78, 0xf4, 0x2e, 0x61, 0x4c, 0xef, 0x84, 0x39, 0x1b, 0xad, 0xfd, 0x07, 0x01, 0x18, 0x87, 0x78, 0xf4, 0x1e,
0x0e, 0x14, 0x29, 0xd1, 0x59, 0x34, 0x8c, 0xd4, 0x43, 0x91, 0x58, 0x40, 0x2f, 0x87, 0x8d, 0x05, 0x14, 0x29, 0xd1, 0x59, 0xb4, 0x8c, 0xd4, 0x43, 0x91, 0x58, 0x40, 0x2f, 0x87, 0x8d, 0x05, 0x29,
0x29, 0x5c, 0x7c, 0x63, 0x49, 0x8d, 0x1e, 0xc3, 0x0d, 0x93, 0xf8, 0xba, 0x65, 0x07, 0x33, 0x48, 0x5c, 0x7c, 0x63, 0x49, 0x8d, 0x1e, 0xc3, 0x0d, 0x93, 0xf8, 0xba, 0x65, 0x07, 0x3b, 0x48, 0xe6,
0xe6, 0xf7, 0x8d, 0x40, 0x58, 0x3b, 0x60, 0xd5, 0x2a, 0xdc, 0x26, 0xf9, 0x81, 0x43, 0x81, 0xfc, 0xf7, 0x8d, 0x40, 0x58, 0x3b, 0x60, 0xd5, 0x2a, 0xdc, 0x26, 0xf9, 0x81, 0x43, 0x81, 0xbc, 0xde,
0xbe, 0x19, 0xae, 0x19, 0x3c, 0xb6, 0x15, 0xe2, 0xfb, 0xb6, 0xe3, 0x9a, 0x04, 0x0b, 0x8c, 0xfa, 0x0c, 0xd7, 0x0c, 0x1e, 0xdb, 0x0a, 0x71, 0xbd, 0xed, 0xb8, 0x26, 0xc1, 0x02, 0xa3, 0x3e, 0x53,
0x4c, 0x81, 0x4a, 0x20, 0x69, 0x47, 0xef, 0x31, 0x82, 0x36, 0xa3, 0x53, 0x04, 0xe1, 0x0e, 0x1b, 0xa0, 0x12, 0x48, 0xda, 0xd1, 0x7b, 0x8c, 0xa0, 0xcd, 0xe8, 0x14, 0x41, 0xb8, 0xc3, 0x01, 0x39,
0xe4, 0xfc, 0x7b, 0x03, 0x8f, 0x5c, 0x0e, 0x1b, 0x65, 0x41, 0xc6, 0x3f, 0xa2, 0x03, 0x24, 0x7c, 0xff, 0xc1, 0xc0, 0x23, 0x97, 0xc3, 0x46, 0x59, 0x90, 0xf1, 0x8f, 0xe8, 0x00, 0x09, 0x1f, 0xe5,
0x94, 0xbb, 0xc6, 0x47, 0xaf, 0x43, 0x41, 0xcc, 0x7b, 0xd2, 0x99, 0xd1, 0x78, 0x27, 0x66, 0x42, 0xae, 0xf1, 0xd1, 0x9b, 0x50, 0x10, 0xfb, 0x9e, 0x74, 0x66, 0xb4, 0xde, 0x89, 0x9d, 0x10, 0x07,
0x1c, 0xe0, 0xd4, 0xdf, 0xe7, 0xa0, 0x9a, 0x3a, 0x5c, 0x86, 0x11, 0x2b, 0xda, 0xe1, 0x72, 0x19, 0x38, 0xf5, 0xd3, 0x1c, 0x54, 0x53, 0x87, 0xcb, 0xb0, 0x62, 0x45, 0x77, 0xb8, 0x5c, 0x86, 0x77,
0xde, 0x05, 0xa6, 0x3f, 0x91, 0xfe, 0x00, 0x8a, 0x06, 0x3f, 0x5f, 0xf8, 0x46, 0xbd, 0x39, 0x4b, 0x81, 0xe9, 0x4f, 0xa4, 0x3f, 0x80, 0xa2, 0xc1, 0xcf, 0x17, 0xbe, 0x51, 0x6f, 0xce, 0x12, 0x0a,
0x28, 0x84, 0x67, 0xe2, 0x4c, 0x12, 0x9f, 0x0c, 0x4b, 0x81, 0x68, 0x0f, 0x56, 0x28, 0xf1, 0xe9, 0xe1, 0x99, 0x38, 0x93, 0xc4, 0x27, 0xc3, 0x52, 0x20, 0xda, 0x83, 0x15, 0x4a, 0x7c, 0x3a, 0xd8,
0x60, 0xfb, 0xd4, 0x27, 0x34, 0x39, 0x74, 0x16, 0xe2, 0x21, 0x04, 0x8f, 0x13, 0xe0, 0x49, 0x1e, 0x3e, 0xf5, 0x09, 0x4d, 0x2e, 0x9d, 0x85, 0x78, 0x09, 0xc1, 0xe3, 0x04, 0x78, 0x92, 0x27, 0xec,
0xd5, 0x86, 0x79, 0x3e, 0x20, 0x70, 0xb7, 0xb3, 0xd4, 0xd3, 0x5a, 0xe4, 0xf6, 0x90, 0x39, 0xc4, 0x90, 0xc5, 0x57, 0xe8, 0x90, 0xaa, 0x0d, 0xf3, 0x7c, 0xc9, 0xe0, 0xa1, 0x63, 0xa9, 0xe7, 0xb9,
0x73, 0xef, 0x38, 0xba, 0xe3, 0x06, 0xc9, 0x5e, 0x88, 0xbd, 0xf3, 0x80, 0x03, 0x71, 0x80, 0xbb, 0x28, 0x74, 0xa1, 0x01, 0x21, 0x9e, 0x7b, 0xd8, 0xd1, 0x1d, 0x37, 0x28, 0x98, 0x42, 0xec, 0xe1,
0xb3, 0xca, 0x17, 0xd1, 0x5f, 0x3f, 0x6f, 0xcc, 0x3d, 0x7b, 0xde, 0x98, 0xfb, 0xf0, 0xb9, 0x5c, 0x07, 0x1c, 0x88, 0x03, 0xdc, 0x9d, 0x55, 0x7e, 0x99, 0xfd, 0xf5, 0xf3, 0xc6, 0xdc, 0xb3, 0xe7,
0x4a, 0x7f, 0x08, 0xe5, 0x78, 0x1c, 0xf9, 0x8c, 0x55, 0xaa, 0x3f, 0x86, 0x12, 0xcf, 0xa4, 0x70, 0x8d, 0xb9, 0x8f, 0x9f, 0xcb, 0x8b, 0xed, 0x0f, 0xa1, 0x1c, 0xaf, 0x34, 0x5f, 0xb0, 0x4a, 0xf5,
0x8c, 0xbe, 0xa6, 0x79, 0xa4, 0xcb, 0x7a, 0x2e, 0x4b, 0x59, 0x57, 0xb7, 0x20, 0x78, 0xb5, 0xe6, 0xc7, 0x50, 0xe2, 0xd9, 0x18, 0xae, 0xe2, 0xd7, 0x0c, 0xa0, 0xf4, 0x68, 0xc8, 0x65, 0x19, 0x0d,
0x95, 0xd0, 0xf2, 0x49, 0x37, 0x55, 0x09, 0xf7, 0x39, 0x00, 0x07, 0xf0, 0xc4, 0x1e, 0xfe, 0x2b, 0xea, 0x16, 0x04, 0x2f, 0xdf, 0xbc, 0x9b, 0x5a, 0x3e, 0xe9, 0xa6, 0xba, 0xe9, 0x3e, 0x07, 0xe0,
0x05, 0x40, 0xec, 0x1b, 0xbb, 0x7d, 0xbe, 0x23, 0xae, 0xc3, 0x3c, 0x2f, 0xb1, 0xe3, 0x86, 0x89, 0x00, 0x9e, 0xb8, 0xcb, 0xff, 0x4a, 0x01, 0x10, 0x77, 0x96, 0xdd, 0x3e, 0xbf, 0x67, 0xae, 0xc3,
0x2b, 0x20, 0x30, 0xe8, 0x21, 0x14, 0x5d, 0x31, 0xa6, 0xc8, 0x07, 0xca, 0xb7, 0xa6, 0x66, 0x8d, 0x3c, 0x8f, 0xc0, 0xb8, 0x61, 0xa2, 0x8c, 0x04, 0x06, 0x3d, 0x84, 0xa2, 0x2b, 0x56, 0x1d, 0xf9,
0xfc, 0x87, 0x54, 0x13, 0xeb, 0x4f, 0x77, 0x2f, 0x7c, 0xe2, 0x70, 0x1b, 0xe3, 0x8c, 0x09, 0x66, 0xc8, 0xf9, 0xce, 0xd4, 0xcc, 0x93, 0xff, 0xd4, 0x6a, 0x62, 0xfd, 0xe9, 0xee, 0x85, 0x4f, 0x1c,
0x1d, 0x2c, 0x85, 0x69, 0x6f, 0xbc, 0x78, 0x59, 0x9f, 0xfb, 0xe8, 0x65, 0x7d, 0xee, 0x9f, 0x2f, 0x6e, 0x63, 0x9c, 0x75, 0xc1, 0xbe, 0x84, 0xa5, 0x30, 0xed, 0xad, 0x17, 0x2f, 0xeb, 0x73, 0x9f,
0xeb, 0x73, 0x1f, 0x8c, 0xea, 0xca, 0x8b, 0x51, 0x5d, 0xf9, 0x68, 0x54, 0x57, 0xfe, 0x3d, 0xaa, 0xbc, 0xac, 0xcf, 0xfd, 0xe3, 0x65, 0x7d, 0xee, 0xa3, 0x51, 0x5d, 0x79, 0x31, 0xaa, 0x2b, 0x9f,
0x2b, 0xcf, 0x3e, 0xae, 0xcf, 0x3d, 0xce, 0xf5, 0x37, 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0xf7, 0x8c, 0xea, 0xca, 0xa7, 0xa3, 0xba, 0xf2, 0xec, 0xb3, 0xfa, 0xdc, 0xe3, 0x5c, 0x7f, 0xf3, 0x3f,
0x85, 0xa4, 0xbc, 0xd2, 0x1b, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0xff, 0x09, 0x1d, 0xf9, 0x74, 0x16, 0x1c, 0x00, 0x00,
} }

View File

@ -607,6 +607,12 @@ message StatusDetails {
// +optional // +optional
optional string kind = 3; optional string kind = 3;
// UID of the resource.
// (when there is a single resource which can be described).
// More info: http://kubernetes.io/docs/user-guide/identifiers#uids
// +optional
optional string uid = 6;
// The Causes array includes more details associated with the StatusReason // The Causes array includes more details associated with the StatusReason
// failure. Not all StatusReasons may provide detailed causes. // failure. Not all StatusReasons may provide detailed causes.
// +optional // +optional

View File

@ -425,6 +425,11 @@ type StatusDetails struct {
// More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds // More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds
// +optional // +optional
Kind string `json:"kind,omitempty" protobuf:"bytes,3,opt,name=kind"` Kind string `json:"kind,omitempty" protobuf:"bytes,3,opt,name=kind"`
// UID of the resource.
// (when there is a single resource which can be described).
// More info: http://kubernetes.io/docs/user-guide/identifiers#uids
// +optional
UID types.UID `json:"uid,omitempty" protobuf:"bytes,6,opt,name=uid,casttype=k8s.io/apimachinery/pkg/types.UID"`
// The Causes array includes more details associated with the StatusReason // The Causes array includes more details associated with the StatusReason
// failure. Not all StatusReasons may provide detailed causes. // failure. Not all StatusReasons may provide detailed causes.
// +optional // +optional

View File

@ -270,6 +270,7 @@ var map_StatusDetails = map[string]string{
"name": "The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).", "name": "The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).",
"group": "The group attribute of the resource associated with the status StatusReason.", "group": "The group attribute of the resource associated with the status StatusReason.",
"kind": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds", "kind": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds",
"uid": "UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids",
"causes": "The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.", "causes": "The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.",
"retryAfterSeconds": "If specified, the time in seconds before the operation should be retried.", "retryAfterSeconds": "If specified, the time in seconds before the operation should be retried.",
} }

View File

@ -1059,7 +1059,7 @@ func DeleteCollection(r rest.CollectionDeleter, checkBody bool, scope RequestSco
type resultFunc func() (runtime.Object, error) type resultFunc func() (runtime.Object, error)
// finishRequest makes a given resultFunc asynchronous and handles errors returned by the response. // finishRequest makes a given resultFunc asynchronous and handles errors returned by the response.
// Any api.Status object returned is considered an "error", which interrupts the normal response flow. // An api.Status object with status != success is considered an "error", which interrupts the normal response flow.
func finishRequest(timeout time.Duration, fn resultFunc) (result runtime.Object, err error) { func finishRequest(timeout time.Duration, fn resultFunc) (result runtime.Object, err error) {
// these channels need to be buffered to prevent the goroutine below from hanging indefinitely // these channels need to be buffered to prevent the goroutine below from hanging indefinitely
// when the select statement reads something other than the one the goroutine sends on. // when the select statement reads something other than the one the goroutine sends on.
@ -1083,8 +1083,10 @@ func finishRequest(timeout time.Duration, fn resultFunc) (result runtime.Object,
select { select {
case result = <-ch: case result = <-ch:
if status, ok := result.(*metav1.Status); ok { if status, ok := result.(*metav1.Status); ok {
if status.Status != metav1.StatusSuccess {
return nil, errors.FromObject(status) return nil, errors.FromObject(status)
} }
}
return result, nil return result, nil
case err = <-errCh: case err = <-errCh:
return nil, err return nil, err

View File

@ -597,3 +597,62 @@ func TestParseTimeout(t *testing.T) {
t.Errorf("10s timeout produced: %v", d) t.Errorf("10s timeout produced: %v", d)
} }
} }
func TestFinishRequest(t *testing.T) {
exampleObj := &example.Pod{}
exampleErr := fmt.Errorf("error")
successStatusObj := &metav1.Status{Status: metav1.StatusSuccess, Message: "success message"}
errorStatusObj := &metav1.Status{Status: metav1.StatusFailure, Message: "error message"}
testcases := []struct {
timeout time.Duration
fn resultFunc
expectedObj runtime.Object
expectedErr error
}{
{
// Expected obj is returned.
timeout: time.Second,
fn: func() (runtime.Object, error) {
return exampleObj, nil
},
expectedObj: exampleObj,
expectedErr: nil,
},
{
// Expected error is returned.
timeout: time.Second,
fn: func() (runtime.Object, error) {
return nil, exampleErr
},
expectedObj: nil,
expectedErr: exampleErr,
},
{
// Successful status object is returned as expected.
timeout: time.Second,
fn: func() (runtime.Object, error) {
return successStatusObj, nil
},
expectedObj: successStatusObj,
expectedErr: nil,
},
{
// Error status object is converted to StatusError.
timeout: time.Second,
fn: func() (runtime.Object, error) {
return errorStatusObj, nil
},
expectedObj: nil,
expectedErr: apierrors.FromObject(errorStatusObj),
},
}
for i, tc := range testcases {
obj, err := finishRequest(tc.timeout, tc.fn)
if (err == nil && tc.expectedErr != nil) || (err != nil && tc.expectedErr == nil) || (err != nil && tc.expectedErr != nil && err.Error() != tc.expectedErr.Error()) {
t.Errorf("%d: unexpected err. expected: %v, got: %v", i, tc.expectedErr, err)
}
if !apiequality.Semantic.DeepEqual(obj, tc.expectedObj) {
t.Errorf("%d: unexpected obj. expected %#v, got %#v", tc.expectedObj, obj)
}
}
}

View File

@ -992,7 +992,20 @@ func (e *Store) finalizeDelete(obj runtime.Object, runHooks bool) (runtime.Objec
} }
return obj, nil return obj, nil
} }
return &metav1.Status{Status: metav1.StatusSuccess}, nil // Return information about the deleted object, which enables clients to
// verify that the object was actually deleted and not waiting for finalizers.
accessor, err := meta.Accessor(obj)
if err != nil {
return nil, err
}
details := &metav1.StatusDetails{
Name: accessor.GetName(),
Group: e.QualifiedResource.Group,
Kind: e.QualifiedResource.Resource, // Yes we set Kind field to resource.
UID: accessor.GetUID(),
}
status := &metav1.Status{Status: metav1.StatusSuccess, Details: details}
return status, nil
} }
// Watch makes a matcher for the given label and field, and calls // Watch makes a matcher for the given label and field, and calls

View File

@ -1542,3 +1542,29 @@ func newTestGenericStoreRegistry(t *testing.T, scheme *runtime.Scheme, hasCacheE
Storage: s, Storage: s,
} }
} }
func TestFinalizeDelete(t *testing.T) {
// Verify that it returns the expected Status.
_, s := NewTestGenericStoreRegistry(t)
obj := &example.Pod{
ObjectMeta: metav1.ObjectMeta{Name: "foo", UID: "random-uid"},
}
result, err := s.finalizeDelete(obj, false)
if err != nil {
t.Fatalf("unexpected err: %s", err)
}
returnedObj := result.(*metav1.Status)
expectedObj := &metav1.Status{
Status: metav1.StatusSuccess,
Details: &metav1.StatusDetails{
Name: "foo",
Group: s.QualifiedResource.Group,
Kind: s.QualifiedResource.Resource,
UID: "random-uid",
},
}
if !apiequality.Semantic.DeepEqual(expectedObj, returnedObj) {
t.Errorf("unexpected obj. expected %#v, got %#v", expectedObj, returnedObj)
}
}