public static void ChangeToil(ref Toil toil, JobDriver driver)
        {
            Pawn pawn = toil.actor ?? driver.pawn;

            if (pawn == null)
            {
                Log.Error("TF_BaseMessage".Translate() + "TF_Error_ChangeToil".Translate(toil.Named(null), "", typeof(JobDriver_DoBill).Named(null)));
                return;
            }
            var billGiver = pawn.CurJob.targetA.Thing.def;

#if DEBUG
            Log.Message($"Test 3.0: {Dictionaries.billGiverToolType.TryGetValue(billGiver, out var toolType2)} : {toolType2}");
#endif
            if (!pawn.CanUseTools(out var tracker) || !Dictionaries.billGiverToolType.TryGetValue(billGiver, out var toolType))
            {
                return;
            }

            var tool = tracker.UsedHandler.BestTool[toolType];
#if DEBUG
            var test = new System.Text.StringBuilder($"Test 3.1: {tracker.UsedHandler.BestTool[toolType]}\n");
            foreach (var a in tracker.UsedHandler.BestTool)
            {
                test.AppendLine($"{a.Key} : {a.Value}");
            }
            Log.Message(test.ToString());
#endif
            if (tool != null)
            {
                ToilPatch.HasTool(ref toil, pawn, tool, tracker);
            }
            else
            {
                ToilPatch.NoTool(ref toil, pawn, tracker);
            }
        }