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
This commit is contained in:
Kubernetes Submit Queue 2017-01-03 02:29:57 -08:00 committed by GitHub
commit 8088ea426d
18 changed files with 5399 additions and 5212 deletions

View File

@ -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"
} }
} }
}, },

View File

@ -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."
} }
} }
}, },

View File

@ -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
</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>

View File

@ -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"
} }
} }
}, },

View File

@ -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

View File

@ -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) {
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 {
`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 {
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 (
) )
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,
} }

View File

@ -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.

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -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 {

View File

@ -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
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
} }

View File

@ -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
} }
} }

View File

@ -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
} }

View File

@ -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) {
NumberMisscheduled: -1, NumberMisscheduled: -1,
DesiredNumberScheduled: -3, DesiredNumberScheduled: -3,
NumberReady: -1, NumberReady: -1,
ObservedGeneration: -3,
}, },
}, },
}, },
@ -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) {
NumberMisscheduled: 1, NumberMisscheduled: 1,
DesiredNumberScheduled: 3, DesiredNumberScheduled: 3,
NumberReady: 1, NumberReady: 1,
ObservedGeneration: 3,
}, },
}, },
}, },
@ -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) {
NumberMisscheduled: -1, NumberMisscheduled: -1,
DesiredNumberScheduled: 3, DesiredNumberScheduled: 3,
NumberReady: 1, NumberReady: 1,
ObservedGeneration: 3,
}, },
}, },
}, },
@ -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) {
NumberMisscheduled: 1, NumberMisscheduled: 1,
DesiredNumberScheduled: -3, DesiredNumberScheduled: -3,
NumberReady: 1, NumberReady: 1,
ObservedGeneration: 3,
}, },
}, },
}, },
@ -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) {
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,
}, },
}, },
}, },

View File

@ -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
} }
} }

View File

@ -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
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)

View File

@ -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)
}
}

View File

@ -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"},
}, },