Revert "Merge pull request #43946 from jhorwit2/jah/host-path-psp"

This reverts commit b5eadb5d6b, reversing
changes made to 1889d654f5.
This commit is contained in:
Josh Horwitz 2017-06-21 11:54:20 -04:00
parent 3ea93b2753
commit b6e08ec39d
25 changed files with 689 additions and 1182 deletions

View File

@ -54399,13 +54399,6 @@
"type": "string" "type": "string"
} }
}, },
"allowedHostPaths": {
"description": "AllowedHostPaths is a white list of allowed host path prefixes. Empty indicates that all host paths may be used.",
"type": "array",
"items": {
"type": "string"
}
},
"defaultAddCapabilities": { "defaultAddCapabilities": {
"description": "DefaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability. You may not list a capabiility in both DefaultAddCapabilities and RequiredDropCapabilities.", "description": "DefaultAddCapabilities is the default set of capabilities that will be added to the container unless the pod spec specifically drops the capability. You may not list a capabiility in both DefaultAddCapabilities and RequiredDropCapabilities.",
"type": "array", "type": "array",

View File

@ -10029,13 +10029,6 @@
"readOnlyRootFilesystem": { "readOnlyRootFilesystem": {
"type": "boolean", "type": "boolean",
"description": "ReadOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to." "description": "ReadOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to."
},
"allowedHostPaths": {
"type": "array",
"items": {
"type": "string"
},
"description": "AllowedHostPaths is a white list of allowed host path prefixes. Empty indicates that all host paths may be used."
} }
} }
}, },

View File

@ -7690,13 +7690,6 @@ Both these may change in the future. Incoming requests are matched against the h
<td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
</tr> </tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">allowedHostPaths</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">AllowedHostPaths is a white list of allowed host path prefixes. Empty indicates that all host paths may be used.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">string array</p></td>
<td class="tableblock halign-left valign-top"></td>
</tr>
</tbody> </tbody>
</table> </table>

View File

@ -898,10 +898,6 @@ type PodSecurityPolicySpec struct {
// will not be forced to. // will not be forced to.
// +optional // +optional
ReadOnlyRootFilesystem bool ReadOnlyRootFilesystem bool
// AllowedHostPaths is a white list of allowed host path prefixes. Empty indicates that all
// host paths may be used.
// +optional
AllowedHostPaths []string
} }
// HostPortRange defines a range of host ports that will be enabled by a policy // HostPortRange defines a range of host ports that will be enabled by a policy

View File

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

View File

@ -723,11 +723,6 @@ message PodSecurityPolicySpec {
// will not be forced to. // will not be forced to.
// +optional // +optional
optional bool readOnlyRootFilesystem = 14; optional bool readOnlyRootFilesystem = 14;
// AllowedHostPaths is a white list of allowed host path prefixes. Empty indicates that all
// host paths may be used.
// +optional
repeated string allowedHostPaths = 15;
} }
// ReplicaSet represents the configuration of a ReplicaSet. // ReplicaSet represents the configuration of a ReplicaSet.

View File

@ -14751,7 +14751,7 @@ func (x *PodSecurityPolicySpec) CodecEncodeSelf(e *codec1978.Encoder) {
} else { } else {
yysep2 := !z.EncBinary() yysep2 := !z.EncBinary()
yy2arr2 := z.EncBasicHandle().StructToArray yy2arr2 := z.EncBasicHandle().StructToArray
var yyq2 [15]bool var yyq2 [14]bool
_, _, _ = yysep2, yyq2, yy2arr2 _, _, _ = yysep2, yyq2, yy2arr2
const yyr2 bool = false const yyr2 bool = false
yyq2[0] = x.Privileged != false yyq2[0] = x.Privileged != false
@ -14764,10 +14764,9 @@ func (x *PodSecurityPolicySpec) CodecEncodeSelf(e *codec1978.Encoder) {
yyq2[7] = x.HostPID != false yyq2[7] = x.HostPID != false
yyq2[8] = x.HostIPC != false yyq2[8] = x.HostIPC != false
yyq2[13] = x.ReadOnlyRootFilesystem != false yyq2[13] = x.ReadOnlyRootFilesystem != false
yyq2[14] = len(x.AllowedHostPaths) != 0
var yynn2 int var yynn2 int
if yyr2 || yy2arr2 { if yyr2 || yy2arr2 {
r.EncodeArrayStart(15) r.EncodeArrayStart(14)
} else { } else {
yynn2 = 4 yynn2 = 4
for _, b := range yyq2 { for _, b := range yyq2 {
@ -15112,39 +15111,6 @@ func (x *PodSecurityPolicySpec) CodecEncodeSelf(e *codec1978.Encoder) {
} }
} }
} }
if yyr2 || yy2arr2 {
z.EncSendContainerState(codecSelfer_containerArrayElem1234)
if yyq2[14] {
if x.AllowedHostPaths == nil {
r.EncodeNil()
} else {
yym54 := z.EncBinary()
_ = yym54
if false {
} else {
z.F.EncSliceStringV(x.AllowedHostPaths, false, e)
}
}
} else {
r.EncodeNil()
}
} else {
if yyq2[14] {
z.EncSendContainerState(codecSelfer_containerMapKey1234)
r.EncodeString(codecSelferC_UTF81234, string("allowedHostPaths"))
z.EncSendContainerState(codecSelfer_containerMapValue1234)
if x.AllowedHostPaths == nil {
r.EncodeNil()
} else {
yym55 := z.EncBinary()
_ = yym55
if false {
} else {
z.F.EncSliceStringV(x.AllowedHostPaths, false, e)
}
}
}
}
if yyr2 || yy2arr2 { if yyr2 || yy2arr2 {
z.EncSendContainerState(codecSelfer_containerArrayEnd1234) z.EncSendContainerState(codecSelfer_containerArrayEnd1234)
} else { } else {
@ -15354,18 +15320,6 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromMap(l int, d *codec1978.Decod
*((*bool)(yyv26)) = r.DecodeBool() *((*bool)(yyv26)) = r.DecodeBool()
} }
} }
case "allowedHostPaths":
if r.TryDecodeAsNil() {
x.AllowedHostPaths = nil
} else {
yyv28 := &x.AllowedHostPaths
yym29 := z.DecBinary()
_ = yym29
if false {
} else {
z.F.DecSliceStringX(yyv28, false, d)
}
}
default: default:
z.DecStructFieldNotFound(-1, yys3) z.DecStructFieldNotFound(-1, yys3)
} // end switch yys3 } // end switch yys3
@ -15377,16 +15331,16 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
var h codecSelfer1234 var h codecSelfer1234
z, r := codec1978.GenHelperDecoder(d) z, r := codec1978.GenHelperDecoder(d)
_, _, _ = h, z, r _, _, _ = h, z, r
var yyj30 int var yyj28 int
var yyb30 bool var yyb28 bool
var yyhl30 bool = l >= 0 var yyhl28 bool = l >= 0
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return return
} }
@ -15394,21 +15348,21 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
if r.TryDecodeAsNil() { if r.TryDecodeAsNil() {
x.Privileged = false x.Privileged = false
} else { } else {
yyv31 := &x.Privileged yyv29 := &x.Privileged
yym32 := z.DecBinary() yym30 := z.DecBinary()
_ = yym32 _ = yym30
if false { if false {
} else { } else {
*((*bool)(yyv31)) = r.DecodeBool() *((*bool)(yyv29)) = r.DecodeBool()
} }
} }
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return return
} }
@ -15416,21 +15370,21 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
if r.TryDecodeAsNil() { if r.TryDecodeAsNil() {
x.DefaultAddCapabilities = nil x.DefaultAddCapabilities = nil
} else { } else {
yyv33 := &x.DefaultAddCapabilities yyv31 := &x.DefaultAddCapabilities
yym34 := z.DecBinary() yym32 := z.DecBinary()
_ = yym34 _ = yym32
if false { if false {
} else { } else {
h.decSlicev1_Capability((*[]pkg4_v1.Capability)(yyv33), d) h.decSlicev1_Capability((*[]pkg4_v1.Capability)(yyv31), d)
} }
} }
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return return
} }
@ -15438,21 +15392,21 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
if r.TryDecodeAsNil() { if r.TryDecodeAsNil() {
x.RequiredDropCapabilities = nil x.RequiredDropCapabilities = nil
} else { } else {
yyv35 := &x.RequiredDropCapabilities yyv33 := &x.RequiredDropCapabilities
yym36 := z.DecBinary() yym34 := z.DecBinary()
_ = yym36 _ = yym34
if false { if false {
} else { } else {
h.decSlicev1_Capability((*[]pkg4_v1.Capability)(yyv35), d) h.decSlicev1_Capability((*[]pkg4_v1.Capability)(yyv33), d)
} }
} }
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return return
} }
@ -15460,21 +15414,21 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
if r.TryDecodeAsNil() { if r.TryDecodeAsNil() {
x.AllowedCapabilities = nil x.AllowedCapabilities = nil
} else { } else {
yyv37 := &x.AllowedCapabilities yyv35 := &x.AllowedCapabilities
yym38 := z.DecBinary() yym36 := z.DecBinary()
_ = yym38 _ = yym36
if false { if false {
} else { } else {
h.decSlicev1_Capability((*[]pkg4_v1.Capability)(yyv37), d) h.decSlicev1_Capability((*[]pkg4_v1.Capability)(yyv35), d)
} }
} }
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return return
} }
@ -15482,21 +15436,21 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
if r.TryDecodeAsNil() { if r.TryDecodeAsNil() {
x.Volumes = nil x.Volumes = nil
} else { } else {
yyv39 := &x.Volumes yyv37 := &x.Volumes
yym40 := z.DecBinary() yym38 := z.DecBinary()
_ = yym40 _ = yym38
if false { if false {
} else { } else {
h.decSliceFSType((*[]FSType)(yyv39), d) h.decSliceFSType((*[]FSType)(yyv37), d)
} }
} }
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return return
} }
@ -15504,21 +15458,21 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
if r.TryDecodeAsNil() { if r.TryDecodeAsNil() {
x.HostNetwork = false x.HostNetwork = false
} else { } else {
yyv41 := &x.HostNetwork yyv39 := &x.HostNetwork
yym42 := z.DecBinary() yym40 := z.DecBinary()
_ = yym42 _ = yym40
if false { if false {
} else { } else {
*((*bool)(yyv41)) = r.DecodeBool() *((*bool)(yyv39)) = r.DecodeBool()
} }
} }
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return return
} }
@ -15526,21 +15480,21 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
if r.TryDecodeAsNil() { if r.TryDecodeAsNil() {
x.HostPorts = nil x.HostPorts = nil
} else { } else {
yyv43 := &x.HostPorts yyv41 := &x.HostPorts
yym44 := z.DecBinary() yym42 := z.DecBinary()
_ = yym44 _ = yym42
if false { if false {
} else { } else {
h.decSliceHostPortRange((*[]HostPortRange)(yyv43), d) h.decSliceHostPortRange((*[]HostPortRange)(yyv41), d)
} }
} }
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return return
} }
@ -15548,21 +15502,21 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
if r.TryDecodeAsNil() { if r.TryDecodeAsNil() {
x.HostPID = false x.HostPID = false
} else { } else {
yyv45 := &x.HostPID yyv43 := &x.HostPID
yym46 := z.DecBinary() yym44 := z.DecBinary()
_ = yym46 _ = yym44
if false { if false {
} else { } else {
*((*bool)(yyv45)) = r.DecodeBool() *((*bool)(yyv43)) = r.DecodeBool()
} }
} }
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return return
} }
@ -15570,21 +15524,21 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
if r.TryDecodeAsNil() { if r.TryDecodeAsNil() {
x.HostIPC = false x.HostIPC = false
} else { } else {
yyv47 := &x.HostIPC yyv45 := &x.HostIPC
yym48 := z.DecBinary() yym46 := z.DecBinary()
_ = yym48 _ = yym46
if false { if false {
} else { } else {
*((*bool)(yyv47)) = r.DecodeBool() *((*bool)(yyv45)) = r.DecodeBool()
} }
} }
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return return
} }
@ -15592,16 +15546,16 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
if r.TryDecodeAsNil() { if r.TryDecodeAsNil() {
x.SELinux = SELinuxStrategyOptions{} x.SELinux = SELinuxStrategyOptions{}
} else { } else {
yyv49 := &x.SELinux yyv47 := &x.SELinux
yyv49.CodecDecodeSelf(d) yyv47.CodecDecodeSelf(d)
} }
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return return
} }
@ -15609,16 +15563,16 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
if r.TryDecodeAsNil() { if r.TryDecodeAsNil() {
x.RunAsUser = RunAsUserStrategyOptions{} x.RunAsUser = RunAsUserStrategyOptions{}
} else { } else {
yyv50 := &x.RunAsUser yyv48 := &x.RunAsUser
yyv50.CodecDecodeSelf(d) yyv48.CodecDecodeSelf(d)
} }
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return return
} }
@ -15626,16 +15580,16 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
if r.TryDecodeAsNil() { if r.TryDecodeAsNil() {
x.SupplementalGroups = SupplementalGroupsStrategyOptions{} x.SupplementalGroups = SupplementalGroupsStrategyOptions{}
} else { } else {
yyv51 := &x.SupplementalGroups yyv49 := &x.SupplementalGroups
yyv51.CodecDecodeSelf(d) yyv49.CodecDecodeSelf(d)
} }
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return return
} }
@ -15643,16 +15597,16 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
if r.TryDecodeAsNil() { if r.TryDecodeAsNil() {
x.FSGroup = FSGroupStrategyOptions{} x.FSGroup = FSGroupStrategyOptions{}
} else { } else {
yyv52 := &x.FSGroup yyv50 := &x.FSGroup
yyv52.CodecDecodeSelf(d) yyv50.CodecDecodeSelf(d)
} }
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return return
} }
@ -15660,48 +15614,26 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
if r.TryDecodeAsNil() { if r.TryDecodeAsNil() {
x.ReadOnlyRootFilesystem = false x.ReadOnlyRootFilesystem = false
} else { } else {
yyv53 := &x.ReadOnlyRootFilesystem yyv51 := &x.ReadOnlyRootFilesystem
yym54 := z.DecBinary() yym52 := z.DecBinary()
_ = yym54 _ = yym52
if false { if false {
} else { } else {
*((*bool)(yyv53)) = r.DecodeBool() *((*bool)(yyv51)) = r.DecodeBool()
}
}
yyj30++
if yyhl30 {
yyb30 = yyj30 > l
} else {
yyb30 = r.CheckBreak()
}
if yyb30 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return
}
z.DecSendContainerState(codecSelfer_containerArrayElem1234)
if r.TryDecodeAsNil() {
x.AllowedHostPaths = nil
} else {
yyv55 := &x.AllowedHostPaths
yym56 := z.DecBinary()
_ = yym56
if false {
} else {
z.F.DecSliceStringX(yyv55, false, d)
} }
} }
for { for {
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
break break
} }
z.DecSendContainerState(codecSelfer_containerArrayElem1234) z.DecSendContainerState(codecSelfer_containerArrayElem1234)
z.DecStructFieldNotFound(yyj30-1, "") z.DecStructFieldNotFound(yyj28-1, "")
} }
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
} }
@ -21490,7 +21422,7 @@ func (x codecSelfer1234) decSlicePodSecurityPolicy(v *[]PodSecurityPolicy, d *co
yyrg1 := len(yyv1) > 0 yyrg1 := len(yyv1) > 0
yyv21 := yyv1 yyv21 := yyv1
yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 584) yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 560)
if yyrt1 { if yyrt1 {
if yyrl1 <= cap(yyv1) { if yyrl1 <= cap(yyv1) {
yyv1 = yyv1[:yyrl1] yyv1 = yyv1[:yyrl1]

View File

@ -929,10 +929,6 @@ type PodSecurityPolicySpec struct {
// will not be forced to. // will not be forced to.
// +optional // +optional
ReadOnlyRootFilesystem bool `json:"readOnlyRootFilesystem,omitempty" protobuf:"varint,14,opt,name=readOnlyRootFilesystem"` ReadOnlyRootFilesystem bool `json:"readOnlyRootFilesystem,omitempty" protobuf:"varint,14,opt,name=readOnlyRootFilesystem"`
// AllowedHostPaths is a white list of allowed host path prefixes. Empty indicates that all
// host paths may be used.
// +optional
AllowedHostPaths []string `json:"allowedHostPaths,omitempty" protobuf:"bytes,15,opt,name=allowedHostPaths"`
} }
// FS Type gives strong typing to different file systems that are used by volumes. // FS Type gives strong typing to different file systems that are used by volumes.

View File

@ -425,7 +425,6 @@ var map_PodSecurityPolicySpec = map[string]string{
"supplementalGroups": "SupplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.", "supplementalGroups": "SupplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.",
"fsGroup": "FSGroup is the strategy that will dictate what fs group is used by the SecurityContext.", "fsGroup": "FSGroup is the strategy that will dictate what fs group is used by the SecurityContext.",
"readOnlyRootFilesystem": "ReadOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.", "readOnlyRootFilesystem": "ReadOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.",
"allowedHostPaths": "AllowedHostPaths is a white list of allowed host path prefixes. Empty indicates that all host paths may be used.",
} }
func (PodSecurityPolicySpec) SwaggerDoc() map[string]string { func (PodSecurityPolicySpec) SwaggerDoc() map[string]string {

View File

@ -1219,7 +1219,6 @@ func autoConvert_v1beta1_PodSecurityPolicySpec_To_extensions_PodSecurityPolicySp
return err return err
} }
out.ReadOnlyRootFilesystem = in.ReadOnlyRootFilesystem out.ReadOnlyRootFilesystem = in.ReadOnlyRootFilesystem
out.AllowedHostPaths = *(*[]string)(unsafe.Pointer(&in.AllowedHostPaths))
return nil return nil
} }
@ -1261,7 +1260,6 @@ func autoConvert_extensions_PodSecurityPolicySpec_To_v1beta1_PodSecurityPolicySp
return err return err
} }
out.ReadOnlyRootFilesystem = in.ReadOnlyRootFilesystem out.ReadOnlyRootFilesystem = in.ReadOnlyRootFilesystem
out.AllowedHostPaths = *(*[]string)(unsafe.Pointer(&in.AllowedHostPaths))
return nil return nil
} }

View File

@ -839,11 +839,6 @@ func DeepCopy_v1beta1_PodSecurityPolicySpec(in interface{}, out interface{}, c *
if err := DeepCopy_v1beta1_FSGroupStrategyOptions(&in.FSGroup, &out.FSGroup, c); err != nil { if err := DeepCopy_v1beta1_FSGroupStrategyOptions(&in.FSGroup, &out.FSGroup, c); err != nil {
return err return err
} }
if in.AllowedHostPaths != nil {
in, out := &in.AllowedHostPaths, &out.AllowedHostPaths
*out = make([]string, len(*in))
copy(*out, *in)
}
return nil return nil
} }
} }

View File

@ -831,11 +831,6 @@ func DeepCopy_extensions_PodSecurityPolicySpec(in interface{}, out interface{},
if err := DeepCopy_extensions_FSGroupStrategyOptions(&in.FSGroup, &out.FSGroup, c); err != nil { if err := DeepCopy_extensions_FSGroupStrategyOptions(&in.FSGroup, &out.FSGroup, c); err != nil {
return err return err
} }
if in.AllowedHostPaths != nil {
in, out := &in.AllowedHostPaths, &out.AllowedHostPaths
*out = make([]string, len(*in))
copy(*out, *in)
}
return nil return nil
} }
} }

View File

@ -241,15 +241,6 @@ func (s *simpleProvider) ValidatePodSecurityContext(pod *api.Pod, fldPath *field
allErrs = append(allErrs, field.Invalid( allErrs = append(allErrs, field.Invalid(
field.NewPath("spec", "volumes").Index(i), string(fsType), field.NewPath("spec", "volumes").Index(i), string(fsType),
fmt.Sprintf("%s volumes are not allowed to be used", string(fsType)))) fmt.Sprintf("%s volumes are not allowed to be used", string(fsType))))
continue
}
if fsType == extensions.HostPath {
if !psputil.PSPAllowsHostVolumePath(s.psp, v.HostPath.Path) {
allErrs = append(allErrs, field.Invalid(
field.NewPath("spec", "volumes").Index(i), string(fsType),
fmt.Sprintf("host path %s is not allowed to be used. allowed host paths: %v", v.HostPath.Path, s.psp.Spec.AllowedHostPaths)))
}
} }
} }
} }

View File

@ -248,21 +248,6 @@ func TestValidatePodSecurityContextFailures(t *testing.T) {
}, },
} }
failHostPathDirPod := defaultPod()
failHostPathDirPod.Spec.Volumes = []api.Volume{
{
Name: "bad volume",
VolumeSource: api.VolumeSource{
HostPath: &api.HostPathVolumeSource{
Path: "/fail",
},
},
},
}
failHostPathDirPSP := defaultPSP()
failHostPathDirPSP.Spec.Volumes = []extensions.FSType{extensions.HostPath}
failHostPathDirPSP.Spec.AllowedHostPaths = []string{"/foo/bar"}
failOtherSysctlsAllowedPSP := defaultPSP() failOtherSysctlsAllowedPSP := defaultPSP()
failOtherSysctlsAllowedPSP.Annotations[extensions.SysctlsPodSecurityPolicyAnnotationKey] = "bar,abc" failOtherSysctlsAllowedPSP.Annotations[extensions.SysctlsPodSecurityPolicyAnnotationKey] = "bar,abc"
@ -333,11 +318,6 @@ func TestValidatePodSecurityContextFailures(t *testing.T) {
psp: defaultPSP(), psp: defaultPSP(),
expectedError: "hostPath volumes are not allowed to be used", expectedError: "hostPath volumes are not allowed to be used",
}, },
"failHostPathDirPSP": {
pod: failHostPathDirPod,
psp: failHostPathDirPSP,
expectedError: "host path /fail is not allowed to be used. allowed host paths: [/foo/bar]",
},
"failSafeSysctlFooPod with failNoSysctlAllowedSCC": { "failSafeSysctlFooPod with failNoSysctlAllowedSCC": {
pod: failSafeSysctlFooPod, pod: failSafeSysctlFooPod,
psp: failNoSysctlAllowedPSP, psp: failNoSysctlAllowedPSP,
@ -736,28 +716,13 @@ func TestValidateContainerSecurityContextSuccess(t *testing.T) {
hostDirPod := defaultPod() hostDirPod := defaultPod()
hostDirPod.Spec.Volumes = []api.Volume{ hostDirPod.Spec.Volumes = []api.Volume{
{ {
Name: "good volume", Name: "bad volume",
VolumeSource: api.VolumeSource{ VolumeSource: api.VolumeSource{
HostPath: &api.HostPathVolumeSource{}, HostPath: &api.HostPathVolumeSource{},
}, },
}, },
} }
hostPathDirPod := defaultPod()
hostPathDirPod.Spec.Volumes = []api.Volume{
{
Name: "good volume",
VolumeSource: api.VolumeSource{
HostPath: &api.HostPathVolumeSource{
Path: "/foo/bar/baz",
},
},
},
}
hostPathDirPSP := defaultPSP()
hostPathDirPSP.Spec.Volumes = []extensions.FSType{extensions.HostPath}
hostPathDirPSP.Spec.AllowedHostPaths = []string{"/foo/bar"}
hostPortPSP := defaultPSP() hostPortPSP := defaultPSP()
hostPortPSP.Spec.HostPorts = []extensions.HostPortRange{{Min: 1, Max: 1}} hostPortPSP.Spec.HostPorts = []extensions.HostPortRange{{Min: 1, Max: 1}}
hostPortPod := defaultPod() hostPortPod := defaultPod()
@ -818,10 +783,6 @@ func TestValidateContainerSecurityContextSuccess(t *testing.T) {
pod: hostDirPod, pod: hostDirPod,
psp: hostDirPSP, psp: hostDirPSP,
}, },
"pass hostDir allowed directory validating PSP": {
pod: hostPathDirPod,
psp: hostPathDirPSP,
},
"pass hostPort validating PSP": { "pass hostPort validating PSP": {
pod: hostPortPod, pod: hostPortPod,
psp: hostPortPSP, psp: hostPortPSP,

View File

@ -18,7 +18,6 @@ package util
import ( import (
"fmt" "fmt"
"strings"
"k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"
@ -172,52 +171,3 @@ func UserFallsInRange(id types.UnixUserID, rng extensions.UserIDRange) bool {
func GroupFallsInRange(id types.UnixGroupID, rng extensions.GroupIDRange) bool { func GroupFallsInRange(id types.UnixGroupID, rng extensions.GroupIDRange) bool {
return id >= rng.Min && id <= rng.Max return id >= rng.Min && id <= rng.Max
} }
// PSPAllowsHostVolumePath is a utility for checking if a PSP allows the host volume path.
// This only checks the path. You should still check to make sure the host volume fs type is allowed.
func PSPAllowsHostVolumePath(psp *extensions.PodSecurityPolicy, hostPath string) bool {
if psp == nil {
return false
}
// If no allowed paths are specified then allow any path
if len(psp.Spec.AllowedHostPaths) == 0 {
return true
}
for _, allowedPath := range psp.Spec.AllowedHostPaths {
if hasPathPrefix(hostPath, allowedPath) {
return true
}
}
return false
}
// hasPathPrefix returns true if the string matches pathPrefix exactly, or if is prefixed with pathPrefix at a path segment boundary
// the string and pathPrefix are both normalized to remove trailing slashes prior to checking.
func hasPathPrefix(s, pathPrefix string) bool {
s = strings.TrimSuffix(s, "/")
pathPrefix = strings.TrimSuffix(pathPrefix, "/")
// Short circuit if s doesn't contain the prefix at all
if !strings.HasPrefix(s, pathPrefix) {
return false
}
pathPrefixLength := len(pathPrefix)
if len(s) == pathPrefixLength {
// Exact match
return true
}
if s[pathPrefixLength:pathPrefixLength+1] == "/" {
// The next character in s is a path segment boundary
// Check this instead of normalizing pathPrefix to avoid allocating on every call
return true
}
return false
}

View File

@ -103,83 +103,3 @@ func TestPSPAllowsFSType(t *testing.T) {
} }
} }
} }
func TestPSPAllowsHostVolumePath(t *testing.T) {
tests := map[string]struct {
psp *extensions.PodSecurityPolicy
path string
allows bool
}{
"nil psp": {
psp: nil,
path: "/test",
allows: false,
},
"empty allowed paths": {
psp: &extensions.PodSecurityPolicy{},
path: "/test",
allows: true,
},
"non-matching": {
psp: &extensions.PodSecurityPolicy{
Spec: extensions.PodSecurityPolicySpec{
AllowedHostPaths: []string{"/foo"},
},
},
path: "/foobar",
allows: false,
},
"match on direct match": {
psp: &extensions.PodSecurityPolicy{
Spec: extensions.PodSecurityPolicySpec{
AllowedHostPaths: []string{"/foo"},
},
},
path: "/foo",
allows: true,
},
"match with trailing slash on host path": {
psp: &extensions.PodSecurityPolicy{
Spec: extensions.PodSecurityPolicySpec{
AllowedHostPaths: []string{"/foo"},
},
},
path: "/foo/",
allows: true,
},
"match with trailing slash on allowed path": {
psp: &extensions.PodSecurityPolicy{
Spec: extensions.PodSecurityPolicySpec{
AllowedHostPaths: []string{"/foo/"},
},
},
path: "/foo",
allows: true,
},
"match child directory": {
psp: &extensions.PodSecurityPolicy{
Spec: extensions.PodSecurityPolicySpec{
AllowedHostPaths: []string{"/foo/"},
},
},
path: "/foo/bar",
allows: true,
},
"non-matching parent directory": {
psp: &extensions.PodSecurityPolicy{
Spec: extensions.PodSecurityPolicySpec{
AllowedHostPaths: []string{"/foo/bar"},
},
},
path: "/foo",
allows: false,
},
}
for k, v := range tests {
allows := PSPAllowsHostVolumePath(v.psp, v.path)
if v.allows != allows {
t.Errorf("%s expected PSPAllowsHostVolumePath to return %t but got %t", k, v.allows, allows)
}
}
}

View File

@ -898,10 +898,6 @@ type PodSecurityPolicySpec struct {
// will not be forced to. // will not be forced to.
// +optional // +optional
ReadOnlyRootFilesystem bool ReadOnlyRootFilesystem bool
// AllowedHostPaths is a white list of allowed host path prefixes. Empty indicates that all
// host paths may be used.
// +optional
AllowedHostPaths []string
} }
// HostPortRange defines a range of host ports that will be enabled by a policy // HostPortRange defines a range of host ports that will be enabled by a policy

View File

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

View File

@ -723,11 +723,6 @@ message PodSecurityPolicySpec {
// will not be forced to. // will not be forced to.
// +optional // +optional
optional bool readOnlyRootFilesystem = 14; optional bool readOnlyRootFilesystem = 14;
// AllowedHostPaths is a white list of allowed host path prefixes. Empty indicates that all
// host paths may be used.
// +optional
repeated string allowedHostPaths = 15;
} }
// ReplicaSet represents the configuration of a ReplicaSet. // ReplicaSet represents the configuration of a ReplicaSet.

View File

@ -14751,7 +14751,7 @@ func (x *PodSecurityPolicySpec) CodecEncodeSelf(e *codec1978.Encoder) {
} else { } else {
yysep2 := !z.EncBinary() yysep2 := !z.EncBinary()
yy2arr2 := z.EncBasicHandle().StructToArray yy2arr2 := z.EncBasicHandle().StructToArray
var yyq2 [15]bool var yyq2 [14]bool
_, _, _ = yysep2, yyq2, yy2arr2 _, _, _ = yysep2, yyq2, yy2arr2
const yyr2 bool = false const yyr2 bool = false
yyq2[0] = x.Privileged != false yyq2[0] = x.Privileged != false
@ -14764,10 +14764,9 @@ func (x *PodSecurityPolicySpec) CodecEncodeSelf(e *codec1978.Encoder) {
yyq2[7] = x.HostPID != false yyq2[7] = x.HostPID != false
yyq2[8] = x.HostIPC != false yyq2[8] = x.HostIPC != false
yyq2[13] = x.ReadOnlyRootFilesystem != false yyq2[13] = x.ReadOnlyRootFilesystem != false
yyq2[14] = len(x.AllowedHostPaths) != 0
var yynn2 int var yynn2 int
if yyr2 || yy2arr2 { if yyr2 || yy2arr2 {
r.EncodeArrayStart(15) r.EncodeArrayStart(14)
} else { } else {
yynn2 = 4 yynn2 = 4
for _, b := range yyq2 { for _, b := range yyq2 {
@ -15112,39 +15111,6 @@ func (x *PodSecurityPolicySpec) CodecEncodeSelf(e *codec1978.Encoder) {
} }
} }
} }
if yyr2 || yy2arr2 {
z.EncSendContainerState(codecSelfer_containerArrayElem1234)
if yyq2[14] {
if x.AllowedHostPaths == nil {
r.EncodeNil()
} else {
yym54 := z.EncBinary()
_ = yym54
if false {
} else {
z.F.EncSliceStringV(x.AllowedHostPaths, false, e)
}
}
} else {
r.EncodeNil()
}
} else {
if yyq2[14] {
z.EncSendContainerState(codecSelfer_containerMapKey1234)
r.EncodeString(codecSelferC_UTF81234, string("allowedHostPaths"))
z.EncSendContainerState(codecSelfer_containerMapValue1234)
if x.AllowedHostPaths == nil {
r.EncodeNil()
} else {
yym55 := z.EncBinary()
_ = yym55
if false {
} else {
z.F.EncSliceStringV(x.AllowedHostPaths, false, e)
}
}
}
}
if yyr2 || yy2arr2 { if yyr2 || yy2arr2 {
z.EncSendContainerState(codecSelfer_containerArrayEnd1234) z.EncSendContainerState(codecSelfer_containerArrayEnd1234)
} else { } else {
@ -15354,18 +15320,6 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromMap(l int, d *codec1978.Decod
*((*bool)(yyv26)) = r.DecodeBool() *((*bool)(yyv26)) = r.DecodeBool()
} }
} }
case "allowedHostPaths":
if r.TryDecodeAsNil() {
x.AllowedHostPaths = nil
} else {
yyv28 := &x.AllowedHostPaths
yym29 := z.DecBinary()
_ = yym29
if false {
} else {
z.F.DecSliceStringX(yyv28, false, d)
}
}
default: default:
z.DecStructFieldNotFound(-1, yys3) z.DecStructFieldNotFound(-1, yys3)
} // end switch yys3 } // end switch yys3
@ -15377,16 +15331,16 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
var h codecSelfer1234 var h codecSelfer1234
z, r := codec1978.GenHelperDecoder(d) z, r := codec1978.GenHelperDecoder(d)
_, _, _ = h, z, r _, _, _ = h, z, r
var yyj30 int var yyj28 int
var yyb30 bool var yyb28 bool
var yyhl30 bool = l >= 0 var yyhl28 bool = l >= 0
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return return
} }
@ -15394,21 +15348,21 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
if r.TryDecodeAsNil() { if r.TryDecodeAsNil() {
x.Privileged = false x.Privileged = false
} else { } else {
yyv31 := &x.Privileged yyv29 := &x.Privileged
yym32 := z.DecBinary() yym30 := z.DecBinary()
_ = yym32 _ = yym30
if false { if false {
} else { } else {
*((*bool)(yyv31)) = r.DecodeBool() *((*bool)(yyv29)) = r.DecodeBool()
} }
} }
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return return
} }
@ -15416,21 +15370,21 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
if r.TryDecodeAsNil() { if r.TryDecodeAsNil() {
x.DefaultAddCapabilities = nil x.DefaultAddCapabilities = nil
} else { } else {
yyv33 := &x.DefaultAddCapabilities yyv31 := &x.DefaultAddCapabilities
yym34 := z.DecBinary() yym32 := z.DecBinary()
_ = yym34 _ = yym32
if false { if false {
} else { } else {
h.decSlicev1_Capability((*[]pkg4_v1.Capability)(yyv33), d) h.decSlicev1_Capability((*[]pkg4_v1.Capability)(yyv31), d)
} }
} }
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return return
} }
@ -15438,21 +15392,21 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
if r.TryDecodeAsNil() { if r.TryDecodeAsNil() {
x.RequiredDropCapabilities = nil x.RequiredDropCapabilities = nil
} else { } else {
yyv35 := &x.RequiredDropCapabilities yyv33 := &x.RequiredDropCapabilities
yym36 := z.DecBinary() yym34 := z.DecBinary()
_ = yym36 _ = yym34
if false { if false {
} else { } else {
h.decSlicev1_Capability((*[]pkg4_v1.Capability)(yyv35), d) h.decSlicev1_Capability((*[]pkg4_v1.Capability)(yyv33), d)
} }
} }
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return return
} }
@ -15460,21 +15414,21 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
if r.TryDecodeAsNil() { if r.TryDecodeAsNil() {
x.AllowedCapabilities = nil x.AllowedCapabilities = nil
} else { } else {
yyv37 := &x.AllowedCapabilities yyv35 := &x.AllowedCapabilities
yym38 := z.DecBinary() yym36 := z.DecBinary()
_ = yym38 _ = yym36
if false { if false {
} else { } else {
h.decSlicev1_Capability((*[]pkg4_v1.Capability)(yyv37), d) h.decSlicev1_Capability((*[]pkg4_v1.Capability)(yyv35), d)
} }
} }
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return return
} }
@ -15482,21 +15436,21 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
if r.TryDecodeAsNil() { if r.TryDecodeAsNil() {
x.Volumes = nil x.Volumes = nil
} else { } else {
yyv39 := &x.Volumes yyv37 := &x.Volumes
yym40 := z.DecBinary() yym38 := z.DecBinary()
_ = yym40 _ = yym38
if false { if false {
} else { } else {
h.decSliceFSType((*[]FSType)(yyv39), d) h.decSliceFSType((*[]FSType)(yyv37), d)
} }
} }
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return return
} }
@ -15504,21 +15458,21 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
if r.TryDecodeAsNil() { if r.TryDecodeAsNil() {
x.HostNetwork = false x.HostNetwork = false
} else { } else {
yyv41 := &x.HostNetwork yyv39 := &x.HostNetwork
yym42 := z.DecBinary() yym40 := z.DecBinary()
_ = yym42 _ = yym40
if false { if false {
} else { } else {
*((*bool)(yyv41)) = r.DecodeBool() *((*bool)(yyv39)) = r.DecodeBool()
} }
} }
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return return
} }
@ -15526,21 +15480,21 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
if r.TryDecodeAsNil() { if r.TryDecodeAsNil() {
x.HostPorts = nil x.HostPorts = nil
} else { } else {
yyv43 := &x.HostPorts yyv41 := &x.HostPorts
yym44 := z.DecBinary() yym42 := z.DecBinary()
_ = yym44 _ = yym42
if false { if false {
} else { } else {
h.decSliceHostPortRange((*[]HostPortRange)(yyv43), d) h.decSliceHostPortRange((*[]HostPortRange)(yyv41), d)
} }
} }
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return return
} }
@ -15548,21 +15502,21 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
if r.TryDecodeAsNil() { if r.TryDecodeAsNil() {
x.HostPID = false x.HostPID = false
} else { } else {
yyv45 := &x.HostPID yyv43 := &x.HostPID
yym46 := z.DecBinary() yym44 := z.DecBinary()
_ = yym46 _ = yym44
if false { if false {
} else { } else {
*((*bool)(yyv45)) = r.DecodeBool() *((*bool)(yyv43)) = r.DecodeBool()
} }
} }
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return return
} }
@ -15570,21 +15524,21 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
if r.TryDecodeAsNil() { if r.TryDecodeAsNil() {
x.HostIPC = false x.HostIPC = false
} else { } else {
yyv47 := &x.HostIPC yyv45 := &x.HostIPC
yym48 := z.DecBinary() yym46 := z.DecBinary()
_ = yym48 _ = yym46
if false { if false {
} else { } else {
*((*bool)(yyv47)) = r.DecodeBool() *((*bool)(yyv45)) = r.DecodeBool()
} }
} }
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return return
} }
@ -15592,16 +15546,16 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
if r.TryDecodeAsNil() { if r.TryDecodeAsNil() {
x.SELinux = SELinuxStrategyOptions{} x.SELinux = SELinuxStrategyOptions{}
} else { } else {
yyv49 := &x.SELinux yyv47 := &x.SELinux
yyv49.CodecDecodeSelf(d) yyv47.CodecDecodeSelf(d)
} }
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return return
} }
@ -15609,16 +15563,16 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
if r.TryDecodeAsNil() { if r.TryDecodeAsNil() {
x.RunAsUser = RunAsUserStrategyOptions{} x.RunAsUser = RunAsUserStrategyOptions{}
} else { } else {
yyv50 := &x.RunAsUser yyv48 := &x.RunAsUser
yyv50.CodecDecodeSelf(d) yyv48.CodecDecodeSelf(d)
} }
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return return
} }
@ -15626,16 +15580,16 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
if r.TryDecodeAsNil() { if r.TryDecodeAsNil() {
x.SupplementalGroups = SupplementalGroupsStrategyOptions{} x.SupplementalGroups = SupplementalGroupsStrategyOptions{}
} else { } else {
yyv51 := &x.SupplementalGroups yyv49 := &x.SupplementalGroups
yyv51.CodecDecodeSelf(d) yyv49.CodecDecodeSelf(d)
} }
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return return
} }
@ -15643,16 +15597,16 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
if r.TryDecodeAsNil() { if r.TryDecodeAsNil() {
x.FSGroup = FSGroupStrategyOptions{} x.FSGroup = FSGroupStrategyOptions{}
} else { } else {
yyv52 := &x.FSGroup yyv50 := &x.FSGroup
yyv52.CodecDecodeSelf(d) yyv50.CodecDecodeSelf(d)
} }
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return return
} }
@ -15660,48 +15614,26 @@ func (x *PodSecurityPolicySpec) codecDecodeSelfFromArray(l int, d *codec1978.Dec
if r.TryDecodeAsNil() { if r.TryDecodeAsNil() {
x.ReadOnlyRootFilesystem = false x.ReadOnlyRootFilesystem = false
} else { } else {
yyv53 := &x.ReadOnlyRootFilesystem yyv51 := &x.ReadOnlyRootFilesystem
yym54 := z.DecBinary() yym52 := z.DecBinary()
_ = yym54 _ = yym52
if false { if false {
} else { } else {
*((*bool)(yyv53)) = r.DecodeBool() *((*bool)(yyv51)) = r.DecodeBool()
}
}
yyj30++
if yyhl30 {
yyb30 = yyj30 > l
} else {
yyb30 = r.CheckBreak()
}
if yyb30 {
z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
return
}
z.DecSendContainerState(codecSelfer_containerArrayElem1234)
if r.TryDecodeAsNil() {
x.AllowedHostPaths = nil
} else {
yyv55 := &x.AllowedHostPaths
yym56 := z.DecBinary()
_ = yym56
if false {
} else {
z.F.DecSliceStringX(yyv55, false, d)
} }
} }
for { for {
yyj30++ yyj28++
if yyhl30 { if yyhl28 {
yyb30 = yyj30 > l yyb28 = yyj28 > l
} else { } else {
yyb30 = r.CheckBreak() yyb28 = r.CheckBreak()
} }
if yyb30 { if yyb28 {
break break
} }
z.DecSendContainerState(codecSelfer_containerArrayElem1234) z.DecSendContainerState(codecSelfer_containerArrayElem1234)
z.DecStructFieldNotFound(yyj30-1, "") z.DecStructFieldNotFound(yyj28-1, "")
} }
z.DecSendContainerState(codecSelfer_containerArrayEnd1234) z.DecSendContainerState(codecSelfer_containerArrayEnd1234)
} }
@ -21490,7 +21422,7 @@ func (x codecSelfer1234) decSlicePodSecurityPolicy(v *[]PodSecurityPolicy, d *co
yyrg1 := len(yyv1) > 0 yyrg1 := len(yyv1) > 0
yyv21 := yyv1 yyv21 := yyv1
yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 584) yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 560)
if yyrt1 { if yyrt1 {
if yyrl1 <= cap(yyv1) { if yyrl1 <= cap(yyv1) {
yyv1 = yyv1[:yyrl1] yyv1 = yyv1[:yyrl1]

View File

@ -929,10 +929,6 @@ type PodSecurityPolicySpec struct {
// will not be forced to. // will not be forced to.
// +optional // +optional
ReadOnlyRootFilesystem bool `json:"readOnlyRootFilesystem,omitempty" protobuf:"varint,14,opt,name=readOnlyRootFilesystem"` ReadOnlyRootFilesystem bool `json:"readOnlyRootFilesystem,omitempty" protobuf:"varint,14,opt,name=readOnlyRootFilesystem"`
// AllowedHostPaths is a white list of allowed host path prefixes. Empty indicates that all
// host paths may be used.
// +optional
AllowedHostPaths []string `json:"allowedHostPaths,omitempty" protobuf:"bytes,15,opt,name=allowedHostPaths"`
} }
// FS Type gives strong typing to different file systems that are used by volumes. // FS Type gives strong typing to different file systems that are used by volumes.

View File

@ -425,7 +425,6 @@ var map_PodSecurityPolicySpec = map[string]string{
"supplementalGroups": "SupplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.", "supplementalGroups": "SupplementalGroups is the strategy that will dictate what supplemental groups are used by the SecurityContext.",
"fsGroup": "FSGroup is the strategy that will dictate what fs group is used by the SecurityContext.", "fsGroup": "FSGroup is the strategy that will dictate what fs group is used by the SecurityContext.",
"readOnlyRootFilesystem": "ReadOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.", "readOnlyRootFilesystem": "ReadOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.",
"allowedHostPaths": "AllowedHostPaths is a white list of allowed host path prefixes. Empty indicates that all host paths may be used.",
} }
func (PodSecurityPolicySpec) SwaggerDoc() map[string]string { func (PodSecurityPolicySpec) SwaggerDoc() map[string]string {

View File

@ -1219,7 +1219,6 @@ func autoConvert_v1beta1_PodSecurityPolicySpec_To_extensions_PodSecurityPolicySp
return err return err
} }
out.ReadOnlyRootFilesystem = in.ReadOnlyRootFilesystem out.ReadOnlyRootFilesystem = in.ReadOnlyRootFilesystem
out.AllowedHostPaths = *(*[]string)(unsafe.Pointer(&in.AllowedHostPaths))
return nil return nil
} }
@ -1261,7 +1260,6 @@ func autoConvert_extensions_PodSecurityPolicySpec_To_v1beta1_PodSecurityPolicySp
return err return err
} }
out.ReadOnlyRootFilesystem = in.ReadOnlyRootFilesystem out.ReadOnlyRootFilesystem = in.ReadOnlyRootFilesystem
out.AllowedHostPaths = *(*[]string)(unsafe.Pointer(&in.AllowedHostPaths))
return nil return nil
} }

View File

@ -839,11 +839,6 @@ func DeepCopy_v1beta1_PodSecurityPolicySpec(in interface{}, out interface{}, c *
if err := DeepCopy_v1beta1_FSGroupStrategyOptions(&in.FSGroup, &out.FSGroup, c); err != nil { if err := DeepCopy_v1beta1_FSGroupStrategyOptions(&in.FSGroup, &out.FSGroup, c); err != nil {
return err return err
} }
if in.AllowedHostPaths != nil {
in, out := &in.AllowedHostPaths, &out.AllowedHostPaths
*out = make([]string, len(*in))
copy(*out, *in)
}
return nil return nil
} }
} }

View File

@ -831,11 +831,6 @@ func DeepCopy_extensions_PodSecurityPolicySpec(in interface{}, out interface{},
if err := DeepCopy_extensions_FSGroupStrategyOptions(&in.FSGroup, &out.FSGroup, c); err != nil { if err := DeepCopy_extensions_FSGroupStrategyOptions(&in.FSGroup, &out.FSGroup, c); err != nil {
return err return err
} }
if in.AllowedHostPaths != nil {
in, out := &in.AllowedHostPaths, &out.AllowedHostPaths
*out = make([]string, len(*in))
copy(*out, *in)
}
return nil return nil
} }
} }