int Permitted_Braking_Distance_Information_Core_1_Encoder(Bitstream* stream, const Permitted_Braking_Distance_Information_Core_1* p)
{
    if (NormalBitstream(stream, PERMITTED_BRAKING_DISTANCE_INFORMATION_CORE_1_CORE_BITSIZE))
    {
        if (Permitted_Braking_Distance_Information_Core_1_UpperBitsNotSet(p))
        {
            //@ ghost const uint32_t pos = stream->bitpos;

            Bitstream_Write(stream, 15, p->D_PBD_k);
            Bitstream_Write(stream, 1,  p->Q_GDIR_k);
            Bitstream_Write(stream, 8,  p->G_PBDSR_k);
            Bitstream_Write(stream, 1,  p->Q_PBDSR_k);
            Bitstream_Write(stream, 15, p->D_PBDSR_k);
            Bitstream_Write(stream, 15, p->L_PBDSR_k);


            //@ assert D_PBD_k:           EqualBits(stream, pos,       pos + 15,  p->D_PBD_k);
            //@ assert Q_GDIR_k:          EqualBits(stream, pos + 15,  pos + 16,  p->Q_GDIR_k);
            //@ assert G_PBDSR_k:         EqualBits(stream, pos + 16,  pos + 24,  p->G_PBDSR_k);
            //@ assert Q_PBDSR_k:         EqualBits(stream, pos + 24,  pos + 25,  p->Q_PBDSR_k);
            //@ assert D_PBDSR_k:         EqualBits(stream, pos + 25,  pos + 40,  p->D_PBDSR_k);
            //@ assert L_PBDSR_k:         EqualBits(stream, pos + 40,  pos + 55,  p->L_PBDSR_k);

            return 1;
        }
        else
        {
            return -2;
        }
    }
    else
    {
        return -1;
    }
}
int Permitted_Braking_Distance_Information_UpperBitsNotSet(const Permitted_Braking_Distance_Information_Core* p)
{
    bool status = true;

    status = status && UpperBitsNotSet64(p->Q_DIR,             2) ;
    status = status && UpperBitsNotSet64(p->L_PACKET,          13);
    status = status && UpperBitsNotSet64(p->Q_SCALE,           2) ;
    status = status && UpperBitsNotSet64(p->Q_TRACKINIT,       1) ;

    if (p->Q_TRACKINIT == 1)
    {
        status = status && UpperBitsNotSet64(p->D_TRACKINIT,       15);
    }

    if (p->Q_TRACKINIT == 0)
    {
        status = status && UpperBitsNotSet64(p->D_PBD,             15);
        status = status && UpperBitsNotSet64(p->Q_GDIR,            1) ;
        status = status && UpperBitsNotSet64(p->G_PBDSR,           8) ;
        status = status && UpperBitsNotSet64(p->Q_PBDSR,           1) ;
        status = status && UpperBitsNotSet64(p->D_PBDSR,           15);
        status = status && UpperBitsNotSet64(p->L_PBDSR,           15);
        status = status && UpperBitsNotSet64(p->N_ITER_1,          5) ;

        for (uint32_t i = 0; i < p->N_ITER_1; ++i)
        {
            status = status && Permitted_Braking_Distance_Information_Core_1_UpperBitsNotSet(&(p->sub_1[i]));
        }
    }

    if (status)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}