Commit 8088ea42 authored by Kubernetes Submit Queue's avatar Kubernetes Submit Queue Committed by GitHub

Merge pull request #39157 from lukaszo/ds-generation

Automatic merge from submit-queue DaemonSet ObservedGeneration Extracting ObserverdGeneration part from #31693. It also implements #7328 for DaemonSets. cc @kargakis
parents ed5a2365 a36a9787
...@@ -35046,6 +35046,11 @@ ...@@ -35046,6 +35046,11 @@
"description": "NumberReady is the number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.", "description": "NumberReady is the number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.",
"type": "integer", "type": "integer",
"format": "int32" "format": "int32"
},
"observedGeneration": {
"description": "ObservedGeneration is the most recent generation observed by the daemon set controller.",
"type": "integer",
"format": "int64"
} }
} }
}, },
...@@ -8636,6 +8636,11 @@ ...@@ -8636,6 +8636,11 @@
"type": "integer", "type": "integer",
"format": "int32", "format": "int32",
"description": "NumberReady is the number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready." "description": "NumberReady is the number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready."
},
"observedGeneration": {
"type": "integer",
"format": "int64",
"description": "ObservedGeneration is the most recent generation observed by the daemon set controller."
} }
} }
}, },
......
...@@ -654,6 +654,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } ...@@ -654,6 +654,13 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
<td class="tableblock halign-left valign-top"><p class="tableblock">integer (int32)</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">integer (int32)</p></td>
<td class="tableblock halign-left valign-top"></td> <td class="tableblock halign-left valign-top"></td>
</tr> </tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">observedGeneration</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">ObservedGeneration is the most recent generation observed by the daemon set controller.</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">integer (int64)</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
</tbody> </tbody>
</table> </table>
...@@ -6926,7 +6933,7 @@ Both these may change in the future. Incoming requests are matched against the h ...@@ -6926,7 +6933,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 2016-12-21 12:26:48 UTC Last updated 2017-01-02 13:56:15 UTC
</div> </div>
</div> </div>
</body> </body>
......
...@@ -11452,6 +11452,11 @@ ...@@ -11452,6 +11452,11 @@
"description": "NumberReady is the number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.", "description": "NumberReady is the number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.",
"type": "integer", "type": "integer",
"format": "int32" "format": "int32"
},
"observedGeneration": {
"description": "ObservedGeneration is the most recent generation observed by the daemon set controller.",
"type": "integer",
"format": "int64"
} }
} }
}, },
......
...@@ -478,6 +478,10 @@ type DaemonSetStatus struct { ...@@ -478,6 +478,10 @@ type DaemonSetStatus struct {
// NumberReady is the number of nodes that should be running the daemon pod and have one // NumberReady is the number of nodes that should be running the daemon pod and have one
// or more of the daemon pod running and ready. // or more of the daemon pod running and ready.
NumberReady int32 NumberReady int32
// ObservedGeneration is the most recent generation observed by the daemon set controller.
// +optional
ObservedGeneration int64
} }
// +genclient=true // +genclient=true
......
...@@ -756,6 +756,9 @@ func (m *DaemonSetStatus) MarshalTo(data []byte) (int, error) { ...@@ -756,6 +756,9 @@ func (m *DaemonSetStatus) MarshalTo(data []byte) (int, error) {
data[i] = 0x20 data[i] = 0x20
i++ i++
i = encodeVarintGenerated(data, i, uint64(m.NumberReady)) i = encodeVarintGenerated(data, i, uint64(m.NumberReady))
data[i] = 0x28
i++
i = encodeVarintGenerated(data, i, uint64(m.ObservedGeneration))
return i, nil return i, nil
} }
...@@ -2955,6 +2958,7 @@ func (m *DaemonSetStatus) Size() (n int) { ...@@ -2955,6 +2958,7 @@ func (m *DaemonSetStatus) Size() (n int) {
n += 1 + sovGenerated(uint64(m.NumberMisscheduled)) n += 1 + sovGenerated(uint64(m.NumberMisscheduled))
n += 1 + sovGenerated(uint64(m.DesiredNumberScheduled)) n += 1 + sovGenerated(uint64(m.DesiredNumberScheduled))
n += 1 + sovGenerated(uint64(m.NumberReady)) n += 1 + sovGenerated(uint64(m.NumberReady))
n += 1 + sovGenerated(uint64(m.ObservedGeneration))
return n return n
} }
...@@ -3814,6 +3818,7 @@ func (this *DaemonSetStatus) String() string { ...@@ -3814,6 +3818,7 @@ func (this *DaemonSetStatus) String() string {
`NumberMisscheduled:` + fmt.Sprintf("%v", this.NumberMisscheduled) + `,`, `NumberMisscheduled:` + fmt.Sprintf("%v", this.NumberMisscheduled) + `,`,
`DesiredNumberScheduled:` + fmt.Sprintf("%v", this.DesiredNumberScheduled) + `,`, `DesiredNumberScheduled:` + fmt.Sprintf("%v", this.DesiredNumberScheduled) + `,`,
`NumberReady:` + fmt.Sprintf("%v", this.NumberReady) + `,`, `NumberReady:` + fmt.Sprintf("%v", this.NumberReady) + `,`,
`ObservedGeneration:` + fmt.Sprintf("%v", this.ObservedGeneration) + `,`,
`}`, `}`,
}, "") }, "")
return s return s
...@@ -5461,6 +5466,25 @@ func (m *DaemonSetStatus) Unmarshal(data []byte) error { ...@@ -5461,6 +5466,25 @@ func (m *DaemonSetStatus) Unmarshal(data []byte) error {
break break
} }
} }
case 5:
if wireType != 0 {
return fmt.Errorf("proto: wrong wireType = %d for field ObservedGeneration", wireType)
}
m.ObservedGeneration = 0
for shift := uint(0); ; shift += 7 {
if shift >= 64 {
return ErrIntOverflowGenerated
}
if iNdEx >= l {
return io.ErrUnexpectedEOF
}
b := data[iNdEx]
iNdEx++
m.ObservedGeneration |= (int64(b) & 0x7F) << shift
if b < 0x80 {
break
}
}
default: default:
iNdEx = preIndex iNdEx = preIndex
skippy, err := skipGenerated(data[iNdEx:]) skippy, err := skipGenerated(data[iNdEx:])
...@@ -12502,227 +12526,228 @@ var ( ...@@ -12502,227 +12526,228 @@ var (
) )
var fileDescriptorGenerated = []byte{ var fileDescriptorGenerated = []byte{
// 3546 bytes of a gzipped FileDescriptorProto // 3554 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe4, 0x5b, 0x4d, 0x6c, 0x1c, 0xc7, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe4, 0x5b, 0x4d, 0x6c, 0x1c, 0xc7,
0x95, 0x56, 0xcf, 0x70, 0x44, 0xf2, 0x8d, 0x48, 0x8a, 0x45, 0x9a, 0x1a, 0xd3, 0x36, 0x47, 0x6e, 0x95, 0x56, 0xcf, 0x70, 0x44, 0xf2, 0x8d, 0x48, 0x8a, 0x45, 0x9a, 0x1a, 0xd3, 0x36, 0x47, 0x6e,
0x63, 0x6d, 0x19, 0x90, 0x86, 0x2b, 0xed, 0xca, 0x6b, 0xcb, 0xb6, 0x6c, 0x0e, 0x29, 0x4a, 0xf4, 0x63, 0x6d, 0x19, 0x90, 0x86, 0x2b, 0xed, 0xca, 0x6b, 0xcb, 0xb6, 0x6c, 0x0e, 0x29, 0x4a, 0xf4,
0x92, 0xd2, 0xb8, 0x66, 0xa8, 0xf5, 0xda, 0x5e, 0x1b, 0xcd, 0x99, 0xe2, 0xb0, 0xc5, 0xfe, 0x73, 0x92, 0xd2, 0xb8, 0x66, 0xa8, 0xf5, 0xda, 0x5e, 0x1b, 0xcd, 0x99, 0xe2, 0xb0, 0xc5, 0xfe, 0x73,
0x77, 0x35, 0xcd, 0xb1, 0xb1, 0xb0, 0x81, 0xc5, 0x5e, 0xbd, 0xbe, 0x6d, 0x0e, 0xce, 0x21, 0x87, 0x77, 0x35, 0xcd, 0xb1, 0xb1, 0xb0, 0x81, 0xc5, 0x5e, 0x1d, 0xdf, 0x92, 0x83, 0x73, 0xc8, 0x21,
0x20, 0xa7, 0x18, 0x31, 0x10, 0xc0, 0xc7, 0x5c, 0xf2, 0xa3, 0x04, 0x09, 0xe0, 0x04, 0x08, 0x12, 0xc8, 0x29, 0x46, 0x0c, 0x04, 0xf0, 0x31, 0xa7, 0x24, 0x4a, 0x90, 0x00, 0x4e, 0x80, 0x20, 0x41,
0x04, 0x0e, 0x13, 0x33, 0x4e, 0xee, 0x41, 0x6e, 0xca, 0x25, 0xa8, 0xea, 0xea, 0xdf, 0xe9, 0x1e, 0xe0, 0x30, 0x31, 0xe3, 0xe4, 0x1e, 0xe4, 0xa6, 0x5c, 0x82, 0xaa, 0xae, 0xfe, 0x9d, 0xee, 0x91,
0x69, 0x86, 0x1a, 0x23, 0x40, 0x6e, 0x9c, 0xaa, 0xf7, 0xbe, 0xf7, 0x53, 0xd5, 0xef, 0xbd, 0xaa, 0x66, 0xa8, 0x31, 0x02, 0xe4, 0x36, 0x5d, 0xf5, 0xde, 0xf7, 0xde, 0xab, 0x9f, 0xf7, 0x5e, 0x55,
0x7a, 0x84, 0xe7, 0x77, 0x9f, 0x76, 0x2a, 0xaa, 0xb9, 0xb8, 0xeb, 0x6e, 0x11, 0xdb, 0x20, 0x94, 0xbd, 0x81, 0xe7, 0x77, 0x9f, 0x76, 0x2a, 0xaa, 0xb9, 0xb8, 0xeb, 0x6e, 0x11, 0xdb, 0x20, 0x94,
0x38, 0x8b, 0xd6, 0x6e, 0x7b, 0x51, 0xb1, 0x54, 0x67, 0x91, 0xec, 0x53, 0x62, 0x38, 0xaa, 0x69, 0x38, 0x8b, 0xd6, 0x6e, 0x7b, 0x51, 0xb1, 0x54, 0x67, 0x91, 0xec, 0x53, 0x62, 0x38, 0xaa, 0x69,
0x38, 0x8b, 0x7b, 0xe7, 0xb7, 0x08, 0x55, 0xce, 0x2f, 0xb6, 0x89, 0x41, 0x6c, 0x85, 0x92, 0x56, 0x38, 0x8b, 0x7b, 0xe7, 0xb7, 0x08, 0x55, 0xce, 0x2f, 0xb6, 0x89, 0x41, 0x6c, 0x85, 0x92, 0x56,
0xc5, 0xb2, 0x4d, 0x6a, 0xa2, 0x73, 0x1e, 0x7b, 0x25, 0x64, 0xaf, 0x58, 0xbb, 0xed, 0x0a, 0x63, 0xc5, 0xb2, 0x4d, 0x6a, 0xa2, 0x73, 0x1e, 0x7b, 0x25, 0x64, 0xaf, 0x58, 0xbb, 0xed, 0x0a, 0x63,
0xaf, 0x84, 0xec, 0x15, 0xc1, 0x3e, 0x7f, 0xae, 0xad, 0xd2, 0x1d, 0x77, 0xab, 0xd2, 0x34, 0xf5, 0xaf, 0x84, 0xec, 0x15, 0xc1, 0x3e, 0x7f, 0xae, 0xad, 0xd2, 0x1d, 0x77, 0xab, 0xd2, 0x34, 0xf5,
0xc5, 0xb6, 0xd9, 0x36, 0x17, 0x39, 0xca, 0x96, 0xbb, 0xcd, 0x7f, 0xf1, 0x1f, 0xfc, 0x2f, 0x0f, 0xc5, 0xb6, 0xd9, 0x36, 0x17, 0x39, 0xca, 0x96, 0xbb, 0xcd, 0xbf, 0xf8, 0x07, 0xff, 0xe5, 0xa1,
0x7d, 0xfe, 0x42, 0xa6, 0x72, 0x8b, 0x36, 0x71, 0x4c, 0xd7, 0x6e, 0x92, 0xa4, 0x46, 0xf3, 0x67, 0xcf, 0x5f, 0xc8, 0x54, 0x6e, 0xd1, 0x26, 0x8e, 0xe9, 0xda, 0x4d, 0x92, 0xd4, 0x68, 0xfe, 0x6c,
0xb3, 0x79, 0xf6, 0xba, 0xf4, 0xef, 0x21, 0xc1, 0x59, 0xd4, 0x09, 0x55, 0xd2, 0x78, 0xce, 0xa5, 0x36, 0xcf, 0x5e, 0x97, 0xfe, 0x3d, 0x24, 0x38, 0x8b, 0x3a, 0xa1, 0x4a, 0x1a, 0xcf, 0xb9, 0x74,
0xf3, 0xd8, 0xae, 0x41, 0x55, 0xbd, 0x5b, 0xa1, 0x7f, 0xed, 0x4d, 0xee, 0x34, 0x77, 0x88, 0xae, 0x1e, 0xdb, 0x35, 0xa8, 0xaa, 0x77, 0x2b, 0xf4, 0xef, 0xbd, 0xc9, 0x9d, 0xe6, 0x0e, 0xd1, 0x95,
0x74, 0x71, 0x9d, 0x4f, 0xe7, 0x72, 0xa9, 0xaa, 0x2d, 0xaa, 0x06, 0x75, 0xa8, 0x9d, 0x64, 0x91, 0x2e, 0xae, 0xf3, 0xe9, 0x5c, 0x2e, 0x55, 0xb5, 0x45, 0xd5, 0xa0, 0x0e, 0xb5, 0x93, 0x2c, 0x72,
0x2b, 0x00, 0x4b, 0xb5, 0xb5, 0x9b, 0xc4, 0x66, 0x3e, 0x47, 0xa7, 0x61, 0xc4, 0x50, 0x74, 0x52, 0x05, 0x60, 0xa9, 0xb6, 0x76, 0x93, 0xd8, 0x6c, 0xcc, 0xd1, 0x69, 0x18, 0x31, 0x14, 0x9d, 0x94,
0x92, 0x4e, 0x4b, 0x67, 0xc6, 0xab, 0x27, 0x6e, 0x1f, 0x94, 0x8f, 0x1d, 0x1e, 0x94, 0x47, 0xae, 0xa4, 0xd3, 0xd2, 0x99, 0xf1, 0xea, 0x89, 0xdb, 0x07, 0xe5, 0x63, 0x87, 0x07, 0xe5, 0x91, 0xeb,
0x2b, 0x3a, 0xc1, 0x7c, 0x46, 0x7e, 0x1d, 0x66, 0x97, 0x6b, 0x9b, 0x0d, 0xc5, 0x6e, 0x13, 0xba, 0x8a, 0x4e, 0x30, 0xef, 0x91, 0x5f, 0x87, 0xd9, 0xe5, 0xda, 0x66, 0x43, 0xb1, 0xdb, 0x84, 0x6e,
0x49, 0x55, 0x4d, 0x7d, 0x47, 0xa1, 0x8c, 0x73, 0x05, 0x4e, 0x52, 0x3e, 0x58, 0x23, 0x76, 0x93, 0x52, 0x55, 0x53, 0xdf, 0x51, 0x28, 0xe3, 0x5c, 0x81, 0x93, 0x94, 0x37, 0xd6, 0x88, 0xdd, 0x24,
0x18, 0x54, 0x69, 0x7b, 0x28, 0x85, 0x6a, 0x49, 0xa0, 0x9c, 0x6c, 0x24, 0xe6, 0x71, 0x17, 0x87, 0x06, 0x55, 0xda, 0x1e, 0x4a, 0xa1, 0x5a, 0x12, 0x28, 0x27, 0x1b, 0x89, 0x7e, 0xdc, 0xc5, 0x21,
0xfc, 0xff, 0x12, 0x3c, 0xb8, 0xec, 0x3a, 0xd4, 0xd4, 0x37, 0x08, 0xb5, 0xd5, 0xe6, 0xb2, 0x6b, 0x7f, 0x5d, 0x82, 0x07, 0x97, 0x5d, 0x87, 0x9a, 0xfa, 0x06, 0xa1, 0xb6, 0xda, 0x5c, 0x76, 0x6d,
0xdb, 0xc4, 0xa0, 0x75, 0xaa, 0x50, 0xd7, 0xb9, 0xbb, 0x76, 0xe8, 0x15, 0x28, 0xec, 0x29, 0x9a, 0x9b, 0x18, 0xb4, 0x4e, 0x15, 0xea, 0x3a, 0x77, 0xd7, 0x0e, 0xbd, 0x02, 0x85, 0x3d, 0x45, 0x73,
0x4b, 0x4a, 0xb9, 0xd3, 0xd2, 0x99, 0xe2, 0x85, 0xb3, 0x95, 0xcc, 0x9d, 0x56, 0xf1, 0xf7, 0x42, 0x49, 0x29, 0x77, 0x5a, 0x3a, 0x53, 0xbc, 0x70, 0xb6, 0x92, 0xb9, 0xd2, 0x2a, 0xfe, 0x5a, 0xa8,
0xe5, 0x65, 0x57, 0x31, 0xa8, 0x4a, 0x3b, 0xd5, 0x59, 0x01, 0x78, 0x42, 0x48, 0xbd, 0xc9, 0x90, 0xbc, 0xec, 0x2a, 0x06, 0x55, 0x69, 0xa7, 0x3a, 0x2b, 0x00, 0x4f, 0x08, 0xa9, 0x37, 0x19, 0x12,
0xb0, 0x07, 0x28, 0x7f, 0x20, 0xc1, 0x23, 0x99, 0x9a, 0xad, 0xab, 0x0e, 0x45, 0x3a, 0x14, 0x54, 0xf6, 0x00, 0xe5, 0x0f, 0x24, 0x78, 0x24, 0x53, 0xb3, 0x75, 0xd5, 0xa1, 0x48, 0x87, 0x82, 0x4a,
0x4a, 0x74, 0xa7, 0x24, 0x9d, 0xce, 0x9f, 0x29, 0x5e, 0xb8, 0x56, 0xe9, 0x6b, 0x97, 0x57, 0x32, 0x89, 0xee, 0x94, 0xa4, 0xd3, 0xf9, 0x33, 0xc5, 0x0b, 0xd7, 0x2a, 0x7d, 0xad, 0xf2, 0x4a, 0x26,
0xc1, 0xab, 0x13, 0x42, 0xaf, 0xc2, 0x1a, 0x83, 0xc7, 0x9e, 0x14, 0xf9, 0xff, 0x24, 0x40, 0x51, 0x78, 0x75, 0x42, 0xe8, 0x55, 0x58, 0x63, 0xf0, 0xd8, 0x93, 0x22, 0x7f, 0x4d, 0x02, 0x14, 0xe5,
0x1e, 0xcf, 0xbb, 0xf7, 0xe0, 0xa3, 0xff, 0x38, 0x8a, 0x8f, 0x66, 0x04, 0x60, 0xd1, 0x13, 0x17, 0xf1, 0x46, 0xf7, 0x1e, 0xc6, 0xe8, 0xbf, 0x8e, 0x32, 0x46, 0x33, 0x02, 0xb0, 0xe8, 0x89, 0x8b,
0x73, 0xd1, 0xfb, 0x12, 0xcc, 0x75, 0x6b, 0xc4, 0x7d, 0xb3, 0x1d, 0xf7, 0xcd, 0xd2, 0x11, 0x7c, 0x0d, 0xd1, 0xfb, 0x12, 0xcc, 0x75, 0x6b, 0xc4, 0xc7, 0x66, 0x3b, 0x3e, 0x36, 0x4b, 0x47, 0x18,
0xe3, 0xa1, 0x66, 0x38, 0xe5, 0xdb, 0x39, 0x18, 0x5f, 0x51, 0x88, 0x6e, 0x1a, 0x75, 0x42, 0xd1, 0x1b, 0x0f, 0x35, 0x63, 0x50, 0xbe, 0x9b, 0x83, 0xf1, 0x15, 0x85, 0xe8, 0xa6, 0x51, 0x27, 0x14,
0x2b, 0x30, 0xc6, 0x3e, 0xc7, 0x96, 0x42, 0x15, 0xee, 0x8f, 0xe2, 0x85, 0x33, 0x3d, 0x8c, 0xdd, 0xbd, 0x02, 0x63, 0x6c, 0x3b, 0xb6, 0x14, 0xaa, 0xf0, 0xf1, 0x28, 0x5e, 0x38, 0xd3, 0xc3, 0xd8,
0x3b, 0x5f, 0xb9, 0xb1, 0x75, 0x8b, 0x34, 0xe9, 0x06, 0xa1, 0x4a, 0x15, 0x09, 0x7c, 0x08, 0xc7, 0xbd, 0xf3, 0x95, 0x1b, 0x5b, 0xb7, 0x48, 0x93, 0x6e, 0x10, 0xaa, 0x54, 0x91, 0xc0, 0x87, 0xb0,
0x70, 0x80, 0x86, 0xde, 0x80, 0x11, 0xc7, 0x22, 0x4d, 0xe1, 0xc2, 0xe7, 0xfa, 0x34, 0x27, 0xd0, 0x0d, 0x07, 0x68, 0xe8, 0x0d, 0x18, 0x71, 0x2c, 0xd2, 0x14, 0x43, 0xf8, 0x5c, 0x9f, 0xe6, 0x04,
0xb0, 0x6e, 0x91, 0x66, 0xb8, 0x46, 0xec, 0x17, 0xe6, 0xb8, 0x68, 0x1b, 0x8e, 0x3b, 0x7c, 0xf1, 0x1a, 0xd6, 0x2d, 0xd2, 0x0c, 0xe7, 0x88, 0x7d, 0x61, 0x8e, 0x8b, 0xb6, 0xe1, 0xb8, 0xc3, 0x27,
0x4b, 0x79, 0x2e, 0xe1, 0xf2, 0xc0, 0x12, 0xbc, 0x2d, 0x34, 0x29, 0x64, 0x1c, 0xf7, 0x7e, 0x63, 0xbf, 0x94, 0xe7, 0x12, 0x2e, 0x0f, 0x2c, 0xc1, 0x5b, 0x42, 0x93, 0x42, 0xc6, 0x71, 0xef, 0x1b,
0x81, 0x2e, 0xff, 0x44, 0x82, 0x89, 0x80, 0x96, 0xaf, 0xd4, 0xab, 0x5d, 0x3e, 0x3b, 0xdb, 0x4b, 0x0b, 0x74, 0xf9, 0xa7, 0x12, 0x4c, 0x04, 0xb4, 0x7c, 0xa6, 0x5e, 0xed, 0x1a, 0xb3, 0xb3, 0xbd,
0x36, 0xa3, 0x65, 0x9e, 0x63, 0xbc, 0xdc, 0x6f, 0x27, 0x85, 0xa4, 0x31, 0x7f, 0x24, 0xe2, 0xb5, 0x64, 0x33, 0x5a, 0x36, 0x72, 0x8c, 0x97, 0x8f, 0xdb, 0x49, 0x21, 0x69, 0xcc, 0x6f, 0x89, 0x8c,
0xff, 0xf2, 0x77, 0x41, 0x8e, 0xef, 0x82, 0xa7, 0x07, 0x35, 0x2a, 0x63, 0xf1, 0x7f, 0x1c, 0x35, 0xda, 0xff, 0xf8, 0xab, 0x20, 0xc7, 0x57, 0xc1, 0xd3, 0x83, 0x1a, 0x95, 0x31, 0xf9, 0x3f, 0x89,
0x86, 0x39, 0x13, 0xbd, 0x06, 0x63, 0x0e, 0xd1, 0x48, 0x93, 0x9a, 0xb6, 0x30, 0xe6, 0xfc, 0x3d, 0x1a, 0xc3, 0x06, 0x13, 0xbd, 0x06, 0x63, 0x0e, 0xd1, 0x48, 0x93, 0x9a, 0xb6, 0x30, 0xe6, 0xfc,
0x19, 0xa3, 0x6c, 0x11, 0xad, 0x2e, 0x18, 0xab, 0x27, 0x98, 0x35, 0xfe, 0x2f, 0x1c, 0x00, 0x32, 0x3d, 0x19, 0xa3, 0x6c, 0x11, 0xad, 0x2e, 0x18, 0xab, 0x27, 0x98, 0x35, 0xfe, 0x17, 0x0e, 0x00,
0x70, 0x4a, 0x74, 0x4b, 0x53, 0xa8, 0xff, 0x29, 0x9d, 0xeb, 0xbd, 0xbb, 0x6a, 0x66, 0xab, 0x21, 0x19, 0x38, 0x25, 0xba, 0xa5, 0x29, 0xd4, 0xdf, 0x4a, 0xe7, 0x7a, 0xaf, 0xae, 0x9a, 0xd9, 0x6a,
0x18, 0xf8, 0xc2, 0x07, 0xae, 0xf2, 0x47, 0x71, 0x00, 0x28, 0x7f, 0x3f, 0x07, 0x53, 0x89, 0x45, 0x08, 0x06, 0x3e, 0xf1, 0xc1, 0x50, 0xf9, 0xad, 0x38, 0x00, 0x94, 0x3f, 0xcc, 0xc3, 0x54, 0x62,
0x44, 0x37, 0x61, 0xae, 0xe9, 0x05, 0x86, 0xeb, 0xae, 0xbe, 0x45, 0xec, 0x7a, 0x73, 0x87, 0xb4, 0x12, 0xd1, 0x4d, 0x98, 0x6b, 0x7a, 0x8e, 0xe1, 0xba, 0xab, 0x6f, 0x11, 0xbb, 0xde, 0xdc, 0x21,
0x5c, 0x8d, 0xb4, 0x44, 0xa0, 0x5d, 0x10, 0x78, 0x73, 0xcb, 0xa9, 0x54, 0x38, 0x83, 0x1b, 0xbd, 0x2d, 0x57, 0x23, 0x2d, 0xe1, 0x68, 0x17, 0x04, 0xde, 0xdc, 0x72, 0x2a, 0x15, 0xce, 0xe0, 0x46,
0x04, 0xc8, 0xe0, 0x43, 0x1b, 0xaa, 0xe3, 0x04, 0x98, 0x39, 0x8e, 0x39, 0x2f, 0x30, 0xd1, 0xf5, 0x2f, 0x01, 0x32, 0x78, 0xd3, 0x86, 0xea, 0x38, 0x01, 0x66, 0x8e, 0x63, 0xce, 0x0b, 0x4c, 0x74,
0x2e, 0x0a, 0x9c, 0xc2, 0xc5, 0x74, 0x6c, 0x11, 0x47, 0xb5, 0x49, 0x2b, 0xa9, 0x63, 0x3e, 0xae, 0xbd, 0x8b, 0x02, 0xa7, 0x70, 0x31, 0x1d, 0x5b, 0xc4, 0x51, 0x6d, 0xd2, 0x4a, 0xea, 0x98, 0x8f,
0xe3, 0x4a, 0x2a, 0x15, 0xce, 0xe0, 0x46, 0x17, 0xa1, 0xe8, 0x49, 0xc3, 0x44, 0x69, 0x75, 0x4a, 0xeb, 0xb8, 0x92, 0x4a, 0x85, 0x33, 0xb8, 0xd1, 0x45, 0x28, 0x7a, 0xd2, 0x30, 0x51, 0x5a, 0x9d,
0x23, 0x1c, 0x2c, 0x08, 0x46, 0xd7, 0xc3, 0x29, 0x1c, 0xa5, 0x93, 0xbf, 0x93, 0x03, 0x58, 0x21, 0xd2, 0x08, 0x07, 0x0b, 0x9c, 0xd1, 0xf5, 0xb0, 0x0b, 0x47, 0xe9, 0x98, 0x69, 0xe6, 0x96, 0x43,
0x96, 0x66, 0x76, 0x74, 0x62, 0x0c, 0x33, 0x20, 0xbc, 0x19, 0x0b, 0x08, 0xcf, 0xf7, 0xbb, 0xb3, 0xec, 0x3d, 0xd2, 0xba, 0xea, 0x05, 0x3e, 0xd5, 0x34, 0x4a, 0x85, 0xd3, 0xd2, 0x99, 0x7c, 0x68,
0x03, 0x15, 0x33, 0x23, 0x42, 0x3b, 0x11, 0x11, 0x5e, 0x18, 0x5c, 0x44, 0xef, 0x90, 0xf0, 0xdb, 0xda, 0x8d, 0x2e, 0x0a, 0x9c, 0xc2, 0x25, 0x7f, 0x2f, 0x07, 0xb0, 0x42, 0x2c, 0xcd, 0xec, 0xe8,
0x3c, 0xcc, 0x84, 0xc4, 0xcb, 0xa6, 0xd1, 0x52, 0x79, 0x82, 0x7f, 0x16, 0x46, 0x68, 0xc7, 0xf2, 0xc4, 0x18, 0xa6, 0x73, 0x79, 0x33, 0xe6, 0x5c, 0x9e, 0xef, 0x77, 0x97, 0x04, 0x2a, 0x66, 0x7a,
0x13, 0xcb, 0x13, 0xbe, 0x8a, 0x8d, 0x8e, 0x45, 0xee, 0x1c, 0x94, 0x4f, 0xa5, 0xb0, 0xb0, 0x29, 0x97, 0x76, 0xc2, 0xbb, 0xbc, 0x30, 0xb8, 0x88, 0xde, 0xee, 0xe5, 0x77, 0x79, 0x98, 0x09, 0x89,
0xcc, 0x99, 0xd0, 0xcd, 0x40, 0xfb, 0x1c, 0x67, 0xbf, 0x1c, 0x17, 0x7e, 0xe7, 0xa0, 0xdc, 0xb3, 0x97, 0x4d, 0xa3, 0xa5, 0xf2, 0x64, 0xe1, 0x59, 0x18, 0xa1, 0x1d, 0xcb, 0x0f, 0x52, 0x4f, 0xf8,
0x02, 0xab, 0x04, 0x98, 0x71, 0x65, 0xd1, 0xe3, 0x70, 0xdc, 0x26, 0x8a, 0x63, 0x1a, 0x7c, 0x47, 0x2a, 0x36, 0x3a, 0x16, 0xb9, 0x73, 0x50, 0x3e, 0x95, 0xc2, 0xc2, 0xba, 0x30, 0x67, 0x42, 0x37,
0x8c, 0x87, 0x46, 0x61, 0x3e, 0x8a, 0xc5, 0x2c, 0x7a, 0x12, 0x46, 0x75, 0xe2, 0x38, 0xac, 0x28, 0x03, 0xed, 0x73, 0x9c, 0xfd, 0x72, 0x5c, 0xf8, 0x9d, 0x83, 0x72, 0xcf, 0x6c, 0xae, 0x12, 0x60,
0x29, 0x70, 0xc2, 0x29, 0x41, 0x38, 0xba, 0xe1, 0x0d, 0x63, 0x7f, 0x1e, 0xed, 0xc0, 0xa4, 0xa6, 0xc6, 0x95, 0x45, 0x8f, 0xc3, 0x71, 0x9b, 0x28, 0x8e, 0x69, 0xf0, 0xd5, 0x35, 0x1e, 0x1a, 0x85,
0x38, 0x74, 0xd3, 0x6a, 0x29, 0x94, 0x34, 0x54, 0x9d, 0x94, 0x8e, 0xdf, 0x6d, 0xa7, 0x84, 0x91, 0x79, 0x2b, 0x16, 0xbd, 0xe8, 0x49, 0x18, 0xd5, 0x89, 0xe3, 0xb0, 0x04, 0xa7, 0xc0, 0x09, 0xa7,
0x83, 0xd1, 0x57, 0xe7, 0x04, 0xf6, 0xe4, 0x7a, 0x0c, 0x07, 0x27, 0x70, 0x11, 0x05, 0xc4, 0x46, 0x04, 0xe1, 0xe8, 0x86, 0xd7, 0x8c, 0xfd, 0x7e, 0xb4, 0x03, 0x93, 0x9a, 0xe2, 0xd0, 0x4d, 0xab,
0x1a, 0xb6, 0x62, 0x38, 0x9e, 0xc3, 0x98, 0xb4, 0xd1, 0x3e, 0xa5, 0x05, 0x5f, 0xe8, 0x7a, 0x17, 0xa5, 0x50, 0xd2, 0x50, 0x75, 0x52, 0x3a, 0x7e, 0xb7, 0x95, 0x12, 0x7a, 0x21, 0x46, 0x5f, 0x9d,
0x16, 0x4e, 0xc1, 0x97, 0x7f, 0x2a, 0xc1, 0x64, 0xb8, 0x58, 0x43, 0x8f, 0xf9, 0x6f, 0xc4, 0x63, 0x13, 0xd8, 0x93, 0xeb, 0x31, 0x1c, 0x9c, 0xc0, 0x45, 0x14, 0x10, 0x6b, 0x69, 0xd8, 0x8a, 0xe1,
0xfe, 0x33, 0x03, 0x6f, 0xdb, 0x8c, 0xa0, 0xff, 0xb5, 0x3c, 0xa0, 0x90, 0x08, 0x9b, 0x9a, 0xb6, 0x78, 0x03, 0xc6, 0xa4, 0x8d, 0xf6, 0x29, 0x2d, 0xd8, 0x12, 0xeb, 0x5d, 0x58, 0x38, 0x05, 0x5f,
0xa5, 0x34, 0x77, 0xef, 0xa1, 0x0c, 0xfa, 0xa6, 0x04, 0xc8, 0xe5, 0x8b, 0xd1, 0x5a, 0x32, 0x0c, 0xfe, 0x99, 0x04, 0x93, 0xe1, 0x64, 0x0d, 0x3d, 0x7e, 0xbc, 0x11, 0x8f, 0x1f, 0xcf, 0x0c, 0xbc,
0x93, 0xf2, 0x32, 0xd6, 0x57, 0xf3, 0x3f, 0x07, 0x56, 0xd3, 0xd7, 0xa0, 0xb2, 0xd9, 0x85, 0x7d, 0x6c, 0x33, 0x02, 0xc8, 0x37, 0xf2, 0x80, 0x42, 0x22, 0x6c, 0x6a, 0xda, 0x96, 0xd2, 0xdc, 0xbd,
0xc5, 0xa0, 0x76, 0x27, 0x5c, 0xaf, 0x6e, 0x02, 0x9c, 0xa2, 0x10, 0x7a, 0x0b, 0xc0, 0x16, 0x98, 0x87, 0x94, 0xea, 0xdb, 0x12, 0x20, 0x97, 0x4f, 0x46, 0x6b, 0xc9, 0x30, 0x4c, 0xca, 0x1d, 0x86,
0x0d, 0x53, 0x7c, 0xfc, 0xfd, 0xc6, 0x17, 0x5f, 0xa9, 0x65, 0xd3, 0xd8, 0x56, 0xdb, 0x61, 0x28, 0xaf, 0xe6, 0x7f, 0x0f, 0xac, 0xa6, 0xaf, 0x41, 0x65, 0xb3, 0x0b, 0xfb, 0x8a, 0x41, 0xed, 0x4e,
0xc3, 0x01, 0x30, 0x8e, 0x08, 0x99, 0xbf, 0x02, 0xa7, 0x32, 0xb4, 0x47, 0x27, 0x21, 0xbf, 0x4b, 0x38, 0x5f, 0xdd, 0x04, 0x38, 0x45, 0x21, 0xf4, 0x16, 0x80, 0x2d, 0x30, 0x1b, 0xa6, 0xd8, 0xfc,
0x3a, 0x9e, 0x5b, 0x31, 0xfb, 0x13, 0xcd, 0x46, 0xcb, 0xc9, 0x71, 0x51, 0x0b, 0x5e, 0xca, 0x3d, 0xfd, 0xfa, 0x17, 0x5f, 0xa9, 0x65, 0xd3, 0xd8, 0x56, 0xdb, 0xa1, 0x2b, 0xc3, 0x01, 0x30, 0x8e,
0x2d, 0xc9, 0x5f, 0x16, 0xa2, 0x3b, 0x8d, 0x27, 0xe4, 0x33, 0x30, 0x66, 0x13, 0x4b, 0x53, 0x9b, 0x08, 0x99, 0xbf, 0x02, 0xa7, 0x32, 0xb4, 0x47, 0x27, 0x21, 0xbf, 0x4b, 0x3a, 0xde, 0xb0, 0x62,
0x8a, 0x23, 0x92, 0x16, 0xcf, 0xae, 0x58, 0x8c, 0xe1, 0x60, 0x36, 0x96, 0xba, 0x73, 0xc3, 0x4c, 0xf6, 0x13, 0xcd, 0x46, 0x53, 0xd3, 0x71, 0x91, 0x57, 0x5e, 0xca, 0x3d, 0x2d, 0xc9, 0x5f, 0x16,
0xdd, 0xf9, 0xfb, 0x9c, 0xba, 0x91, 0x09, 0x63, 0x0e, 0x65, 0x47, 0xac, 0xb6, 0x97, 0xa7, 0xfa, 0xa2, 0x2b, 0x8d, 0x07, 0xf7, 0x33, 0x30, 0x66, 0x13, 0x4b, 0x53, 0x9b, 0x8a, 0x23, 0x02, 0x20,
0x2f, 0x77, 0xa3, 0xb1, 0xda, 0x03, 0x0a, 0x05, 0xfa, 0x23, 0x38, 0x10, 0x82, 0x96, 0x60, 0x4a, 0x8f, 0xd4, 0x58, 0xb4, 0xe1, 0xa0, 0x37, 0x96, 0x06, 0xe4, 0x86, 0x99, 0x06, 0xe4, 0xef, 0x73,
0x57, 0x0d, 0x9e, 0xf0, 0xea, 0xa4, 0x69, 0x1a, 0x2d, 0x87, 0x07, 0xb9, 0x42, 0xf5, 0x94, 0x60, 0x1a, 0x80, 0x4c, 0x18, 0x73, 0x28, 0x3b, 0xae, 0xb5, 0xbd, 0x98, 0xd7, 0x7f, 0xea, 0x1c, 0xf5,
0x9a, 0xda, 0x88, 0x4f, 0xe3, 0x24, 0x3d, 0x5a, 0x87, 0x59, 0x9b, 0xec, 0xa9, 0x4c, 0x8d, 0x6b, 0xd5, 0x1e, 0x50, 0x28, 0xd0, 0x6f, 0xc1, 0x81, 0x10, 0xb4, 0x04, 0x53, 0xba, 0x6a, 0xf0, 0xe0,
0xaa, 0x43, 0x4d, 0xbb, 0xb3, 0xae, 0xea, 0x2a, 0xe5, 0xa1, 0xaf, 0x50, 0x2d, 0x1d, 0x1e, 0x94, 0x59, 0x27, 0x4d, 0xd3, 0x68, 0x39, 0xdc, 0xc9, 0x15, 0xaa, 0xa7, 0x04, 0xd3, 0xd4, 0x46, 0xbc,
0x67, 0x71, 0xca, 0x3c, 0x4e, 0xe5, 0x62, 0x51, 0xd9, 0x52, 0x5c, 0x87, 0xb4, 0x78, 0x30, 0x1b, 0x1b, 0x27, 0xe9, 0xd1, 0x3a, 0xcc, 0xda, 0x64, 0x4f, 0x65, 0x6a, 0x5c, 0x53, 0x1d, 0x6a, 0xda,
0x0b, 0xa3, 0x72, 0x8d, 0x8f, 0x62, 0x31, 0x8b, 0xf4, 0xd8, 0xd6, 0x1e, 0xbb, 0x1f, 0x5b, 0x7b, 0x9d, 0x75, 0x55, 0x57, 0x29, 0x77, 0x7d, 0x85, 0x6a, 0xe9, 0xf0, 0xa0, 0x3c, 0x8b, 0x53, 0xfa,
0x32, 0x7b, 0x5b, 0xa3, 0x4d, 0x38, 0x65, 0xd9, 0x66, 0xdb, 0x26, 0x8e, 0xb3, 0x42, 0x94, 0x96, 0x71, 0x2a, 0x17, 0xf3, 0xca, 0x96, 0xe2, 0x3a, 0xa4, 0xc5, 0x9d, 0xd9, 0x58, 0xe8, 0x95, 0x6b,
0xa6, 0x1a, 0xc4, 0xf7, 0xd7, 0x38, 0xb7, 0xf3, 0xa1, 0xc3, 0x83, 0xf2, 0xa9, 0x5a, 0x3a, 0x09, 0xbc, 0x15, 0x8b, 0x5e, 0xa4, 0xc7, 0x96, 0xf6, 0xd8, 0xfd, 0x58, 0xda, 0x93, 0xd9, 0xcb, 0x1a,
0xce, 0xe2, 0x95, 0x3f, 0x1a, 0x81, 0x93, 0xc9, 0xec, 0xca, 0x6a, 0x2a, 0x73, 0xcb, 0x21, 0xf6, 0x6d, 0xc2, 0x29, 0xcb, 0x36, 0xdb, 0x36, 0x71, 0x9c, 0x15, 0xa2, 0xb4, 0x34, 0xd5, 0x20, 0xfe,
0x1e, 0x69, 0x5d, 0xf5, 0x4e, 0xdc, 0xaa, 0x69, 0xf0, 0x2d, 0x9f, 0x0f, 0x23, 0xc0, 0x8d, 0x2e, 0x78, 0x8d, 0x73, 0x3b, 0x1f, 0x3a, 0x3c, 0x28, 0x9f, 0xaa, 0xa5, 0x93, 0xe0, 0x2c, 0x5e, 0xf9,
0x0a, 0x9c, 0xc2, 0x85, 0xce, 0x46, 0x3e, 0x1a, 0xaf, 0x2a, 0x0b, 0x76, 0x43, 0xca, 0x87, 0xb3, 0xa3, 0x11, 0x38, 0x99, 0x8c, 0xae, 0x19, 0x49, 0x8c, 0x34, 0x48, 0x12, 0x83, 0xce, 0x46, 0x36,
0x04, 0x53, 0x22, 0x8a, 0xf8, 0x93, 0xa2, 0xf4, 0x0a, 0x76, 0xc3, 0x66, 0x7c, 0x1a, 0x27, 0xe9, 0x8d, 0x97, 0xe1, 0x05, 0xab, 0x21, 0x65, 0xe3, 0x2c, 0xc1, 0x94, 0xf0, 0x22, 0x7e, 0xa7, 0x48,
0xd1, 0x55, 0x98, 0x56, 0xf6, 0x14, 0x55, 0x53, 0xb6, 0x34, 0x12, 0x80, 0x78, 0x25, 0xd7, 0x83, 0xe3, 0x82, 0xd5, 0xb0, 0x19, 0xef, 0xc6, 0x49, 0x7a, 0x74, 0x15, 0xa6, 0x95, 0x3d, 0x45, 0xd5,
0x02, 0x64, 0x7a, 0x29, 0x49, 0x80, 0xbb, 0x79, 0xd0, 0x06, 0xcc, 0xb8, 0x46, 0x37, 0x94, 0xb7, 0x94, 0x2d, 0x8d, 0x04, 0x20, 0x5e, 0xfa, 0xf6, 0xa0, 0x00, 0x99, 0x5e, 0x4a, 0x12, 0xe0, 0x6e,
0x3b, 0x1f, 0x12, 0x50, 0x33, 0x9b, 0xdd, 0x24, 0x38, 0x8d, 0x0f, 0xed, 0x01, 0x34, 0xfd, 0x42, 0x1e, 0xb4, 0x01, 0x33, 0xae, 0xd1, 0x0d, 0xe5, 0xad, 0xce, 0x87, 0x04, 0xd4, 0xcc, 0x66, 0x37,
0xc0, 0x29, 0x1d, 0xe7, 0x91, 0xba, 0x3a, 0xf0, 0xb7, 0x15, 0xd4, 0x14, 0x61, 0x3c, 0x0c, 0x86, 0x09, 0x4e, 0xe3, 0x43, 0x7b, 0x00, 0x4d, 0x3f, 0x11, 0x70, 0x4a, 0xc7, 0xb9, 0xa7, 0xae, 0x0e,
0x1c, 0x1c, 0x91, 0x84, 0x9e, 0x85, 0x09, 0x9b, 0xd7, 0x96, 0xbe, 0x01, 0xa3, 0xdc, 0x80, 0x07, 0xbc, 0xb7, 0x82, 0x9c, 0x22, 0xf4, 0x87, 0x41, 0x93, 0x83, 0x23, 0x92, 0xd0, 0xb3, 0x30, 0x61,
0x04, 0xdb, 0x04, 0x8e, 0x4e, 0xe2, 0x38, 0xad, 0xfc, 0x73, 0x29, 0x9a, 0xa0, 0xfc, 0xcf, 0x17, 0xf3, 0x3c, 0xd5, 0x37, 0x60, 0x94, 0x1b, 0xf0, 0x80, 0x60, 0x9b, 0xc0, 0xd1, 0x4e, 0x1c, 0xa7,
0x5d, 0x8a, 0x95, 0x53, 0x8f, 0x27, 0xca, 0xa9, 0xb9, 0x6e, 0x8e, 0x48, 0x35, 0xf5, 0x1e, 0x4c, 0x95, 0x7f, 0x21, 0x45, 0x03, 0x94, 0xbf, 0x7d, 0xd1, 0xa5, 0x58, 0x3a, 0xf5, 0x78, 0x22, 0x9d,
0xb0, 0x6d, 0xad, 0x1a, 0x6d, 0x6f, 0x29, 0x45, 0x80, 0x5c, 0x1d, 0xe0, 0xd3, 0x09, 0x30, 0x22, 0x9a, 0xeb, 0xe6, 0x88, 0x64, 0x53, 0xef, 0xc1, 0x04, 0x5b, 0xd6, 0xaa, 0xd1, 0xf6, 0xa6, 0x52,
0x89, 0x76, 0x9a, 0xdb, 0x14, 0x9d, 0xc4, 0x71, 0x79, 0xf2, 0x27, 0x12, 0xcc, 0xad, 0xd6, 0xaf, 0x38, 0xc8, 0xd5, 0x01, 0xb6, 0x4e, 0x80, 0x11, 0x09, 0xb4, 0xd3, 0xdc, 0xa6, 0x68, 0x27, 0x8e,
0xda, 0xa6, 0x6b, 0xf9, 0xea, 0xdd, 0xb0, 0x3c, 0x5f, 0xfd, 0x1b, 0x8c, 0xd8, 0xae, 0xe6, 0xdb, 0xcb, 0x93, 0x3f, 0x91, 0x60, 0x6e, 0xb5, 0x7e, 0xd5, 0x36, 0x5d, 0xcb, 0x57, 0xef, 0x86, 0xe5,
0xf5, 0x98, 0x6f, 0x17, 0x76, 0x35, 0x66, 0xd7, 0x4c, 0x82, 0xcb, 0x33, 0x8a, 0x31, 0xa0, 0x37, 0x8d, 0xd5, 0x7f, 0xc0, 0x88, 0xed, 0x6a, 0xbe, 0x5d, 0x8f, 0xf9, 0x76, 0x61, 0x57, 0x63, 0x76,
0xe0, 0xb8, 0xad, 0x18, 0x6d, 0xe2, 0xa7, 0xe0, 0xa7, 0xfa, 0xb4, 0x66, 0x6d, 0x05, 0x33, 0xf6, 0xcd, 0x24, 0xb8, 0x3c, 0xa3, 0x18, 0x03, 0x7a, 0x03, 0x8e, 0xdb, 0x8a, 0xd1, 0x26, 0x7e, 0x08,
0x48, 0x09, 0xc8, 0xd1, 0xb0, 0x40, 0x95, 0xbf, 0x2e, 0xc1, 0xd4, 0xb5, 0x46, 0xa3, 0xb6, 0x66, 0x7e, 0xaa, 0x4f, 0x6b, 0xd6, 0x56, 0x30, 0x63, 0x8f, 0xa4, 0x80, 0x1c, 0x0d, 0x0b, 0x54, 0xf9,
0xf0, 0xaf, 0xb8, 0xa6, 0xd0, 0x1d, 0x56, 0x25, 0x58, 0x0a, 0xdd, 0x49, 0x56, 0x09, 0x6c, 0x0e, 0x9b, 0x12, 0x4c, 0x5d, 0x6b, 0x34, 0x6a, 0x6b, 0x06, 0xdf, 0xc5, 0x35, 0x85, 0xee, 0xb0, 0x2c,
0xf3, 0x19, 0xb4, 0x03, 0xa3, 0x2c, 0x7a, 0x10, 0xa3, 0x35, 0x60, 0x69, 0x2f, 0xc4, 0x55, 0x3d, 0xc1, 0x52, 0xe8, 0x4e, 0x32, 0x4b, 0x60, 0x7d, 0x98, 0xf7, 0xa0, 0x1d, 0x18, 0x65, 0xde, 0x83,
0x90, 0xb0, 0xee, 0x14, 0x03, 0xd8, 0x87, 0x97, 0xdf, 0x85, 0xd9, 0x88, 0x7a, 0xcc, 0x5f, 0xfc, 0x18, 0xad, 0x01, 0x53, 0x7b, 0x21, 0xae, 0xea, 0x81, 0x84, 0x79, 0xa7, 0x68, 0xc0, 0x3e, 0xbc,
0x72, 0x05, 0x35, 0xa1, 0xc0, 0x34, 0xf1, 0xaf, 0x4e, 0xfa, 0xbd, 0x09, 0x48, 0x98, 0x1c, 0x56, 0xfc, 0x2e, 0xcc, 0x46, 0xd4, 0x63, 0xe3, 0xc5, 0x2f, 0x6a, 0x50, 0x13, 0x0a, 0x4c, 0x13, 0xff,
0x51, 0xec, 0x97, 0x83, 0x3d, 0x6c, 0xf9, 0x57, 0x39, 0x38, 0x75, 0xcd, 0xb4, 0xd5, 0x77, 0x4c, 0x1a, 0xa6, 0xdf, 0x5b, 0x85, 0x84, 0xc9, 0x61, 0x16, 0xc5, 0xbe, 0x1c, 0xec, 0x61, 0xcb, 0xbf,
0x83, 0x2a, 0x5a, 0xcd, 0x6c, 0x2d, 0xb9, 0xd4, 0x74, 0x9a, 0x8a, 0x46, 0xec, 0x21, 0x1e, 0x9a, 0xce, 0xc1, 0xa9, 0x6b, 0xa6, 0xad, 0xbe, 0x63, 0x1a, 0x54, 0xd1, 0x6a, 0x66, 0x6b, 0xc9, 0xa5,
0xb4, 0xd8, 0xa1, 0xe9, 0xa5, 0x7e, 0x2d, 0x4b, 0xd7, 0x37, 0xf3, 0x04, 0x45, 0x13, 0x27, 0xa8, 0xa6, 0xd3, 0x54, 0x34, 0x62, 0x0f, 0xf1, 0xd0, 0xa4, 0xc5, 0x0e, 0x4d, 0x2f, 0xf5, 0x6b, 0x59,
0xf5, 0xfb, 0x24, 0xaf, 0xf7, 0x71, 0xea, 0x4f, 0x12, 0x3c, 0x94, 0xc1, 0x39, 0xf4, 0xda, 0x7b, 0xba, 0xbe, 0x99, 0x27, 0x28, 0x9a, 0x38, 0x41, 0xad, 0xdf, 0x27, 0x79, 0xbd, 0x8f, 0x53, 0x7f,
0x37, 0x5e, 0x7b, 0xaf, 0xde, 0x1f, 0x83, 0x33, 0x0a, 0xf1, 0xbf, 0xe6, 0x32, 0x0d, 0xe5, 0xa5, 0x96, 0xe0, 0xa1, 0x0c, 0xce, 0xa1, 0xe7, 0xde, 0xbb, 0xf1, 0xdc, 0x7b, 0xf5, 0xfe, 0x18, 0x9c,
0xdf, 0x5b, 0x30, 0xc6, 0x7f, 0x61, 0xb2, 0x2d, 0x0c, 0x5d, 0xee, 0x53, 0x9f, 0xba, 0xbb, 0xe5, 0x91, 0x88, 0xff, 0x2d, 0x97, 0x69, 0x28, 0x4f, 0xfd, 0xde, 0x82, 0x31, 0xfe, 0x85, 0xc9, 0xb6,
0x5f, 0x48, 0x62, 0xb2, 0x4d, 0x6c, 0x62, 0x34, 0x49, 0xa4, 0x30, 0x12, 0xe0, 0x38, 0x10, 0x83, 0x30, 0x74, 0xb9, 0x4f, 0x7d, 0xea, 0xee, 0x96, 0x7f, 0xb9, 0x89, 0xc9, 0x36, 0xb1, 0x89, 0xd1,
0xce, 0x43, 0x91, 0x17, 0x3a, 0xb1, 0xdc, 0x39, 0x75, 0x78, 0x50, 0x2e, 0x6e, 0x84, 0xc3, 0x38, 0x24, 0x91, 0xc4, 0x48, 0x80, 0xe3, 0x40, 0x0c, 0x3a, 0x0f, 0x45, 0x9e, 0xe8, 0xc4, 0x62, 0xe7,
0x4a, 0x83, 0x2e, 0x42, 0x51, 0x57, 0xf6, 0x13, 0x99, 0x33, 0xb8, 0x67, 0xd8, 0x08, 0xa7, 0x70, 0xd4, 0xe1, 0x41, 0xb9, 0xb8, 0x11, 0x36, 0xe3, 0x28, 0x0d, 0xba, 0x08, 0x45, 0x5d, 0xd9, 0x4f,
0x94, 0x0e, 0xbd, 0x07, 0x93, 0x4d, 0xcb, 0x8d, 0xdc, 0x87, 0x8b, 0xca, 0xaf, 0x5f, 0x13, 0xd3, 0x44, 0xce, 0xe0, 0xce, 0x62, 0x23, 0xec, 0xc2, 0x51, 0x3a, 0xf4, 0x1e, 0x4c, 0x36, 0x2d, 0x37,
0xae, 0xd6, 0xab, 0x88, 0x9d, 0x25, 0x97, 0x6b, 0x9b, 0x91, 0x31, 0x9c, 0x10, 0x27, 0x7f, 0x2f, 0x72, 0xb7, 0x2e, 0x32, 0xbf, 0x7e, 0x4d, 0x4c, 0xbb, 0xa6, 0xaf, 0x22, 0x76, 0x96, 0x5c, 0xae,
0x0f, 0x8f, 0xf4, 0xdc, 0xa0, 0x68, 0xb5, 0x47, 0x45, 0x32, 0xd7, 0x47, 0x35, 0xa2, 0xc0, 0x04, 0x6d, 0x46, 0xda, 0x70, 0x42, 0x9c, 0xfc, 0x83, 0x3c, 0x3c, 0xd2, 0x73, 0x81, 0xa2, 0xd5, 0x1e,
0x3b, 0x55, 0x72, 0x77, 0xf3, 0x03, 0x6b, 0xae, 0xcf, 0x03, 0x2b, 0x4f, 0x2f, 0xeb, 0x51, 0x08, 0x19, 0xc9, 0x5c, 0x1f, 0xd9, 0x88, 0x02, 0x13, 0xec, 0x54, 0xc9, 0x87, 0x9b, 0x1f, 0x58, 0x73,
0x1c, 0x47, 0x64, 0x25, 0x8c, 0xb8, 0xaa, 0xca, 0x2a, 0x61, 0x96, 0xe3, 0xd3, 0x38, 0x49, 0xcf, 0x7d, 0x1e, 0x58, 0x79, 0x78, 0x59, 0x8f, 0x42, 0xe0, 0x38, 0x22, 0x4b, 0x61, 0xc4, 0xb5, 0x57,
0x20, 0xc4, 0x4d, 0x52, 0xa2, 0x80, 0x09, 0x20, 0x56, 0xe2, 0xd3, 0x38, 0x49, 0x8f, 0x74, 0x28, 0x56, 0x0a, 0xb3, 0x1c, 0xef, 0xc6, 0x49, 0x7a, 0x06, 0x21, 0x6e, 0xa5, 0x12, 0x09, 0x4c, 0x00,
0x0b, 0xd4, 0xb8, 0xef, 0x23, 0x0f, 0x1c, 0x5e, 0x21, 0xf3, 0xd8, 0xe1, 0x41, 0xb9, 0xbc, 0xdc, 0xb1, 0x12, 0xef, 0xc6, 0x49, 0x7a, 0xa4, 0x43, 0x59, 0xa0, 0xc6, 0xc7, 0x3e, 0xf2, 0x58, 0xe2,
0x9b, 0x14, 0xdf, 0x0d, 0x4b, 0xde, 0x80, 0x89, 0x6b, 0xa6, 0x43, 0x6b, 0xa6, 0x4d, 0x79, 0xe6, 0x25, 0x32, 0x8f, 0x1d, 0x1e, 0x94, 0xcb, 0xcb, 0xbd, 0x49, 0xf1, 0xdd, 0xb0, 0xe4, 0x0d, 0x98,
0x42, 0x8f, 0x40, 0x5e, 0x57, 0x0d, 0x71, 0x4c, 0x2a, 0x0a, 0xb5, 0xf3, 0x6c, 0xe7, 0xb2, 0x71, 0xb8, 0x66, 0x3a, 0xb4, 0x66, 0xda, 0x94, 0x47, 0x2e, 0xf4, 0x08, 0xe4, 0x75, 0xd5, 0x10, 0xc7,
0x3e, 0xad, 0xec, 0x8b, 0x4d, 0x1d, 0x4e, 0x2b, 0xfb, 0x98, 0x8d, 0xcb, 0x57, 0x61, 0x54, 0x64, 0xa4, 0xa2, 0x50, 0x3b, 0xcf, 0x56, 0x2e, 0x6b, 0xe7, 0xdd, 0xca, 0xbe, 0x58, 0xd4, 0x61, 0xb7,
0xc4, 0x28, 0x50, 0xbe, 0x37, 0x50, 0x3e, 0x05, 0xe8, 0x5b, 0x39, 0x18, 0x15, 0x09, 0x64, 0x88, 0xb2, 0x8f, 0x59, 0xbb, 0x7c, 0x15, 0x46, 0x45, 0x44, 0x8c, 0x02, 0xe5, 0x7b, 0x03, 0xe5, 0x53,
0xa9, 0xe0, 0xf5, 0x58, 0x2a, 0xb8, 0x34, 0x58, 0x92, 0xcd, 0x0c, 0xfd, 0xad, 0x44, 0xe8, 0x7f, 0x80, 0xbe, 0x93, 0x83, 0x51, 0x11, 0x40, 0x86, 0x18, 0x0a, 0x5e, 0x8f, 0x85, 0x82, 0x4b, 0x83,
0x6e, 0x40, 0xfc, 0xde, 0xa1, 0xfe, 0x63, 0x09, 0x26, 0xe3, 0xe9, 0x9e, 0x85, 0x13, 0xf6, 0x01, 0x05, 0xd9, 0x4c, 0xd7, 0xdf, 0x4a, 0xb8, 0xfe, 0xe7, 0x06, 0xc4, 0xef, 0xed, 0xea, 0x3f, 0x96,
0xa9, 0x4d, 0x72, 0x3d, 0xbc, 0x8d, 0x08, 0xc2, 0x49, 0x3d, 0x9c, 0xc2, 0x51, 0x3a, 0x44, 0x02, 0x60, 0x32, 0x1e, 0xee, 0x99, 0x3b, 0x61, 0x1b, 0x48, 0x6d, 0x92, 0xeb, 0xe1, 0x6d, 0x44, 0xe0,
0x36, 0xb6, 0x1d, 0x84, 0x53, 0x2a, 0x19, 0x4a, 0xbb, 0x54, 0xd5, 0x2a, 0xde, 0xeb, 0x5e, 0x65, 0x4e, 0xea, 0x61, 0x17, 0x8e, 0xd2, 0x21, 0x12, 0xb0, 0xb1, 0xe5, 0x20, 0x06, 0xa5, 0x92, 0xa1,
0xcd, 0xa0, 0x37, 0xec, 0x3a, 0xb5, 0x55, 0xa3, 0xdd, 0x25, 0x86, 0xef, 0xac, 0x28, 0xae, 0xfc, 0xb4, 0x4b, 0x55, 0xad, 0xe2, 0xbd, 0x14, 0x56, 0xd6, 0x0c, 0x7a, 0xc3, 0xae, 0x53, 0x5b, 0x35,
0x43, 0x09, 0x8a, 0x42, 0xe1, 0xa1, 0xe7, 0xa2, 0xd7, 0xe2, 0xb9, 0xe8, 0xa9, 0x01, 0xcb, 0xa8, 0xda, 0x5d, 0x62, 0xf8, 0xca, 0x8a, 0xe2, 0xca, 0x3f, 0x92, 0xa0, 0x28, 0x14, 0x1e, 0x7a, 0x2c,
0xf4, 0xdc, 0xf3, 0x69, 0x68, 0x08, 0x2b, 0x9c, 0x58, 0x5d, 0xb7, 0x63, 0x3a, 0x34, 0x59, 0xd7, 0x7a, 0x2d, 0x1e, 0x8b, 0x9e, 0x1a, 0x30, 0x8d, 0x4a, 0x8f, 0x3d, 0x9f, 0x86, 0x86, 0xb0, 0xc4,
0xb1, 0xef, 0x0b, 0xf3, 0x19, 0xf4, 0xbf, 0x12, 0x9c, 0x54, 0x13, 0xa5, 0x96, 0xf0, 0xf3, 0x0b, 0x89, 0xe5, 0x75, 0x3b, 0xa6, 0x43, 0x93, 0x79, 0x1d, 0xdb, 0x5f, 0x98, 0xf7, 0xa0, 0xff, 0x97,
0x83, 0xa9, 0x16, 0xc0, 0x84, 0x0f, 0x9e, 0xc9, 0x19, 0xdc, 0x25, 0x52, 0x76, 0xa1, 0x8b, 0x0a, 0xe0, 0xa4, 0x9a, 0x48, 0xb5, 0xc4, 0x38, 0xbf, 0x30, 0x98, 0x6a, 0x01, 0x4c, 0xf8, 0x78, 0x9a,
0x29, 0x30, 0xb2, 0x43, 0xa9, 0x35, 0x60, 0x96, 0x4c, 0x2b, 0x22, 0xab, 0x63, 0xdc, 0xfc, 0x46, 0xec, 0xc1, 0x5d, 0x22, 0x65, 0x17, 0xba, 0xa8, 0x90, 0x02, 0x23, 0x3b, 0x94, 0x5a, 0x03, 0x46,
0xa3, 0x86, 0x39, 0xb4, 0xfc, 0x71, 0x2e, 0x70, 0x58, 0xdd, 0xfb, 0x40, 0x82, 0x32, 0x57, 0xba, 0xc9, 0xb4, 0x24, 0xb2, 0x3a, 0xc6, 0xcd, 0x6f, 0x34, 0x6a, 0x98, 0x43, 0xcb, 0x1f, 0xe7, 0x82,
0x1f, 0x65, 0x6e, 0x31, 0xad, 0xc4, 0x45, 0xaf, 0x40, 0x9e, 0x6a, 0x83, 0xde, 0x04, 0x0a, 0x09, 0x01, 0xab, 0x7b, 0x1b, 0x24, 0x48, 0x73, 0xa5, 0xfb, 0x91, 0xe6, 0x16, 0xd3, 0x52, 0x5c, 0xf4,
0x8d, 0xf5, 0x7a, 0x18, 0xa4, 0x1a, 0xeb, 0x75, 0xcc, 0x20, 0xd1, 0x9b, 0x50, 0x60, 0x87, 0x08, 0x0a, 0xe4, 0xa9, 0x36, 0xe8, 0x4d, 0xa0, 0x90, 0xd0, 0x58, 0xaf, 0x87, 0x4e, 0xaa, 0xb1, 0x5e,
0xf6, 0x7d, 0xe7, 0x07, 0x8f, 0x1f, 0xcc, 0x5f, 0xe1, 0x0e, 0x63, 0xbf, 0x1c, 0xec, 0xe1, 0xca, 0xc7, 0x0c, 0x12, 0xbd, 0x09, 0x05, 0x76, 0x88, 0x60, 0xfb, 0x3b, 0x3f, 0xb8, 0xff, 0x60, 0xe3,
0xef, 0xc2, 0x44, 0x2c, 0x08, 0xa0, 0x5b, 0x70, 0x42, 0x33, 0x95, 0x56, 0x55, 0xd1, 0x14, 0xa3, 0x15, 0xae, 0x30, 0xf6, 0xe5, 0x60, 0x0f, 0x57, 0x7e, 0x17, 0x26, 0x62, 0x4e, 0x00, 0xdd, 0x82,
0x49, 0xfc, 0xe7, 0xa5, 0x7f, 0xee, 0x1d, 0x0e, 0xd7, 0x23, 0x1c, 0x22, 0x98, 0x04, 0x8f, 0xce, 0x13, 0x9a, 0xa9, 0xb4, 0xaa, 0x8a, 0xa6, 0x18, 0x4d, 0xe2, 0x3f, 0x55, 0xfd, 0x6b, 0x6f, 0x77,
0xd1, 0x39, 0x1c, 0xc3, 0x96, 0x15, 0x80, 0xd0, 0x7a, 0x54, 0x86, 0x02, 0xdb, 0xc2, 0xde, 0x81, 0xb8, 0x1e, 0xe1, 0x10, 0xce, 0x24, 0x78, 0xc0, 0x8e, 0xf6, 0xe1, 0x18, 0xb6, 0xac, 0x00, 0x84,
0x60, 0xbc, 0x3a, 0xce, 0x74, 0x65, 0x3b, 0xdb, 0xc1, 0xde, 0x38, 0xba, 0x00, 0xe0, 0x90, 0xa6, 0xd6, 0xa3, 0x32, 0x14, 0xd8, 0x12, 0xf6, 0x0e, 0x04, 0xe3, 0xd5, 0x71, 0xa6, 0x2b, 0x5b, 0xd9,
0x4d, 0x28, 0x8f, 0x39, 0xde, 0x85, 0x7b, 0x10, 0x7d, 0xeb, 0xc1, 0x0c, 0x8e, 0x50, 0xc9, 0x3f, 0x0e, 0xf6, 0xda, 0xd1, 0x05, 0x00, 0x87, 0x34, 0x6d, 0x42, 0xb9, 0xcf, 0xf1, 0x2e, 0xdc, 0x03,
0x93, 0x60, 0xe2, 0x3a, 0xa1, 0x6f, 0x9b, 0xf6, 0x6e, 0xcd, 0xd4, 0xd4, 0x66, 0x67, 0x88, 0xb1, 0xef, 0x5b, 0x0f, 0x7a, 0x70, 0x84, 0x4a, 0xfe, 0xb9, 0x04, 0x13, 0xd7, 0x09, 0x7d, 0xdb, 0xb4,
0x7e, 0x2b, 0x16, 0xeb, 0x5f, 0xec, 0x73, 0xad, 0x62, 0x5a, 0x66, 0x45, 0x7c, 0xf9, 0x8f, 0x12, 0x77, 0x6b, 0xa6, 0xa6, 0x36, 0x3b, 0x43, 0xf4, 0xf5, 0x5b, 0x31, 0x5f, 0xff, 0x62, 0x9f, 0x73,
0x94, 0x62, 0x94, 0xd1, 0xf0, 0x40, 0xa0, 0x60, 0x99, 0x36, 0xf5, 0x8f, 0x54, 0x47, 0xd2, 0x80, 0x15, 0xd3, 0x32, 0xcb, 0xe3, 0xcb, 0x7f, 0x92, 0xa0, 0x14, 0xa3, 0x8c, 0xba, 0x07, 0x02, 0x05,
0x05, 0xd2, 0xc8, 0xa1, 0x8a, 0xc1, 0x62, 0x0f, 0x9d, 0xd9, 0xb9, 0x6d, 0x9b, 0xba, 0xd8, 0xef, 0xcb, 0xb4, 0xa9, 0x7f, 0xa4, 0x3a, 0x92, 0x06, 0xcc, 0x91, 0x46, 0x0e, 0x55, 0x0c, 0x16, 0x7b,
0x47, 0x93, 0x42, 0x88, 0x1d, 0xda, 0xb9, 0x6a, 0x9b, 0x3a, 0xe6, 0xd8, 0xf2, 0x2f, 0x24, 0x98, 0xe8, 0xcc, 0xce, 0x6d, 0xdb, 0xd4, 0xc5, 0x7a, 0x3f, 0x9a, 0x14, 0x42, 0xec, 0xd0, 0xce, 0x55,
0x8e, 0x51, 0x0e, 0x3d, 0x90, 0x2b, 0xf1, 0x40, 0xfe, 0xdc, 0x51, 0xcc, 0xca, 0x08, 0xe7, 0x7f, 0xdb, 0xd4, 0x31, 0xc7, 0x96, 0x7f, 0x29, 0xc1, 0x74, 0x8c, 0x72, 0xe8, 0x8e, 0x5c, 0x89, 0x3b,
0x4e, 0x1a, 0xc5, 0xcc, 0x47, 0x2d, 0x28, 0x5a, 0x66, 0xab, 0x7e, 0xe4, 0xf7, 0x5c, 0x7e, 0x00, 0xf2, 0xe7, 0x8e, 0x62, 0x56, 0x86, 0x3b, 0xff, 0x4b, 0xd2, 0x28, 0x66, 0x3e, 0x6a, 0x41, 0xd1,
0xa8, 0x85, 0x48, 0x38, 0x0a, 0x8b, 0xf6, 0x60, 0xda, 0x50, 0x74, 0xe2, 0x58, 0x4a, 0x93, 0xd4, 0x32, 0x5b, 0xf5, 0x23, 0xbf, 0x0d, 0xf3, 0x03, 0x40, 0x2d, 0x44, 0xc2, 0x51, 0x58, 0xb4, 0x07,
0x8f, 0x7c, 0x01, 0xfd, 0xc0, 0xe1, 0x41, 0x79, 0xfa, 0x7a, 0x12, 0x0f, 0x77, 0x8b, 0x90, 0xbf, 0xd3, 0x86, 0xa2, 0x13, 0xc7, 0x52, 0x9a, 0xa4, 0x7e, 0xe4, 0x0b, 0xe8, 0x07, 0x0e, 0x0f, 0xca,
0xdb, 0x65, 0xb3, 0x69, 0x53, 0xf4, 0x32, 0x8c, 0xf1, 0x36, 0x9d, 0xa6, 0xa9, 0x89, 0x64, 0x76, 0xd3, 0xd7, 0x93, 0x78, 0xb8, 0x5b, 0x84, 0xfc, 0xfd, 0x2e, 0x9b, 0x4d, 0x9b, 0xa2, 0x97, 0x61,
0x91, 0x2d, 0x4b, 0x4d, 0x8c, 0xdd, 0x39, 0x28, 0xff, 0x53, 0xcf, 0x77, 0x33, 0x9f, 0x10, 0x07, 0x8c, 0x97, 0xfc, 0x34, 0x4d, 0x4d, 0x04, 0xb3, 0x8b, 0x6c, 0x5a, 0x6a, 0xa2, 0xed, 0xce, 0x41,
0x30, 0x68, 0x1d, 0x46, 0xac, 0xc1, 0x8b, 0x0a, 0x9e, 0x48, 0x78, 0x25, 0xc1, 0x51, 0xba, 0x97, 0xf9, 0x5f, 0x7a, 0xbe, 0x9b, 0xf9, 0x84, 0x38, 0x80, 0x41, 0xeb, 0x30, 0x62, 0x0d, 0x9e, 0x54,
0x8a, 0xa7, 0x93, 0x9d, 0xfb, 0xb4, 0x54, 0x41, 0x09, 0x93, 0xb9, 0x5c, 0x36, 0x8c, 0x8a, 0x9c, 0xf0, 0x40, 0xc2, 0x33, 0x09, 0x8e, 0xd2, 0x3d, 0x55, 0x3c, 0x9c, 0xec, 0xdc, 0xa7, 0xa9, 0x0a,
0x2a, 0xf6, 0xe3, 0xd5, 0xa3, 0xec, 0xc7, 0x68, 0x1e, 0x08, 0x6e, 0x6a, 0xfc, 0x41, 0x5f, 0x90, 0x52, 0x98, 0xcc, 0xe9, 0xb2, 0x61, 0x54, 0xc4, 0x54, 0xb1, 0x1e, 0xaf, 0x1e, 0x65, 0x3d, 0x46,
0xfc, 0x4b, 0x09, 0xa6, 0xb9, 0x42, 0x4d, 0xd7, 0x56, 0x69, 0x67, 0xe8, 0xf1, 0x72, 0x3b, 0x16, 0xe3, 0x40, 0x70, 0x53, 0xe3, 0x37, 0xfa, 0x82, 0xe4, 0x5f, 0x49, 0x30, 0xcd, 0x15, 0x6a, 0xba,
0x2f, 0x57, 0xfa, 0x34, 0xb0, 0x4b, 0xd3, 0xcc, 0x98, 0xf9, 0x1b, 0x09, 0x1e, 0xe8, 0xa2, 0x1e, 0xb6, 0x4a, 0x3b, 0x43, 0xf7, 0x97, 0xdb, 0x31, 0x7f, 0xb9, 0xd2, 0xa7, 0x81, 0x5d, 0x9a, 0x66,
0x7a, 0x3c, 0x21, 0xf1, 0x78, 0xf2, 0xe2, 0x51, 0xcd, 0xcb, 0x88, 0x29, 0xb7, 0x21, 0xc5, 0x38, 0xfa, 0xcc, 0xdf, 0x4a, 0xf0, 0x40, 0x17, 0xf5, 0xd0, 0xfd, 0x09, 0x89, 0xfb, 0x93, 0x17, 0x8f,
0xbe, 0x59, 0x2f, 0x00, 0x58, 0xb6, 0xba, 0xa7, 0x6a, 0xa4, 0x2d, 0x5a, 0x29, 0xc6, 0xc2, 0x05, 0x6a, 0x5e, 0x86, 0x4f, 0xb9, 0x0d, 0x29, 0xc6, 0xf1, 0xc5, 0x7a, 0x01, 0xc0, 0xb2, 0xd5, 0x3d,
0xa9, 0x05, 0x33, 0x38, 0x42, 0x85, 0xfe, 0x1b, 0xe6, 0x5a, 0x64, 0x5b, 0x71, 0x35, 0xba, 0xd4, 0x55, 0x23, 0x6d, 0x51, 0x96, 0x31, 0x16, 0x4e, 0x48, 0x2d, 0xe8, 0xc1, 0x11, 0x2a, 0xf4, 0xbf,
0x6a, 0x2d, 0x2b, 0x96, 0xb2, 0xa5, 0x6a, 0x2a, 0x55, 0xc5, 0xe5, 0xe5, 0x78, 0xf5, 0x8a, 0xd7, 0x30, 0xd7, 0x22, 0xdb, 0x8a, 0xab, 0xd1, 0xa5, 0x56, 0x6b, 0x59, 0xb1, 0x94, 0x2d, 0x55, 0x53,
0xe2, 0x90, 0x46, 0x71, 0xe7, 0xa0, 0xfc, 0x44, 0xef, 0xb7, 0x6e, 0x9f, 0xb8, 0x83, 0x33, 0x84, 0xa9, 0x2a, 0x2e, 0x2f, 0xc7, 0xab, 0x57, 0xbc, 0x72, 0x89, 0x34, 0x8a, 0x3b, 0x07, 0xe5, 0x27,
0xa0, 0xff, 0x91, 0xa0, 0x64, 0x93, 0xb7, 0x5c, 0x76, 0x5e, 0x5d, 0xb1, 0x4d, 0x2b, 0xa6, 0x41, 0x7a, 0xbf, 0x75, 0xfb, 0xc4, 0x1d, 0x9c, 0x21, 0x04, 0xfd, 0x9f, 0x04, 0x25, 0x9b, 0xbc, 0xe5,
0x9e, 0x6b, 0x70, 0xf5, 0xf0, 0xa0, 0x5c, 0xc2, 0x19, 0x34, 0xfd, 0xe8, 0x90, 0x29, 0x08, 0x51, 0xb2, 0xf3, 0xea, 0x8a, 0x6d, 0x5a, 0x31, 0x0d, 0xf2, 0x5c, 0x83, 0xab, 0x87, 0x07, 0xe5, 0x12,
0x98, 0x51, 0x34, 0xcd, 0x7c, 0x9b, 0xc4, 0x3d, 0x30, 0xc2, 0xe5, 0x57, 0x0f, 0x0f, 0xca, 0x33, 0xce, 0xa0, 0xe9, 0x47, 0x87, 0x4c, 0x41, 0x88, 0xc2, 0x8c, 0xa2, 0x69, 0xe6, 0xdb, 0x24, 0x3e,
0x4b, 0xdd, 0xd3, 0xfd, 0x88, 0x4e, 0x83, 0x47, 0x8b, 0x30, 0xba, 0x67, 0x6a, 0xae, 0x4e, 0x9c, 0x02, 0x23, 0x5c, 0x7e, 0xf5, 0xf0, 0xa0, 0x3c, 0xb3, 0xd4, 0xdd, 0xdd, 0x8f, 0xe8, 0x34, 0x78,
0x52, 0x81, 0x4b, 0x62, 0x31, 0x76, 0xf4, 0xa6, 0x37, 0x74, 0xe7, 0xa0, 0x7c, 0x7c, 0xb5, 0xce, 0xb4, 0x08, 0xa3, 0x7b, 0xa6, 0xe6, 0xea, 0xc4, 0x29, 0x15, 0xb8, 0x24, 0xe6, 0x63, 0x47, 0x6f,
0x6f, 0x95, 0x7d, 0x2a, 0x76, 0x06, 0x63, 0x75, 0x91, 0xf8, 0xd0, 0xf9, 0x93, 0xd6, 0x58, 0x18, 0x7a, 0x4d, 0x77, 0x0e, 0xca, 0xc7, 0x57, 0xeb, 0xfc, 0x56, 0xd9, 0xa7, 0x62, 0x67, 0x30, 0x96,
0x59, 0xae, 0x85, 0x53, 0x38, 0x4a, 0x87, 0x74, 0x18, 0xdf, 0x11, 0xe7, 0x71, 0xa7, 0x34, 0x3a, 0x17, 0x89, 0x8d, 0xce, 0x9f, 0xb4, 0xc6, 0x42, 0xcf, 0x72, 0x2d, 0xec, 0xc2, 0x51, 0x3a, 0xa4,
0x50, 0xae, 0x8b, 0x9d, 0xe7, 0xab, 0xd3, 0x42, 0xe4, 0xb8, 0x3f, 0xec, 0xe0, 0x50, 0x02, 0x7a, 0xc3, 0xf8, 0x8e, 0x38, 0x8f, 0x3b, 0xa5, 0xd1, 0x81, 0x62, 0x5d, 0xec, 0x3c, 0x5f, 0x9d, 0x16,
0x12, 0x46, 0xf9, 0x8f, 0xb5, 0x15, 0xfe, 0x10, 0x36, 0x16, 0xc6, 0x9f, 0x6b, 0xde, 0x30, 0xf6, 0x22, 0xc7, 0xfd, 0x66, 0x07, 0x87, 0x12, 0xd0, 0x93, 0x30, 0xca, 0x3f, 0xd6, 0x56, 0xf8, 0x43,
0xe7, 0x7d, 0xd2, 0xb5, 0xda, 0x32, 0x7f, 0xb7, 0x4a, 0x90, 0xae, 0xd5, 0x96, 0xb1, 0x3f, 0x8f, 0xd8, 0x58, 0xe8, 0x7f, 0xae, 0x79, 0xcd, 0xd8, 0xef, 0xf7, 0x49, 0xd7, 0x6a, 0xcb, 0xfc, 0xdd,
0x2c, 0x18, 0x75, 0xc8, 0xba, 0x6a, 0xb8, 0xfb, 0x25, 0xe0, 0xdf, 0xed, 0x95, 0x7e, 0xef, 0xdc, 0x2a, 0x41, 0xba, 0x56, 0x5b, 0xc6, 0x7e, 0x3f, 0xb2, 0x60, 0xd4, 0x21, 0xeb, 0xaa, 0xe1, 0xee,
0xae, 0x70, 0xee, 0xc4, 0x2d, 0x7f, 0x28, 0x51, 0xcc, 0x63, 0x5f, 0x0c, 0xda, 0x87, 0x71, 0xdb, 0x97, 0x80, 0xef, 0xdb, 0x2b, 0xfd, 0xde, 0xb9, 0x5d, 0xe1, 0xdc, 0x89, 0x5b, 0xfe, 0x50, 0xa2,
0x35, 0x96, 0x9c, 0x4d, 0x87, 0xd8, 0xa5, 0x22, 0x97, 0xd9, 0x6f, 0x48, 0xc6, 0x3e, 0x7f, 0x52, 0xe8, 0xc7, 0xbe, 0x18, 0xb4, 0x0f, 0xe3, 0xb6, 0x6b, 0x2c, 0x39, 0x9b, 0x0e, 0xb1, 0x4b, 0x45,
0x6a, 0xe0, 0xc1, 0x80, 0x02, 0x87, 0xc2, 0xd0, 0x47, 0x12, 0x20, 0xc7, 0xb5, 0x2c, 0x8d, 0xe8, 0x2e, 0xb3, 0x5f, 0x97, 0x8c, 0x7d, 0xfe, 0xa4, 0xd4, 0x60, 0x04, 0x03, 0x0a, 0x1c, 0x0a, 0x43,
0xc4, 0xa0, 0x8a, 0xc6, 0x1f, 0x1a, 0x9c, 0xd2, 0x09, 0xae, 0x43, 0xad, 0xef, 0xbb, 0xc6, 0x24, 0x1f, 0x49, 0x80, 0x1c, 0xd7, 0xb2, 0x34, 0xa2, 0x13, 0x83, 0x2a, 0x1a, 0x7f, 0x68, 0x70, 0x4a,
0x50, 0x52, 0x99, 0xe0, 0x15, 0xaf, 0x9b, 0x14, 0xa7, 0xe8, 0xc1, 0x96, 0x62, 0xdb, 0xe1, 0x7f, 0x27, 0xb8, 0x0e, 0xb5, 0xbe, 0xef, 0x1a, 0x93, 0x40, 0x49, 0x65, 0x82, 0x57, 0xbc, 0x6e, 0x52,
0x97, 0x26, 0x06, 0x5a, 0x8a, 0xf4, 0x07, 0x97, 0x70, 0x29, 0xc4, 0x3c, 0xf6, 0xc5, 0xa0, 0x9b, 0x9c, 0xa2, 0x07, 0x9b, 0x8a, 0x6d, 0x87, 0xff, 0x2e, 0x4d, 0x0c, 0x34, 0x15, 0xe9, 0x0f, 0x2e,
0x30, 0x67, 0x13, 0xa5, 0x75, 0xc3, 0xd0, 0x3a, 0xd8, 0x34, 0xe9, 0xaa, 0xaa, 0x11, 0xa7, 0xe3, 0xe1, 0x54, 0x88, 0x7e, 0xec, 0x8b, 0x41, 0x37, 0x61, 0xce, 0x26, 0x4a, 0xeb, 0x86, 0xa1, 0x75,
0x50, 0xa2, 0x97, 0x26, 0xf9, 0xb6, 0x09, 0x7a, 0xb1, 0x70, 0x2a, 0x15, 0xce, 0xe0, 0xe6, 0x4d, 0xb0, 0x69, 0xd2, 0x55, 0x55, 0x23, 0x4e, 0xc7, 0xa1, 0x44, 0x2f, 0x4d, 0xf2, 0x65, 0x13, 0xd4,
0x55, 0xe2, 0x96, 0x6c, 0xb8, 0x5d, 0x96, 0x47, 0x6b, 0xaa, 0x0a, 0x55, 0x1c, 0x5a, 0x53, 0x55, 0x75, 0xe1, 0x54, 0x2a, 0x9c, 0xc1, 0xcd, 0x8b, 0xaa, 0xc4, 0x2d, 0xd9, 0x70, 0x2b, 0x36, 0x8f,
0x44, 0x44, 0xef, 0xab, 0xa1, 0xbf, 0xe4, 0x60, 0x26, 0x24, 0xbe, 0xe7, 0xa6, 0xaa, 0x14, 0x96, 0x56, 0x54, 0x15, 0xaa, 0x38, 0xb4, 0xa2, 0xaa, 0x88, 0x88, 0xde, 0x57, 0x43, 0x7f, 0xcd, 0xc1,
0xaf, 0xa0, 0xa9, 0x2a, 0xbd, 0x2f, 0x29, 0x3f, 0xdc, 0xbe, 0xa4, 0x21, 0xb4, 0x72, 0xf1, 0x56, 0x4c, 0x48, 0x7c, 0xcf, 0x45, 0x55, 0x29, 0x2c, 0x5f, 0x41, 0x51, 0x55, 0x7a, 0x5d, 0x52, 0x7e,
0xa7, 0xd0, 0x85, 0x7f, 0xef, 0xad, 0x4e, 0xa1, 0xa6, 0x59, 0xb7, 0x5c, 0xb9, 0xa8, 0x39, 0xff, 0xb8, 0x75, 0x49, 0x43, 0x28, 0xe5, 0xe2, 0xa5, 0x4e, 0xe1, 0x10, 0xfe, 0xa3, 0x97, 0x3a, 0x85,
0x30, 0xfd, 0x34, 0x29, 0xed, 0x2d, 0x23, 0xfd, 0xb5, 0xb7, 0xc8, 0x9f, 0xe7, 0xe1, 0x64, 0xf2, 0x9a, 0x66, 0xdd, 0x72, 0xe5, 0xa2, 0xe6, 0xfc, 0xd3, 0xd4, 0xd3, 0xa4, 0x94, 0xb7, 0x8c, 0xf4,
0x5b, 0x8d, 0xb5, 0x55, 0x48, 0x77, 0x6d, 0xab, 0xa8, 0xc1, 0xec, 0xb6, 0xab, 0x69, 0x1d, 0xee, 0x57, 0xde, 0x22, 0x7f, 0x9e, 0x87, 0x93, 0xc9, 0xbd, 0x1a, 0x2b, 0xab, 0x90, 0xee, 0x5a, 0x56,
0x90, 0xc8, 0xab, 0x82, 0x77, 0xff, 0xfe, 0xb0, 0xe0, 0x9c, 0x5d, 0x4d, 0xa1, 0xc1, 0xa9, 0x9c, 0x51, 0x83, 0xd9, 0x6d, 0x57, 0xd3, 0x3a, 0x7c, 0x40, 0x22, 0xaf, 0x0a, 0xde, 0xfd, 0xfb, 0xc3,
0x19, 0x2d, 0x22, 0xf9, 0x81, 0x5a, 0x44, 0xba, 0x3a, 0x14, 0x46, 0xee, 0xbd, 0x43, 0x21, 0xbd, 0x82, 0x73, 0x76, 0x35, 0x85, 0x06, 0xa7, 0x72, 0x66, 0x94, 0x88, 0xe4, 0x07, 0x2a, 0x11, 0xe9,
0xdd, 0xa3, 0x30, 0x40, 0xbb, 0xc7, 0xfd, 0xe8, 0xcf, 0x48, 0x09, 0x79, 0x77, 0xeb, 0xcf, 0x90, 0xaa, 0x50, 0x18, 0xb9, 0xf7, 0x0a, 0x85, 0xf4, 0x72, 0x8f, 0xc2, 0x00, 0xe5, 0x1e, 0xf7, 0xa3,
0x1f, 0x86, 0x79, 0xc1, 0xc6, 0x7e, 0x2f, 0x9b, 0x06, 0xb5, 0x4d, 0x4d, 0x23, 0xf6, 0x8a, 0xab, 0x3e, 0x23, 0xc5, 0xe5, 0xdd, 0xad, 0x3e, 0x43, 0x7e, 0x18, 0xe6, 0x05, 0x1b, 0xfb, 0x5e, 0x36,
0xeb, 0x1d, 0xf9, 0x32, 0x4c, 0xc6, 0x9b, 0x84, 0xbc, 0x95, 0xf7, 0xfa, 0x96, 0xc4, 0xab, 0x48, 0x0d, 0x6a, 0x9b, 0x9a, 0x46, 0xec, 0x15, 0x57, 0xd7, 0x3b, 0xf2, 0x65, 0x98, 0x8c, 0x17, 0x09,
0x64, 0xe5, 0xbd, 0x71, 0x1c, 0x50, 0xc8, 0xbf, 0x93, 0xe0, 0x54, 0x46, 0xab, 0x04, 0xba, 0x05, 0x79, 0x33, 0xef, 0xd5, 0x2d, 0x89, 0x57, 0x91, 0xc8, 0xcc, 0x7b, 0xed, 0x38, 0xa0, 0x90, 0x7f,
0x93, 0xba, 0xb2, 0x1f, 0x69, 0x60, 0x11, 0x41, 0xa5, 0xdf, 0x63, 0x35, 0x7f, 0xe2, 0xdb, 0x88, 0x2f, 0xc1, 0xa9, 0x8c, 0x52, 0x09, 0x74, 0x0b, 0x26, 0x75, 0x65, 0x3f, 0x52, 0xc0, 0x22, 0x9c,
0x21, 0xe1, 0x04, 0x32, 0xcf, 0xb3, 0xca, 0x7e, 0xdd, 0xb5, 0xdb, 0x64, 0xc0, 0xc3, 0x3b, 0xff, 0x4a, 0xbf, 0xc7, 0x6a, 0xfe, 0xc4, 0xb7, 0x11, 0x43, 0xc2, 0x09, 0x64, 0x1e, 0x67, 0x95, 0xfd,
0x7c, 0x37, 0x04, 0x06, 0x0e, 0xd0, 0xe4, 0x4f, 0x24, 0x28, 0x65, 0x15, 0x5d, 0xe8, 0x62, 0xac, 0xba, 0x6b, 0xb7, 0xc9, 0x80, 0x87, 0x77, 0xbe, 0x7d, 0x37, 0x04, 0x06, 0x0e, 0xd0, 0xe4, 0x4f,
0xa1, 0xe3, 0xd1, 0x44, 0x43, 0xc7, 0x74, 0x17, 0xdf, 0x57, 0xd4, 0xce, 0xf1, 0xa9, 0x04, 0x73, 0x24, 0x28, 0x65, 0x25, 0x5d, 0xe8, 0x62, 0xac, 0xa0, 0xe3, 0xd1, 0x44, 0x41, 0xc7, 0x74, 0x17,
0xe9, 0xc5, 0x29, 0xfa, 0x97, 0x98, 0xc6, 0xe5, 0x84, 0xc6, 0x53, 0x09, 0x2e, 0xa1, 0xef, 0x0e, 0xdf, 0x57, 0x54, 0xce, 0xf1, 0xa9, 0x04, 0x73, 0xe9, 0xc9, 0x29, 0xfa, 0xb7, 0x98, 0xc6, 0xe5,
0x4c, 0x8a, 0x12, 0x56, 0xc0, 0xdc, 0xc3, 0xbf, 0xc7, 0xec, 0x05, 0xf5, 0xb1, 0x5f, 0x8c, 0xf1, 0x84, 0xc6, 0x53, 0x09, 0x2e, 0xa1, 0xef, 0x0e, 0x4c, 0x8a, 0x14, 0x56, 0xc0, 0xdc, 0xc3, 0x5f,
0x75, 0x8c, 0x8f, 0xe1, 0x04, 0xae, 0xfc, 0x8d, 0x1c, 0x14, 0xf8, 0x5b, 0xe7, 0x10, 0x2b, 0xa7, 0x6d, 0xf6, 0x82, 0xfc, 0xd8, 0x4f, 0xc6, 0xf8, 0x3c, 0xc6, 0xdb, 0x70, 0x02, 0x57, 0xfe, 0x56,
0x57, 0x63, 0x95, 0x53, 0xbf, 0xff, 0x68, 0xc1, 0xb5, 0xcb, 0x2c, 0x9a, 0xb6, 0x12, 0x45, 0xd3, 0x0e, 0x0a, 0xfc, 0xad, 0x73, 0x88, 0x99, 0xd3, 0xab, 0xb1, 0xcc, 0xa9, 0xdf, 0x3f, 0x6d, 0x70,
0xa5, 0x81, 0xd0, 0x7b, 0xd7, 0x4b, 0xcf, 0xc0, 0x78, 0xa0, 0x44, 0x7f, 0x81, 0x9a, 0x55, 0xa7, 0xed, 0x32, 0x93, 0xa6, 0xad, 0x44, 0xd2, 0x74, 0x69, 0x20, 0xf4, 0xde, 0xf9, 0xd2, 0x33, 0x30,
0xc5, 0x88, 0x88, 0x3e, 0xc3, 0xfc, 0x5e, 0x2c, 0x4d, 0x0e, 0xf2, 0x7f, 0x5c, 0x11, 0xd9, 0x15, 0x1e, 0x28, 0xd1, 0x9f, 0xa3, 0x66, 0xd9, 0x69, 0x31, 0x22, 0xa2, 0x4f, 0x37, 0xbf, 0x17, 0x0b,
0x3f, 0x55, 0x7a, 0x9d, 0xbf, 0x61, 0xab, 0x42, 0x77, 0x06, 0xbd, 0x0c, 0x93, 0xde, 0x3f, 0xc3, 0x93, 0x83, 0xfc, 0x27, 0x2c, 0x22, 0xbb, 0xe2, 0x87, 0x4a, 0xaf, 0xf2, 0x37, 0x2c, 0x55, 0xe8,
0x05, 0x97, 0x66, 0x79, 0xbe, 0x7b, 0x83, 0x5e, 0xf2, 0x46, 0x6c, 0x16, 0x27, 0xa8, 0xe7, 0x9f, 0x8e, 0xa0, 0x97, 0x61, 0xd2, 0xfb, 0x63, 0x5d, 0x70, 0x69, 0x96, 0xe7, 0xab, 0x37, 0xa8, 0x25,
0x85, 0x89, 0x98, 0xb0, 0xbe, 0x1a, 0x75, 0x7f, 0x20, 0xc1, 0x6c, 0x5a, 0x73, 0x05, 0x3a, 0x0d, 0x6f, 0xc4, 0x7a, 0x71, 0x82, 0x7a, 0xfe, 0x59, 0x98, 0x88, 0x09, 0xeb, 0xab, 0x50, 0xf7, 0x87,
0x23, 0xbb, 0xaa, 0x78, 0x13, 0x8a, 0xbc, 0xa3, 0xfd, 0xbb, 0x6a, 0xb4, 0x30, 0x9f, 0x09, 0xfa, 0x12, 0xcc, 0xa6, 0x15, 0x57, 0xa0, 0xd3, 0x30, 0xb2, 0xab, 0x8a, 0x37, 0xa1, 0xc8, 0x3b, 0xda,
0xac, 0x73, 0x99, 0x7d, 0xd6, 0x17, 0x00, 0x14, 0x4b, 0x15, 0xff, 0x60, 0x28, 0xac, 0x0a, 0x36, 0x7f, 0xaa, 0x46, 0x0b, 0xf3, 0x9e, 0xa0, 0xce, 0x3a, 0x97, 0x59, 0x67, 0x7d, 0x01, 0x40, 0xb1,
0x6f, 0xf8, 0xaf, 0x87, 0x38, 0x42, 0xc5, 0x9f, 0x4d, 0x43, 0x7d, 0x44, 0x41, 0x18, 0xbe, 0x67, 0x54, 0xf1, 0x67, 0x45, 0x61, 0x55, 0xb0, 0x78, 0xc3, 0xbf, 0x31, 0xe2, 0x08, 0x15, 0x7f, 0x36,
0x46, 0x54, 0x8d, 0xd2, 0xc9, 0x3f, 0x92, 0xe0, 0xd1, 0xbb, 0x1e, 0xdc, 0x50, 0x35, 0x16, 0x1e, 0x0d, 0xf5, 0x11, 0x09, 0x61, 0xf8, 0x9e, 0x19, 0x51, 0x35, 0x4a, 0x27, 0xff, 0x58, 0x82, 0x47,
0x2a, 0x89, 0xf0, 0xb0, 0x90, 0x0d, 0xf0, 0x15, 0x36, 0xab, 0x7d, 0x90, 0x03, 0xd4, 0xd8, 0x51, 0xef, 0x7a, 0x70, 0x43, 0xd5, 0x98, 0x7b, 0xa8, 0x24, 0xdc, 0xc3, 0x42, 0x36, 0xc0, 0x57, 0x58,
0xed, 0x56, 0x4d, 0xb1, 0x69, 0x07, 0x0b, 0x03, 0x87, 0x18, 0x30, 0x2e, 0x42, 0xb1, 0x45, 0x9c, 0xac, 0xf6, 0x41, 0x0e, 0x50, 0x63, 0x47, 0xb5, 0x5b, 0x35, 0xc5, 0xa6, 0x1d, 0x2c, 0x0c, 0x1c,
0xa6, 0xad, 0x72, 0x27, 0x89, 0xe5, 0x0c, 0x3c, 0xbe, 0x12, 0x4e, 0xe1, 0x28, 0x1d, 0x6a, 0xc3, 0xa2, 0xc3, 0xb8, 0x08, 0xc5, 0x16, 0x71, 0x9a, 0xb6, 0xca, 0x07, 0x49, 0x4c, 0x67, 0x30, 0xe2,
0xd8, 0x9e, 0xb7, 0x66, 0xfe, 0xd3, 0x5b, 0xbf, 0x55, 0x6f, 0xb8, 0x03, 0xc2, 0xef, 0x43, 0x0c, 0x2b, 0x61, 0x17, 0x8e, 0xd2, 0xa1, 0x36, 0x8c, 0xed, 0x79, 0x73, 0xe6, 0x3f, 0xbd, 0xf5, 0x9b,
0x38, 0x38, 0x00, 0x97, 0x3f, 0x94, 0x60, 0xae, 0xdb, 0x21, 0x2b, 0x4c, 0xf5, 0xe1, 0x39, 0xe5, 0xf5, 0x86, 0x2b, 0x20, 0xdc, 0x1f, 0xa2, 0xc1, 0xc1, 0x01, 0xb8, 0xfc, 0xa1, 0x04, 0x73, 0xdd,
0x61, 0x18, 0xe1, 0xa8, 0xcc, 0x1b, 0x27, 0xbc, 0xab, 0x6f, 0x26, 0x11, 0xf3, 0x51, 0xf9, 0x4b, 0x03, 0xb2, 0xc2, 0x54, 0x1f, 0xde, 0xa0, 0x3c, 0x0c, 0x23, 0x1c, 0x95, 0x8d, 0xc6, 0x09, 0xef,
0x09, 0xe6, 0xd3, 0x55, 0x1a, 0xfa, 0x49, 0xe3, 0x56, 0xfc, 0xa4, 0xd1, 0xef, 0x4d, 0x42, 0xba, 0xea, 0x9b, 0x49, 0xc4, 0xbc, 0x55, 0xfe, 0x52, 0x82, 0xf9, 0x74, 0x95, 0x86, 0x7e, 0xd2, 0xb8,
0xd6, 0x19, 0xa7, 0x8e, 0xcf, 0x53, 0x3d, 0x3f, 0x74, 0x13, 0xb7, 0xe3, 0x26, 0x2e, 0x1d, 0xd9, 0x15, 0x3f, 0x69, 0xf4, 0x7b, 0x93, 0x90, 0xae, 0x75, 0xc6, 0xa9, 0xe3, 0xf3, 0xd4, 0x91, 0x1f,
0xc4, 0x74, 0xf3, 0xaa, 0x4f, 0xde, 0xfe, 0x62, 0xe1, 0xd8, 0x67, 0x5f, 0x2c, 0x1c, 0xfb, 0xf5, 0xba, 0x89, 0xdb, 0x71, 0x13, 0x97, 0x8e, 0x6c, 0x62, 0xba, 0x79, 0xd5, 0x27, 0x6f, 0x7f, 0xb1,
0x17, 0x0b, 0xc7, 0xde, 0x3f, 0x5c, 0x90, 0x6e, 0x1f, 0x2e, 0x48, 0x9f, 0x1d, 0x2e, 0x48, 0xbf, 0x70, 0xec, 0xb3, 0x2f, 0x16, 0x8e, 0xfd, 0xe6, 0x8b, 0x85, 0x63, 0xef, 0x1f, 0x2e, 0x48, 0xb7,
0x3f, 0x5c, 0x90, 0x3e, 0xfc, 0xc3, 0xc2, 0xb1, 0x57, 0x47, 0x05, 0xe6, 0xdf, 0x02, 0x00, 0x00, 0x0f, 0x17, 0xa4, 0xcf, 0x0e, 0x17, 0xa4, 0x3f, 0x1c, 0x2e, 0x48, 0x1f, 0xfe, 0x71, 0xe1, 0xd8,
0xff, 0xff, 0x15, 0x10, 0xc0, 0xa8, 0xf6, 0x3e, 0x00, 0x00, 0xab, 0xa3, 0x02, 0xf3, 0xef, 0x01, 0x00, 0x00, 0xff, 0xff, 0x31, 0xcb, 0xee, 0x3d, 0x42, 0x3f,
0x00, 0x00,
} }
...@@ -138,6 +138,10 @@ message DaemonSetStatus { ...@@ -138,6 +138,10 @@ message DaemonSetStatus {
// NumberReady is the number of nodes that should be running the daemon pod and have one // NumberReady is the number of nodes that should be running the daemon pod and have one
// or more of the daemon pod running and ready. // or more of the daemon pod running and ready.
optional int32 numberReady = 4; optional int32 numberReady = 4;
// ObservedGeneration is the most recent generation observed by the daemon set controller.
// +optional
optional int64 observedGeneration = 5;
} }
// Deployment enables declarative updates for Pods and ReplicaSets. // Deployment enables declarative updates for Pods and ReplicaSets.
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -568,6 +568,10 @@ type DaemonSetStatus struct { ...@@ -568,6 +568,10 @@ type DaemonSetStatus struct {
// NumberReady is the number of nodes that should be running the daemon pod and have one // NumberReady is the number of nodes that should be running the daemon pod and have one
// or more of the daemon pod running and ready. // or more of the daemon pod running and ready.
NumberReady int32 `json:"numberReady" protobuf:"varint,4,opt,name=numberReady"` NumberReady int32 `json:"numberReady" protobuf:"varint,4,opt,name=numberReady"`
// ObservedGeneration is the most recent generation observed by the daemon set controller.
// +optional
ObservedGeneration int64 `json:"observedGeneration,omitempty" protobuf:"varint,5,opt,name=observedGeneration"`
} }
// +genclient=true // +genclient=true
......
...@@ -100,6 +100,7 @@ var map_DaemonSetStatus = map[string]string{ ...@@ -100,6 +100,7 @@ var map_DaemonSetStatus = map[string]string{
"numberMisscheduled": "NumberMisscheduled is the number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: http://releases.k8s.io/HEAD/docs/admin/daemons.md", "numberMisscheduled": "NumberMisscheduled is the number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: http://releases.k8s.io/HEAD/docs/admin/daemons.md",
"desiredNumberScheduled": "DesiredNumberScheduled is the total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: http://releases.k8s.io/HEAD/docs/admin/daemons.md", "desiredNumberScheduled": "DesiredNumberScheduled is the total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: http://releases.k8s.io/HEAD/docs/admin/daemons.md",
"numberReady": "NumberReady is the number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.", "numberReady": "NumberReady is the number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.",
"observedGeneration": "ObservedGeneration is the most recent generation observed by the daemon set controller.",
} }
func (DaemonSetStatus) SwaggerDoc() map[string]string { func (DaemonSetStatus) SwaggerDoc() map[string]string {
......
...@@ -362,6 +362,7 @@ func autoConvert_v1beta1_DaemonSetStatus_To_extensions_DaemonSetStatus(in *Daemo ...@@ -362,6 +362,7 @@ func autoConvert_v1beta1_DaemonSetStatus_To_extensions_DaemonSetStatus(in *Daemo
out.NumberMisscheduled = in.NumberMisscheduled out.NumberMisscheduled = in.NumberMisscheduled
out.DesiredNumberScheduled = in.DesiredNumberScheduled out.DesiredNumberScheduled = in.DesiredNumberScheduled
out.NumberReady = in.NumberReady out.NumberReady = in.NumberReady
out.ObservedGeneration = in.ObservedGeneration
return nil return nil
} }
...@@ -374,6 +375,7 @@ func autoConvert_extensions_DaemonSetStatus_To_v1beta1_DaemonSetStatus(in *exten ...@@ -374,6 +375,7 @@ func autoConvert_extensions_DaemonSetStatus_To_v1beta1_DaemonSetStatus(in *exten
out.NumberMisscheduled = in.NumberMisscheduled out.NumberMisscheduled = in.NumberMisscheduled
out.DesiredNumberScheduled = in.DesiredNumberScheduled out.DesiredNumberScheduled = in.DesiredNumberScheduled
out.NumberReady = in.NumberReady out.NumberReady = in.NumberReady
out.ObservedGeneration = in.ObservedGeneration
return nil return nil
} }
......
...@@ -243,6 +243,7 @@ func DeepCopy_v1beta1_DaemonSetStatus(in interface{}, out interface{}, c *conver ...@@ -243,6 +243,7 @@ func DeepCopy_v1beta1_DaemonSetStatus(in interface{}, out interface{}, c *conver
out.NumberMisscheduled = in.NumberMisscheduled out.NumberMisscheduled = in.NumberMisscheduled
out.DesiredNumberScheduled = in.DesiredNumberScheduled out.DesiredNumberScheduled = in.DesiredNumberScheduled
out.NumberReady = in.NumberReady out.NumberReady = in.NumberReady
out.ObservedGeneration = in.ObservedGeneration
return nil return nil
} }
} }
......
...@@ -109,6 +109,7 @@ func validateDaemonSetStatus(status *extensions.DaemonSetStatus, fldPath *field. ...@@ -109,6 +109,7 @@ func validateDaemonSetStatus(status *extensions.DaemonSetStatus, fldPath *field.
allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(status.NumberMisscheduled), fldPath.Child("numberMisscheduled"))...) allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(status.NumberMisscheduled), fldPath.Child("numberMisscheduled"))...)
allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(status.DesiredNumberScheduled), fldPath.Child("desiredNumberScheduled"))...) allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(status.DesiredNumberScheduled), fldPath.Child("desiredNumberScheduled"))...)
allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(status.NumberReady), fldPath.Child("numberReady"))...) allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(status.NumberReady), fldPath.Child("numberReady"))...)
allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(status.ObservedGeneration, fldPath.Child("observedGeneration"))...)
return allErrs return allErrs
} }
......
...@@ -80,6 +80,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) { ...@@ -80,6 +80,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) {
NumberMisscheduled: 2, NumberMisscheduled: 2,
DesiredNumberScheduled: 3, DesiredNumberScheduled: 3,
NumberReady: 1, NumberReady: 1,
ObservedGeneration: 3,
}, },
}, },
update: extensions.DaemonSet{ update: extensions.DaemonSet{
...@@ -93,6 +94,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) { ...@@ -93,6 +94,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) {
NumberMisscheduled: -1, NumberMisscheduled: -1,
DesiredNumberScheduled: -3, DesiredNumberScheduled: -3,
NumberReady: -1, NumberReady: -1,
ObservedGeneration: -3,
}, },
}, },
}, },
...@@ -108,6 +110,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) { ...@@ -108,6 +110,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) {
NumberMisscheduled: 2, NumberMisscheduled: 2,
DesiredNumberScheduled: 3, DesiredNumberScheduled: 3,
NumberReady: 1, NumberReady: 1,
ObservedGeneration: 3,
}, },
}, },
update: extensions.DaemonSet{ update: extensions.DaemonSet{
...@@ -121,6 +124,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) { ...@@ -121,6 +124,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) {
NumberMisscheduled: 1, NumberMisscheduled: 1,
DesiredNumberScheduled: 3, DesiredNumberScheduled: 3,
NumberReady: 1, NumberReady: 1,
ObservedGeneration: 3,
}, },
}, },
}, },
...@@ -136,6 +140,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) { ...@@ -136,6 +140,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) {
NumberMisscheduled: 2, NumberMisscheduled: 2,
DesiredNumberScheduled: 3, DesiredNumberScheduled: 3,
NumberReady: 1, NumberReady: 1,
ObservedGeneration: 3,
}, },
}, },
update: extensions.DaemonSet{ update: extensions.DaemonSet{
...@@ -149,6 +154,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) { ...@@ -149,6 +154,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) {
NumberMisscheduled: -1, NumberMisscheduled: -1,
DesiredNumberScheduled: 3, DesiredNumberScheduled: 3,
NumberReady: 1, NumberReady: 1,
ObservedGeneration: 3,
}, },
}, },
}, },
...@@ -164,6 +170,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) { ...@@ -164,6 +170,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) {
NumberMisscheduled: 2, NumberMisscheduled: 2,
DesiredNumberScheduled: 3, DesiredNumberScheduled: 3,
NumberReady: 1, NumberReady: 1,
ObservedGeneration: 3,
}, },
}, },
update: extensions.DaemonSet{ update: extensions.DaemonSet{
...@@ -177,6 +184,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) { ...@@ -177,6 +184,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) {
NumberMisscheduled: 1, NumberMisscheduled: 1,
DesiredNumberScheduled: -3, DesiredNumberScheduled: -3,
NumberReady: 1, NumberReady: 1,
ObservedGeneration: 3,
}, },
}, },
}, },
...@@ -192,6 +200,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) { ...@@ -192,6 +200,7 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) {
NumberMisscheduled: 2, NumberMisscheduled: 2,
DesiredNumberScheduled: 3, DesiredNumberScheduled: 3,
NumberReady: 1, NumberReady: 1,
ObservedGeneration: 3,
}, },
}, },
update: extensions.DaemonSet{ update: extensions.DaemonSet{
...@@ -205,6 +214,37 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) { ...@@ -205,6 +214,37 @@ func TestValidateDaemonSetStatusUpdate(t *testing.T) {
NumberMisscheduled: 1, NumberMisscheduled: 1,
DesiredNumberScheduled: 3, DesiredNumberScheduled: 3,
NumberReady: -1, NumberReady: -1,
ObservedGeneration: 3,
},
},
},
"negative ObservedGeneration": {
old: extensions.DaemonSet{
ObjectMeta: api.ObjectMeta{
Name: "abc",
Namespace: api.NamespaceDefault,
ResourceVersion: "10",
},
Status: extensions.DaemonSetStatus{
CurrentNumberScheduled: 1,
NumberMisscheduled: 2,
DesiredNumberScheduled: 3,
NumberReady: 1,
ObservedGeneration: 3,
},
},
update: extensions.DaemonSet{
ObjectMeta: api.ObjectMeta{
Name: "abc",
Namespace: api.NamespaceDefault,
ResourceVersion: "10",
},
Status: extensions.DaemonSetStatus{
CurrentNumberScheduled: 1,
NumberMisscheduled: 1,
DesiredNumberScheduled: 3,
NumberReady: 1,
ObservedGeneration: -3,
}, },
}, },
}, },
......
...@@ -228,6 +228,7 @@ func DeepCopy_extensions_DaemonSetStatus(in interface{}, out interface{}, c *con ...@@ -228,6 +228,7 @@ func DeepCopy_extensions_DaemonSetStatus(in interface{}, out interface{}, c *con
out.NumberMisscheduled = in.NumberMisscheduled out.NumberMisscheduled = in.NumberMisscheduled
out.DesiredNumberScheduled = in.DesiredNumberScheduled out.DesiredNumberScheduled = in.DesiredNumberScheduled
out.NumberReady = in.NumberReady out.NumberReady = in.NumberReady
out.ObservedGeneration = in.ObservedGeneration
return nil return nil
} }
} }
......
...@@ -540,7 +540,8 @@ func storeDaemonSetStatus(dsClient unversionedextensions.DaemonSetInterface, ds ...@@ -540,7 +540,8 @@ func storeDaemonSetStatus(dsClient unversionedextensions.DaemonSetInterface, ds
if int(ds.Status.DesiredNumberScheduled) == desiredNumberScheduled && if int(ds.Status.DesiredNumberScheduled) == desiredNumberScheduled &&
int(ds.Status.CurrentNumberScheduled) == currentNumberScheduled && int(ds.Status.CurrentNumberScheduled) == currentNumberScheduled &&
int(ds.Status.NumberMisscheduled) == numberMisscheduled && int(ds.Status.NumberMisscheduled) == numberMisscheduled &&
int(ds.Status.NumberReady) == numberReady { int(ds.Status.NumberReady) == numberReady &&
ds.Status.ObservedGeneration >= ds.Generation {
return nil return nil
} }
...@@ -553,6 +554,7 @@ func storeDaemonSetStatus(dsClient unversionedextensions.DaemonSetInterface, ds ...@@ -553,6 +554,7 @@ func storeDaemonSetStatus(dsClient unversionedextensions.DaemonSetInterface, ds
var updateErr, getErr error var updateErr, getErr error
for i := 0; i < StatusUpdateRetries; i++ { for i := 0; i < StatusUpdateRetries; i++ {
toUpdate.Status.ObservedGeneration = ds.Generation
toUpdate.Status.DesiredNumberScheduled = int32(desiredNumberScheduled) toUpdate.Status.DesiredNumberScheduled = int32(desiredNumberScheduled)
toUpdate.Status.CurrentNumberScheduled = int32(currentNumberScheduled) toUpdate.Status.CurrentNumberScheduled = int32(currentNumberScheduled)
toUpdate.Status.NumberMisscheduled = int32(numberMisscheduled) toUpdate.Status.NumberMisscheduled = int32(numberMisscheduled)
......
...@@ -609,3 +609,28 @@ func TestNumberReadyStatus(t *testing.T) { ...@@ -609,3 +609,28 @@ func TestNumberReadyStatus(t *testing.T) {
t.Errorf("Wrong daemon %s status: %v", updated.Name, updated.Status) t.Errorf("Wrong daemon %s status: %v", updated.Name, updated.Status)
} }
} }
func TestObservedGeneration(t *testing.T) {
daemon := newDaemonSet("foo")
daemon.Generation = 1
manager, podControl, clientset := newTestController()
var updated *extensions.DaemonSet
clientset.PrependReactor("update", "daemonsets", func(action core.Action) (handled bool, ret runtime.Object, err error) {
if action.GetSubresource() != "status" {
return false, nil, nil
}
if u, ok := action.(core.UpdateAction); ok {
updated = u.GetObject().(*extensions.DaemonSet)
}
return false, nil, nil
})
addNodes(manager.nodeStore.Store, 0, 1, simpleNodeLabel)
addPods(manager.podStore.Indexer, "node-0", simpleDaemonSetLabel, 1)
manager.dsStore.Add(daemon)
syncAndValidateDaemonSets(t, manager, daemon, podControl, 0, 0)
if updated.Status.ObservedGeneration != daemon.Generation {
t.Errorf("Wrong ObservedGeneration for daemon %s in status. Expected %d, got %d", updated.Name, daemon.Generation, updated.Status.ObservedGeneration)
}
}
...@@ -10014,6 +10014,13 @@ var OpenAPIDefinitions *common.OpenAPIDefinitions = &common.OpenAPIDefinitions{ ...@@ -10014,6 +10014,13 @@ var OpenAPIDefinitions *common.OpenAPIDefinitions = &common.OpenAPIDefinitions{
Format: "int32", Format: "int32",
}, },
}, },
"observedGeneration": {
SchemaProps: spec.SchemaProps{
Description: "ObservedGeneration is the most recent generation observed by the daemon set controller.",
Type: []string{"integer"},
Format: "int64",
},
},
}, },
Required: []string{"currentNumberScheduled", "numberMisscheduled", "desiredNumberScheduled", "numberReady"}, Required: []string{"currentNumberScheduled", "numberMisscheduled", "desiredNumberScheduled", "numberReady"},
}, },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment