def run_full_adder(text_bin: list, lfsr_16: list, lfsr_24: list) -> list:
    """
    This function follows the standard full adder truth table.
    Based on the values of input bits, the values of output
    bits can be directly assigned.  This process utilizes bits
    from both LFSRs and a carry-in bit (cin) initialized at 0.
    The full adder will run for the duration of the binary plaintext
    or ciphertext length.

    >>> run_full_adder([0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, \
0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1], \
[1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, \
1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0], \
[1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, \
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1])
    [0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, \
1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0]
    """
    cin = 0
    crypt_bin = []
    for i, bit in enumerate(text_bin):
        lfsr_cin_sum = lfsr_16[i] + lfsr_24[i] + cin
        s = 0 if lfsr_cin_sum == 0 or lfsr_cin_sum == 2 else 1
        cout = 0 if lfsr_cin_sum == 0 or lfsr_cin_sum == 1 else 1
        crypt_bin.append((s + bit) % 2)
        cin = cout
    return crypt_bin