diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeConfig.java index 0c2638b67a..3d484d381e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeConfig.java @@ -63,4 +63,15 @@ public interface GrandExchangeConfig extends Config { return false; } + + @ConfigItem( + position = 4, + keyName = "enableGeLimits", + name = "Enable GE Limits on GE", + description = "Shows the GE Limits on the GE" + ) + default boolean enableGELimits() + { + return true; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeItemPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeItemPanel.java index 0bd139bce8..3871a4c866 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeItemPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeItemPanel.java @@ -33,11 +33,14 @@ import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.util.ArrayList; +import java.util.List; import javax.swing.JLabel; import javax.swing.JPanel; +import javax.swing.border.CompoundBorder; import javax.swing.border.EmptyBorder; -import net.runelite.client.ui.ColorScheme; import net.runelite.client.game.AsyncBufferedImage; +import net.runelite.client.ui.ColorScheme; import net.runelite.client.util.LinkBrowser; import net.runelite.client.util.StackFormatter; @@ -50,25 +53,26 @@ class GrandExchangeItemPanel extends JPanel private static final Dimension ICON_SIZE = new Dimension(32, 32); GrandExchangeItemPanel(AsyncBufferedImage icon, String name, int itemID, int gePrice, Double - haPrice) + haPrice, int geItemLimit) { BorderLayout layout = new BorderLayout(); layout.setHgap(5); setLayout(layout); setToolTipText(name); setBackground(ColorScheme.MEDIUM_GRAY_COLOR); - - Color background = getBackground(); - addMouseListener(new MouseAdapter() + Color background = getBackground(); + List panels = new ArrayList(); + panels.add(this); + + MouseAdapter itemPanelMouseListener = new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { - setBackground(background.brighter()); - for (Component component : getComponents()) + for (JPanel panel : panels) { - component.setBackground(component.getBackground().brighter()); + matchComponentBackground(panel, background.brighter()); } setCursor(new Cursor(Cursor.HAND_CURSOR)); } @@ -76,10 +80,9 @@ class GrandExchangeItemPanel extends JPanel @Override public void mouseExited(MouseEvent e) { - setBackground(background); - for (Component component : getComponents()) + for (JPanel panel : panels) { - component.setBackground(background); + matchComponentBackground(panel, background); } setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); } @@ -89,7 +92,9 @@ class GrandExchangeItemPanel extends JPanel { geLink(name, itemID); } - }); + }; + + addMouseListener(itemPanelMouseListener); setBorder(new EmptyBorder(5, 5, 5, 0)); @@ -104,7 +109,8 @@ class GrandExchangeItemPanel extends JPanel // Item details panel JPanel rightPanel = new JPanel(new GridLayout(3, 1)); - rightPanel.setBackground(ColorScheme.MEDIUM_GRAY_COLOR); + panels.add(rightPanel); + rightPanel.setBackground(background); // Item name JLabel itemName = new JLabel(); @@ -127,15 +133,38 @@ class GrandExchangeItemPanel extends JPanel gePriceLabel.setForeground(ColorScheme.GRAND_EXCHANGE_PRICE); rightPanel.add(gePriceLabel); + JPanel alchAndLimitPanel = new JPanel(new BorderLayout()); + panels.add(alchAndLimitPanel); + alchAndLimitPanel.setBackground(background); + // Alch price JLabel haPriceLabel = new JLabel(); haPriceLabel.setText(StackFormatter.formatNumber(haPrice.intValue()) + " alch"); haPriceLabel.setForeground(ColorScheme.GRAND_EXCHANGE_ALCH); - rightPanel.add(haPriceLabel); + alchAndLimitPanel.add(haPriceLabel, BorderLayout.WEST); + + // GE Limit + JLabel geLimitLabel = new JLabel(); + String limitLabelText = geItemLimit == 0 ? "" : "Limit " + StackFormatter.formatNumber(geItemLimit); + geLimitLabel.setText(limitLabelText); + geLimitLabel.setForeground(ColorScheme.GRAND_EXCHANGE_LIMIT); + geLimitLabel.setBorder(new CompoundBorder(geLimitLabel.getBorder(), new EmptyBorder(0, 0, 0, 7))); + alchAndLimitPanel.add(geLimitLabel, BorderLayout.EAST); + + rightPanel.add(alchAndLimitPanel); add(rightPanel, BorderLayout.CENTER); } + private void matchComponentBackground(JPanel panel, Color color) + { + panel.setBackground(color); + for (Component c : panel.getComponents()) + { + c.setBackground(color); + } + } + private void geLink(String name, int itemID) { final String url = "http://services.runescape.com/m=itemdb_oldschool/" diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeItems.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeItems.java index ef8cb0fcb0..223ca4e66d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeItems.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeItems.java @@ -24,10 +24,10 @@ */ package net.runelite.client.plugins.grandexchange; -import lombok.Data; +import lombok.Value; import net.runelite.client.game.AsyncBufferedImage; -@Data +@Value public class GrandExchangeItems { private final AsyncBufferedImage icon; @@ -35,13 +35,5 @@ public class GrandExchangeItems private final int itemId; private final int gePrice; private final double haPrice; - - GrandExchangeItems(AsyncBufferedImage icon, String name, int itemId, int gePrice, double haPrice) - { - this.icon = icon; - this.name = name; - this.itemId = itemId; - this.gePrice = gePrice; - this.haPrice = haPrice; - } + private final int geItemLimit; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePanel.java index dbd56db928..a0fdfcae09 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePanel.java @@ -27,6 +27,7 @@ package net.runelite.client.plugins.grandexchange; import java.awt.BorderLayout; +import java.util.Map; import java.util.concurrent.ScheduledExecutorService; import javax.inject.Inject; import javax.swing.JPanel; @@ -90,4 +91,9 @@ class GrandExchangePanel extends PluginPanel tabGroup.select(searchTab); revalidate(); } + + void setGELimits(Map itemGELimits) + { + searchPanel.setItemGELimits(itemGELimits); + } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java index 5cbee6e5a0..0534507a01 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java @@ -28,9 +28,14 @@ package net.runelite.client.plugins.grandexchange; import com.google.common.eventbus.Subscribe; +import com.google.common.reflect.TypeToken; +import com.google.gson.Gson; import com.google.inject.Provides; import java.awt.image.BufferedImage; import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.Map; import java.util.concurrent.ScheduledExecutorService; import javax.inject.Inject; import javax.swing.SwingUtilities; @@ -84,6 +89,12 @@ public class GrandExchangePlugin extends Plugin private static final GrandExchangeClient CLIENT = new GrandExchangeClient(); private static final String OSB_GE_TEXT = "
OSBuddy Actively traded price: "; + private static final String BUY_LIMIT_GE_TEXT = "
Buy limit: "; + private static final Gson GSON = new Gson(); + private static final TypeToken> BUY_LIMIT_TOKEN = new TypeToken>() + { + }; + static final String SEARCH_GRAND_EXCHANGE = "Search Grand Exchange"; @Getter(AccessLevel.PACKAGE) @@ -125,6 +136,7 @@ public class GrandExchangePlugin extends Plugin private Widget grandExchangeText; private Widget grandExchangeItem; + private Map itemGELimits; @Provides GrandExchangeConfig provideConfig(ConfigManager configManager) @@ -135,7 +147,9 @@ public class GrandExchangePlugin extends Plugin @Override protected void startUp() { + itemGELimits = loadGELimits(); panel = injector.getInstance(GrandExchangePanel.class); + panel.setGELimits(itemGELimits); final BufferedImage icon = ImageUtil.getResourceStreamFromClass(getClass(), "ge_icon.png"); @@ -163,6 +177,7 @@ public class GrandExchangePlugin extends Plugin keyManager.unregisterKeyListener(inputListener); grandExchangeText = null; grandExchangeItem = null; + itemGELimits = null; } @Subscribe @@ -301,6 +316,18 @@ public class GrandExchangePlugin extends Plugin return; } + if (config.enableGELimits() && itemGELimits != null && !geTextString.contains(BUY_LIMIT_GE_TEXT)) + { + final Integer itemLimit = itemGELimits.get(itemId); + + // If we have item buy limit, append it + if (itemLimit != null) + { + final String text = geText.getText() + BUY_LIMIT_GE_TEXT + StackFormatter.formatNumber(itemLimit); + geText.setText(text); + } + } + if (!config.enableOsbPrices() || geTextString.contains(OSB_GE_TEXT)) { // OSB prices are disabled or price was already looked up, so no need to set it again @@ -323,4 +350,12 @@ public class GrandExchangePlugin extends Plugin } }); } + + private static Map loadGELimits() + { + final InputStream geLimitData = GrandExchangePlugin.class.getResourceAsStream("ge_limits.json"); + final Map itemGELimits = GSON.fromJson(new InputStreamReader(geLimitData), BUY_LIMIT_TOKEN.getType()); + log.debug("Loaded {} limits", itemGELimits.size()); + return itemGELimits; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeSearchPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeSearchPanel.java index addbf7dabe..08a21ef879 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeSearchPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangeSearchPanel.java @@ -32,13 +32,16 @@ import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.concurrent.ScheduledExecutorService; import javax.swing.ImageIcon; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.SwingUtilities; import javax.swing.border.EmptyBorder; +import lombok.Setter; import lombok.extern.slf4j.Slf4j; import net.runelite.api.ItemComposition; import net.runelite.client.callback.ClientThread; @@ -92,6 +95,9 @@ class GrandExchangeSearchPanel extends JPanel private List itemsList = new ArrayList<>(); + @Setter + private Map itemGELimits = Collections.emptyMap(); + static { SEARCH_ICON = new ImageIcon(ImageUtil.alphaOffset(ImageUtil.grayscaleOffset(ImageUtil.getResourceStreamFromClass(IconTextField.class, "search.png"), 0f), 1.75f)); @@ -222,9 +228,10 @@ class GrandExchangeSearchPanel extends JPanel } int itemPrice = itemManager.getItemPrice(itemId); + int itemLimit = itemGELimits.getOrDefault(itemId, 0); AsyncBufferedImage itemImage = itemManager.getImage(itemId); - itemsList.add(new GrandExchangeItems(itemImage, item.getName(), itemId, itemPrice, itemComp.getPrice() * 0.6)); + itemsList.add(new GrandExchangeItems(itemImage, item.getName(), itemId, itemPrice, itemComp.getPrice() * 0.6, itemLimit)); // If using hotkey to lookup item, stop after finding match. if (exactMatch && item.getName().equalsIgnoreCase(lookup)) @@ -246,7 +253,7 @@ class GrandExchangeSearchPanel extends JPanel for (GrandExchangeItems item : itemsList) { GrandExchangeItemPanel panel = new GrandExchangeItemPanel(item.getIcon(), item.getName(), - item.getItemId(), item.getGePrice(), item.getHaPrice()); + item.getItemId(), item.getGePrice(), item.getHaPrice(), item.getGeItemLimit()); /* Add the first item directly, wrap the rest with margin. This margin hack is because diff --git a/runelite-client/src/main/java/net/runelite/client/ui/ColorScheme.java b/runelite-client/src/main/java/net/runelite/client/ui/ColorScheme.java index 8cee06d0ca..5be1250547 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/ColorScheme.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/ColorScheme.java @@ -42,7 +42,7 @@ public class ColorScheme public static final Color MEDIUM_GRAY_COLOR = new Color(77, 77, 77); public static final Color LIGHT_GRAY_COLOR = new Color(165, 165, 165); - public static final Color DARKER_GRAY_HOVER_COLOR = new Color(60, 60 , 60); + public static final Color DARKER_GRAY_HOVER_COLOR = new Color(60, 60, 60); public static final Color DARK_GRAY_HOVER_COLOR = new Color(35, 35, 35); /* The color for the green progress bar (used in ge offers, farming tracker, etc)*/ @@ -60,6 +60,10 @@ public class ColorScheme /* The color for the high alch indicator in the ge search results */ public static final Color GRAND_EXCHANGE_ALCH = new Color(240, 207, 123); + /* The color for the limit indicator in the ge search results */ + public static final Color GRAND_EXCHANGE_LIMIT = new Color(50, 160, 250); + /* The background color of the scrollbar's track */ public static final Color SCROLL_TRACK_COLOR = new Color(25, 25, 25); + } \ No newline at end of file diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/grandexchange/ge_limits.json b/runelite-client/src/main/resources/net/runelite/client/plugins/grandexchange/ge_limits.json new file mode 100644 index 0000000000..21b529bab5 --- /dev/null +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/grandexchange/ge_limits.json @@ -0,0 +1,769 @@ +{ + "2": 7000, + "41": 10000, + "43": 10000, + "44": 10000, + "45": 11000, + "52": 7000, + "53": 7000, + "62": 10000, + "64": 10000, + "66": 10000, + "68": 10000, + "70": 10000, + "103": 10000, + "105": 10000, + "107": 10000, + "199": 11000, + "201": 11000, + "203": 11000, + "205": 11000, + "207": 11000, + "209": 11000, + "211": 11000, + "213": 11000, + "215": 11000, + "217": 11000, + "219": 11000, + "221": 13000, + "225": 13000, + "227": 13000, + "229": 13000, + "231": 13000, + "239": 13000, + "245": 10000, + "249": 11000, + "251": 11000, + "253": 13000, + "255": 12000, + "257": 12000, + "259": 2000, + "261": 2000, + "263": 13000, + "265": 2000, + "267": 2000, + "269": 2000, + "288": 15, + "313": 8000, + "314": 13000, + "315": 15000, + "331": 15000, + "359": 15000, + "361": 6000, + "371": 15000, + "373": 6000, + "377": 15000, + "379": 6000, + "383": 15000, + "385": 10000, + "401": 13000, + "434": 13000, + "436": 13000, + "438": 13000, + "440": 13000, + "442": 13000, + "444": 13000, + "447": 13000, + "449": 4500, + "451": 4500, + "453": 13000, + "526": 7500, + "532": 3000, + "536": 7500, + "542": 125, + "544": 125, + "554": 20000, + "555": 20000, + "556": 20000, + "557": 20000, + "558": 12000, + "559": 12000, + "560": 10000, + "561": 12000, + "562": 12000, + "563": 12000, + "564": 12000, + "565": 10000, + "566": 10000, + "567": 10000, + "573": 10000, + "577": 250, + "581": 125, + "590": 40, + "592": 13000, + "753": 15, + "805": 70, + "806": 7000, + "807": 7000, + "808": 7000, + "809": 7000, + "810": 11000, + "811": 7000, + "819": 13000, + "822": 13000, + "823": 11000, + "824": 11000, + "829": 11000, + "830": 11000, + "839": 14000, + "845": 14000, + "847": 14000, + "851": 14000, + "855": 18000, + "857": 125, + "859": 18000, + "863": 7000, + "865": 7000, + "866": 7000, + "868": 7000, + "882": 7000, + "884": 7000, + "886": 7000, + "888": 7000, + "890": 11000, + "892": 11000, + "950": 18000, + "954": 250, + "960": 13000, + "962": 50, + "981": 5, + "985": 11000, + "987": 11000, + "1038": 15, + "1040": 15, + "1042": 15, + "1044": 15, + "1046": 15, + "1048": 15, + "1050": 5, + "1059": 125, + "1063": 125, + "1065": 125, + "1067": 125, + "1069": 125, + "1071": 125, + "1073": 125, + "1079": 70, + "1085": 125, + "1087": 125, + "1091": 125, + "1093": 70, + "1095": 125, + "1099": 125, + "1105": 125, + "1109": 100, + "1113": 70, + "1115": 125, + "1119": 125, + "1121": 125, + "1123": 125, + "1127": 70, + "1129": 125, + "1131": 125, + "1135": 125, + "1143": 125, + "1145": 125, + "1147": 70, + "1149": 8, + "1159": 125, + "1161": 125, + "1163": 70, + "1167": 125, + "1169": 125, + "1171": 125, + "1185": 70, + "1193": 125, + "1197": 125, + "1199": 125, + "1201": 70, + "1207": 125, + "1213": 70, + "1215": 70, + "1243": 125, + "1247": 70, + "1249": 70, + "1265": 40, + "1267": 40, + "1269": 40, + "1271": 40, + "1273": 40, + "1275": 40, + "1289": 70, + "1295": 125, + "1303": 70, + "1305": 70, + "1307": 125, + "1309": 125, + "1315": 125, + "1319": 70, + "1325": 125, + "1329": 125, + "1333": 70, + "1339": 125, + "1343": 125, + "1347": 70, + "1349": 40, + "1351": 40, + "1353": 40, + "1355": 40, + "1357": 40, + "1359": 40, + "1361": 40, + "1369": 125, + "1371": 125, + "1373": 70, + "1377": 70, + "1379": 125, + "1391": 11000, + "1393": 500, + "1395": 14000, + "1397": 14000, + "1399": 500, + "1432": 70, + "1434": 70, + "1464": 14000, + "1478": 5, + "1511": 14000, + "1513": 12000, + "1515": 12000, + "1517": 15000, + "1519": 15000, + "1521": 14000, + "1607": 13000, + "1609": 10000, + "1617": 10000, + "1619": 10000, + "1621": 10000, + "1623": 10000, + "1637": 10000, + "1649": 10000, + "1673": 18000, + "1704": 10000, + "1725": 125, + "1731": 125, + "1734": 7000, + "1739": 10000, + "1741": 13000, + "1743": 10000, + "1745": 13000, + "1747": 10000, + "1749": 10000, + "1751": 13000, + "1753": 13000, + "1759": 13000, + "1761": 13000, + "1771": 150, + "1775": 13000, + "1777": 13000, + "1779": 13000, + "1781": 13000, + "1783": 13000, + "1785": 40, + "1925": 13000, + "1927": 13000, + "1931": 13000, + "1935": 13000, + "1937": 13000, + "1939": 13000, + "1949": 150, + "1961": 50, + "1965": 6000, + "1967": 6000, + "1973": 13000, + "1975": 13000, + "1987": 13000, + "1993": 6000, + "2003": 10000, + "2114": 13000, + "2132": 13000, + "2309": 6000, + "2313": 50, + "2347": 40, + "2351": 10000, + "2353": 10000, + "2355": 10000, + "2357": 10000, + "2359": 10000, + "2361": 10000, + "2389": 13000, + "2390": 13000, + "2422": 15, + "2481": 2000, + "2483": 10000, + "2485": 11000, + "2487": 125, + "2489": 70, + "2493": 125, + "2495": 70, + "2497": 70, + "2499": 125, + "2501": 70, + "2503": 70, + "2505": 13000, + "2509": 11000, + "2511": 14000, + "2513": 70, + "2530": 7500, + "2550": 10000, + "2577": 6, + "2581": 8, + "2621": 8, + "2864": 5000, + "2961": 15, + "2970": 13000, + "2998": 12000, + "3000": 2000, + "3049": 11000, + "3051": 11000, + "3053": 8, + "3054": 8, + "3099": 125, + "3101": 70, + "3105": 20, + "3140": 70, + "3142": 12500, + "3144": 10000, + "3147": 10000, + "3187": 7500, + "3190": 15, + "3202": 70, + "3204": 70, + "3385": 70, + "3387": 70, + "3389": 70, + "3391": 70, + "3393": 70, + "3481": 8, + "3483": 8, + "3749": 70, + "3751": 70, + "3753": 70, + "4087": 70, + "4089": 125, + "4091": 125, + "4093": 125, + "4131": 70, + "4151": 10, + "4153": 70, + "4178": 10, + "4180": 70, + "4287": 13000, + "4498": 250, + "4544": null, + "4561": 10000, + "4585": 70, + "4587": 70, + "4694": 12000, + "4695": 12000, + "4696": 12000, + "4697": 12000, + "4698": 12000, + "4699": 12000, + "4712": 15, + "4740": 11000, + "5100": 600, + "5288": 200, + "5289": 200, + "5295": 200, + "5296": 600, + "5300": 200, + "5312": 200, + "5313": 200, + "5314": 200, + "5316": 200, + "5320": 600, + "5321": 200, + "5331": 40, + "5333": 40, + "5334": 40, + "5335": 40, + "5336": 40, + "5337": 40, + "5338": 40, + "5339": 40, + "5340": 40, + "5354": 600, + "5374": 200, + "5502": 200, + "5982": 11000, + "6032": 600, + "6034": 600, + "6306": 18000, + "6313": 15, + "6319": 100, + "6322": 125, + "6324": 125, + "6328": 100, + "6332": 11000, + "6422": 20000, + "6424": 20000, + "6426": 20000, + "6428": 20000, + "6430": 12000, + "6432": 10000, + "6434": 12000, + "6436": 12000, + "6438": 12000, + "6568": 70, + "6571": 11000, + "6573": 11000, + "6583": 8, + "6585": 8, + "6693": 11000, + "6724": 8, + "6729": 7500, + "6731": 8, + "6733": 6, + "6735": 8, + "6737": 8, + "6739": 40, + "6797": 40, + "6812": 7500, + "6889": 15, + "6894": 125, + "6895": 125, + "6897": 70, + "6918": 10, + "6920": 24, + "6924": 10, + "6967": 8, + "6969": 10000, + "7147": 7000, + "7155": 250, + "7156": 40, + "7158": 8, + "7198": 10000, + "7200": 10000, + "7416": 50, + "7418": 50, + "7552": 7000, + "7554": 20000, + "7556": 20000, + "7558": 20000, + "7560": 12000, + "7676": 125, + "7928": 50, + "7929": 50, + "7930": 50, + "7931": 50, + "7932": 50, + "7933": 50, + "7936": 20000, + "7944": 13000, + "7946": 13000, + "8007": 10000, + "8008": 10000, + "8009": 10000, + "8010": 10000, + "8011": 10000, + "8012": 10000, + "8013": 10000, + "8283": 10000, + "8714": 70, + "8716": 70, + "8718": 70, + "8720": 70, + "8722": 70, + "8724": 70, + "8726": 70, + "8728": 70, + "8730": 70, + "8732": 70, + "8734": 70, + "8736": 70, + "8738": 70, + "8740": 70, + "8742": 70, + "8744": 70, + "8746": 125, + "8748": 125, + "8750": 125, + "8752": 125, + "8754": 125, + "8756": 125, + "8758": 125, + "8760": 125, + "8762": 125, + "8764": 125, + "8766": 125, + "8768": 125, + "8770": 125, + "8772": 125, + "8774": 125, + "8776": 125, + "8778": 13000, + "8780": 13000, + "8782": 13000, + "8882": 13000, + "8986": 13000, + "9054": 15, + "9055": 15, + "9056": 15, + "9057": 15, + "9058": 15, + "9075": 10000, + "9086": 13000, + "9143": 11000, + "9144": 11000, + "9183": 70, + "9185": 70, + "9191": 11000, + "9192": 11000, + "9339": 11000, + "9342": 11000, + "9379": 13000, + "9380": 13000, + "9660": 13000, + "9691": 20000, + "9693": 20000, + "9695": 20000, + "9697": 12000, + "9699": 20000, + "9976": 7000, + "9977": 7000, + "10006": 250, + "10008": 250, + "10033": 7000, + "10034": 7000, + "10069": 125, + "10073": 125, + "10144": 7000, + "10145": 11000, + "10148": 125, + "10150": 40, + "10476": 10000, + "10601": 125, + "10606": 70, + "10636": 70, + "10663": 125, + "10696": 6, + "10782": 8, + "10796": 8, + "10828": 70, + "11027": 50, + "11028": 50, + "11029": 50, + "11030": 50, + "11037": 8, + "11046": 250, + "11068": 18000, + "11069": 18000, + "11088": 505, + "11133": 10, + "11212": 11000, + "11230": 11000, + "11235": 8, + "11248": 18000, + "11260": 13000, + "11283": 10, + "11284": 10, + "11286": 5, + "11335": 8, + "11371": 125, + "11377": 70, + "11686": 20000, + "11687": 20000, + "11688": 20000, + "11689": 20000, + "11690": 12000, + "11691": 12000, + "11692": 10000, + "11693": 12000, + "11694": 12000, + "11695": 12000, + "11696": 12000, + "11697": 10000, + "11698": 10000, + "11699": 10000, + "11700": 7000, + "11701": 7000, + "11702": 7000, + "11703": 7000, + "11712": 12000, + "11713": 10000, + "11714": 10000, + "11715": 20000, + "11717": 20000, + "11718": 20000, + "11719": 40, + "11720": 40, + "11721": 40, + "11787": 8, + "11789": 6, + "11791": 8, + "11802": 8, + "11804": 8, + "11806": 8, + "11808": 8, + "11824": 8, + "11826": 10, + "11828": 10, + "11830": 10, + "11832": 10, + "11834": 10, + "11836": 8, + "11838": 8, + "11840": 70, + "11875": 7000, + "11876": 7000, + "11889": 8, + "11902": 70, + "11905": 8, + "11920": 40, + "11924": 8, + "11926": 8, + "11940": 8000, + "11959": 6000, + "11972": 100, + "11994": 11000, + "12000": 6, + "12002": 5, + "12004": 70, + "12297": 40, + "12377": 3, + "12389": 70, + "12526": 4, + "12596": 4, + "12601": 8, + "12603": 8, + "12605": 8, + "12640": 11000, + "12746": 100, + "12765": 8, + "12766": 8, + "12767": 8, + "12768": 8, + "12769": 4, + "12771": 6, + "12795": 8, + "12796": 6, + "12797": 40, + "12806": 8, + "12807": 8, + "12817": 8, + "12821": 8, + "12829": 8, + "12831": 8, + "12833": 4, + "12848": 70, + "12877": 8, + "12913": 2000, + "12922": 5, + "12926": 8, + "12927": 5, + "12931": 8, + "12932": 10, + "12934": 30000, + "12938": 10000, + "13024": 8, + "13026": 8, + "13066": 2000, + "13227": 10, + "13229": 15, + "13231": 10, + "13235": 15, + "13237": 8, + "13239": 6, + "13263": 8, + "13265": 8, + "13385": 124, + "13387": 124, + "13391": 13000, + "13474": 3000, + "13475": 3000, + "13510": 9000, + "13511": 9000, + "13573": 13000, + "13576": 8, + "13652": 8, + "19478": 8, + "19481": 8, + "19484": 10000, + "19544": 8, + "19547": 8, + "19550": 8, + "19553": 8, + "19559": 8, + "19580": 10000, + "19582": 11000, + "19584": 7000, + "19669": 12000, + "19991": 4, + "19994": 8, + "20002": 5, + "20388": 11000, + "20389": 11000, + "20390": 10000, + "20401": 125, + "20402": 70, + "20405": 10, + "20406": 70, + "20407": 70, + "20408": 8, + "20415": 125, + "20416": 125, + "20417": 125, + "20418": 125, + "20421": 70, + "20422": 70, + "20423": 70, + "20424": 70, + "20425": 125, + "20426": 125, + "20428": 70, + "20429": 70, + "20547": 13000, + "20552": 70, + "20555": 70, + "20557": 70, + "20559": 8, + "20561": 125, + "20562": 125, + "20566": 70, + "20567": 70, + "20568": 70, + "20571": 70, + "20572": 70, + "20575": 10, + "20578": 20, + "20580": 100, + "20584": 5, + "20585": 125, + "20586": 10000, + "20587": 250, + "20593": 8, + "20598": 15, + "20600": 11000, + "20601": 8, + "20714": 15, + "20716": 15, + "20724": 8, + "20727": 70, + "20733": 6, + "20782": 8, + "20784": 8, + "20785": 8, + "21000": 8, + "21003": 8, + "21009": 8, + "21012": 8, + "21018": 8, + "21021": 8, + "21024": 8, + "21028": 5, + "21034": 8, + "21060": 8, + "21079": 8, + "21198": 8, + "21200": 8, + "21205": 8, + "21206": 8, + "21298": 10, + "21304": 70, + "21326": 11000, + "21338": 11000, + "21555": 18000, + "21622": 13000, + "21736": 8, + "21820": 30000 +} \ No newline at end of file