private void followToParam(HashMap<Address, Long> constUse, ArrayList<PcodeOp> defUseList,
			HighFunction highFunction, Varnode vnode, HashSet<SequenceNumber> doneSet) {

		HighVariable hvar = vnode.getHigh();
		if (hvar instanceof HighParam) {
			Function function = highFunction.getFunction();
			routines.add(function.getEntryPoint());
			paramIndexes.add(((HighParam) hvar).getSlot() + 1);
			defUseLists.add(defUseList);
			return;
		}
		// follow back up through
		PcodeOp def = vnode.getDef();
		if (def == null) {
			return;
		}

		// have we done this vnode source already?
		Address vPCAddr = vnode.getPCAddress();
		SequenceNumber seqnum = def.getSeqnum();
		if (doneSet == null) {
			doneSet = new HashSet<>();
		}
		if (seqnum != null && doneSet.contains(seqnum)) {
			return;
		}
		doneSet.add(seqnum);

		int opcode = def.getOpcode();
		switch (opcode) {
			case PcodeOp.COPY:
				if (def.getInput(0).isConstant()) {
					long value = def.getInput(0).getOffset();
					try {
						value = applyDefUseList(value, defUseList);
						constUse.put(def.getOutput().getPCAddress(), value);
					}
					catch (InvalidInputException exc) {
						// ignore
					}
					return;
				}
				followToParam(constUse, defUseList, highFunction, def.getInput(0), doneSet);
				return;
			case PcodeOp.INT_ZEXT:
				followToParam(constUse, defUseList, highFunction, def.getInput(0), doneSet);
				return;
			case PcodeOp.MULTIEQUAL:
				for (int i = 0; i < def.getNumInputs(); i++) {
					ArrayList<PcodeOp> splitUseList = new ArrayList<>(defUseList);
					followToParam(constUse, splitUseList, highFunction, def.getInput(i), doneSet);
				}
				return;
			case PcodeOp.CAST:
				// Cast will expose more Pcode, and could be attached to the same address!
				if (vPCAddr.equals(def.getInput(0).getPCAddress())) {
					doneSet.remove(vPCAddr);
				}
				followToParam(constUse, defUseList, highFunction, def.getInput(0), doneSet);
				return;
			case PcodeOp.INDIRECT:
				Varnode output = def.getOutput();
				if (output.getAddress().equals(def.getInput(0).getAddress())) {
					followToParam(constUse, defUseList, highFunction, def.getInput(0), doneSet);
					return;
				}
				break;
			case PcodeOp.INT_AND:
				if (def.getInput(1).isConstant()) {
					defUseList.add(0, def);
					followToParam(constUse, defUseList, highFunction, def.getInput(0), doneSet);
					return;
				}
				break;
			case PcodeOp.INT_ADD:
				if (def.getInput(1).isConstant()) {
					defUseList.add(0, def);
					followToParam(constUse, defUseList, highFunction, def.getInput(0), doneSet);
					return;
				}
				if (vnode.getHigh() instanceof HighParam) {
					// don't handle non-constants for now
				}
				break;
		}
		// println("     Lost IT! " + vnode.getPCAddress());
	}
Finds the parameter passed into the resource function call
@param constUse - Key value pairs of the resource function calls
@param defUseList
@param highFunction
@param vnode
@param doneSet
Ghidra/Features/Decompiler/ghidra_scripts/WindowsResourceReference.java