



A_		:     List[Any]        =     '''ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'''


def 	UpperCAmelCase__      (      UpperCAmelCase__ :bytes					):






 '''simple docstring'''

 if not isinstance(UpperCAmelCase__ ,					UpperCAmelCase__					):
  a						=		F"""a bytes-like object is required, not '{data.__class__.__name__}'"""
  raise TypeError(UpperCAmelCase__					)

 a						=		"".join(bin(UpperCAmelCase__					)[2:].zfill(8					) for byte in data					)

 a						=		len(UpperCAmelCase__					) % 6 != 0

 if padding_needed:
  # The padding that will be added later
  a						=		b"=" * ((6 - len(UpperCAmelCase__					) % 6) // 2)

  # Append binary_stream with arbitrary binary digits (0's by default) to make its
  # length a multiple of 6.
  binary_stream += "0" * (6 - len(UpperCAmelCase__					) % 6)
 else:
  a						=		b""

 # Encode every 6 binary digits to their corresponding Base64 character
 return (
     "".join(
         B64_CHARSET[int(binary_stream[index : index + 6] ,					2					)]
         for index in range(0 ,					len(UpperCAmelCase__					) ,					6					)					).encode()
     + padding
 )


def 	UpperCAmelCase__      (      UpperCAmelCase__ :str					):






 '''simple docstring'''

 if not isinstance(UpperCAmelCase__ ,					UpperCAmelCase__					) and not isinstance(UpperCAmelCase__ ,					UpperCAmelCase__					):
  a						=		(
      "argument should be a bytes-like object or ASCII string, "
      F"""not '{encoded_data.__class__.__name__}'"""
  )
  raise TypeError(UpperCAmelCase__					)

 # In case encoded_data is a bytes-like object, make sure it contains only
 # ASCII characters so we convert it to a string object
 if isinstance(UpperCAmelCase__ ,					UpperCAmelCase__					):
  try:
   a						=		encoded_data.decode("utf-8"					)
  except UnicodeDecodeError:
   raise ValueError("base64 encoded data should only contain ASCII characters"					)

 a						=		encoded_data.count("="					)

 # Check if the encoded string contains non base64 characters
 if padding:
  assert all(
      char in B64_CHARSET for char in encoded_data[:-padding]					), "Invalid base64 character(s) found."
 else:
  assert all(
      char in B64_CHARSET for char in encoded_data					), "Invalid base64 character(s) found."

 # Check the padding
 assert len(UpperCAmelCase__					) % 4 == 0 and padding < 3, "Incorrect padding"

 if padding:
  # Remove padding if there is one
  a						=		encoded_data[:-padding]

  a						=		"".join(
      bin(B64_CHARSET.index(UpperCAmelCase__					)					)[2:].zfill(6					) for char in encoded_data					)[: -padding * 2]
 else:
  a						=		"".join(
      bin(B64_CHARSET.index(UpperCAmelCase__					)					)[2:].zfill(6					) for char in encoded_data					)

 a						=		[
     int(binary_stream[index : index + 8] ,					2					)
     for index in range(0 ,					len(UpperCAmelCase__					) ,					8					)
 ]

 return bytes(UpperCAmelCase__					)


if __name__ == "__main__":
     import doctest

     doctest.testmod()






A_		:     Any        =     [4, 1, 7, 4, 2, 6, 4, 1, 5, 3, 7, 5]
A_		:     Tuple        =     [3, 7, 7, 4, 2, 6, 4, 1, 5, 3, 7, 5]
A_		:     Optional[int]        =     {
    0: '''Sunday''',
    1: '''Monday''',
    2: '''Tuesday''',
    3: '''Wednesday''',
    4: '''Thursday''',
    5: '''Friday''',
    6: '''Saturday''',
}


def 	UpperCAmelCase__      (      UpperCAmelCase__ :int ,					UpperCAmelCase__ :int ,					UpperCAmelCase__ :int					):






 '''simple docstring'''

 assert len(str(UpperCAmelCase__					)					) > 2, "year should be in YYYY format"
 assert 1 <= month <= 12, "month should be between 1 to 12"
 assert 1 <= day <= 31, "day should be between 1 to 31"

 # Doomsday algorithm:
 a						=		year // 1_00
 a						=		(5 * (century % 4) + 2) % 7
 a						=		year % 1_00
 a						=		centurian % 12
 a						=		(
     (centurian // 12) + centurian_m + (centurian_m // 4) + century_anchor
 ) % 7
 a						=		(
     DOOMSDAY_NOT_LEAP[month - 1]
     if (year % 4 != 0) or (centurian == 0 and (year % 4_00) == 0)
     else DOOMSDAY_LEAP[month - 1]
 )
 a						=		(dooms_day + day - day_anchor) % 7
 return WEEK_DAY_NAMES[week_day]


if __name__ == "__main__":
     import doctest

     doctest.testmod()

