LOW severity: Description. Burning of child tokens can be disabled after `PaymentSettler::enableBurning` has been called by an admin calling `CentralToken::disableBurning` directly on the parent of the child tokens.

However, an admin could call `mint` once `disableBurning` as called because of the following line in...

Vulnerable code:
function mint(address to, uint64 amount) external nonReentrant whenNotPaused restricted {
        if (amount == 0) return;
@>      if (mintDisabled || burnable()) revert MintDisabled();
        _checkAllowedAdmin(to);
        _mint(to, amount);
        preBurnSupply += amount;
        emit TokensMinted(to, amount);

function test_cyfrin_MintBetweenDisableEnableBurn_Case1() public {
        address user0 = getDomesticUser(0);
        address user1 = getDomesticUser(1);
        centralTokenProxy.mint(address(this), uint64(10000));
        centralTokenProxy.dynamicTransfer(user0, 5000);
        centralTokenProxy.dynamicTransfer(user1, 5000);

        (uint128 usdBal0 , , bool burnEnabled0,) = paySettlerProxy.tokenData(address(centralTokenProxy));
        assertEq(usdBal0, 0);
        assertEq(burnEnabled0, false);

        // initiateBurning
        paySettlerProxy.initiateBurning(address(centralTokenProxy));
        skip(1 days + 1);

        uint64 burnFunds0 = 1_000_000e6; // first funding (USD6 units)
        IERC20(address(stableCoin)).approve(address(paySettlerProxy), type(uint256).max);
        paySettlerProxy.enableBurning(address(centralTokenProxy), address(this), burnFunds0);
        (uint128 usdBal1,,bool burnEnabled1,) = paySettlerProxy.tokenData(address(centralTokenProxy));
        assertEq(usdBal1, 1_000_000e6);
        assertEq(centralTokenProxy.totalSupply(), 10_000);
        assertEq(centralTokenProxy.preBurnSupply(), 10_000);
        assertEq(centralTokenProxy.totalBurnPayout(), 1_000_000e6);
        assertEq(burnEnabled1, true);

        vm.startPrank(user0);
        d_childTokenProxy.burn(); // burns 5000 tokens
        vm.stopPrank();
        (uint128 usdBal2,,,) = paySettlerProxy.tokenData(address(centralTokenProxy));
        assertEq(usdBal2, 500_000e6);
        assertEq(centralTokenProxy.totalSupply(), 5_000);
        assertEq(centralTokenProxy.preBurnSupply(), 10_000);
        assertEq(centralTokenProxy.totalBurnPayout(), 1_000_000e6);

        // Disable Burning
        centralTokenProxy.disableBurning();
        (,,bool burnEnabled2_5,) = paySettlerProxy.tokenData(address(centralTokenProxy));
        assertEq(burnEnabled2_5, true); // PaymentSettler still reports that the burn is enabled

        // Mint new tokens and distribute to user1
        centralTokenProxy.mint(address(this), 6_000);
        centralTokenProxy.dynamicTransfer(user1, 6_000);

        uint64 burnFunds1 = 600_000e6;
        paySettlerProxy.enableBurning(address(centralTokenProxy), address(this), burnFunds1);
        (uint128 usdBal3 , , , bool burnEnabled3) = paySettlerProxy.tokenData(address(centralTokenProxy));
        assertEq(usdBal3, 1_100_000e6);
        assertTrue(burnEnabled3);
        assertEq(centralTokenProxy.totalSupply(), 11_000);
        assertEq(centralTokenProxy.preBurnSupply(), 16_000);
        assertEq(centralTokenProxy.totalBurnPayout(), 600_000e6);

        vm.startPrank(user1);
        d_childTokenProxy.burn(); // burn all remaining tokens
        vm.stopPrank();

        (uint128 usdBalEnd , , , ) = paySettlerProxy.tokenData(address(centralTokenProxy));
        assertEq(usdBalEnd, 687_500e6);
        assertEq(centralTokenProxy.totalSupply(), 0);
    }

    function test_cyfrin_MintBetweenDisableEnableBurn_Case2() public {
        address user0 = getDomesticUser(0);
        address user1 = getDomesticUser(1);
        centralTokenProxy.mint(address(this), uint64(10000));
        centralTokenProxy.dynamicTransfer(user0, 5000);
        centralTokenProxy.dynamicTransfer(user1, 5000);

        (uint128 usdBal0 , , bool burnEnabled0,) = paySettlerProxy.tokenData(address(centralTokenProxy));
        assertEq(usdBal0, 0);
        assertEq(burnEnabled0, false);

        // initiateBurning
        paySettlerProxy.initiateBurning(address(centralTokenProxy));
        skip(1 days + 1);

        uint64 burnFunds0 = 1_000_000e6; // first funding (USD6 units)
        IERC20(address(stableCoin)).approve(address(paySettlerProxy), type(uint256).max);
        paySettlerProxy.enableBurning(address(centralTokenProxy), address(this), burnFunds0);
        (uint128 usdBal1,,bool burnEnabled1,) = paySettlerProxy.tokenData(address(centralTokenProxy));
        assertEq(usdBal1, 1_000_000e6);
        assertEq(centralTokenProxy.totalSupply(), 10_000);
        assertEq(centralTokenProxy.preBurnSupply(), 10_000);
        assertEq(centralTokenProxy.totalBurnPayout(), 1_000_000e6);
        assertEq(burnEnabled1, true);

        vm.startPrank(user0);
        d_childTokenProxy.burn(); // burns 5000 tokens
        vm.stopPrank();
        (uint128 usdBal2,,,) = paySettlerProxy.tokenData(address(centralTokenProxy));
        assertEq(usdBal2, 500_000e6);
        assertEq(centralTokenProxy.totalSupply(), 5_000);
        assertEq(centralTokenProxy.preBurnSupply(), 10_000);
        assertEq(centralTokenProxy.totalBurnPayout(), 1_000_000e6);

        // Disable Burning
        centralTokenProxy.disableBurning();
        (,,bool burnEnabled2_5,) = paySettlerProxy.tokenData(address(centralTokenProxy));
        assertEq(burnEnabled2_5, true); // PaymentSettler still reports that the burn is enabled

        // Mint new tokens and distribute to user1
        centralTokenProxy.mint(address(this), 6_000);
        centralTokenProxy.dynamicTransfer(user1, 6_000);

        centralTokenProxy.enableBurning(0); // burnPayout parameter ignored
        (uint128 usdBal3 , , , bool burnEnabled3) = paySettlerProxy.tokenData(address(centralTokenProxy));
        assertEq(usdBal3, 500_000e6);
        assertTrue(burnEnabled3);
        uint256 totalSupply3 = centralTokenProxy.totalSupply();
        uint64  preBurnSupply3 = centralTokenProxy.preBurnSupply();
        uint64  totalBurnPayout3 = centralTokenProxy.totalBurnPayout();
        uint256 valueOfTokens = totalSupply3 * totalBurnPayout3 / preBurnSupply3;

        assertEq(valueOfTokens, 687_500e6);
        assertGt(valueOfTokens, usdBal3);
        assertEq(totalSupply3, 11_000);
        assertEq(preBurnSupply3, 16_000);
        assertEq(totalBurnPayout3, 1_000_000e6);

        vm.startPrank(user1);
        vm.expectPartialRevert(bytes4(keccak256("InsufficientBalance(address)")));
        d_childTokenProxy.burn(); // burn all remaining tokens
        vm.stopPrank();
    }