@Override
		protected JPanel createWorkPanel() {

			// Create the main text area and give it a scroll bar. 
			yaraTA = new JTextArea(12, 0);
			scrollPane = new JScrollPane(yaraTA);
			yaraTA.setWrapStyleWord(true);
			yaraTA.setLineWrap(true);

			// Create the instruction table and set it as a listener of the table model, so 
			// this gui will be notified when changes have been made (when the user has adjusted
			// the mask settings).  This allows us to dynamically update the yara string as 
			// the user is changing things.
			InstructionTablePanel instructionTablePanel =
				new InstructionTablePanel(searchData.getMaxNumOperands(), plugin, this);
			instructionTablePanel.getTable().getModel().addTableModelListener(e -> {
				generateYara();
			});

			// Finally, set up the main panel and create a split pane so the user can adjust
			// the dimensions of the masking table and the yara text display.
			JPanel mainPanel = new JPanel();
			mainPanel.setLayout(new BorderLayout());
			verticalSplitter = new JSplitPane(JSplitPane.VERTICAL_SPLIT,
				instructionTablePanel.getWorkPanel(), scrollPane);
			mainPanel.add(verticalSplitter);

			// Tell the data model to listen for changes the table; when the GUI is updated, the
			// model needs to be told to update itself to reflect the new mask settings. 
			searchData.registerForGuiUpdates(instructionTablePanel.getTable());

			// Now restore the splitter location to whatever it was before.
			verticalSplitter.setDividerLocation(splitterSave);

			return mainPanel;
		}
The dialog we're using here is a modified form of the
{@link InstructionSearchDialog}; this one contains only the
{@link InstructionTablePanel} portion, which provides the operand
masking capability.

To accomplish this we override the method that constructs the UI
components and add just the components we need.

@return
Ghidra/Features/Base/ghidra_scripts/YaraGhidraGUIScript.java