Appends characters to the end of the string to increase the string length per
    IBM Globalization Design Guideline A3: UI Expansion.

    https://www-01.ibm.com/software/globalization/guidelines/a3.html

    :param s: String to pad.
    :returns: Padded string.

def pad_length(s):
    """
    Appends characters to the end of the string to increase the string length per
    IBM Globalization Design Guideline A3: UI Expansion.

    https://www-01.ibm.com/software/globalization/guidelines/a3.html

    :param s: String to pad.
    :returns: Padded string.
    """
    padding_chars = [
        u'\ufe4e',  # ﹎: CENTRELINE LOW LINE
        u'\u040d',  # Ѝ: CYRILLIC CAPITAL LETTER I WITH GRAVE
        u'\u05d0',  # א: HEBREW LETTER ALEF
        u'\u01c6',  # ǆ: LATIN SMALL LETTER DZ WITH CARON
        u'\u1f8f',  # ᾏ: GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
        u'\u2167',  # Ⅷ: ROMAN NUMERAL EIGHT
        u'\u3234',  # ㈴: PARENTHESIZED IDEOGRAPH NAME
        u'\u32f9',  # ㋹: CIRCLED KATAKANA RE
        u'\ud4db',  # 퓛: HANGUL SYLLABLE PWILH
        u'\ufe8f',  # ﺏ: ARABIC LETTER BEH ISOLATED FORM
        u'\U0001D7D8',  # 𝟘: MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO
        u'\U0001F6A6',  # 🚦: VERTICAL TRAFFIC LIGHT
        ]
    padding_generator = itertools.cycle(padding_chars)
    target_lengths = {
        six.moves.range(1, 11): 3,
        six.moves.range(11, 21): 2,
        six.moves.range(21, 31): 1.8,
        six.moves.range(31, 51): 1.6,
        six.moves.range(51, 71): 1.4,
    }
    if len(s) > 70:
        target_length = int(math.ceil(len(s) * 1.3))
    else:
        for r, v in target_lengths.items():
            if len(s) in r:
                target_length = int(math.ceil(len(s) * v))
    diff = target_length - len(s)
    pad = u"".join([next(padding_generator) for _ in range(diff)])
    return s + pad