From c75a270a82fdf7f92d118c61237fea034cbc17f3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 31 Aug 2020 13:16:24 -0400 Subject: Bump inja; trdata and trpoke to json --- arm9/asm/unk_02038C78.s | 2 +- arm9/asm/unk_0204AB0C.s | 2 +- arm9/asm/unk_0206ABC4.s | 24 +- arm9/global.inc | 6 +- arm9/modules/11/asm/module_11_thumb2.s | 4 +- arm9/modules/67/asm/module_67.s | 2 +- files/poketool/trainer/trdata.json | 20472 ++++++++++++++++++++++++++ files/poketool/trainer/trdata.json.txt | 22 + files/poketool/trainer/trdata/.knarcignore | 2 - files/poketool/trainer/trdata/narc_0000.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0001.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0002.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0003.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0004.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0005.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0006.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0007.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0008.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0009.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0010.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0011.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0012.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0013.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0014.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0015.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0016.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0017.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0018.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0019.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0020.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0021.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0022.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0023.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0024.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0025.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0026.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0027.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0028.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0029.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0030.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0031.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0032.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0033.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0034.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0035.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0036.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0037.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0038.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0039.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0040.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0041.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0042.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0043.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0044.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0045.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0046.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0047.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0048.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0049.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0050.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0051.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0052.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0053.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0054.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0055.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0056.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0057.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0058.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0059.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0060.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0061.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0062.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0063.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0064.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0065.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0066.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0067.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0068.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0069.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0070.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0071.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0072.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0073.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0074.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0075.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0076.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0077.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0078.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0079.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0080.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0081.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0082.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0083.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0084.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0085.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0086.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0087.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0088.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0089.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0090.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0091.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0092.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0093.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0094.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0095.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0096.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0097.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0098.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0099.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0100.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0101.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0102.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0103.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0104.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0105.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0106.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0107.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0108.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0109.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0110.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0111.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0112.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0113.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0114.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0115.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0116.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0117.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0118.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0119.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0120.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0121.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0122.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0123.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0124.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0125.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0126.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0127.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0128.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0129.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0130.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0131.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0132.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0133.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0134.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0135.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0136.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0137.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0138.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0139.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0140.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0141.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0142.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0143.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0144.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0145.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0146.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0147.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0148.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0149.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0150.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0151.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0152.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0153.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0154.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0155.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0156.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0157.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0158.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0159.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0160.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0161.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0162.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0163.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0164.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0165.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0166.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0167.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0168.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0169.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0170.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0171.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0172.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0173.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0174.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0175.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0176.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0177.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0178.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0179.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0180.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0181.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0182.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0183.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0184.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0185.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0186.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0187.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0188.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0189.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0190.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0191.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0192.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0193.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0194.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0195.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0196.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0197.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0198.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0199.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0200.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0201.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0202.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0203.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0204.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0205.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0206.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0207.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0208.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0209.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0210.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0211.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0212.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0213.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0214.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0215.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0216.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0217.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0218.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0219.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0220.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0221.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0222.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0223.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0224.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0225.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0226.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0227.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0228.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0229.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0230.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0231.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0232.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0233.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0234.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0235.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0236.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0237.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0238.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0239.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0240.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0241.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0242.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0243.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0244.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0245.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0246.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0247.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0248.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0249.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0250.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0251.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0252.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0253.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0254.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0255.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0256.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0257.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0258.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0259.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0260.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0261.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0262.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0263.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0264.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0265.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0266.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0267.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0268.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0269.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0270.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0271.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0272.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0273.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0274.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0275.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0276.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0277.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0278.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0279.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0280.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0281.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0282.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0283.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0284.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0285.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0286.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0287.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0288.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0289.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0290.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0291.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0292.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0293.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0294.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0295.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0296.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0297.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0298.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0299.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0300.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0301.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0302.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0303.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0304.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0305.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0306.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0307.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0308.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0309.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0310.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0311.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0312.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0313.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0314.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0315.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0316.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0317.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0318.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0319.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0320.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0321.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0322.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0323.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0324.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0325.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0326.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0327.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0328.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0329.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0330.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0331.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0332.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0333.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0334.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0335.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0336.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0337.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0338.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0339.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0340.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0341.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0342.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0343.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0344.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0345.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0346.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0347.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0348.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0349.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0350.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0351.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0352.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0353.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0354.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0355.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0356.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0357.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0358.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0359.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0360.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0361.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0362.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0363.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0364.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0365.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0366.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0367.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0368.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0369.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0370.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0371.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0372.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0373.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0374.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0375.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0376.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0377.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0378.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0379.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0380.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0381.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0382.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0383.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0384.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0385.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0386.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0387.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0388.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0389.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0390.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0391.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0392.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0393.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0394.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0395.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0396.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0397.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0398.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0399.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0400.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0401.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0402.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0403.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0404.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0405.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0406.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0407.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0408.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0409.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0410.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0411.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0412.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0413.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0414.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0415.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0416.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0417.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0418.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0419.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0420.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0421.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0422.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0423.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0424.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0425.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0426.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0427.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0428.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0429.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0430.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0431.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0432.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0433.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0434.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0435.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0436.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0437.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0438.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0439.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0440.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0441.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0442.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0443.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0444.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0445.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0446.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0447.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0448.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0449.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0450.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0451.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0452.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0453.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0454.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0455.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0456.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0457.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0458.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0459.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0460.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0461.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0462.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0463.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0464.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0465.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0466.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0467.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0468.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0469.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0470.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0471.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0472.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0473.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0474.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0475.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0476.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0477.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0478.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0479.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0480.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0481.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0482.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0483.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0484.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0485.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0486.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0487.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0488.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0489.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0490.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0491.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0492.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0493.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0494.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0495.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0496.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0497.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0498.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0499.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0500.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0501.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0502.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0503.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0504.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0505.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0506.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0507.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0508.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0509.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0510.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0511.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0512.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0513.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0514.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0515.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0516.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0517.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0518.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0519.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0520.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0521.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0522.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0523.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0524.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0525.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0526.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0527.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0528.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0529.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0530.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0531.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0532.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0533.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0534.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0535.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0536.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0537.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0538.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0539.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0540.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0541.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0542.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0543.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0544.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0545.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0546.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0547.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0548.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0549.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0550.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0551.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0552.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0553.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0554.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0555.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0556.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0557.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0558.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0559.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0560.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0561.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0562.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0563.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0564.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0565.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0566.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0567.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0568.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0569.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0570.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0571.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0572.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0573.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0574.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0575.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0576.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0577.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0578.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0579.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0580.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0581.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0582.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0583.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0584.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0585.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0586.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0587.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0588.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0589.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0590.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0591.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0592.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0593.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0594.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0595.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0596.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0597.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0598.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0599.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0600.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0601.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0602.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0603.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0604.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0605.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0606.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0607.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0608.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0609.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0610.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0611.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0612.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0613.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0614.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0615.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0616.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0617.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0618.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0619.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0620.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0621.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0622.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0623.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0624.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0625.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0626.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0627.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0628.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0629.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0630.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0631.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0632.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0633.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0634.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0635.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0636.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0637.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0638.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0639.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0640.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0641.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0642.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0643.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0644.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0645.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0646.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0647.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0648.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0649.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0650.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0651.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0652.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0653.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0654.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0655.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0656.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0657.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0658.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0659.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0660.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0661.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0662.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0663.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0664.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0665.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0666.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0667.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0668.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0669.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0670.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0671.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0672.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0673.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0674.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0675.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0676.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0677.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0678.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0679.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0680.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0681.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0682.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0683.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0684.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0685.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0686.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0687.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0688.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0689.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0690.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0691.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0692.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0693.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0694.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0695.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0696.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0697.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0698.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0699.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0700.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0701.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0702.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0703.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0704.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0705.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0706.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0707.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0708.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0709.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0710.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0711.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0712.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0713.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0714.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0715.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0716.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0717.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0718.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0719.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0720.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0721.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0722.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0723.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0724.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0725.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0726.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0727.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0728.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0729.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0730.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0731.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0732.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0733.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0734.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0735.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0736.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0737.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0738.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0739.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0740.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0741.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0742.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0743.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0744.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0745.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0746.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0747.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0748.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0749.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0750.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0751.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0752.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0753.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0754.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0755.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0756.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0757.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0758.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0759.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0760.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0761.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0762.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0763.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0764.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0765.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0766.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0767.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0768.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0769.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0770.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0771.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0772.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0773.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0774.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0775.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0776.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0777.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0778.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0779.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0780.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0781.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0782.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0783.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0784.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0785.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0786.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0787.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0788.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0789.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0790.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0791.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0792.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0793.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0794.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0795.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0796.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0797.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0798.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0799.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0800.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0801.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0802.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0803.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0804.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0805.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0806.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0807.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0808.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0809.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0810.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0811.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0812.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0813.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0814.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0815.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0816.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0817.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0818.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0819.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0820.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0821.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0822.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0823.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0824.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0825.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0826.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0827.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0828.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0829.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0830.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0831.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0832.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0833.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0834.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0835.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0836.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0837.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0838.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0839.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0840.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0841.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0842.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0843.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0844.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0845.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0846.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0847.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0848.bin | Bin 20 -> 0 bytes files/poketool/trainer/trdata/narc_0849.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke.json.txt | 52 + files/poketool/trainer/trpoke/.knarcignore | 2 - files/poketool/trainer/trpoke/narc_0000.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0001.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0002.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0003.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0004.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0005.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0006.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0007.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0008.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0009.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0010.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0011.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0012.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0013.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0014.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0015.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0016.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0017.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0018.bin | Bin 24 -> 0 bytes files/poketool/trainer/trpoke/narc_0019.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0020.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0021.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0022.bin | Bin 36 -> 0 bytes files/poketool/trainer/trpoke/narc_0023.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0024.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0025.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0026.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0027.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0028.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0029.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0030.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0031.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0032.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0033.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0034.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0035.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0036.bin | Bin 24 -> 0 bytes files/poketool/trainer/trpoke/narc_0037.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0038.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0039.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0040.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0041.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0042.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0043.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0044.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0045.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0046.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0047.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0048.bin | Bin 32 -> 0 bytes files/poketool/trainer/trpoke/narc_0049.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0050.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0051.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0052.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0053.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0054.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0055.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0056.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0057.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0058.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0059.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0060.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0061.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0062.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0063.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0064.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0065.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0066.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0067.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0068.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0069.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0070.bin | Bin 24 -> 0 bytes files/poketool/trainer/trpoke/narc_0071.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0072.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0073.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0074.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0075.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0076.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0077.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0078.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0079.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0080.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0081.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0082.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0083.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0084.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0085.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0086.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0087.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0088.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0089.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0090.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0091.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0092.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0093.bin | Bin 24 -> 0 bytes files/poketool/trainer/trpoke/narc_0094.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0095.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0096.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0097.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0098.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0099.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0100.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0101.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0102.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0103.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0104.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0105.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0106.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0107.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0108.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0109.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0110.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0111.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0112.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0113.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0114.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0115.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0116.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0117.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0118.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0119.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0120.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0121.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0122.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0123.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0124.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0125.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0126.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0127.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0128.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0129.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0130.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0131.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0132.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0133.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0134.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0135.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0136.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0137.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0138.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0139.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0140.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0141.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0142.bin | Bin 24 -> 0 bytes files/poketool/trainer/trpoke/narc_0143.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0144.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0145.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0146.bin | Bin 24 -> 0 bytes files/poketool/trainer/trpoke/narc_0147.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0148.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0149.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0150.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0151.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0152.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0153.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0154.bin | Bin 32 -> 0 bytes files/poketool/trainer/trpoke/narc_0155.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0156.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0157.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0158.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0159.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0160.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0161.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0162.bin | Bin 24 -> 0 bytes files/poketool/trainer/trpoke/narc_0163.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0164.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0165.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0166.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0167.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0168.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0169.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0170.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0171.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0172.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0173.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0174.bin | Bin 24 -> 0 bytes files/poketool/trainer/trpoke/narc_0175.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0176.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0177.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0178.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0179.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0180.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0181.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0182.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0183.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0184.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0185.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0186.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0187.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0188.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0189.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0190.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0191.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0192.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0193.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0194.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0195.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0196.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0197.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0198.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0199.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0200.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0201.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0202.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0203.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0204.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0205.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0206.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0207.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0208.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0209.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0210.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0211.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0212.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0213.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0214.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0215.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0216.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0217.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0218.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0219.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0220.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0221.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0222.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0223.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0224.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0225.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0226.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0227.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0228.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0229.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0230.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0231.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0232.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0233.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0234.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0235.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0236.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0237.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0238.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0239.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0240.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0241.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0242.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0243.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0244.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0245.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0246.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0247.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0248.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0249.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0250.bin | Bin 48 -> 0 bytes files/poketool/trainer/trpoke/narc_0251.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0252.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0253.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0254.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0255.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0256.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0257.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0258.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0259.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0260.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0261.bin | Bin 80 -> 0 bytes files/poketool/trainer/trpoke/narc_0262.bin | Bin 80 -> 0 bytes files/poketool/trainer/trpoke/narc_0263.bin | Bin 80 -> 0 bytes files/poketool/trainer/trpoke/narc_0264.bin | Bin 80 -> 0 bytes files/poketool/trainer/trpoke/narc_0265.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0266.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0267.bin | Bin 96 -> 0 bytes files/poketool/trainer/trpoke/narc_0268.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0269.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0270.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0271.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0272.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0273.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0274.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0275.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0276.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0277.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0278.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0279.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0280.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0281.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0282.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0283.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0284.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0285.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0286.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0287.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0288.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0289.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0290.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0291.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0292.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0293.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0294.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0295.bin | Bin 32 -> 0 bytes files/poketool/trainer/trpoke/narc_0296.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0297.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0298.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0299.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0300.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0301.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0302.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0303.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0304.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0305.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0306.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0307.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0308.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0309.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0310.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0311.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0312.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0313.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0314.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0315.bin | Bin 48 -> 0 bytes files/poketool/trainer/trpoke/narc_0316.bin | Bin 48 -> 0 bytes files/poketool/trainer/trpoke/narc_0317.bin | Bin 48 -> 0 bytes files/poketool/trainer/trpoke/narc_0318.bin | Bin 48 -> 0 bytes files/poketool/trainer/trpoke/narc_0319.bin | Bin 64 -> 0 bytes files/poketool/trainer/trpoke/narc_0320.bin | Bin 64 -> 0 bytes files/poketool/trainer/trpoke/narc_0321.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0322.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0323.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0324.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0325.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0326.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0327.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0328.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0329.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0330.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0331.bin | Bin 24 -> 0 bytes files/poketool/trainer/trpoke/narc_0332.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0333.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0334.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0335.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0336.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0337.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0338.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0339.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0340.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0341.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0342.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0343.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0344.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0345.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0346.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0347.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0348.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0349.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0350.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0351.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0352.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0353.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0354.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0355.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0356.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0357.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0358.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0359.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0360.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0361.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0362.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0363.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0364.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0365.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0366.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0367.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0368.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0369.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0370.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0371.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0372.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0373.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0374.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0375.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0376.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0377.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0378.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0379.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0380.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0381.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0382.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0383.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0384.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0385.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0386.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0387.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0388.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0389.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0390.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0391.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0392.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0393.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0394.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0395.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0396.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0397.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0398.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0399.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0400.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0401.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0402.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0403.bin | Bin 48 -> 0 bytes files/poketool/trainer/trpoke/narc_0404.bin | Bin 64 -> 0 bytes files/poketool/trainer/trpoke/narc_0405.bin | Bin 48 -> 0 bytes files/poketool/trainer/trpoke/narc_0406.bin | Bin 32 -> 0 bytes files/poketool/trainer/trpoke/narc_0407.bin | Bin 48 -> 0 bytes files/poketool/trainer/trpoke/narc_0408.bin | Bin 48 -> 0 bytes files/poketool/trainer/trpoke/narc_0409.bin | Bin 48 -> 0 bytes files/poketool/trainer/trpoke/narc_0410.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0411.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0412.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0413.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0414.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0415.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0416.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0417.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0418.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0419.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0420.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0421.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0422.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0423.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0424.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0425.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0426.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0427.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0428.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0429.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0430.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0431.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0432.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0433.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0434.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0435.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0436.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0437.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0438.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0439.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0440.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0441.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0442.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0443.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0444.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0445.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0446.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0447.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0448.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0449.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0450.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0451.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0452.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0453.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0454.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0455.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0456.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0457.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0458.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0459.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0460.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0461.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0462.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0463.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0464.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0465.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0466.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0467.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0468.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0469.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0470.bin | Bin 56 -> 0 bytes files/poketool/trainer/trpoke/narc_0471.bin | Bin 56 -> 0 bytes files/poketool/trainer/trpoke/narc_0472.bin | Bin 56 -> 0 bytes files/poketool/trainer/trpoke/narc_0473.bin | Bin 56 -> 0 bytes files/poketool/trainer/trpoke/narc_0474.bin | Bin 56 -> 0 bytes files/poketool/trainer/trpoke/narc_0475.bin | Bin 56 -> 0 bytes files/poketool/trainer/trpoke/narc_0476.bin | Bin 72 -> 0 bytes files/poketool/trainer/trpoke/narc_0477.bin | Bin 72 -> 0 bytes files/poketool/trainer/trpoke/narc_0478.bin | Bin 72 -> 0 bytes files/poketool/trainer/trpoke/narc_0479.bin | Bin 84 -> 0 bytes files/poketool/trainer/trpoke/narc_0480.bin | Bin 84 -> 0 bytes files/poketool/trainer/trpoke/narc_0481.bin | Bin 84 -> 0 bytes files/poketool/trainer/trpoke/narc_0482.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0483.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0484.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0485.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0486.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0487.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0488.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0489.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0490.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0491.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0492.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0493.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0494.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0495.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0496.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0497.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0498.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0499.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0500.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0501.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0502.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0503.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0504.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0505.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0506.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0507.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0508.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0509.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0510.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0511.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0512.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0513.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0514.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0515.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0516.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0517.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0518.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0519.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0520.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0521.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0522.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0523.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0524.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0525.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0526.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0527.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0528.bin | Bin 48 -> 0 bytes files/poketool/trainer/trpoke/narc_0529.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0530.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0531.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0532.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0533.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0534.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0535.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0536.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0537.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0538.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0539.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0540.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0541.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0542.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0543.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0544.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0545.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0546.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0547.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0548.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0549.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0550.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0551.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0552.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0553.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0554.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0555.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0556.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0557.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0558.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0559.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0560.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0561.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0562.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0563.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0564.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0565.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0566.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0567.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0568.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0569.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0570.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0571.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0572.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0573.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0574.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0575.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0576.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0577.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0578.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0579.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0580.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0581.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0582.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0583.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0584.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0585.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0586.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0587.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0588.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0589.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0590.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0591.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0592.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0593.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0594.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0595.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0596.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0597.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0598.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0599.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0600.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0601.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0602.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0603.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0604.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0605.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0606.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0607.bin | Bin 84 -> 0 bytes files/poketool/trainer/trpoke/narc_0608.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0609.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0610.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0611.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0612.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0613.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0614.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0615.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0616.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0617.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0618.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0619.bin | Bin 84 -> 0 bytes files/poketool/trainer/trpoke/narc_0620.bin | Bin 84 -> 0 bytes files/poketool/trainer/trpoke/narc_0621.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0622.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0623.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0624.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0625.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0626.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0627.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0628.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0629.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0630.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0631.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0632.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0633.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0634.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0635.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0636.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0637.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0638.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0639.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0640.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0641.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0642.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0643.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0644.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0645.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0646.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0647.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0648.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0649.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0650.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0651.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0652.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0653.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0654.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0655.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0656.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0657.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0658.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0659.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0660.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0661.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0662.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0663.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0664.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0665.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0666.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0667.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0668.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0669.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0670.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0671.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0672.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0673.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0674.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0675.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0676.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0677.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0678.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0679.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0680.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0681.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0682.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0683.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0684.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0685.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0686.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0687.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0688.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0689.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0690.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0691.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0692.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0693.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0694.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0695.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0696.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0697.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0698.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0699.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0700.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0701.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0702.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0703.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0704.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0705.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0706.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0707.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0708.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0709.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0710.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0711.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0712.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0713.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0714.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0715.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0716.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0717.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0718.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0719.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0720.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0721.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0722.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0723.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0724.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0725.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0726.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0727.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0728.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0729.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0730.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0731.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0732.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0733.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0734.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0735.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0736.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0737.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0738.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0739.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0740.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0741.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0742.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0743.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0744.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0745.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0746.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0747.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0748.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0749.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0750.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0751.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0752.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0753.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0754.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0755.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0756.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0757.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0758.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0759.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0760.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0761.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0762.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0763.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0764.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0765.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0766.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0767.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0768.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0769.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0770.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0771.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0772.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0773.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0774.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0775.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0776.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0777.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0778.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0779.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0780.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0781.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0782.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0783.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0784.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0785.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0786.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0787.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0788.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0789.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0790.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0791.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0792.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0793.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0794.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0795.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0796.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0797.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0798.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0799.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0800.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0801.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0802.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0803.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0804.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0805.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0806.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0807.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0808.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0809.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0810.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0811.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0812.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0813.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0814.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0815.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0816.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0817.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0818.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0819.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0820.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0821.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0822.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0823.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0824.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0825.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0826.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0827.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0828.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0829.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0830.bin | Bin 28 -> 0 bytes files/poketool/trainer/trpoke/narc_0831.bin | Bin 16 -> 0 bytes files/poketool/trainer/trpoke/narc_0832.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0833.bin | Bin 44 -> 0 bytes files/poketool/trainer/trpoke/narc_0834.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0835.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0836.bin | Bin 20 -> 0 bytes files/poketool/trainer/trpoke/narc_0837.bin | Bin 84 -> 0 bytes files/poketool/trainer/trpoke/narc_0838.bin | Bin 84 -> 0 bytes files/poketool/trainer/trpoke/narc_0839.bin | Bin 84 -> 0 bytes files/poketool/trainer/trpoke/narc_0840.bin | Bin 84 -> 0 bytes files/poketool/trainer/trpoke/narc_0841.bin | Bin 84 -> 0 bytes files/poketool/trainer/trpoke/narc_0842.bin | Bin 84 -> 0 bytes files/poketool/trainer/trpoke/narc_0843.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0844.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0845.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0846.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0847.bin | Bin 8 -> 0 bytes files/poketool/trainer/trpoke/narc_0848.bin | Bin 12 -> 0 bytes files/poketool/trainer/trpoke/narc_0849.bin | Bin 12 -> 0 bytes filesystem.mk | 15 +- include/trainer_data.h | 70 + tools/jsonproc/inja.hpp | 5188 ++++--- tools/jsonproc/jsonproc.cpp | 4 + tools/jsonproc/nlohmann/json.hpp | 6039 ++++++-- 1716 files changed, 28489 insertions(+), 3417 deletions(-) create mode 100644 files/poketool/trainer/trdata.json create mode 100644 files/poketool/trainer/trdata.json.txt delete mode 100644 files/poketool/trainer/trdata/.knarcignore delete mode 100644 files/poketool/trainer/trdata/narc_0000.bin delete mode 100644 files/poketool/trainer/trdata/narc_0001.bin delete mode 100644 files/poketool/trainer/trdata/narc_0002.bin delete mode 100644 files/poketool/trainer/trdata/narc_0003.bin delete mode 100644 files/poketool/trainer/trdata/narc_0004.bin delete mode 100644 files/poketool/trainer/trdata/narc_0005.bin delete mode 100644 files/poketool/trainer/trdata/narc_0006.bin delete mode 100644 files/poketool/trainer/trdata/narc_0007.bin delete mode 100644 files/poketool/trainer/trdata/narc_0008.bin delete mode 100644 files/poketool/trainer/trdata/narc_0009.bin delete mode 100644 files/poketool/trainer/trdata/narc_0010.bin delete mode 100644 files/poketool/trainer/trdata/narc_0011.bin delete mode 100644 files/poketool/trainer/trdata/narc_0012.bin delete mode 100644 files/poketool/trainer/trdata/narc_0013.bin delete mode 100644 files/poketool/trainer/trdata/narc_0014.bin delete mode 100644 files/poketool/trainer/trdata/narc_0015.bin delete mode 100644 files/poketool/trainer/trdata/narc_0016.bin delete mode 100644 files/poketool/trainer/trdata/narc_0017.bin delete mode 100644 files/poketool/trainer/trdata/narc_0018.bin delete mode 100644 files/poketool/trainer/trdata/narc_0019.bin delete mode 100644 files/poketool/trainer/trdata/narc_0020.bin delete mode 100644 files/poketool/trainer/trdata/narc_0021.bin delete mode 100644 files/poketool/trainer/trdata/narc_0022.bin delete mode 100644 files/poketool/trainer/trdata/narc_0023.bin delete mode 100644 files/poketool/trainer/trdata/narc_0024.bin delete mode 100644 files/poketool/trainer/trdata/narc_0025.bin delete mode 100644 files/poketool/trainer/trdata/narc_0026.bin delete mode 100644 files/poketool/trainer/trdata/narc_0027.bin delete mode 100644 files/poketool/trainer/trdata/narc_0028.bin delete mode 100644 files/poketool/trainer/trdata/narc_0029.bin delete mode 100644 files/poketool/trainer/trdata/narc_0030.bin delete mode 100644 files/poketool/trainer/trdata/narc_0031.bin delete mode 100644 files/poketool/trainer/trdata/narc_0032.bin delete mode 100644 files/poketool/trainer/trdata/narc_0033.bin delete mode 100644 files/poketool/trainer/trdata/narc_0034.bin delete mode 100644 files/poketool/trainer/trdata/narc_0035.bin delete mode 100644 files/poketool/trainer/trdata/narc_0036.bin delete mode 100644 files/poketool/trainer/trdata/narc_0037.bin delete mode 100644 files/poketool/trainer/trdata/narc_0038.bin delete mode 100644 files/poketool/trainer/trdata/narc_0039.bin delete mode 100644 files/poketool/trainer/trdata/narc_0040.bin delete mode 100644 files/poketool/trainer/trdata/narc_0041.bin delete mode 100644 files/poketool/trainer/trdata/narc_0042.bin delete mode 100644 files/poketool/trainer/trdata/narc_0043.bin delete mode 100644 files/poketool/trainer/trdata/narc_0044.bin delete mode 100644 files/poketool/trainer/trdata/narc_0045.bin delete mode 100644 files/poketool/trainer/trdata/narc_0046.bin delete mode 100644 files/poketool/trainer/trdata/narc_0047.bin delete mode 100644 files/poketool/trainer/trdata/narc_0048.bin delete mode 100644 files/poketool/trainer/trdata/narc_0049.bin delete mode 100644 files/poketool/trainer/trdata/narc_0050.bin delete mode 100644 files/poketool/trainer/trdata/narc_0051.bin delete mode 100644 files/poketool/trainer/trdata/narc_0052.bin delete mode 100644 files/poketool/trainer/trdata/narc_0053.bin delete mode 100644 files/poketool/trainer/trdata/narc_0054.bin delete mode 100644 files/poketool/trainer/trdata/narc_0055.bin delete mode 100644 files/poketool/trainer/trdata/narc_0056.bin delete mode 100644 files/poketool/trainer/trdata/narc_0057.bin delete mode 100644 files/poketool/trainer/trdata/narc_0058.bin delete mode 100644 files/poketool/trainer/trdata/narc_0059.bin delete mode 100644 files/poketool/trainer/trdata/narc_0060.bin delete mode 100644 files/poketool/trainer/trdata/narc_0061.bin delete mode 100644 files/poketool/trainer/trdata/narc_0062.bin delete mode 100644 files/poketool/trainer/trdata/narc_0063.bin delete mode 100644 files/poketool/trainer/trdata/narc_0064.bin delete mode 100644 files/poketool/trainer/trdata/narc_0065.bin delete mode 100644 files/poketool/trainer/trdata/narc_0066.bin delete mode 100644 files/poketool/trainer/trdata/narc_0067.bin delete mode 100644 files/poketool/trainer/trdata/narc_0068.bin delete mode 100644 files/poketool/trainer/trdata/narc_0069.bin delete mode 100644 files/poketool/trainer/trdata/narc_0070.bin delete mode 100644 files/poketool/trainer/trdata/narc_0071.bin delete mode 100644 files/poketool/trainer/trdata/narc_0072.bin delete mode 100644 files/poketool/trainer/trdata/narc_0073.bin delete mode 100644 files/poketool/trainer/trdata/narc_0074.bin delete mode 100644 files/poketool/trainer/trdata/narc_0075.bin delete mode 100644 files/poketool/trainer/trdata/narc_0076.bin delete mode 100644 files/poketool/trainer/trdata/narc_0077.bin delete mode 100644 files/poketool/trainer/trdata/narc_0078.bin delete mode 100644 files/poketool/trainer/trdata/narc_0079.bin delete mode 100644 files/poketool/trainer/trdata/narc_0080.bin delete mode 100644 files/poketool/trainer/trdata/narc_0081.bin delete mode 100644 files/poketool/trainer/trdata/narc_0082.bin delete mode 100644 files/poketool/trainer/trdata/narc_0083.bin delete mode 100644 files/poketool/trainer/trdata/narc_0084.bin delete mode 100644 files/poketool/trainer/trdata/narc_0085.bin delete mode 100644 files/poketool/trainer/trdata/narc_0086.bin delete mode 100644 files/poketool/trainer/trdata/narc_0087.bin delete mode 100644 files/poketool/trainer/trdata/narc_0088.bin delete mode 100644 files/poketool/trainer/trdata/narc_0089.bin delete mode 100644 files/poketool/trainer/trdata/narc_0090.bin delete mode 100644 files/poketool/trainer/trdata/narc_0091.bin delete mode 100644 files/poketool/trainer/trdata/narc_0092.bin delete mode 100644 files/poketool/trainer/trdata/narc_0093.bin delete mode 100644 files/poketool/trainer/trdata/narc_0094.bin delete mode 100644 files/poketool/trainer/trdata/narc_0095.bin delete mode 100644 files/poketool/trainer/trdata/narc_0096.bin delete mode 100644 files/poketool/trainer/trdata/narc_0097.bin delete mode 100644 files/poketool/trainer/trdata/narc_0098.bin delete mode 100644 files/poketool/trainer/trdata/narc_0099.bin delete mode 100644 files/poketool/trainer/trdata/narc_0100.bin delete mode 100644 files/poketool/trainer/trdata/narc_0101.bin delete mode 100644 files/poketool/trainer/trdata/narc_0102.bin delete mode 100644 files/poketool/trainer/trdata/narc_0103.bin delete mode 100644 files/poketool/trainer/trdata/narc_0104.bin delete mode 100644 files/poketool/trainer/trdata/narc_0105.bin delete mode 100644 files/poketool/trainer/trdata/narc_0106.bin delete mode 100644 files/poketool/trainer/trdata/narc_0107.bin delete mode 100644 files/poketool/trainer/trdata/narc_0108.bin delete mode 100644 files/poketool/trainer/trdata/narc_0109.bin delete mode 100644 files/poketool/trainer/trdata/narc_0110.bin delete mode 100644 files/poketool/trainer/trdata/narc_0111.bin delete mode 100644 files/poketool/trainer/trdata/narc_0112.bin delete mode 100644 files/poketool/trainer/trdata/narc_0113.bin delete mode 100644 files/poketool/trainer/trdata/narc_0114.bin delete mode 100644 files/poketool/trainer/trdata/narc_0115.bin delete mode 100644 files/poketool/trainer/trdata/narc_0116.bin delete mode 100644 files/poketool/trainer/trdata/narc_0117.bin delete mode 100644 files/poketool/trainer/trdata/narc_0118.bin delete mode 100644 files/poketool/trainer/trdata/narc_0119.bin delete mode 100644 files/poketool/trainer/trdata/narc_0120.bin delete mode 100644 files/poketool/trainer/trdata/narc_0121.bin delete mode 100644 files/poketool/trainer/trdata/narc_0122.bin delete mode 100644 files/poketool/trainer/trdata/narc_0123.bin delete mode 100644 files/poketool/trainer/trdata/narc_0124.bin delete mode 100644 files/poketool/trainer/trdata/narc_0125.bin delete mode 100644 files/poketool/trainer/trdata/narc_0126.bin delete mode 100644 files/poketool/trainer/trdata/narc_0127.bin delete mode 100644 files/poketool/trainer/trdata/narc_0128.bin delete mode 100644 files/poketool/trainer/trdata/narc_0129.bin delete mode 100644 files/poketool/trainer/trdata/narc_0130.bin delete mode 100644 files/poketool/trainer/trdata/narc_0131.bin delete mode 100644 files/poketool/trainer/trdata/narc_0132.bin delete mode 100644 files/poketool/trainer/trdata/narc_0133.bin delete mode 100644 files/poketool/trainer/trdata/narc_0134.bin delete mode 100644 files/poketool/trainer/trdata/narc_0135.bin delete mode 100644 files/poketool/trainer/trdata/narc_0136.bin delete mode 100644 files/poketool/trainer/trdata/narc_0137.bin delete mode 100644 files/poketool/trainer/trdata/narc_0138.bin delete mode 100644 files/poketool/trainer/trdata/narc_0139.bin delete mode 100644 files/poketool/trainer/trdata/narc_0140.bin delete mode 100644 files/poketool/trainer/trdata/narc_0141.bin delete mode 100644 files/poketool/trainer/trdata/narc_0142.bin delete mode 100644 files/poketool/trainer/trdata/narc_0143.bin delete mode 100644 files/poketool/trainer/trdata/narc_0144.bin delete mode 100644 files/poketool/trainer/trdata/narc_0145.bin delete mode 100644 files/poketool/trainer/trdata/narc_0146.bin delete mode 100644 files/poketool/trainer/trdata/narc_0147.bin delete mode 100644 files/poketool/trainer/trdata/narc_0148.bin delete mode 100644 files/poketool/trainer/trdata/narc_0149.bin delete mode 100644 files/poketool/trainer/trdata/narc_0150.bin delete mode 100644 files/poketool/trainer/trdata/narc_0151.bin delete mode 100644 files/poketool/trainer/trdata/narc_0152.bin delete mode 100644 files/poketool/trainer/trdata/narc_0153.bin delete mode 100644 files/poketool/trainer/trdata/narc_0154.bin delete mode 100644 files/poketool/trainer/trdata/narc_0155.bin delete mode 100644 files/poketool/trainer/trdata/narc_0156.bin delete mode 100644 files/poketool/trainer/trdata/narc_0157.bin delete mode 100644 files/poketool/trainer/trdata/narc_0158.bin delete mode 100644 files/poketool/trainer/trdata/narc_0159.bin delete mode 100644 files/poketool/trainer/trdata/narc_0160.bin delete mode 100644 files/poketool/trainer/trdata/narc_0161.bin delete mode 100644 files/poketool/trainer/trdata/narc_0162.bin delete mode 100644 files/poketool/trainer/trdata/narc_0163.bin delete mode 100644 files/poketool/trainer/trdata/narc_0164.bin delete mode 100644 files/poketool/trainer/trdata/narc_0165.bin delete mode 100644 files/poketool/trainer/trdata/narc_0166.bin delete mode 100644 files/poketool/trainer/trdata/narc_0167.bin delete mode 100644 files/poketool/trainer/trdata/narc_0168.bin delete mode 100644 files/poketool/trainer/trdata/narc_0169.bin delete mode 100644 files/poketool/trainer/trdata/narc_0170.bin delete mode 100644 files/poketool/trainer/trdata/narc_0171.bin delete mode 100644 files/poketool/trainer/trdata/narc_0172.bin delete mode 100644 files/poketool/trainer/trdata/narc_0173.bin delete mode 100644 files/poketool/trainer/trdata/narc_0174.bin delete mode 100644 files/poketool/trainer/trdata/narc_0175.bin delete mode 100644 files/poketool/trainer/trdata/narc_0176.bin delete mode 100644 files/poketool/trainer/trdata/narc_0177.bin delete mode 100644 files/poketool/trainer/trdata/narc_0178.bin delete mode 100644 files/poketool/trainer/trdata/narc_0179.bin delete mode 100644 files/poketool/trainer/trdata/narc_0180.bin delete mode 100644 files/poketool/trainer/trdata/narc_0181.bin delete mode 100644 files/poketool/trainer/trdata/narc_0182.bin delete mode 100644 files/poketool/trainer/trdata/narc_0183.bin delete mode 100644 files/poketool/trainer/trdata/narc_0184.bin delete mode 100644 files/poketool/trainer/trdata/narc_0185.bin delete mode 100644 files/poketool/trainer/trdata/narc_0186.bin delete mode 100644 files/poketool/trainer/trdata/narc_0187.bin delete mode 100644 files/poketool/trainer/trdata/narc_0188.bin delete mode 100644 files/poketool/trainer/trdata/narc_0189.bin delete mode 100644 files/poketool/trainer/trdata/narc_0190.bin delete mode 100644 files/poketool/trainer/trdata/narc_0191.bin delete mode 100644 files/poketool/trainer/trdata/narc_0192.bin delete mode 100644 files/poketool/trainer/trdata/narc_0193.bin delete mode 100644 files/poketool/trainer/trdata/narc_0194.bin delete mode 100644 files/poketool/trainer/trdata/narc_0195.bin delete mode 100644 files/poketool/trainer/trdata/narc_0196.bin delete mode 100644 files/poketool/trainer/trdata/narc_0197.bin delete mode 100644 files/poketool/trainer/trdata/narc_0198.bin delete mode 100644 files/poketool/trainer/trdata/narc_0199.bin delete mode 100644 files/poketool/trainer/trdata/narc_0200.bin delete mode 100644 files/poketool/trainer/trdata/narc_0201.bin delete mode 100644 files/poketool/trainer/trdata/narc_0202.bin delete mode 100644 files/poketool/trainer/trdata/narc_0203.bin delete mode 100644 files/poketool/trainer/trdata/narc_0204.bin delete mode 100644 files/poketool/trainer/trdata/narc_0205.bin delete mode 100644 files/poketool/trainer/trdata/narc_0206.bin delete mode 100644 files/poketool/trainer/trdata/narc_0207.bin delete mode 100644 files/poketool/trainer/trdata/narc_0208.bin delete mode 100644 files/poketool/trainer/trdata/narc_0209.bin delete mode 100644 files/poketool/trainer/trdata/narc_0210.bin delete mode 100644 files/poketool/trainer/trdata/narc_0211.bin delete mode 100644 files/poketool/trainer/trdata/narc_0212.bin delete mode 100644 files/poketool/trainer/trdata/narc_0213.bin delete mode 100644 files/poketool/trainer/trdata/narc_0214.bin delete mode 100644 files/poketool/trainer/trdata/narc_0215.bin delete mode 100644 files/poketool/trainer/trdata/narc_0216.bin delete mode 100644 files/poketool/trainer/trdata/narc_0217.bin delete mode 100644 files/poketool/trainer/trdata/narc_0218.bin delete mode 100644 files/poketool/trainer/trdata/narc_0219.bin delete mode 100644 files/poketool/trainer/trdata/narc_0220.bin delete mode 100644 files/poketool/trainer/trdata/narc_0221.bin delete mode 100644 files/poketool/trainer/trdata/narc_0222.bin delete mode 100644 files/poketool/trainer/trdata/narc_0223.bin delete mode 100644 files/poketool/trainer/trdata/narc_0224.bin delete mode 100644 files/poketool/trainer/trdata/narc_0225.bin delete mode 100644 files/poketool/trainer/trdata/narc_0226.bin delete mode 100644 files/poketool/trainer/trdata/narc_0227.bin delete mode 100644 files/poketool/trainer/trdata/narc_0228.bin delete mode 100644 files/poketool/trainer/trdata/narc_0229.bin delete mode 100644 files/poketool/trainer/trdata/narc_0230.bin delete mode 100644 files/poketool/trainer/trdata/narc_0231.bin delete mode 100644 files/poketool/trainer/trdata/narc_0232.bin delete mode 100644 files/poketool/trainer/trdata/narc_0233.bin delete mode 100644 files/poketool/trainer/trdata/narc_0234.bin delete mode 100644 files/poketool/trainer/trdata/narc_0235.bin delete mode 100644 files/poketool/trainer/trdata/narc_0236.bin delete mode 100644 files/poketool/trainer/trdata/narc_0237.bin delete mode 100644 files/poketool/trainer/trdata/narc_0238.bin delete mode 100644 files/poketool/trainer/trdata/narc_0239.bin delete mode 100644 files/poketool/trainer/trdata/narc_0240.bin delete mode 100644 files/poketool/trainer/trdata/narc_0241.bin delete mode 100644 files/poketool/trainer/trdata/narc_0242.bin delete mode 100644 files/poketool/trainer/trdata/narc_0243.bin delete mode 100644 files/poketool/trainer/trdata/narc_0244.bin delete mode 100644 files/poketool/trainer/trdata/narc_0245.bin delete mode 100644 files/poketool/trainer/trdata/narc_0246.bin delete mode 100644 files/poketool/trainer/trdata/narc_0247.bin delete mode 100644 files/poketool/trainer/trdata/narc_0248.bin delete mode 100644 files/poketool/trainer/trdata/narc_0249.bin delete mode 100644 files/poketool/trainer/trdata/narc_0250.bin delete mode 100644 files/poketool/trainer/trdata/narc_0251.bin delete mode 100644 files/poketool/trainer/trdata/narc_0252.bin delete mode 100644 files/poketool/trainer/trdata/narc_0253.bin delete mode 100644 files/poketool/trainer/trdata/narc_0254.bin delete mode 100644 files/poketool/trainer/trdata/narc_0255.bin delete mode 100644 files/poketool/trainer/trdata/narc_0256.bin delete mode 100644 files/poketool/trainer/trdata/narc_0257.bin delete mode 100644 files/poketool/trainer/trdata/narc_0258.bin delete mode 100644 files/poketool/trainer/trdata/narc_0259.bin delete mode 100644 files/poketool/trainer/trdata/narc_0260.bin delete mode 100644 files/poketool/trainer/trdata/narc_0261.bin delete mode 100644 files/poketool/trainer/trdata/narc_0262.bin delete mode 100644 files/poketool/trainer/trdata/narc_0263.bin delete mode 100644 files/poketool/trainer/trdata/narc_0264.bin delete mode 100644 files/poketool/trainer/trdata/narc_0265.bin delete mode 100644 files/poketool/trainer/trdata/narc_0266.bin delete mode 100644 files/poketool/trainer/trdata/narc_0267.bin delete mode 100644 files/poketool/trainer/trdata/narc_0268.bin delete mode 100644 files/poketool/trainer/trdata/narc_0269.bin delete mode 100644 files/poketool/trainer/trdata/narc_0270.bin delete mode 100644 files/poketool/trainer/trdata/narc_0271.bin delete mode 100644 files/poketool/trainer/trdata/narc_0272.bin delete mode 100644 files/poketool/trainer/trdata/narc_0273.bin delete mode 100644 files/poketool/trainer/trdata/narc_0274.bin delete mode 100644 files/poketool/trainer/trdata/narc_0275.bin delete mode 100644 files/poketool/trainer/trdata/narc_0276.bin delete mode 100644 files/poketool/trainer/trdata/narc_0277.bin delete mode 100644 files/poketool/trainer/trdata/narc_0278.bin delete mode 100644 files/poketool/trainer/trdata/narc_0279.bin delete mode 100644 files/poketool/trainer/trdata/narc_0280.bin delete mode 100644 files/poketool/trainer/trdata/narc_0281.bin delete mode 100644 files/poketool/trainer/trdata/narc_0282.bin delete mode 100644 files/poketool/trainer/trdata/narc_0283.bin delete mode 100644 files/poketool/trainer/trdata/narc_0284.bin delete mode 100644 files/poketool/trainer/trdata/narc_0285.bin delete mode 100644 files/poketool/trainer/trdata/narc_0286.bin delete mode 100644 files/poketool/trainer/trdata/narc_0287.bin delete mode 100644 files/poketool/trainer/trdata/narc_0288.bin delete mode 100644 files/poketool/trainer/trdata/narc_0289.bin delete mode 100644 files/poketool/trainer/trdata/narc_0290.bin delete mode 100644 files/poketool/trainer/trdata/narc_0291.bin delete mode 100644 files/poketool/trainer/trdata/narc_0292.bin delete mode 100644 files/poketool/trainer/trdata/narc_0293.bin delete mode 100644 files/poketool/trainer/trdata/narc_0294.bin delete mode 100644 files/poketool/trainer/trdata/narc_0295.bin delete mode 100644 files/poketool/trainer/trdata/narc_0296.bin delete mode 100644 files/poketool/trainer/trdata/narc_0297.bin delete mode 100644 files/poketool/trainer/trdata/narc_0298.bin delete mode 100644 files/poketool/trainer/trdata/narc_0299.bin delete mode 100644 files/poketool/trainer/trdata/narc_0300.bin delete mode 100644 files/poketool/trainer/trdata/narc_0301.bin delete mode 100644 files/poketool/trainer/trdata/narc_0302.bin delete mode 100644 files/poketool/trainer/trdata/narc_0303.bin delete mode 100644 files/poketool/trainer/trdata/narc_0304.bin delete mode 100644 files/poketool/trainer/trdata/narc_0305.bin delete mode 100644 files/poketool/trainer/trdata/narc_0306.bin delete mode 100644 files/poketool/trainer/trdata/narc_0307.bin delete mode 100644 files/poketool/trainer/trdata/narc_0308.bin delete mode 100644 files/poketool/trainer/trdata/narc_0309.bin delete mode 100644 files/poketool/trainer/trdata/narc_0310.bin delete mode 100644 files/poketool/trainer/trdata/narc_0311.bin delete mode 100644 files/poketool/trainer/trdata/narc_0312.bin delete mode 100644 files/poketool/trainer/trdata/narc_0313.bin delete mode 100644 files/poketool/trainer/trdata/narc_0314.bin delete mode 100644 files/poketool/trainer/trdata/narc_0315.bin delete mode 100644 files/poketool/trainer/trdata/narc_0316.bin delete mode 100644 files/poketool/trainer/trdata/narc_0317.bin delete mode 100644 files/poketool/trainer/trdata/narc_0318.bin delete mode 100644 files/poketool/trainer/trdata/narc_0319.bin delete mode 100644 files/poketool/trainer/trdata/narc_0320.bin delete mode 100644 files/poketool/trainer/trdata/narc_0321.bin delete mode 100644 files/poketool/trainer/trdata/narc_0322.bin delete mode 100644 files/poketool/trainer/trdata/narc_0323.bin delete mode 100644 files/poketool/trainer/trdata/narc_0324.bin delete mode 100644 files/poketool/trainer/trdata/narc_0325.bin delete mode 100644 files/poketool/trainer/trdata/narc_0326.bin delete mode 100644 files/poketool/trainer/trdata/narc_0327.bin delete mode 100644 files/poketool/trainer/trdata/narc_0328.bin delete mode 100644 files/poketool/trainer/trdata/narc_0329.bin delete mode 100644 files/poketool/trainer/trdata/narc_0330.bin delete mode 100644 files/poketool/trainer/trdata/narc_0331.bin delete mode 100644 files/poketool/trainer/trdata/narc_0332.bin delete mode 100644 files/poketool/trainer/trdata/narc_0333.bin delete mode 100644 files/poketool/trainer/trdata/narc_0334.bin delete mode 100644 files/poketool/trainer/trdata/narc_0335.bin delete mode 100644 files/poketool/trainer/trdata/narc_0336.bin delete mode 100644 files/poketool/trainer/trdata/narc_0337.bin delete mode 100644 files/poketool/trainer/trdata/narc_0338.bin delete mode 100644 files/poketool/trainer/trdata/narc_0339.bin delete mode 100644 files/poketool/trainer/trdata/narc_0340.bin delete mode 100644 files/poketool/trainer/trdata/narc_0341.bin delete mode 100644 files/poketool/trainer/trdata/narc_0342.bin delete mode 100644 files/poketool/trainer/trdata/narc_0343.bin delete mode 100644 files/poketool/trainer/trdata/narc_0344.bin delete mode 100644 files/poketool/trainer/trdata/narc_0345.bin delete mode 100644 files/poketool/trainer/trdata/narc_0346.bin delete mode 100644 files/poketool/trainer/trdata/narc_0347.bin delete mode 100644 files/poketool/trainer/trdata/narc_0348.bin delete mode 100644 files/poketool/trainer/trdata/narc_0349.bin delete mode 100644 files/poketool/trainer/trdata/narc_0350.bin delete mode 100644 files/poketool/trainer/trdata/narc_0351.bin delete mode 100644 files/poketool/trainer/trdata/narc_0352.bin delete mode 100644 files/poketool/trainer/trdata/narc_0353.bin delete mode 100644 files/poketool/trainer/trdata/narc_0354.bin delete mode 100644 files/poketool/trainer/trdata/narc_0355.bin delete mode 100644 files/poketool/trainer/trdata/narc_0356.bin delete mode 100644 files/poketool/trainer/trdata/narc_0357.bin delete mode 100644 files/poketool/trainer/trdata/narc_0358.bin delete mode 100644 files/poketool/trainer/trdata/narc_0359.bin delete mode 100644 files/poketool/trainer/trdata/narc_0360.bin delete mode 100644 files/poketool/trainer/trdata/narc_0361.bin delete mode 100644 files/poketool/trainer/trdata/narc_0362.bin delete mode 100644 files/poketool/trainer/trdata/narc_0363.bin delete mode 100644 files/poketool/trainer/trdata/narc_0364.bin delete mode 100644 files/poketool/trainer/trdata/narc_0365.bin delete mode 100644 files/poketool/trainer/trdata/narc_0366.bin delete mode 100644 files/poketool/trainer/trdata/narc_0367.bin delete mode 100644 files/poketool/trainer/trdata/narc_0368.bin delete mode 100644 files/poketool/trainer/trdata/narc_0369.bin delete mode 100644 files/poketool/trainer/trdata/narc_0370.bin delete mode 100644 files/poketool/trainer/trdata/narc_0371.bin delete mode 100644 files/poketool/trainer/trdata/narc_0372.bin delete mode 100644 files/poketool/trainer/trdata/narc_0373.bin delete mode 100644 files/poketool/trainer/trdata/narc_0374.bin delete mode 100644 files/poketool/trainer/trdata/narc_0375.bin delete mode 100644 files/poketool/trainer/trdata/narc_0376.bin delete mode 100644 files/poketool/trainer/trdata/narc_0377.bin delete mode 100644 files/poketool/trainer/trdata/narc_0378.bin delete mode 100644 files/poketool/trainer/trdata/narc_0379.bin delete mode 100644 files/poketool/trainer/trdata/narc_0380.bin delete mode 100644 files/poketool/trainer/trdata/narc_0381.bin delete mode 100644 files/poketool/trainer/trdata/narc_0382.bin delete mode 100644 files/poketool/trainer/trdata/narc_0383.bin delete mode 100644 files/poketool/trainer/trdata/narc_0384.bin delete mode 100644 files/poketool/trainer/trdata/narc_0385.bin delete mode 100644 files/poketool/trainer/trdata/narc_0386.bin delete mode 100644 files/poketool/trainer/trdata/narc_0387.bin delete mode 100644 files/poketool/trainer/trdata/narc_0388.bin delete mode 100644 files/poketool/trainer/trdata/narc_0389.bin delete mode 100644 files/poketool/trainer/trdata/narc_0390.bin delete mode 100644 files/poketool/trainer/trdata/narc_0391.bin delete mode 100644 files/poketool/trainer/trdata/narc_0392.bin delete mode 100644 files/poketool/trainer/trdata/narc_0393.bin delete mode 100644 files/poketool/trainer/trdata/narc_0394.bin delete mode 100644 files/poketool/trainer/trdata/narc_0395.bin delete mode 100644 files/poketool/trainer/trdata/narc_0396.bin delete mode 100644 files/poketool/trainer/trdata/narc_0397.bin delete mode 100644 files/poketool/trainer/trdata/narc_0398.bin delete mode 100644 files/poketool/trainer/trdata/narc_0399.bin delete mode 100644 files/poketool/trainer/trdata/narc_0400.bin delete mode 100644 files/poketool/trainer/trdata/narc_0401.bin delete mode 100644 files/poketool/trainer/trdata/narc_0402.bin delete mode 100644 files/poketool/trainer/trdata/narc_0403.bin delete mode 100644 files/poketool/trainer/trdata/narc_0404.bin delete mode 100644 files/poketool/trainer/trdata/narc_0405.bin delete mode 100644 files/poketool/trainer/trdata/narc_0406.bin delete mode 100644 files/poketool/trainer/trdata/narc_0407.bin delete mode 100644 files/poketool/trainer/trdata/narc_0408.bin delete mode 100644 files/poketool/trainer/trdata/narc_0409.bin delete mode 100644 files/poketool/trainer/trdata/narc_0410.bin delete mode 100644 files/poketool/trainer/trdata/narc_0411.bin delete mode 100644 files/poketool/trainer/trdata/narc_0412.bin delete mode 100644 files/poketool/trainer/trdata/narc_0413.bin delete mode 100644 files/poketool/trainer/trdata/narc_0414.bin delete mode 100644 files/poketool/trainer/trdata/narc_0415.bin delete mode 100644 files/poketool/trainer/trdata/narc_0416.bin delete mode 100644 files/poketool/trainer/trdata/narc_0417.bin delete mode 100644 files/poketool/trainer/trdata/narc_0418.bin delete mode 100644 files/poketool/trainer/trdata/narc_0419.bin delete mode 100644 files/poketool/trainer/trdata/narc_0420.bin delete mode 100644 files/poketool/trainer/trdata/narc_0421.bin delete mode 100644 files/poketool/trainer/trdata/narc_0422.bin delete mode 100644 files/poketool/trainer/trdata/narc_0423.bin delete mode 100644 files/poketool/trainer/trdata/narc_0424.bin delete mode 100644 files/poketool/trainer/trdata/narc_0425.bin delete mode 100644 files/poketool/trainer/trdata/narc_0426.bin delete mode 100644 files/poketool/trainer/trdata/narc_0427.bin delete mode 100644 files/poketool/trainer/trdata/narc_0428.bin delete mode 100644 files/poketool/trainer/trdata/narc_0429.bin delete mode 100644 files/poketool/trainer/trdata/narc_0430.bin delete mode 100644 files/poketool/trainer/trdata/narc_0431.bin delete mode 100644 files/poketool/trainer/trdata/narc_0432.bin delete mode 100644 files/poketool/trainer/trdata/narc_0433.bin delete mode 100644 files/poketool/trainer/trdata/narc_0434.bin delete mode 100644 files/poketool/trainer/trdata/narc_0435.bin delete mode 100644 files/poketool/trainer/trdata/narc_0436.bin delete mode 100644 files/poketool/trainer/trdata/narc_0437.bin delete mode 100644 files/poketool/trainer/trdata/narc_0438.bin delete mode 100644 files/poketool/trainer/trdata/narc_0439.bin delete mode 100644 files/poketool/trainer/trdata/narc_0440.bin delete mode 100644 files/poketool/trainer/trdata/narc_0441.bin delete mode 100644 files/poketool/trainer/trdata/narc_0442.bin delete mode 100644 files/poketool/trainer/trdata/narc_0443.bin delete mode 100644 files/poketool/trainer/trdata/narc_0444.bin delete mode 100644 files/poketool/trainer/trdata/narc_0445.bin delete mode 100644 files/poketool/trainer/trdata/narc_0446.bin delete mode 100644 files/poketool/trainer/trdata/narc_0447.bin delete mode 100644 files/poketool/trainer/trdata/narc_0448.bin delete mode 100644 files/poketool/trainer/trdata/narc_0449.bin delete mode 100644 files/poketool/trainer/trdata/narc_0450.bin delete mode 100644 files/poketool/trainer/trdata/narc_0451.bin delete mode 100644 files/poketool/trainer/trdata/narc_0452.bin delete mode 100644 files/poketool/trainer/trdata/narc_0453.bin delete mode 100644 files/poketool/trainer/trdata/narc_0454.bin delete mode 100644 files/poketool/trainer/trdata/narc_0455.bin delete mode 100644 files/poketool/trainer/trdata/narc_0456.bin delete mode 100644 files/poketool/trainer/trdata/narc_0457.bin delete mode 100644 files/poketool/trainer/trdata/narc_0458.bin delete mode 100644 files/poketool/trainer/trdata/narc_0459.bin delete mode 100644 files/poketool/trainer/trdata/narc_0460.bin delete mode 100644 files/poketool/trainer/trdata/narc_0461.bin delete mode 100644 files/poketool/trainer/trdata/narc_0462.bin delete mode 100644 files/poketool/trainer/trdata/narc_0463.bin delete mode 100644 files/poketool/trainer/trdata/narc_0464.bin delete mode 100644 files/poketool/trainer/trdata/narc_0465.bin delete mode 100644 files/poketool/trainer/trdata/narc_0466.bin delete mode 100644 files/poketool/trainer/trdata/narc_0467.bin delete mode 100644 files/poketool/trainer/trdata/narc_0468.bin delete mode 100644 files/poketool/trainer/trdata/narc_0469.bin delete mode 100644 files/poketool/trainer/trdata/narc_0470.bin delete mode 100644 files/poketool/trainer/trdata/narc_0471.bin delete mode 100644 files/poketool/trainer/trdata/narc_0472.bin delete mode 100644 files/poketool/trainer/trdata/narc_0473.bin delete mode 100644 files/poketool/trainer/trdata/narc_0474.bin delete mode 100644 files/poketool/trainer/trdata/narc_0475.bin delete mode 100644 files/poketool/trainer/trdata/narc_0476.bin delete mode 100644 files/poketool/trainer/trdata/narc_0477.bin delete mode 100644 files/poketool/trainer/trdata/narc_0478.bin delete mode 100644 files/poketool/trainer/trdata/narc_0479.bin delete mode 100644 files/poketool/trainer/trdata/narc_0480.bin delete mode 100644 files/poketool/trainer/trdata/narc_0481.bin delete mode 100644 files/poketool/trainer/trdata/narc_0482.bin delete mode 100644 files/poketool/trainer/trdata/narc_0483.bin delete mode 100644 files/poketool/trainer/trdata/narc_0484.bin delete mode 100644 files/poketool/trainer/trdata/narc_0485.bin delete mode 100644 files/poketool/trainer/trdata/narc_0486.bin delete mode 100644 files/poketool/trainer/trdata/narc_0487.bin delete mode 100644 files/poketool/trainer/trdata/narc_0488.bin delete mode 100644 files/poketool/trainer/trdata/narc_0489.bin delete mode 100644 files/poketool/trainer/trdata/narc_0490.bin delete mode 100644 files/poketool/trainer/trdata/narc_0491.bin delete mode 100644 files/poketool/trainer/trdata/narc_0492.bin delete mode 100644 files/poketool/trainer/trdata/narc_0493.bin delete mode 100644 files/poketool/trainer/trdata/narc_0494.bin delete mode 100644 files/poketool/trainer/trdata/narc_0495.bin delete mode 100644 files/poketool/trainer/trdata/narc_0496.bin delete mode 100644 files/poketool/trainer/trdata/narc_0497.bin delete mode 100644 files/poketool/trainer/trdata/narc_0498.bin delete mode 100644 files/poketool/trainer/trdata/narc_0499.bin delete mode 100644 files/poketool/trainer/trdata/narc_0500.bin delete mode 100644 files/poketool/trainer/trdata/narc_0501.bin delete mode 100644 files/poketool/trainer/trdata/narc_0502.bin delete mode 100644 files/poketool/trainer/trdata/narc_0503.bin delete mode 100644 files/poketool/trainer/trdata/narc_0504.bin delete mode 100644 files/poketool/trainer/trdata/narc_0505.bin delete mode 100644 files/poketool/trainer/trdata/narc_0506.bin delete mode 100644 files/poketool/trainer/trdata/narc_0507.bin delete mode 100644 files/poketool/trainer/trdata/narc_0508.bin delete mode 100644 files/poketool/trainer/trdata/narc_0509.bin delete mode 100644 files/poketool/trainer/trdata/narc_0510.bin delete mode 100644 files/poketool/trainer/trdata/narc_0511.bin delete mode 100644 files/poketool/trainer/trdata/narc_0512.bin delete mode 100644 files/poketool/trainer/trdata/narc_0513.bin delete mode 100644 files/poketool/trainer/trdata/narc_0514.bin delete mode 100644 files/poketool/trainer/trdata/narc_0515.bin delete mode 100644 files/poketool/trainer/trdata/narc_0516.bin delete mode 100644 files/poketool/trainer/trdata/narc_0517.bin delete mode 100644 files/poketool/trainer/trdata/narc_0518.bin delete mode 100644 files/poketool/trainer/trdata/narc_0519.bin delete mode 100644 files/poketool/trainer/trdata/narc_0520.bin delete mode 100644 files/poketool/trainer/trdata/narc_0521.bin delete mode 100644 files/poketool/trainer/trdata/narc_0522.bin delete mode 100644 files/poketool/trainer/trdata/narc_0523.bin delete mode 100644 files/poketool/trainer/trdata/narc_0524.bin delete mode 100644 files/poketool/trainer/trdata/narc_0525.bin delete mode 100644 files/poketool/trainer/trdata/narc_0526.bin delete mode 100644 files/poketool/trainer/trdata/narc_0527.bin delete mode 100644 files/poketool/trainer/trdata/narc_0528.bin delete mode 100644 files/poketool/trainer/trdata/narc_0529.bin delete mode 100644 files/poketool/trainer/trdata/narc_0530.bin delete mode 100644 files/poketool/trainer/trdata/narc_0531.bin delete mode 100644 files/poketool/trainer/trdata/narc_0532.bin delete mode 100644 files/poketool/trainer/trdata/narc_0533.bin delete mode 100644 files/poketool/trainer/trdata/narc_0534.bin delete mode 100644 files/poketool/trainer/trdata/narc_0535.bin delete mode 100644 files/poketool/trainer/trdata/narc_0536.bin delete mode 100644 files/poketool/trainer/trdata/narc_0537.bin delete mode 100644 files/poketool/trainer/trdata/narc_0538.bin delete mode 100644 files/poketool/trainer/trdata/narc_0539.bin delete mode 100644 files/poketool/trainer/trdata/narc_0540.bin delete mode 100644 files/poketool/trainer/trdata/narc_0541.bin delete mode 100644 files/poketool/trainer/trdata/narc_0542.bin delete mode 100644 files/poketool/trainer/trdata/narc_0543.bin delete mode 100644 files/poketool/trainer/trdata/narc_0544.bin delete mode 100644 files/poketool/trainer/trdata/narc_0545.bin delete mode 100644 files/poketool/trainer/trdata/narc_0546.bin delete mode 100644 files/poketool/trainer/trdata/narc_0547.bin delete mode 100644 files/poketool/trainer/trdata/narc_0548.bin delete mode 100644 files/poketool/trainer/trdata/narc_0549.bin delete mode 100644 files/poketool/trainer/trdata/narc_0550.bin delete mode 100644 files/poketool/trainer/trdata/narc_0551.bin delete mode 100644 files/poketool/trainer/trdata/narc_0552.bin delete mode 100644 files/poketool/trainer/trdata/narc_0553.bin delete mode 100644 files/poketool/trainer/trdata/narc_0554.bin delete mode 100644 files/poketool/trainer/trdata/narc_0555.bin delete mode 100644 files/poketool/trainer/trdata/narc_0556.bin delete mode 100644 files/poketool/trainer/trdata/narc_0557.bin delete mode 100644 files/poketool/trainer/trdata/narc_0558.bin delete mode 100644 files/poketool/trainer/trdata/narc_0559.bin delete mode 100644 files/poketool/trainer/trdata/narc_0560.bin delete mode 100644 files/poketool/trainer/trdata/narc_0561.bin delete mode 100644 files/poketool/trainer/trdata/narc_0562.bin delete mode 100644 files/poketool/trainer/trdata/narc_0563.bin delete mode 100644 files/poketool/trainer/trdata/narc_0564.bin delete mode 100644 files/poketool/trainer/trdata/narc_0565.bin delete mode 100644 files/poketool/trainer/trdata/narc_0566.bin delete mode 100644 files/poketool/trainer/trdata/narc_0567.bin delete mode 100644 files/poketool/trainer/trdata/narc_0568.bin delete mode 100644 files/poketool/trainer/trdata/narc_0569.bin delete mode 100644 files/poketool/trainer/trdata/narc_0570.bin delete mode 100644 files/poketool/trainer/trdata/narc_0571.bin delete mode 100644 files/poketool/trainer/trdata/narc_0572.bin delete mode 100644 files/poketool/trainer/trdata/narc_0573.bin delete mode 100644 files/poketool/trainer/trdata/narc_0574.bin delete mode 100644 files/poketool/trainer/trdata/narc_0575.bin delete mode 100644 files/poketool/trainer/trdata/narc_0576.bin delete mode 100644 files/poketool/trainer/trdata/narc_0577.bin delete mode 100644 files/poketool/trainer/trdata/narc_0578.bin delete mode 100644 files/poketool/trainer/trdata/narc_0579.bin delete mode 100644 files/poketool/trainer/trdata/narc_0580.bin delete mode 100644 files/poketool/trainer/trdata/narc_0581.bin delete mode 100644 files/poketool/trainer/trdata/narc_0582.bin delete mode 100644 files/poketool/trainer/trdata/narc_0583.bin delete mode 100644 files/poketool/trainer/trdata/narc_0584.bin delete mode 100644 files/poketool/trainer/trdata/narc_0585.bin delete mode 100644 files/poketool/trainer/trdata/narc_0586.bin delete mode 100644 files/poketool/trainer/trdata/narc_0587.bin delete mode 100644 files/poketool/trainer/trdata/narc_0588.bin delete mode 100644 files/poketool/trainer/trdata/narc_0589.bin delete mode 100644 files/poketool/trainer/trdata/narc_0590.bin delete mode 100644 files/poketool/trainer/trdata/narc_0591.bin delete mode 100644 files/poketool/trainer/trdata/narc_0592.bin delete mode 100644 files/poketool/trainer/trdata/narc_0593.bin delete mode 100644 files/poketool/trainer/trdata/narc_0594.bin delete mode 100644 files/poketool/trainer/trdata/narc_0595.bin delete mode 100644 files/poketool/trainer/trdata/narc_0596.bin delete mode 100644 files/poketool/trainer/trdata/narc_0597.bin delete mode 100644 files/poketool/trainer/trdata/narc_0598.bin delete mode 100644 files/poketool/trainer/trdata/narc_0599.bin delete mode 100644 files/poketool/trainer/trdata/narc_0600.bin delete mode 100644 files/poketool/trainer/trdata/narc_0601.bin delete mode 100644 files/poketool/trainer/trdata/narc_0602.bin delete mode 100644 files/poketool/trainer/trdata/narc_0603.bin delete mode 100644 files/poketool/trainer/trdata/narc_0604.bin delete mode 100644 files/poketool/trainer/trdata/narc_0605.bin delete mode 100644 files/poketool/trainer/trdata/narc_0606.bin delete mode 100644 files/poketool/trainer/trdata/narc_0607.bin delete mode 100644 files/poketool/trainer/trdata/narc_0608.bin delete mode 100644 files/poketool/trainer/trdata/narc_0609.bin delete mode 100644 files/poketool/trainer/trdata/narc_0610.bin delete mode 100644 files/poketool/trainer/trdata/narc_0611.bin delete mode 100644 files/poketool/trainer/trdata/narc_0612.bin delete mode 100644 files/poketool/trainer/trdata/narc_0613.bin delete mode 100644 files/poketool/trainer/trdata/narc_0614.bin delete mode 100644 files/poketool/trainer/trdata/narc_0615.bin delete mode 100644 files/poketool/trainer/trdata/narc_0616.bin delete mode 100644 files/poketool/trainer/trdata/narc_0617.bin delete mode 100644 files/poketool/trainer/trdata/narc_0618.bin delete mode 100644 files/poketool/trainer/trdata/narc_0619.bin delete mode 100644 files/poketool/trainer/trdata/narc_0620.bin delete mode 100644 files/poketool/trainer/trdata/narc_0621.bin delete mode 100644 files/poketool/trainer/trdata/narc_0622.bin delete mode 100644 files/poketool/trainer/trdata/narc_0623.bin delete mode 100644 files/poketool/trainer/trdata/narc_0624.bin delete mode 100644 files/poketool/trainer/trdata/narc_0625.bin delete mode 100644 files/poketool/trainer/trdata/narc_0626.bin delete mode 100644 files/poketool/trainer/trdata/narc_0627.bin delete mode 100644 files/poketool/trainer/trdata/narc_0628.bin delete mode 100644 files/poketool/trainer/trdata/narc_0629.bin delete mode 100644 files/poketool/trainer/trdata/narc_0630.bin delete mode 100644 files/poketool/trainer/trdata/narc_0631.bin delete mode 100644 files/poketool/trainer/trdata/narc_0632.bin delete mode 100644 files/poketool/trainer/trdata/narc_0633.bin delete mode 100644 files/poketool/trainer/trdata/narc_0634.bin delete mode 100644 files/poketool/trainer/trdata/narc_0635.bin delete mode 100644 files/poketool/trainer/trdata/narc_0636.bin delete mode 100644 files/poketool/trainer/trdata/narc_0637.bin delete mode 100644 files/poketool/trainer/trdata/narc_0638.bin delete mode 100644 files/poketool/trainer/trdata/narc_0639.bin delete mode 100644 files/poketool/trainer/trdata/narc_0640.bin delete mode 100644 files/poketool/trainer/trdata/narc_0641.bin delete mode 100644 files/poketool/trainer/trdata/narc_0642.bin delete mode 100644 files/poketool/trainer/trdata/narc_0643.bin delete mode 100644 files/poketool/trainer/trdata/narc_0644.bin delete mode 100644 files/poketool/trainer/trdata/narc_0645.bin delete mode 100644 files/poketool/trainer/trdata/narc_0646.bin delete mode 100644 files/poketool/trainer/trdata/narc_0647.bin delete mode 100644 files/poketool/trainer/trdata/narc_0648.bin delete mode 100644 files/poketool/trainer/trdata/narc_0649.bin delete mode 100644 files/poketool/trainer/trdata/narc_0650.bin delete mode 100644 files/poketool/trainer/trdata/narc_0651.bin delete mode 100644 files/poketool/trainer/trdata/narc_0652.bin delete mode 100644 files/poketool/trainer/trdata/narc_0653.bin delete mode 100644 files/poketool/trainer/trdata/narc_0654.bin delete mode 100644 files/poketool/trainer/trdata/narc_0655.bin delete mode 100644 files/poketool/trainer/trdata/narc_0656.bin delete mode 100644 files/poketool/trainer/trdata/narc_0657.bin delete mode 100644 files/poketool/trainer/trdata/narc_0658.bin delete mode 100644 files/poketool/trainer/trdata/narc_0659.bin delete mode 100644 files/poketool/trainer/trdata/narc_0660.bin delete mode 100644 files/poketool/trainer/trdata/narc_0661.bin delete mode 100644 files/poketool/trainer/trdata/narc_0662.bin delete mode 100644 files/poketool/trainer/trdata/narc_0663.bin delete mode 100644 files/poketool/trainer/trdata/narc_0664.bin delete mode 100644 files/poketool/trainer/trdata/narc_0665.bin delete mode 100644 files/poketool/trainer/trdata/narc_0666.bin delete mode 100644 files/poketool/trainer/trdata/narc_0667.bin delete mode 100644 files/poketool/trainer/trdata/narc_0668.bin delete mode 100644 files/poketool/trainer/trdata/narc_0669.bin delete mode 100644 files/poketool/trainer/trdata/narc_0670.bin delete mode 100644 files/poketool/trainer/trdata/narc_0671.bin delete mode 100644 files/poketool/trainer/trdata/narc_0672.bin delete mode 100644 files/poketool/trainer/trdata/narc_0673.bin delete mode 100644 files/poketool/trainer/trdata/narc_0674.bin delete mode 100644 files/poketool/trainer/trdata/narc_0675.bin delete mode 100644 files/poketool/trainer/trdata/narc_0676.bin delete mode 100644 files/poketool/trainer/trdata/narc_0677.bin delete mode 100644 files/poketool/trainer/trdata/narc_0678.bin delete mode 100644 files/poketool/trainer/trdata/narc_0679.bin delete mode 100644 files/poketool/trainer/trdata/narc_0680.bin delete mode 100644 files/poketool/trainer/trdata/narc_0681.bin delete mode 100644 files/poketool/trainer/trdata/narc_0682.bin delete mode 100644 files/poketool/trainer/trdata/narc_0683.bin delete mode 100644 files/poketool/trainer/trdata/narc_0684.bin delete mode 100644 files/poketool/trainer/trdata/narc_0685.bin delete mode 100644 files/poketool/trainer/trdata/narc_0686.bin delete mode 100644 files/poketool/trainer/trdata/narc_0687.bin delete mode 100644 files/poketool/trainer/trdata/narc_0688.bin delete mode 100644 files/poketool/trainer/trdata/narc_0689.bin delete mode 100644 files/poketool/trainer/trdata/narc_0690.bin delete mode 100644 files/poketool/trainer/trdata/narc_0691.bin delete mode 100644 files/poketool/trainer/trdata/narc_0692.bin delete mode 100644 files/poketool/trainer/trdata/narc_0693.bin delete mode 100644 files/poketool/trainer/trdata/narc_0694.bin delete mode 100644 files/poketool/trainer/trdata/narc_0695.bin delete mode 100644 files/poketool/trainer/trdata/narc_0696.bin delete mode 100644 files/poketool/trainer/trdata/narc_0697.bin delete mode 100644 files/poketool/trainer/trdata/narc_0698.bin delete mode 100644 files/poketool/trainer/trdata/narc_0699.bin delete mode 100644 files/poketool/trainer/trdata/narc_0700.bin delete mode 100644 files/poketool/trainer/trdata/narc_0701.bin delete mode 100644 files/poketool/trainer/trdata/narc_0702.bin delete mode 100644 files/poketool/trainer/trdata/narc_0703.bin delete mode 100644 files/poketool/trainer/trdata/narc_0704.bin delete mode 100644 files/poketool/trainer/trdata/narc_0705.bin delete mode 100644 files/poketool/trainer/trdata/narc_0706.bin delete mode 100644 files/poketool/trainer/trdata/narc_0707.bin delete mode 100644 files/poketool/trainer/trdata/narc_0708.bin delete mode 100644 files/poketool/trainer/trdata/narc_0709.bin delete mode 100644 files/poketool/trainer/trdata/narc_0710.bin delete mode 100644 files/poketool/trainer/trdata/narc_0711.bin delete mode 100644 files/poketool/trainer/trdata/narc_0712.bin delete mode 100644 files/poketool/trainer/trdata/narc_0713.bin delete mode 100644 files/poketool/trainer/trdata/narc_0714.bin delete mode 100644 files/poketool/trainer/trdata/narc_0715.bin delete mode 100644 files/poketool/trainer/trdata/narc_0716.bin delete mode 100644 files/poketool/trainer/trdata/narc_0717.bin delete mode 100644 files/poketool/trainer/trdata/narc_0718.bin delete mode 100644 files/poketool/trainer/trdata/narc_0719.bin delete mode 100644 files/poketool/trainer/trdata/narc_0720.bin delete mode 100644 files/poketool/trainer/trdata/narc_0721.bin delete mode 100644 files/poketool/trainer/trdata/narc_0722.bin delete mode 100644 files/poketool/trainer/trdata/narc_0723.bin delete mode 100644 files/poketool/trainer/trdata/narc_0724.bin delete mode 100644 files/poketool/trainer/trdata/narc_0725.bin delete mode 100644 files/poketool/trainer/trdata/narc_0726.bin delete mode 100644 files/poketool/trainer/trdata/narc_0727.bin delete mode 100644 files/poketool/trainer/trdata/narc_0728.bin delete mode 100644 files/poketool/trainer/trdata/narc_0729.bin delete mode 100644 files/poketool/trainer/trdata/narc_0730.bin delete mode 100644 files/poketool/trainer/trdata/narc_0731.bin delete mode 100644 files/poketool/trainer/trdata/narc_0732.bin delete mode 100644 files/poketool/trainer/trdata/narc_0733.bin delete mode 100644 files/poketool/trainer/trdata/narc_0734.bin delete mode 100644 files/poketool/trainer/trdata/narc_0735.bin delete mode 100644 files/poketool/trainer/trdata/narc_0736.bin delete mode 100644 files/poketool/trainer/trdata/narc_0737.bin delete mode 100644 files/poketool/trainer/trdata/narc_0738.bin delete mode 100644 files/poketool/trainer/trdata/narc_0739.bin delete mode 100644 files/poketool/trainer/trdata/narc_0740.bin delete mode 100644 files/poketool/trainer/trdata/narc_0741.bin delete mode 100644 files/poketool/trainer/trdata/narc_0742.bin delete mode 100644 files/poketool/trainer/trdata/narc_0743.bin delete mode 100644 files/poketool/trainer/trdata/narc_0744.bin delete mode 100644 files/poketool/trainer/trdata/narc_0745.bin delete mode 100644 files/poketool/trainer/trdata/narc_0746.bin delete mode 100644 files/poketool/trainer/trdata/narc_0747.bin delete mode 100644 files/poketool/trainer/trdata/narc_0748.bin delete mode 100644 files/poketool/trainer/trdata/narc_0749.bin delete mode 100644 files/poketool/trainer/trdata/narc_0750.bin delete mode 100644 files/poketool/trainer/trdata/narc_0751.bin delete mode 100644 files/poketool/trainer/trdata/narc_0752.bin delete mode 100644 files/poketool/trainer/trdata/narc_0753.bin delete mode 100644 files/poketool/trainer/trdata/narc_0754.bin delete mode 100644 files/poketool/trainer/trdata/narc_0755.bin delete mode 100644 files/poketool/trainer/trdata/narc_0756.bin delete mode 100644 files/poketool/trainer/trdata/narc_0757.bin delete mode 100644 files/poketool/trainer/trdata/narc_0758.bin delete mode 100644 files/poketool/trainer/trdata/narc_0759.bin delete mode 100644 files/poketool/trainer/trdata/narc_0760.bin delete mode 100644 files/poketool/trainer/trdata/narc_0761.bin delete mode 100644 files/poketool/trainer/trdata/narc_0762.bin delete mode 100644 files/poketool/trainer/trdata/narc_0763.bin delete mode 100644 files/poketool/trainer/trdata/narc_0764.bin delete mode 100644 files/poketool/trainer/trdata/narc_0765.bin delete mode 100644 files/poketool/trainer/trdata/narc_0766.bin delete mode 100644 files/poketool/trainer/trdata/narc_0767.bin delete mode 100644 files/poketool/trainer/trdata/narc_0768.bin delete mode 100644 files/poketool/trainer/trdata/narc_0769.bin delete mode 100644 files/poketool/trainer/trdata/narc_0770.bin delete mode 100644 files/poketool/trainer/trdata/narc_0771.bin delete mode 100644 files/poketool/trainer/trdata/narc_0772.bin delete mode 100644 files/poketool/trainer/trdata/narc_0773.bin delete mode 100644 files/poketool/trainer/trdata/narc_0774.bin delete mode 100644 files/poketool/trainer/trdata/narc_0775.bin delete mode 100644 files/poketool/trainer/trdata/narc_0776.bin delete mode 100644 files/poketool/trainer/trdata/narc_0777.bin delete mode 100644 files/poketool/trainer/trdata/narc_0778.bin delete mode 100644 files/poketool/trainer/trdata/narc_0779.bin delete mode 100644 files/poketool/trainer/trdata/narc_0780.bin delete mode 100644 files/poketool/trainer/trdata/narc_0781.bin delete mode 100644 files/poketool/trainer/trdata/narc_0782.bin delete mode 100644 files/poketool/trainer/trdata/narc_0783.bin delete mode 100644 files/poketool/trainer/trdata/narc_0784.bin delete mode 100644 files/poketool/trainer/trdata/narc_0785.bin delete mode 100644 files/poketool/trainer/trdata/narc_0786.bin delete mode 100644 files/poketool/trainer/trdata/narc_0787.bin delete mode 100644 files/poketool/trainer/trdata/narc_0788.bin delete mode 100644 files/poketool/trainer/trdata/narc_0789.bin delete mode 100644 files/poketool/trainer/trdata/narc_0790.bin delete mode 100644 files/poketool/trainer/trdata/narc_0791.bin delete mode 100644 files/poketool/trainer/trdata/narc_0792.bin delete mode 100644 files/poketool/trainer/trdata/narc_0793.bin delete mode 100644 files/poketool/trainer/trdata/narc_0794.bin delete mode 100644 files/poketool/trainer/trdata/narc_0795.bin delete mode 100644 files/poketool/trainer/trdata/narc_0796.bin delete mode 100644 files/poketool/trainer/trdata/narc_0797.bin delete mode 100644 files/poketool/trainer/trdata/narc_0798.bin delete mode 100644 files/poketool/trainer/trdata/narc_0799.bin delete mode 100644 files/poketool/trainer/trdata/narc_0800.bin delete mode 100644 files/poketool/trainer/trdata/narc_0801.bin delete mode 100644 files/poketool/trainer/trdata/narc_0802.bin delete mode 100644 files/poketool/trainer/trdata/narc_0803.bin delete mode 100644 files/poketool/trainer/trdata/narc_0804.bin delete mode 100644 files/poketool/trainer/trdata/narc_0805.bin delete mode 100644 files/poketool/trainer/trdata/narc_0806.bin delete mode 100644 files/poketool/trainer/trdata/narc_0807.bin delete mode 100644 files/poketool/trainer/trdata/narc_0808.bin delete mode 100644 files/poketool/trainer/trdata/narc_0809.bin delete mode 100644 files/poketool/trainer/trdata/narc_0810.bin delete mode 100644 files/poketool/trainer/trdata/narc_0811.bin delete mode 100644 files/poketool/trainer/trdata/narc_0812.bin delete mode 100644 files/poketool/trainer/trdata/narc_0813.bin delete mode 100644 files/poketool/trainer/trdata/narc_0814.bin delete mode 100644 files/poketool/trainer/trdata/narc_0815.bin delete mode 100644 files/poketool/trainer/trdata/narc_0816.bin delete mode 100644 files/poketool/trainer/trdata/narc_0817.bin delete mode 100644 files/poketool/trainer/trdata/narc_0818.bin delete mode 100644 files/poketool/trainer/trdata/narc_0819.bin delete mode 100644 files/poketool/trainer/trdata/narc_0820.bin delete mode 100644 files/poketool/trainer/trdata/narc_0821.bin delete mode 100644 files/poketool/trainer/trdata/narc_0822.bin delete mode 100644 files/poketool/trainer/trdata/narc_0823.bin delete mode 100644 files/poketool/trainer/trdata/narc_0824.bin delete mode 100644 files/poketool/trainer/trdata/narc_0825.bin delete mode 100644 files/poketool/trainer/trdata/narc_0826.bin delete mode 100644 files/poketool/trainer/trdata/narc_0827.bin delete mode 100644 files/poketool/trainer/trdata/narc_0828.bin delete mode 100644 files/poketool/trainer/trdata/narc_0829.bin delete mode 100644 files/poketool/trainer/trdata/narc_0830.bin delete mode 100644 files/poketool/trainer/trdata/narc_0831.bin delete mode 100644 files/poketool/trainer/trdata/narc_0832.bin delete mode 100644 files/poketool/trainer/trdata/narc_0833.bin delete mode 100644 files/poketool/trainer/trdata/narc_0834.bin delete mode 100644 files/poketool/trainer/trdata/narc_0835.bin delete mode 100644 files/poketool/trainer/trdata/narc_0836.bin delete mode 100644 files/poketool/trainer/trdata/narc_0837.bin delete mode 100644 files/poketool/trainer/trdata/narc_0838.bin delete mode 100644 files/poketool/trainer/trdata/narc_0839.bin delete mode 100644 files/poketool/trainer/trdata/narc_0840.bin delete mode 100644 files/poketool/trainer/trdata/narc_0841.bin delete mode 100644 files/poketool/trainer/trdata/narc_0842.bin delete mode 100644 files/poketool/trainer/trdata/narc_0843.bin delete mode 100644 files/poketool/trainer/trdata/narc_0844.bin delete mode 100644 files/poketool/trainer/trdata/narc_0845.bin delete mode 100644 files/poketool/trainer/trdata/narc_0846.bin delete mode 100644 files/poketool/trainer/trdata/narc_0847.bin delete mode 100644 files/poketool/trainer/trdata/narc_0848.bin delete mode 100644 files/poketool/trainer/trdata/narc_0849.bin create mode 100644 files/poketool/trainer/trpoke.json.txt delete mode 100644 files/poketool/trainer/trpoke/.knarcignore delete mode 100644 files/poketool/trainer/trpoke/narc_0000.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0001.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0002.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0003.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0004.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0005.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0006.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0007.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0008.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0009.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0010.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0011.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0012.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0013.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0014.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0015.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0016.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0017.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0018.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0019.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0020.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0021.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0022.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0023.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0024.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0025.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0026.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0027.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0028.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0029.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0030.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0031.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0032.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0033.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0034.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0035.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0036.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0037.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0038.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0039.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0040.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0041.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0042.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0043.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0044.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0045.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0046.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0047.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0048.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0049.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0050.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0051.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0052.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0053.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0054.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0055.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0056.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0057.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0058.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0059.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0060.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0061.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0062.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0063.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0064.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0065.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0066.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0067.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0068.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0069.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0070.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0071.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0072.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0073.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0074.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0075.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0076.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0077.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0078.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0079.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0080.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0081.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0082.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0083.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0084.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0085.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0086.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0087.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0088.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0089.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0090.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0091.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0092.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0093.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0094.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0095.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0096.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0097.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0098.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0099.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0100.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0101.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0102.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0103.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0104.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0105.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0106.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0107.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0108.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0109.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0110.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0111.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0112.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0113.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0114.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0115.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0116.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0117.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0118.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0119.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0120.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0121.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0122.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0123.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0124.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0125.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0126.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0127.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0128.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0129.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0130.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0131.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0132.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0133.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0134.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0135.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0136.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0137.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0138.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0139.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0140.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0141.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0142.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0143.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0144.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0145.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0146.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0147.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0148.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0149.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0150.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0151.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0152.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0153.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0154.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0155.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0156.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0157.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0158.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0159.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0160.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0161.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0162.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0163.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0164.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0165.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0166.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0167.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0168.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0169.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0170.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0171.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0172.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0173.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0174.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0175.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0176.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0177.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0178.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0179.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0180.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0181.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0182.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0183.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0184.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0185.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0186.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0187.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0188.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0189.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0190.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0191.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0192.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0193.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0194.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0195.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0196.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0197.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0198.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0199.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0200.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0201.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0202.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0203.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0204.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0205.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0206.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0207.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0208.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0209.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0210.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0211.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0212.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0213.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0214.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0215.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0216.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0217.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0218.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0219.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0220.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0221.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0222.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0223.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0224.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0225.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0226.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0227.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0228.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0229.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0230.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0231.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0232.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0233.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0234.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0235.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0236.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0237.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0238.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0239.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0240.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0241.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0242.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0243.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0244.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0245.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0246.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0247.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0248.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0249.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0250.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0251.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0252.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0253.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0254.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0255.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0256.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0257.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0258.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0259.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0260.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0261.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0262.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0263.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0264.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0265.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0266.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0267.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0268.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0269.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0270.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0271.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0272.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0273.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0274.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0275.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0276.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0277.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0278.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0279.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0280.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0281.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0282.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0283.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0284.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0285.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0286.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0287.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0288.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0289.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0290.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0291.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0292.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0293.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0294.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0295.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0296.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0297.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0298.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0299.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0300.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0301.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0302.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0303.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0304.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0305.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0306.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0307.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0308.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0309.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0310.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0311.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0312.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0313.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0314.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0315.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0316.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0317.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0318.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0319.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0320.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0321.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0322.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0323.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0324.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0325.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0326.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0327.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0328.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0329.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0330.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0331.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0332.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0333.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0334.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0335.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0336.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0337.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0338.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0339.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0340.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0341.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0342.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0343.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0344.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0345.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0346.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0347.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0348.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0349.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0350.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0351.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0352.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0353.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0354.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0355.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0356.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0357.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0358.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0359.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0360.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0361.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0362.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0363.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0364.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0365.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0366.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0367.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0368.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0369.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0370.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0371.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0372.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0373.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0374.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0375.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0376.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0377.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0378.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0379.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0380.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0381.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0382.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0383.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0384.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0385.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0386.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0387.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0388.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0389.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0390.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0391.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0392.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0393.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0394.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0395.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0396.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0397.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0398.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0399.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0400.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0401.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0402.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0403.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0404.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0405.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0406.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0407.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0408.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0409.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0410.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0411.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0412.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0413.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0414.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0415.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0416.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0417.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0418.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0419.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0420.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0421.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0422.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0423.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0424.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0425.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0426.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0427.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0428.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0429.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0430.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0431.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0432.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0433.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0434.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0435.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0436.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0437.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0438.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0439.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0440.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0441.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0442.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0443.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0444.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0445.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0446.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0447.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0448.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0449.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0450.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0451.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0452.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0453.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0454.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0455.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0456.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0457.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0458.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0459.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0460.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0461.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0462.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0463.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0464.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0465.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0466.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0467.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0468.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0469.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0470.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0471.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0472.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0473.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0474.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0475.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0476.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0477.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0478.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0479.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0480.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0481.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0482.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0483.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0484.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0485.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0486.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0487.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0488.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0489.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0490.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0491.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0492.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0493.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0494.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0495.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0496.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0497.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0498.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0499.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0500.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0501.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0502.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0503.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0504.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0505.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0506.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0507.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0508.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0509.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0510.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0511.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0512.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0513.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0514.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0515.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0516.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0517.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0518.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0519.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0520.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0521.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0522.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0523.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0524.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0525.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0526.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0527.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0528.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0529.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0530.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0531.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0532.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0533.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0534.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0535.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0536.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0537.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0538.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0539.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0540.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0541.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0542.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0543.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0544.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0545.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0546.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0547.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0548.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0549.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0550.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0551.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0552.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0553.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0554.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0555.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0556.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0557.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0558.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0559.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0560.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0561.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0562.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0563.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0564.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0565.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0566.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0567.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0568.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0569.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0570.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0571.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0572.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0573.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0574.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0575.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0576.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0577.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0578.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0579.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0580.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0581.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0582.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0583.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0584.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0585.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0586.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0587.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0588.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0589.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0590.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0591.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0592.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0593.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0594.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0595.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0596.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0597.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0598.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0599.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0600.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0601.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0602.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0603.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0604.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0605.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0606.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0607.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0608.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0609.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0610.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0611.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0612.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0613.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0614.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0615.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0616.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0617.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0618.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0619.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0620.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0621.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0622.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0623.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0624.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0625.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0626.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0627.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0628.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0629.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0630.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0631.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0632.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0633.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0634.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0635.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0636.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0637.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0638.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0639.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0640.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0641.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0642.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0643.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0644.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0645.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0646.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0647.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0648.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0649.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0650.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0651.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0652.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0653.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0654.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0655.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0656.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0657.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0658.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0659.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0660.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0661.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0662.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0663.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0664.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0665.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0666.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0667.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0668.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0669.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0670.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0671.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0672.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0673.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0674.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0675.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0676.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0677.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0678.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0679.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0680.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0681.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0682.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0683.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0684.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0685.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0686.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0687.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0688.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0689.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0690.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0691.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0692.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0693.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0694.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0695.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0696.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0697.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0698.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0699.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0700.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0701.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0702.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0703.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0704.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0705.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0706.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0707.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0708.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0709.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0710.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0711.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0712.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0713.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0714.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0715.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0716.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0717.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0718.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0719.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0720.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0721.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0722.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0723.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0724.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0725.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0726.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0727.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0728.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0729.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0730.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0731.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0732.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0733.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0734.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0735.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0736.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0737.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0738.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0739.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0740.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0741.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0742.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0743.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0744.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0745.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0746.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0747.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0748.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0749.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0750.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0751.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0752.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0753.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0754.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0755.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0756.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0757.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0758.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0759.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0760.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0761.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0762.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0763.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0764.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0765.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0766.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0767.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0768.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0769.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0770.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0771.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0772.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0773.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0774.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0775.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0776.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0777.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0778.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0779.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0780.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0781.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0782.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0783.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0784.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0785.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0786.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0787.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0788.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0789.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0790.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0791.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0792.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0793.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0794.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0795.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0796.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0797.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0798.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0799.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0800.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0801.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0802.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0803.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0804.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0805.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0806.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0807.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0808.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0809.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0810.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0811.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0812.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0813.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0814.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0815.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0816.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0817.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0818.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0819.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0820.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0821.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0822.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0823.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0824.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0825.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0826.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0827.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0828.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0829.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0830.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0831.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0832.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0833.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0834.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0835.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0836.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0837.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0838.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0839.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0840.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0841.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0842.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0843.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0844.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0845.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0846.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0847.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0848.bin delete mode 100644 files/poketool/trainer/trpoke/narc_0849.bin create mode 100644 include/trainer_data.h diff --git a/arm9/asm/unk_02038C78.s b/arm9/asm/unk_02038C78.s index 73daf808..d16d93f2 100644 --- a/arm9/asm/unk_02038C78.s +++ b/arm9/asm/unk_02038C78.s @@ -2143,7 +2143,7 @@ _02039628: .word 0x00001388 FUN_0203962C: ; 0x0203962C push {r3, lr} mov r1, #0x9 - bl FUN_0206AC74 + bl TrainerData_GetAttr cmp r0, #0x0 beq _0203963C mov r0, #0x1 diff --git a/arm9/asm/unk_0204AB0C.s b/arm9/asm/unk_0204AB0C.s index 5da6e8d4..45702b12 100644 --- a/arm9/asm/unk_0204AB0C.s +++ b/arm9/asm/unk_0204AB0C.s @@ -304,7 +304,7 @@ _0204AD0A: FUN_0204AD0C: ; 0x0204AD0C push {r3-r5, lr} mov r1, #0x1 - bl FUN_0206AC74 + bl TrainerData_GetAttr lsl r0, r0, #0x18 lsr r5, r0, #0x18 ldr r0, _0204AD38 ; =0x0000044D diff --git a/arm9/asm/unk_0206ABC4.s b/arm9/asm/unk_0206ABC4.s index 9d8b12d8..7ea69ce1 100644 --- a/arm9/asm/unk_0206ABC4.s +++ b/arm9/asm/unk_0206ABC4.s @@ -43,7 +43,7 @@ _0206ABF4: cmp r0, #0x0 beq _0206AC48 add r1, sp, #0x14 - bl FUN_0206ADE0 + bl TrainerData_ReadTrData ldr r3, [sp, #0x8] add r6, sp, #0x14 add r3, #0x28 @@ -77,7 +77,7 @@ _0206AC3E: ldr r0, [sp, #0x0] ldr r2, [sp, #0x4] add r1, r7, #0x0 - bl FUN_0206AE0C + bl LoadTrainerParty _0206AC48: ldr r0, [sp, #0x8] add r7, r7, #0x1 @@ -100,13 +100,13 @@ _0206AC48: nop _0206AC70: .word 0x0000022F - thumb_func_start FUN_0206AC74 -FUN_0206AC74: ; 0x0206AC74 + thumb_func_start TrainerData_GetAttr +TrainerData_GetAttr: ; 0x0206AC74 push {r4-r5, lr} sub sp, #0x34 add r5, r1, #0x0 add r1, sp, #0x0 - bl FUN_0206ADE0 + bl TrainerData_ReadTrData cmp r5, #0x9 bhi _0206ACCC add r0, r5, r5 @@ -293,8 +293,8 @@ _0206ADD6: nop _0206ADDC: .word 0x0000022E - thumb_func_start FUN_0206ADE0 -FUN_0206ADE0: ; 0x0206ADE0 + thumb_func_start TrainerData_ReadTrData +TrainerData_ReadTrData: ; 0x0206ADE0 ldr r3, _0206ADEC ; =ReadWholeNarcMemberByIdPair add r2, r0, #0x0 add r0, r1, #0x0 @@ -303,8 +303,8 @@ FUN_0206ADE0: ; 0x0206ADE0 nop _0206ADEC: .word ReadWholeNarcMemberByIdPair - thumb_func_start FUN_0206ADF0 -FUN_0206ADF0: ; 0x0206ADF0 + thumb_func_start TrainerData_ReadTrPoke +TrainerData_ReadTrPoke: ; 0x0206ADF0 ldr r3, _0206ADFC ; =ReadWholeNarcMemberByIdPair add r2, r0, #0x0 add r0, r1, #0x0 @@ -321,8 +321,8 @@ FUN_0206AE00: ; 0x0206AE00 nop _0206AE08: .word UNK_020F8010 - thumb_func_start FUN_0206AE0C -FUN_0206AE0C: ; 0x0206AE0C + thumb_func_start LoadTrainerParty +LoadTrainerParty: ; 0x0206AE0C push {r3-r7, lr} sub sp, #0x50 add r7, r1, #0x0 @@ -345,7 +345,7 @@ FUN_0206AE0C: ; 0x0206AE0C add r0, r4, r6 ldr r0, [r0, #0x18] ldr r1, [sp, #0x4c] - bl FUN_0206ADF0 + bl TrainerData_ReadTrPoke mov r0, #0x34 add r5, r7, #0x0 mul r5, r0 diff --git a/arm9/global.inc b/arm9/global.inc index 1dc35362..c039fd35 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -4838,11 +4838,11 @@ .extern WazaGetMaxPp .extern GetAttrFromWazaTbl .extern FUN_0206ABC4 -.extern FUN_0206AC74 +.extern TrainerData_GetAttr .extern FUN_0206ACD4 .extern FUN_0206AD4C -.extern FUN_0206ADE0 -.extern FUN_0206ADF0 +.extern TrainerData_ReadTrData +.extern TrainerData_ReadTrPoke .extern FUN_0206AE00 .extern PCStorage_init .extern PCStorage_sizeof diff --git a/arm9/modules/11/asm/module_11_thumb2.s b/arm9/modules/11/asm/module_11_thumb2.s index c342adc4..a962fbf2 100644 --- a/arm9/modules/11/asm/module_11_thumb2.s +++ b/arm9/modules/11/asm/module_11_thumb2.s @@ -11742,11 +11742,11 @@ MOD11_02234CFC: ; 0x02234CFC str r0, [sp, #4] ldrh r0, [r6, r0] add r1, sp, #8 - bl FUN_0206ADE0 + bl TrainerData_ReadTrData ldr r0, [sp, #4] add r1, r4, #0 ldrh r0, [r6, r0] - bl FUN_0206ADF0 + bl TrainerData_ReadTrPoke add r0, sp, #8 ldrb r1, [r0] cmp r1, #3 diff --git a/arm9/modules/67/asm/module_67.s b/arm9/modules/67/asm/module_67.s index 997d785e..d71a7476 100644 --- a/arm9/modules/67/asm/module_67.s +++ b/arm9/modules/67/asm/module_67.s @@ -1701,7 +1701,7 @@ _021D822A: mov r1, #1 lsl r0, r0, #0x10 lsr r0, r0, #0x11 - bl FUN_0206AC74 + bl TrainerData_GetAttr cmp r0, #0x3f bne _021D828A ldr r0, [r4, #0x50] diff --git a/files/poketool/trainer/trdata.json b/files/poketool/trainer/trdata.json new file mode 100644 index 00000000..2f2877a9 --- /dev/null +++ b/files/poketool/trainer/trdata.json @@ -0,0 +1,20472 @@ +{ + "trdata": [ + { + "index": 1, + "type": 0, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_STARLY" + } + ] + }, + { + "index": 2, + "type": 0, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_SHINX" + } + ] + }, + { + "index": 3, + "type": 0, + "class": 3, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 3, + "species": "SPECIES_BIDOOF" + }, + { + "difficulty": 0, + "level": 3, + "species": "SPECIES_BIDOOF" + } + ] + }, + { + "index": 4, + "type": 0, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_BIDOOF" + }, + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_ZUBAT" + } + ] + }, + { + "index": 5, + "type": 0, + "class": 4, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 6, + "type": 0, + "class": 4, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 7, + "type": 0, + "class": 5, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 8, + "type": 0, + "class": 5, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 9, + "type": 0, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 10, + "type": 0, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_MAGIKARP" + }, + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_STARLY" + } + ] + }, + { + "index": 11, + "type": 0, + "class": 3, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 7, + "species": "SPECIES_BUDEW" + } + ] + }, + { + "index": 12, + "type": 0, + "class": 3, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 7, + "species": "SPECIES_BIDOOF" + } + ] + }, + { + "index": 13, + "type": 0, + "class": 6, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 7, + "species": "SPECIES_KRICKETOT" + }, + { + "difficulty": 0, + "level": 7, + "species": "SPECIES_WURMPLE" + } + ] + }, + { + "index": 14, + "type": 0, + "class": 7, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 7, + "species": "SPECIES_BUDEW" + }, + { + "difficulty": 0, + "level": 7, + "species": "SPECIES_CHERUBI" + } + ] + }, + { + "index": 15, + "type": 0, + "class": 8, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 2, + "party": [ + { + "difficulty": 0, + "level": 9, + "species": "SPECIES_PACHIRISU" + }, + { + "difficulty": 0, + "level": 9, + "species": "SPECIES_PACHIRISU" + } + ] + }, + { + "index": 16, + "type": 1, + "class": 4, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 14, + "species": "SPECIES_PONYTA", + "moves": [ + "MOVE_EMBER", + "MOVE_TACKLE" + ] + } + ] + }, + { + "index": 17, + "type": 1, + "class": 5, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 12, + "species": "SPECIES_SHINX", + "moves": [ + "MOVE_SPARK", + "MOVE_TACKLE" + ] + }, + { + "difficulty": 0, + "level": 12, + "species": "SPECIES_PACHIRISU", + "moves": [ + "MOVE_SPARK", + "MOVE_QUICK_ATTACK", + "MOVE_CHARM" + ] + } + ] + }, + { + "index": 18, + "type": 0, + "class": 9, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 11, + "species": "SPECIES_GEODUDE" + }, + { + "difficulty": 0, + "level": 11, + "species": "SPECIES_MACHOP" + }, + { + "difficulty": 0, + "level": 11, + "species": "SPECIES_GEODUDE" + }, + { + "difficulty": 0, + "level": 11, + "species": "SPECIES_BIDOOF" + } + ] + }, + { + "index": 19, + "type": 0, + "class": 9, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 14, + "species": "SPECIES_ONIX" + } + ] + }, + { + "index": 20, + "type": 0, + "class": 10, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 15, + "species": "SPECIES_MACHOP" + } + ] + }, + { + "index": 21, + "type": 0, + "class": 7, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 14, + "species": "SPECIES_BUDEW" + } + ] + }, + { + "index": 22, + "type": 0, + "class": 11, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "difficulty": 0, + "level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "difficulty": 0, + "level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "difficulty": 0, + "level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "difficulty": 0, + "level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "difficulty": 0, + "level": 10, + "species": "SPECIES_MAGIKARP" + } + ] + }, + { + "index": 23, + "type": 0, + "class": 11, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 14, + "species": "SPECIES_GOLDEEN" + } + ] + }, + { + "index": 24, + "type": 0, + "class": 11, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 10, + "species": "SPECIES_MAGIKARP" + }, + { + "difficulty": 0, + "level": 13, + "species": "SPECIES_GOLDEEN" + }, + { + "difficulty": 0, + "level": 10, + "species": "SPECIES_MAGIKARP" + } + ] + }, + { + "index": 25, + "type": 0, + "class": 12, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_STARAVIA" + } + ] + }, + { + "index": 26, + "type": 0, + "class": 12, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_PONYTA" + } + ] + }, + { + "index": 27, + "type": 0, + "class": 12, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_STARLY" + }, + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_STARAVIA" + } + ] + }, + { + "index": 28, + "type": 0, + "class": 12, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_ZUBAT" + } + ] + }, + { + "index": 29, + "type": 0, + "class": 13, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_SHINX" + } + ] + }, + { + "index": 30, + "type": 0, + "class": 13, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_STARLY" + }, + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_PONYTA" + } + ] + }, + { + "index": 31, + "type": 0, + "class": 13, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_PIKACHU" + } + ] + }, + { + "index": 32, + "type": 0, + "class": 13, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_SHINX" + }, + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_SHINX" + } + ] + }, + { + "index": 33, + "type": 0, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_STARLY" + }, + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_GEODUDE" + }, + { + "difficulty": 0, + "level": 18, + "species": "SPECIES_CHIMCHAR" + } + ] + }, + { + "index": 34, + "type": 1, + "class": 4, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_PONYTA", + "moves": [ + "MOVE_EMBER", + "MOVE_TACKLE", + "MOVE_GROWL" + ] + } + ] + }, + { + "index": 35, + "type": 1, + "class": 5, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_PACHIRISU", + "moves": [ + "MOVE_SPARK", + "MOVE_QUICK_ATTACK", + "MOVE_CHARM" + ] + } + ] + }, + { + "index": 36, + "type": 0, + "class": 9, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_GEODUDE" + }, + { + "difficulty": 0, + "level": 16, + "species": "SPECIES_GEODUDE" + }, + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_ZUBAT" + }, + { + "difficulty": 0, + "level": 16, + "species": "SPECIES_GEODUDE" + } + ] + }, + { + "index": 37, + "type": 0, + "class": 9, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 16, + "species": "SPECIES_GEODUDE" + }, + { + "difficulty": 0, + "level": 18, + "species": "SPECIES_BRONZOR" + } + ] + }, + { + "index": 38, + "type": 0, + "class": 10, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 18, + "species": "SPECIES_MEDITITE" + }, + { + "difficulty": 30, + "level": 18, + "species": "SPECIES_MACHOP" + } + ] + }, + { + "index": 39, + "type": 0, + "class": 9, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_GEODUDE" + }, + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_GEODUDE" + } + ] + }, + { + "index": 40, + "type": 0, + "class": 9, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 35, + "species": "SPECIES_GOLBAT" + }, + { + "difficulty": 0, + "level": 35, + "species": "SPECIES_GRAVELER" + }, + { + "difficulty": 0, + "level": 35, + "species": "SPECIES_ONIX" + } + ] + }, + { + "index": 41, + "type": 0, + "class": 9, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_ONIX" + } + ] + }, + { + "index": 42, + "type": 0, + "class": 14, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 19, + "species": "SPECIES_MACHOP" + } + ] + }, + { + "index": 43, + "type": 0, + "class": 11, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_BARBOACH" + }, + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_GYARADOS" + } + ] + }, + { + "index": 44, + "type": 0, + "class": 7, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 16, + "species": "SPECIES_COMBEE" + }, + { + "difficulty": 0, + "level": 18, + "species": "SPECIES_ROSELIA" + } + ] + }, + { + "index": 45, + "type": 0, + "class": 15, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_MIME_JR" + }, + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_BONSLY" + } + ] + }, + { + "index": 46, + "type": 0, + "class": 16, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 16, + "species": "SPECIES_BONSLY" + }, + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_BUDEW" + }, + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_PICHU" + } + ] + }, + { + "index": 47, + "type": 0, + "class": 17, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 16, + "species": "SPECIES_MIME_JR" + }, + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_BUDEW" + }, + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_CLEFFA" + } + ] + }, + { + "index": 48, + "type": 0, + "class": 18, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 14, + "species": "SPECIES_BIDOOF" + }, + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_BIDOOF" + }, + { + "difficulty": 0, + "level": 16, + "species": "SPECIES_BIDOOF" + }, + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_BIDOOF" + }, + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_BIDOOF" + } + ] + }, + { + "index": 49, + "type": 0, + "class": 19, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_LUXIO" + } + ] + }, + { + "index": 50, + "type": 0, + "class": 20, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 51, + "type": 0, + "class": 21, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 52, + "type": 0, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 53, + "type": 0, + "class": 22, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_PIKACHU" + } + ] + }, + { + "index": 54, + "type": 0, + "class": 11, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 55, + "type": 0, + "class": 23, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 2, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_MACHOP" + }, + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_MEDITITE" + } + ] + }, + { + "index": 56, + "type": 0, + "class": 16, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 18, + "species": "SPECIES_PICHU" + }, + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_PIKACHU" + }, + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_HAPPINY" + } + ] + }, + { + "index": 57, + "type": 0, + "class": 17, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_CLEFFA" + }, + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_CLEFAIRY" + }, + { + "difficulty": 0, + "level": 18, + "species": "SPECIES_HAPPINY" + } + ] + }, + { + "index": 58, + "type": 0, + "class": 18, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 59, + "type": 0, + "class": 19, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 60, + "type": 0, + "class": 20, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 61, + "type": 0, + "class": 21, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 62, + "type": 0, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 63, + "type": 0, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 64, + "type": 0, + "class": 26, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 65, + "type": 0, + "class": 8, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 2, + "party": [ + { + "difficulty": 0, + "level": 21, + "species": "SPECIES_PIKACHU" + }, + { + "difficulty": 0, + "level": 21, + "species": "SPECIES_CLEFAIRY" + } + ] + }, + { + "index": 66, + "type": 1, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 25, + "species": "SPECIES_MOTHIM", + "moves": [ + "MOVE_CONFUSION", + "MOVE_SILVER_WIND", + "MOVE_POISON_POWDER" + ] + }, + { + "difficulty": 50, + "level": 26, + "species": "SPECIES_ONIX", + "moves": [ + "MOVE_SLAM", + "MOVE_ROCK_THROW", + "MOVE_SCREECH", + "MOVE_SANDSTORM" + ] + }, + { + "difficulty": 50, + "level": 27, + "species": "SPECIES_LUXIO", + "moves": [ + "MOVE_SPARK", + "MOVE_BITE", + "MOVE_LEER" + ] + } + ] + }, + { + "index": 67, + "type": 1, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 27, + "species": "SPECIES_PONYTA", + "moves": [ + "MOVE_FIRE_SPIN", + "MOVE_STOMP", + "MOVE_GROWL" + ] + }, + { + "difficulty": 50, + "level": 27, + "species": "SPECIES_GROTLE", + "moves": [ + "MOVE_MEGA_DRAIN", + "MOVE_BITE", + "MOVE_CURSE" + ] + } + ] + }, + { + "index": 68, + "type": 1, + "class": 27, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 100, + "level": 26, + "species": "SPECIES_BUIZEL", + "moves": [ + "MOVE_AQUA_JET", + "MOVE_SONIC_BOOM", + "MOVE_PURSUIT", + "MOVE_QUICK_ATTACK" + ] + }, + { + "difficulty": 100, + "level": 26, + "species": "SPECIES_GIRAFARIG", + "moves": [ + "MOVE_PSYBEAM", + "MOVE_STOMP", + "MOVE_AGILITY", + "MOVE_BATON_PASS" + ] + }, + { + "difficulty": 100, + "level": 26, + "species": "SPECIES_MACHOKE", + "moves": [ + "MOVE_KARATE_CHOP", + "MOVE_LOW_KICK", + "MOVE_LEER" + ] + } + ] + }, + { + "index": 69, + "type": 0, + "class": 14, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 29, + "species": "SPECIES_MACHOKE" + } + ] + }, + { + "index": 70, + "type": 0, + "class": 28, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_ZUBAT" + }, + { + "difficulty": 0, + "level": 25, + "species": "SPECIES_SKORUPI" + }, + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_ZUBAT" + }, + { + "difficulty": 0, + "level": 25, + "species": "SPECIES_GOLBAT" + } + ] + }, + { + "index": 71, + "type": 0, + "class": 28, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 25, + "species": "SPECIES_CROAGUNK" + }, + { + "difficulty": 0, + "level": 25, + "species": "SPECIES_GOLBAT" + } + ] + }, + { + "index": 72, + "type": 0, + "class": 28, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 27, + "species": "SPECIES_DUSTOX" + } + ] + }, + { + "index": 73, + "type": 0, + "class": 29, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 39, + "species": "SPECIES_GIBLE" + } + ] + }, + { + "index": 74, + "type": 0, + "class": 30, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 27, + "species": "SPECIES_HOOTHOOT" + }, + { + "difficulty": 50, + "level": 27, + "species": "SPECIES_NOCTOWL" + } + ] + }, + { + "index": 75, + "type": 0, + "class": 31, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 2, + "party": [ + { + "difficulty": 50, + "level": 27, + "species": "SPECIES_GYARADOS" + }, + { + "difficulty": 50, + "level": 27, + "species": "SPECIES_RAICHU" + } + ] + }, + { + "index": 76, + "type": 0, + "class": 30, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 19, + "species": "SPECIES_HOOTHOOT" + } + ] + }, + { + "index": 77, + "type": 0, + "class": 10, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 78, + "type": 0, + "class": 28, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 13, + "species": "SPECIES_ZUBAT" + }, + { + "difficulty": 0, + "level": 14, + "species": "SPECIES_ZUBAT" + }, + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_ZUBAT" + } + ] + }, + { + "index": 79, + "type": 0, + "class": 14, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 28, + "species": "SPECIES_CROAGUNK" + }, + { + "difficulty": 30, + "level": 27, + "species": "SPECIES_MEDITITE" + }, + { + "difficulty": 30, + "level": 29, + "species": "SPECIES_MACHOKE" + } + ] + }, + { + "index": 80, + "type": 0, + "class": 28, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 27, + "species": "SPECIES_SKORUPI" + }, + { + "difficulty": 0, + "level": 27, + "species": "SPECIES_GOLBAT" + } + ] + }, + { + "index": 81, + "type": 0, + "class": 30, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 31, + "species": "SPECIES_NOCTOWL" + } + ] + }, + { + "index": 82, + "type": 0, + "class": 32, + "unk2": 0, + "items": [ + "ITEM_FULL_RESTORE" + ], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_LUXIO" + } + ] + }, + { + "index": 83, + "type": 0, + "class": 33, + "unk2": 0, + "items": [ + "ITEM_FULL_RESTORE" + ], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_BUNEARY" + } + ] + }, + { + "index": 84, + "type": 0, + "class": 34, + "unk2": 0, + "items": [ + "ITEM_FULL_RESTORE" + ], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_CHATOT" + } + ] + }, + { + "index": 85, + "type": 0, + "class": 35, + "unk2": 0, + "items": [ + "ITEM_FULL_RESTORE" + ], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_ROSELIA" + } + ] + }, + { + "index": 86, + "type": 0, + "class": 36, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 87, + "type": 0, + "class": 37, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 88, + "type": 0, + "class": 38, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 18, + "species": "SPECIES_HOOTHOOT" + }, + { + "difficulty": 0, + "level": 18, + "species": "SPECIES_MACHOP" + } + ] + }, + { + "index": 89, + "type": 0, + "class": 38, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 18, + "species": "SPECIES_HOOTHOOT" + }, + { + "difficulty": 0, + "level": 18, + "species": "SPECIES_MACHOP" + } + ] + }, + { + "index": 90, + "type": 0, + "class": 38, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 18, + "species": "SPECIES_HOOTHOOT" + }, + { + "difficulty": 0, + "level": 18, + "species": "SPECIES_MEDITITE" + } + ] + }, + { + "index": 91, + "type": 0, + "class": 11, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 21, + "species": "SPECIES_GYARADOS" + } + ] + }, + { + "index": 92, + "type": 0, + "class": 11, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_GOLDEEN" + }, + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_BARBOACH" + } + ] + }, + { + "index": 93, + "type": 0, + "class": 11, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_BARBOACH" + }, + { + "difficulty": 0, + "level": 18, + "species": "SPECIES_BARBOACH" + }, + { + "difficulty": 0, + "level": 20, + "species": "SPECIES_SHELLOS" + }, + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_BARBOACH" + } + ] + }, + { + "index": 94, + "type": 0, + "class": 39, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 21, + "species": "SPECIES_LUXIO" + }, + { + "difficulty": 50, + "level": 21, + "species": "SPECIES_BUIZEL" + } + ] + }, + { + "index": 95, + "type": 0, + "class": 39, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 21, + "species": "SPECIES_PRINPLUP" + }, + { + "difficulty": 50, + "level": 21, + "species": "SPECIES_PRINPLUP" + } + ] + }, + { + "index": 96, + "type": 0, + "class": 40, + "unk2": 0, + "items": [], + "unkC": 0, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 21, + "species": "SPECIES_AIPOM" + }, + { + "difficulty": 50, + "level": 21, + "species": "SPECIES_MARILL" + } + ] + }, + { + "index": 97, + "type": 0, + "class": 40, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 98, + "type": 0, + "class": 41, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 99, + "type": 1, + "class": 41, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 21, + "species": "SPECIES_KADABRA", + "moves": [ + "MOVE_CONFUSION", + "MOVE_DISABLE", + "MOVE_KINESIS", + "MOVE_ICE_PUNCH" + ] + } + ] + }, + { + "index": 100, + "type": 0, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 101, + "type": 0, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 102, + "type": 0, + "class": 38, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_HOOTHOOT" + }, + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_MEDITITE" + } + ] + }, + { + "index": 103, + "type": 0, + "class": 42, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 30, + "species": "SPECIES_GYARADOS" + }, + { + "difficulty": 0, + "level": 29, + "species": "SPECIES_GYARADOS" + }, + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_GYARADOS" + } + ] + }, + { + "index": 104, + "type": 0, + "class": 42, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 30, + "species": "SPECIES_GOLDUCK" + }, + { + "difficulty": 0, + "level": 32, + "species": "SPECIES_GOLDUCK" + } + ] + }, + { + "index": 105, + "type": 0, + "class": 43, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_MARILL" + }, + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_AZUMARILL" + } + ] + }, + { + "index": 106, + "type": 0, + "class": 43, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 32, + "species": "SPECIES_MARILL" + }, + { + "difficulty": 0, + "level": 30, + "species": "SPECIES_PELIPPER" + } + ] + }, + { + "index": 107, + "type": 0, + "class": 44, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_SHELLOS" + }, + { + "difficulty": 0, + "level": 21, + "species": "SPECIES_SHELLOS" + }, + { + "difficulty": 0, + "level": 20, + "species": "SPECIES_SHELLOS" + } + ] + }, + { + "index": 108, + "type": 1, + "class": 45, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_BIBAREL", + "moves": [ + "MOVE_SURF", + "MOVE_HYPER_FANG", + "MOVE_HEADBUTT", + "MOVE_DEFENSE_CURL" + ] + } + ] + }, + { + "index": 109, + "type": 0, + "class": 10, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 110, + "type": 0, + "class": 46, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_GYARADOS" + }, + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_MACHOP" + } + ] + }, + { + "index": 111, + "type": 0, + "class": 11, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_MAGIKARP" + }, + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_REMORAID" + }, + { + "difficulty": 0, + "level": 22, + "species": "SPECIES_GYARADOS" + } + ] + }, + { + "index": 112, + "type": 0, + "class": 47, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 2, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + }, + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 113, + "type": 0, + "class": 48, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 24, + "species": "SPECIES_CRANIDOS" + }, + { + "difficulty": 0, + "level": 22, + "species": "SPECIES_GEODUDE" + }, + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_BRONZOR" + } + ] + }, + { + "index": 114, + "type": 0, + "class": 48, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 26, + "species": "SPECIES_SHIELDON" + } + ] + }, + { + "index": 115, + "type": 0, + "class": 9, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 116, + "type": 0, + "class": 27, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 117, + "type": 0, + "class": 4, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 118, + "type": 0, + "class": 5, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 119, + "type": 0, + "class": 49, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_HAUNTER" + }, + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_KADABRA" + } + ] + }, + { + "index": 120, + "type": 0, + "class": 50, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 22, + "species": "SPECIES_GASTLY" + }, + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_MISDREAVUS" + }, + { + "difficulty": 0, + "level": 24, + "species": "SPECIES_KADABRA" + } + ] + }, + { + "index": 121, + "type": 1, + "class": 51, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 23, + "species": "SPECIES_GOLDEEN", + "moves": [ + "MOVE_HORN_DRILL", + "MOVE_FLAIL" + ] + }, + { + "difficulty": 30, + "level": 23, + "species": "SPECIES_GOLDEEN", + "moves": [ + "MOVE_HORN_DRILL", + "MOVE_FLAIL" + ] + }, + { + "difficulty": 50, + "level": 23, + "species": "SPECIES_GOLDEEN", + "moves": [ + "MOVE_HORN_DRILL", + "MOVE_FLAIL" + ] + } + ] + }, + { + "index": 122, + "type": 0, + "class": 52, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 123, + "type": 0, + "class": 51, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 124, + "type": 0, + "class": 36, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 125, + "type": 0, + "class": 36, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 126, + "type": 0, + "class": 14, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 127, + "type": 0, + "class": 14, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 23, + "species": "SPECIES_MEDITITE" + }, + { + "difficulty": 30, + "level": 22, + "species": "SPECIES_MACHOP" + }, + { + "difficulty": 30, + "level": 21, + "species": "SPECIES_MEDITITE" + } + ] + }, + { + "index": 128, + "type": 0, + "class": 14, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 25, + "species": "SPECIES_CROAGUNK" + } + ] + }, + { + "index": 129, + "type": 0, + "class": 14, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 21, + "species": "SPECIES_CROAGUNK" + }, + { + "difficulty": 30, + "level": 23, + "species": "SPECIES_MEDITITE" + }, + { + "difficulty": 30, + "level": 22, + "species": "SPECIES_MACHOP" + } + ] + }, + { + "index": 130, + "type": 0, + "class": 19, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_STARAVIA" + } + ] + }, + { + "index": 131, + "type": 0, + "class": 30, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 132, + "type": 1, + "class": 53, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 35, + "species": "SPECIES_AMBIPOM", + "moves": [ + "MOVE_DOUBLE_HIT", + "MOVE_U_TURN", + "MOVE_SAND_ATTACK", + "MOVE_SCREECH" + ] + }, + { + "difficulty": 50, + "level": 35, + "species": "SPECIES_KADABRA", + "moves": [ + "MOVE_PSYBEAM", + "MOVE_DISABLE", + "MOVE_REFLECT", + "MOVE_RECOVER" + ] + } + ] + }, + { + "index": 133, + "type": 1, + "class": 53, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 33, + "species": "SPECIES_MR_MIME", + "moves": [ + "MOVE_PSYBEAM", + "MOVE_MIMIC", + "MOVE_REFLECT", + "MOVE_LIGHT_SCREEN" + ] + }, + { + "difficulty": 50, + "level": 34, + "species": "SPECIES_MACHOKE", + "moves": [ + "MOVE_SUBMISSION", + "MOVE_LOW_KICK", + "MOVE_LEER", + "MOVE_ROCK_TOMB" + ] + }, + { + "difficulty": 50, + "level": 35, + "species": "SPECIES_SNEASEL", + "moves": [ + "MOVE_SLASH", + "MOVE_ICY_WIND", + "MOVE_QUICK_ATTACK", + "MOVE_SCREECH" + ] + } + ] + }, + { + "index": 134, + "type": 1, + "class": 54, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 37, + "species": "SPECIES_LOPUNNY", + "moves": [ + "MOVE_DIZZY_PUNCH", + "MOVE_JUMP_KICK", + "MOVE_QUICK_ATTACK", + "MOVE_MIRROR_COAT" + ] + } + ] + }, + { + "index": 135, + "type": 1, + "class": 54, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 34, + "species": "SPECIES_GOLDUCK", + "moves": [ + "MOVE_WATER_PULSE", + "MOVE_CONFUSION", + "MOVE_DISABLE", + "MOVE_SCREECH" + ] + }, + { + "difficulty": 50, + "level": 35, + "species": "SPECIES_PONYTA", + "moves": [ + "MOVE_FIRE_SPIN", + "MOVE_TAKE_DOWN", + "MOVE_TAIL_WHIP", + "MOVE_WILL_O_WISP" + ] + }, + { + "difficulty": 50, + "level": 33, + "species": "SPECIES_SUDOWOODO", + "moves": [ + "MOVE_ROCK_SLIDE", + "MOVE_LOW_KICK", + "MOVE_FLAIL", + "MOVE_ENDURE" + ] + } + ] + }, + { + "index": 136, + "type": 0, + "class": 55, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 35, + "species": "SPECIES_GEODUDE" + }, + { + "difficulty": 0, + "level": 35, + "species": "SPECIES_GRAVELER" + }, + { + "difficulty": 0, + "level": 35, + "species": "SPECIES_SNOVER" + } + ] + }, + { + "index": 137, + "type": 0, + "class": 55, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 35, + "species": "SPECIES_SNEASEL" + } + ] + }, + { + "index": 138, + "type": 0, + "class": 56, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 36, + "species": "SPECIES_ROSELIA" + }, + { + "difficulty": 0, + "level": 36, + "species": "SPECIES_SNOVER" + } + ] + }, + { + "index": 139, + "type": 0, + "class": 56, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 38, + "species": "SPECIES_STARAVIA" + } + ] + }, + { + "index": 140, + "type": 1, + "class": 53, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 34, + "species": "SPECIES_RAICHU", + "moves": [ + "MOVE_THUNDERBOLT", + "MOVE_SLAM", + "MOVE_QUICK_ATTACK", + "MOVE_THUNDER_WAVE" + ] + }, + { + "difficulty": 50, + "level": 36, + "species": "SPECIES_PELIPPER", + "moves": [ + "MOVE_AERIAL_ACE", + "MOVE_WATER_PULSE", + "MOVE_SUPERSONIC", + "MOVE_ROOST" + ] + }, + { + "difficulty": 50, + "level": 38, + "species": "SPECIES_HIPPOPOTAS", + "moves": [ + "MOVE_EARTHQUAKE", + "MOVE_CRUNCH", + "MOVE_SAND_TOMB", + "MOVE_YAWN" + ] + } + ] + }, + { + "index": 141, + "type": 1, + "class": 54, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 37, + "species": "SPECIES_ROSELIA", + "moves": [ + "MOVE_MEGA_DRAIN", + "MOVE_TOXIC_SPIKES", + "MOVE_INGRAIN", + "MOVE_GRASS_WHISTLE" + ] + }, + { + "difficulty": 50, + "level": 37, + "species": "SPECIES_SEAKING", + "moves": [ + "MOVE_WATER_PULSE", + "MOVE_POISON_JAB", + "MOVE_PECK", + "MOVE_AQUA_RING" + ] + } + ] + }, + { + "index": 142, + "type": 0, + "class": 55, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 34, + "species": "SPECIES_SNOVER" + }, + { + "difficulty": 0, + "level": 33, + "species": "SPECIES_SNOVER" + }, + { + "difficulty": 0, + "level": 34, + "species": "SPECIES_GOLDUCK" + }, + { + "difficulty": 0, + "level": 35, + "species": "SPECIES_SNOVER" + } + ] + }, + { + "index": 143, + "type": 0, + "class": 55, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 36, + "species": "SPECIES_MANTYKE" + }, + { + "difficulty": 0, + "level": 38, + "species": "SPECIES_SNEASEL" + } + ] + }, + { + "index": 144, + "type": 0, + "class": 56, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 35, + "species": "SPECIES_MARILL" + }, + { + "difficulty": 0, + "level": 35, + "species": "SPECIES_CLEFAIRY" + } + ] + }, + { + "index": 145, + "type": 0, + "class": 56, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 37, + "species": "SPECIES_SNOVER" + } + ] + }, + { + "index": 146, + "type": 0, + "class": 28, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 33, + "species": "SPECIES_ZUBAT" + }, + { + "difficulty": 0, + "level": 33, + "species": "SPECIES_GOLBAT" + }, + { + "difficulty": 0, + "level": 34, + "species": "SPECIES_ZUBAT" + }, + { + "difficulty": 0, + "level": 36, + "species": "SPECIES_CROAGUNK" + } + ] + }, + { + "index": 147, + "type": 0, + "class": 28, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 35, + "species": "SPECIES_SKORUPI" + }, + { + "difficulty": 0, + "level": 35, + "species": "SPECIES_GOLBAT" + } + ] + }, + { + "index": 148, + "type": 0, + "class": 14, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 36, + "species": "SPECIES_CROAGUNK" + }, + { + "difficulty": 30, + "level": 35, + "species": "SPECIES_ONIX" + }, + { + "difficulty": 30, + "level": 37, + "species": "SPECIES_MACHOKE" + } + ] + }, + { + "index": 149, + "type": 0, + "class": 42, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 150, + "type": 0, + "class": 42, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 151, + "type": 0, + "class": 43, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 152, + "type": 0, + "class": 43, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 153, + "type": 0, + "class": 11, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 29, + "species": "SPECIES_GYARADOS" + }, + { + "difficulty": 0, + "level": 29, + "species": "SPECIES_GYARADOS" + } + ] + }, + { + "index": 154, + "type": 0, + "class": 11, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 26, + "species": "SPECIES_MAGIKARP" + }, + { + "difficulty": 0, + "level": 26, + "species": "SPECIES_MAGIKARP" + }, + { + "difficulty": 0, + "level": 26, + "species": "SPECIES_MAGIKARP" + }, + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_GYARADOS" + }, + { + "difficulty": 0, + "level": 26, + "species": "SPECIES_MAGIKARP" + } + ] + }, + { + "index": 155, + "type": 0, + "class": 47, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 2, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + }, + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 156, + "type": 0, + "class": 42, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 157, + "type": 0, + "class": 42, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 158, + "type": 0, + "class": 43, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 159, + "type": 0, + "class": 42, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 26, + "species": "SPECIES_MANTYKE" + }, + { + "difficulty": 0, + "level": 29, + "species": "SPECIES_REMORAID" + }, + { + "difficulty": 0, + "level": 29, + "species": "SPECIES_TENTACOOL" + } + ] + }, + { + "index": 160, + "type": 0, + "class": 42, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_GYARADOS" + } + ] + }, + { + "index": 161, + "type": 0, + "class": 42, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 29, + "species": "SPECIES_PELIPPER" + }, + { + "difficulty": 0, + "level": 29, + "species": "SPECIES_WHISCASH" + } + ] + }, + { + "index": 162, + "type": 0, + "class": 43, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 28, + "species": "SPECIES_GOLDEEN" + }, + { + "difficulty": 0, + "level": 28, + "species": "SPECIES_GOLDEEN" + }, + { + "difficulty": 0, + "level": 28, + "species": "SPECIES_GOLDEEN" + }, + { + "difficulty": 0, + "level": 28, + "species": "SPECIES_GOLDEEN" + } + ] + }, + { + "index": 163, + "type": 0, + "class": 43, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 29, + "species": "SPECIES_REMORAID" + }, + { + "difficulty": 0, + "level": 29, + "species": "SPECIES_PSYDUCK" + } + ] + }, + { + "index": 164, + "type": 1, + "class": 43, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 28, + "species": "SPECIES_BUIZEL", + "moves": [ + "MOVE_AQUA_JET", + "MOVE_SONIC_BOOM", + "MOVE_QUICK_ATTACK", + "MOVE_ATTRACT" + ] + }, + { + "difficulty": 0, + "level": 28, + "species": "SPECIES_MEDICHAM", + "moves": [ + "MOVE_CONFUSION", + "MOVE_BRICK_BREAK", + "MOVE_MEDITATE", + "MOVE_LIGHT_SCREEN" + ] + }, + { + "difficulty": 0, + "level": 28, + "species": "SPECIES_SEAKING", + "moves": [ + "MOVE_WATER_PULSE", + "MOVE_HORN_ATTACK", + "MOVE_AQUA_RING", + "MOVE_CAPTIVATE" + ] + } + ] + }, + { + "index": 165, + "type": 0, + "class": 47, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 2, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + }, + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 166, + "type": 0, + "class": 42, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 30, + "species": "SPECIES_SHELLOS" + }, + { + "difficulty": 0, + "level": 32, + "species": "SPECIES_GASTRODON" + } + ] + }, + { + "index": 167, + "type": 0, + "class": 43, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 33, + "species": "SPECIES_GOLDUCK" + } + ] + }, + { + "index": 168, + "type": 0, + "class": 11, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 28, + "species": "SPECIES_MAGIKARP" + }, + { + "difficulty": 0, + "level": 30, + "species": "SPECIES_FINNEON" + }, + { + "difficulty": 0, + "level": 32, + "species": "SPECIES_GYARADOS" + } + ] + }, + { + "index": 169, + "type": 0, + "class": 48, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 170, + "type": 1, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 33, + "species": "SPECIES_STARAVIA", + "moves": [ + "MOVE_TAKE_DOWN", + "MOVE_AERIAL_ACE", + "MOVE_ENDEAVOR", + "MOVE_QUICK_ATTACK" + ] + }, + { + "difficulty": 50, + "level": 33, + "species": "SPECIES_GIRAFARIG", + "moves": [ + "MOVE_DOUBLE_HIT", + "MOVE_PSYBEAM", + "MOVE_GROWL" + ] + } + ] + }, + { + "index": 171, + "type": 1, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 30, + "species": "SPECIES_CHERRIM", + "moves": [ + "MOVE_PETAL_DANCE", + "MOVE_MAGICAL_LEAF", + "MOVE_LEECH_SEED" + ] + }, + { + "difficulty": 50, + "level": 32, + "species": "SPECIES_MARILL", + "moves": [ + "MOVE_DOUBLE_EDGE", + "MOVE_BUBBLE_BEAM", + "MOVE_AQUA_RING" + ] + }, + { + "difficulty": 50, + "level": 34, + "species": "SPECIES_LOPUNNY", + "moves": [ + "MOVE_JUMP_KICK", + "MOVE_QUICK_ATTACK", + "MOVE_DEFENSE_CURL" + ] + } + ] + }, + { + "index": 172, + "type": 0, + "class": 11, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 39, + "species": "SPECIES_MAGIKARP" + }, + { + "difficulty": 0, + "level": 42, + "species": "SPECIES_FINNEON" + }, + { + "difficulty": 0, + "level": 39, + "species": "SPECIES_FEEBAS" + } + ] + }, + { + "index": 173, + "type": 0, + "class": 11, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 40, + "species": "SPECIES_MAGIKARP" + }, + { + "difficulty": 0, + "level": 42, + "species": "SPECIES_GYARADOS" + } + ] + }, + { + "index": 174, + "type": 0, + "class": 11, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 38, + "species": "SPECIES_MAGIKARP" + }, + { + "difficulty": 0, + "level": 40, + "species": "SPECIES_FINNEON" + }, + { + "difficulty": 0, + "level": 40, + "species": "SPECIES_REMORAID" + }, + { + "difficulty": 0, + "level": 42, + "species": "SPECIES_GYARADOS" + } + ] + }, + { + "index": 175, + "type": 0, + "class": 11, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 41, + "species": "SPECIES_GYARADOS" + }, + { + "difficulty": 0, + "level": 38, + "species": "SPECIES_REMORAID" + }, + { + "difficulty": 0, + "level": 41, + "species": "SPECIES_GYARADOS" + } + ] + }, + { + "index": 176, + "type": 0, + "class": 57, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 177, + "type": 0, + "class": 57, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 178, + "type": 0, + "class": 52, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 179, + "type": 0, + "class": 58, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 180, + "type": 0, + "class": 46, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 37, + "species": "SPECIES_FEEBAS" + }, + { + "difficulty": 0, + "level": 40, + "species": "SPECIES_MACHOKE" + }, + { + "difficulty": 0, + "level": 43, + "species": "SPECIES_GASTRODON" + } + ] + }, + { + "index": 181, + "type": 0, + "class": 15, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 182, + "type": 0, + "class": 23, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 2, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + }, + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 183, + "type": 0, + "class": 42, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 41, + "species": "SPECIES_BUIZEL" + }, + { + "difficulty": 0, + "level": 41, + "species": "SPECIES_TENTACRUEL" + } + ] + }, + { + "index": 184, + "type": 0, + "class": 42, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 43, + "species": "SPECIES_TENTACRUEL" + } + ] + }, + { + "index": 185, + "type": 0, + "class": 42, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 40, + "species": "SPECIES_TENTACOOL" + }, + { + "difficulty": 0, + "level": 42, + "species": "SPECIES_GOLDUCK" + } + ] + }, + { + "index": 186, + "type": 0, + "class": 42, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 37, + "species": "SPECIES_WINGULL" + }, + { + "difficulty": 0, + "level": 42, + "species": "SPECIES_QUAGSIRE" + }, + { + "difficulty": 0, + "level": 41, + "species": "SPECIES_PELIPPER" + } + ] + }, + { + "index": 187, + "type": 0, + "class": 42, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 43, + "species": "SPECIES_GYARADOS" + } + ] + }, + { + "index": 188, + "type": 0, + "class": 42, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 38, + "species": "SPECIES_MANTYKE" + }, + { + "difficulty": 0, + "level": 40, + "species": "SPECIES_REMORAID" + }, + { + "difficulty": 0, + "level": 42, + "species": "SPECIES_MANTINE" + } + ] + }, + { + "index": 189, + "type": 0, + "class": 43, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 43, + "species": "SPECIES_LUMINEON" + } + ] + }, + { + "index": 190, + "type": 0, + "class": 43, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 41, + "species": "SPECIES_AZURILL" + }, + { + "difficulty": 0, + "level": 41, + "species": "SPECIES_AZUMARILL" + } + ] + }, + { + "index": 191, + "type": 0, + "class": 43, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 39, + "species": "SPECIES_MARILL" + }, + { + "difficulty": 0, + "level": 40, + "species": "SPECIES_WINGULL" + }, + { + "difficulty": 0, + "level": 41, + "species": "SPECIES_GOLDUCK" + } + ] + }, + { + "index": 192, + "type": 0, + "class": 43, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 41, + "species": "SPECIES_WINGULL" + }, + { + "difficulty": 0, + "level": 41, + "species": "SPECIES_SEAKING" + } + ] + }, + { + "index": 193, + "type": 0, + "class": 43, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 41, + "species": "SPECIES_FINNEON" + }, + { + "difficulty": 0, + "level": 41, + "species": "SPECIES_PELIPPER" + } + ] + }, + { + "index": 194, + "type": 0, + "class": 43, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 43, + "species": "SPECIES_GOLDUCK" + } + ] + }, + { + "index": 195, + "type": 1, + "class": 59, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 7, + "species": "SPECIES_GEODUDE", + "moves": [ + "MOVE_TACKLE", + "MOVE_DEFENSE_CURL", + "MOVE_MUD_SPORT" + ] + }, + { + "difficulty": 0, + "level": 7, + "species": "SPECIES_ONIX", + "moves": [ + "MOVE_ROCK_THROW", + "MOVE_TACKLE", + "MOVE_HARDEN" + ] + } + ] + }, + { + "index": 196, + "type": 1, + "class": 59, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 9, + "species": "SPECIES_MACHOP", + "moves": [ + "MOVE_ROCK_SMASH", + "MOVE_FOCUS_ENERGY" + ] + } + ] + }, + { + "index": 197, + "type": 0, + "class": 59, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 198, + "type": 0, + "class": 41, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 199, + "type": 0, + "class": 41, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 200, + "type": 0, + "class": 41, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 201, + "type": 0, + "class": 6, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 9, + "species": "SPECIES_WURMPLE" + }, + { + "difficulty": 0, + "level": 11, + "species": "SPECIES_SILCOON" + }, + { + "difficulty": 0, + "level": 13, + "species": "SPECIES_BEAUTIFLY" + } + ] + }, + { + "index": 202, + "type": 0, + "class": 6, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 9, + "species": "SPECIES_WURMPLE" + }, + { + "difficulty": 0, + "level": 11, + "species": "SPECIES_CASCOON" + }, + { + "difficulty": 0, + "level": 13, + "species": "SPECIES_DUSTOX" + } + ] + }, + { + "index": 203, + "type": 0, + "class": 6, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 12, + "species": "SPECIES_BURMY" + }, + { + "difficulty": 0, + "level": 12, + "species": "SPECIES_KRICKETUNE" + } + ] + }, + { + "index": 204, + "type": 0, + "class": 3, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 14, + "species": "SPECIES_PACHIRISU" + } + ] + }, + { + "index": 205, + "type": 1, + "class": 49, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_ABRA", + "moves": [ + "MOVE_HIDDEN_POWER" + ] + } + ] + }, + { + "index": 206, + "type": 1, + "class": 50, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_ABRA", + "moves": [ + "MOVE_HIDDEN_POWER" + ] + } + ] + }, + { + "index": 207, + "type": 0, + "class": 23, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 2, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + }, + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 208, + "type": 0, + "class": 59, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 209, + "type": 0, + "class": 59, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 210, + "type": 0, + "class": 59, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 211, + "type": 0, + "class": 53, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 212, + "type": 0, + "class": 53, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 213, + "type": 0, + "class": 54, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 214, + "type": 0, + "class": 54, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 215, + "type": 0, + "class": 27, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 216, + "type": 0, + "class": 27, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 217, + "type": 0, + "class": 49, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 218, + "type": 0, + "class": 50, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 219, + "type": 0, + "class": 29, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 220, + "type": 0, + "class": 46, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 221, + "type": 0, + "class": 60, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 222, + "type": 0, + "class": 61, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 223, + "type": 0, + "class": 23, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 2, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + }, + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 224, + "type": 1, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 45, + "species": "SPECIES_RAPIDASH", + "moves": [ + "MOVE_FIRE_BLAST", + "MOVE_STOMP", + "MOVE_QUICK_ATTACK", + "MOVE_GROWL" + ] + }, + { + "difficulty": 50, + "level": 45, + "species": "SPECIES_CARNIVINE", + "moves": [ + "MOVE_WRING_OUT", + "MOVE_CRUNCH", + "MOVE_FEINT_ATTACK", + "MOVE_INGRAIN" + ] + }, + { + "difficulty": 50, + "level": 48, + "species": "SPECIES_RAMPARDOS", + "moves": [ + "MOVE_HEAD_SMASH", + "MOVE_ZEN_HEADBUTT", + "MOVE_ANCIENT_POWER", + "MOVE_SCREECH" + ] + } + ] + }, + { + "index": 225, + "type": 1, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 49, + "species": "SPECIES_HONCHKROW", + "moves": [ + "MOVE_NIGHT_SLASH", + "MOVE_WING_ATTACK", + "MOVE_PURSUIT", + "MOVE_SWAGGER" + ] + } + ] + }, + { + "index": 226, + "type": 1, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 46, + "species": "SPECIES_GOLDUCK", + "moves": [ + "MOVE_ZEN_HEADBUTT", + "MOVE_CONFUSION", + "MOVE_DISABLE", + "MOVE_SCREECH" + ] + }, + { + "difficulty": 50, + "level": 48, + "species": "SPECIES_BLISSEY", + "moves": [ + "MOVE_DOUBLE_EDGE", + "MOVE_SING", + "MOVE_SOFT_BOILED", + "MOVE_LIGHT_SCREEN" + ] + } + ] + }, + { + "index": 227, + "type": 1, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 46, + "species": "SPECIES_CLEFABLE", + "moves": [ + "MOVE_METEOR_MASH", + "MOVE_REFLECT", + "MOVE_LIGHT_SCREEN", + "MOVE_GRAVITY" + ] + }, + { + "difficulty": 50, + "level": 48, + "species": "SPECIES_TORTERRA", + "moves": [ + "MOVE_EARTHQUAKE", + "MOVE_CRUNCH", + "MOVE_LEECH_SEED", + "MOVE_SYNTHESIS" + ] + } + ] + }, + { + "index": 228, + "type": 1, + "class": 27, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 100, + "level": 45, + "species": "SPECIES_TENTACRUEL", + "moves": [ + "MOVE_SLUDGE_BOMB", + "MOVE_WATER_PULSE", + "MOVE_TOXIC_SPIKES", + "MOVE_SCREECH" + ] + }, + { + "difficulty": 100, + "level": 45, + "species": "SPECIES_GOLEM", + "moves": [ + "MOVE_EARTHQUAKE", + "MOVE_STONE_EDGE", + "MOVE_DOUBLE_EDGE", + "MOVE_ROCK_POLISH" + ] + }, + { + "difficulty": 100, + "level": 48, + "species": "SPECIES_EMPOLEON", + "moves": [ + "MOVE_BRINE", + "MOVE_DRILL_PECK", + "MOVE_METAL_CLAW", + "MOVE_GROWL" + ] + } + ] + }, + { + "index": 229, + "type": 1, + "class": 27, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 100, + "level": 47, + "species": "SPECIES_STARAPTOR", + "moves": [ + "MOVE_BRAVE_BIRD", + "MOVE_QUICK_ATTACK", + "MOVE_DOUBLE_TEAM", + "MOVE_GROWL" + ] + }, + { + "difficulty": 100, + "level": 47, + "species": "SPECIES_HIPPOWDON", + "moves": [ + "MOVE_EARTHQUAKE", + "MOVE_CRUNCH", + "MOVE_SAND_TOMB", + "MOVE_YAWN" + ] + } + ] + }, + { + "index": 230, + "type": 0, + "class": 29, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 49, + "species": "SPECIES_GABITE" + } + ] + }, + { + "index": 231, + "type": 0, + "class": 29, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 46, + "species": "SPECIES_GIBLE" + }, + { + "difficulty": 50, + "level": 49, + "species": "SPECIES_GYARADOS" + }, + { + "difficulty": 50, + "level": 46, + "species": "SPECIES_GIBLE" + } + ] + }, + { + "index": 232, + "type": 1, + "class": 14, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 40, + "level": 30, + "species": "SPECIES_ONIX", + "moves": [ + "MOVE_IRON_TAIL", + "MOVE_ROCK_THROW", + "MOVE_SANDSTORM", + "MOVE_SCREECH" + ] + }, + { + "difficulty": 40, + "level": 32, + "species": "SPECIES_STEELIX", + "moves": [ + "MOVE_SLAM", + "MOVE_ROCK_SLIDE", + "MOVE_SANDSTORM", + "MOVE_SCREECH" + ] + } + ] + }, + { + "index": 233, + "type": 0, + "class": 30, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 46, + "species": "SPECIES_NOCTOWL" + }, + { + "difficulty": 0, + "level": 48, + "species": "SPECIES_STARAPTOR" + } + ] + }, + { + "index": 234, + "type": 0, + "class": 49, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 43, + "species": "SPECIES_HAUNTER" + }, + { + "difficulty": 0, + "level": 46, + "species": "SPECIES_ALAKAZAM" + }, + { + "difficulty": 0, + "level": 46, + "species": "SPECIES_GENGAR" + } + ] + }, + { + "index": 235, + "type": 0, + "class": 50, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 44, + "species": "SPECIES_CHINGLING" + }, + { + "difficulty": 0, + "level": 48, + "species": "SPECIES_CHIMECHO" + } + ] + }, + { + "index": 236, + "type": 0, + "class": 31, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 2, + "party": [ + { + "difficulty": 0, + "level": 47, + "species": "SPECIES_GYARADOS" + }, + { + "difficulty": 0, + "level": 47, + "species": "SPECIES_MEDICHAM" + } + ] + }, + { + "index": 237, + "type": 0, + "class": 31, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 2, + "party": [ + { + "difficulty": 0, + "level": 47, + "species": "SPECIES_STARAPTOR" + }, + { + "difficulty": 0, + "level": 47, + "species": "SPECIES_WHISCASH" + } + ] + }, + { + "index": 238, + "type": 0, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 239, + "type": 0, + "class": 3, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 240, + "type": 1, + "class": 27, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 100, + "level": 33, + "species": "SPECIES_RIOLU", + "moves": [ + "MOVE_FORCE_PALM", + "MOVE_QUICK_ATTACK", + "MOVE_COUNTER", + "MOVE_SCREECH" + ] + }, + { + "difficulty": 100, + "level": 34, + "species": "SPECIES_STARAPTOR", + "moves": [ + "MOVE_AERIAL_ACE", + "MOVE_TAKE_DOWN", + "MOVE_QUICK_ATTACK", + "MOVE_GROWL" + ] + }, + { + "difficulty": 100, + "level": 35, + "species": "SPECIES_GRAVELER", + "moves": [ + "MOVE_EARTHQUAKE", + "MOVE_ROCK_SLIDE", + "MOVE_ROCK_POLISH", + "MOVE_DEFENSE_CURL" + ] + } + ] + }, + { + "index": 241, + "type": 0, + "class": 11, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 242, + "type": 0, + "class": 46, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 243, + "type": 0, + "class": 36, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 244, + "type": 1, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 10, + "species": "SPECIES_GEODUDE", + "moves": [ + "MOVE_TACKLE", + "MOVE_DEFENSE_CURL" + ] + } + ] + }, + { + "index": 245, + "type": 1, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 8, + "species": "SPECIES_GEODUDE", + "moves": [ + "MOVE_TACKLE", + "MOVE_DEFENSE_CURL" + ] + }, + { + "difficulty": 10, + "level": 8, + "species": "SPECIES_ONIX", + "moves": [ + "MOVE_ROCK_THROW", + "MOVE_TACKLE", + "MOVE_HARDEN" + ] + } + ] + }, + { + "index": 246, + "type": 1, + "class": 62, + "unk2": 0, + "items": [ + "ITEM_POTION", + "ITEM_POTION" + ], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 12, + "species": "SPECIES_GEODUDE", + "moves": [ + "MOVE_STEALTH_ROCK", + "MOVE_ROCK_THROW" + ] + }, + { + "difficulty": 50, + "level": 12, + "species": "SPECIES_ONIX", + "moves": [ + "MOVE_STEALTH_ROCK", + "MOVE_ROCK_THROW", + "MOVE_SCREECH" + ] + }, + { + "difficulty": 50, + "level": 14, + "species": "SPECIES_CRANIDOS", + "moves": [ + "MOVE_HEADBUTT", + "MOVE_PURSUIT", + "MOVE_LEER" + ] + } + ] + }, + { + "index": 247, + "type": 1, + "class": 63, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 7, + "species": "SPECIES_STARLY", + "moves": [ + "MOVE_QUICK_ATTACK", + "MOVE_GROWL" + ] + }, + { + "difficulty": 30, + "level": 9, + "species": "SPECIES_TURTWIG", + "moves": [ + "MOVE_TACKLE", + "MOVE_WITHDRAW" + ] + } + ] + }, + { + "index": 248, + "type": 1, + "class": 63, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 7, + "species": "SPECIES_STARLY", + "moves": [ + "MOVE_QUICK_ATTACK", + "MOVE_GROWL" + ] + }, + { + "difficulty": 30, + "level": 9, + "species": "SPECIES_CHIMCHAR", + "moves": [ + "MOVE_SCRATCH", + "MOVE_LEER" + ] + } + ] + }, + { + "index": 249, + "type": 1, + "class": 63, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 7, + "species": "SPECIES_STARLY", + "moves": [ + "MOVE_QUICK_ATTACK", + "MOVE_GROWL" + ] + }, + { + "difficulty": 30, + "level": 9, + "species": "SPECIES_PIPLUP", + "moves": [ + "MOVE_POUND", + "MOVE_GROWL" + ] + } + ] + }, + { + "index": 250, + "type": 3, + "class": 64, + "unk2": 0, + "items": [ + "ITEM_HYPER_POTION", + "ITEM_FULL_RESTORE" + ], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 150, + "level": 36, + "species": "SPECIES_BRONZOR", + "item": "ITEM_NONE", + "moves": [ + "MOVE_FLASH_CANNON", + "MOVE_EXTRASENSORY", + "MOVE_CONFUSE_RAY", + "MOVE_HYPNOSIS" + ] + }, + { + "difficulty": 150, + "level": 36, + "species": "SPECIES_STEELIX", + "item": "ITEM_NONE", + "moves": [ + "MOVE_GYRO_BALL", + "MOVE_ICE_FANG", + "MOVE_DRAGON_BREATH", + "MOVE_SANDSTORM" + ] + }, + { + "difficulty": 150, + "level": 39, + "species": "SPECIES_BASTIODON", + "item": "ITEM_CHESTO_BERRY", + "moves": [ + "MOVE_FLASH_CANNON", + "MOVE_ANCIENT_POWER", + "MOVE_IRON_DEFENSE", + "MOVE_REST" + ] + } + ] + }, + { + "index": 251, + "type": 0, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 252, + "type": 0, + "class": 4, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 253, + "type": 0, + "class": 4, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 254, + "type": 0, + "class": 4, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 255, + "type": 0, + "class": 4, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 256, + "type": 1, + "class": 59, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 28, + "species": "SPECIES_ONIX", + "moves": [ + "MOVE_IRON_TAIL", + "MOVE_SLAM", + "MOVE_DIG" + ] + }, + { + "difficulty": 10, + "level": 28, + "species": "SPECIES_ONIX", + "moves": [ + "MOVE_IRON_TAIL", + "MOVE_SLAM", + "MOVE_DIG" + ] + }, + { + "difficulty": 10, + "level": 28, + "species": "SPECIES_ONIX", + "moves": [ + "MOVE_IRON_TAIL", + "MOVE_SLAM", + "MOVE_DIG" + ] + } + ] + }, + { + "index": 257, + "type": 1, + "class": 59, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 31, + "species": "SPECIES_ONIX", + "moves": [ + "MOVE_IRON_TAIL", + "MOVE_SLAM", + "MOVE_DIG" + ] + } + ] + }, + { + "index": 258, + "type": 0, + "class": 14, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 40, + "species": "SPECIES_MACHOKE" + } + ] + }, + { + "index": 259, + "type": 1, + "class": 7, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 14, + "species": "SPECIES_BUDEW", + "moves": [ + "MOVE_ABSORB", + "MOVE_STUN_SPORE", + "MOVE_WATER_SPORT" + ] + }, + { + "difficulty": 10, + "level": 13, + "species": "SPECIES_BUDEW", + "moves": [ + "MOVE_ABSORB", + "MOVE_STUN_SPORE", + "MOVE_WATER_SPORT" + ] + }, + { + "difficulty": 10, + "level": 15, + "species": "SPECIES_BUDEW", + "moves": [ + "MOVE_ABSORB", + "MOVE_STUN_SPORE", + "MOVE_WATER_SPORT" + ] + } + ] + }, + { + "index": 260, + "type": 1, + "class": 7, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 17, + "species": "SPECIES_TURTWIG", + "moves": [ + "MOVE_RAZOR_LEAF", + "MOVE_TACKLE" + ] + } + ] + }, + { + "index": 261, + "type": 3, + "class": 65, + "unk2": 0, + "items": [ + "ITEM_FULL_RESTORE", + "ITEM_FULL_RESTORE" + ], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 250, + "level": 53, + "species": "SPECIES_DUSTOX", + "item": "ITEM_NONE", + "moves": [ + "MOVE_TOXIC", + "MOVE_BUG_BUZZ", + "MOVE_DOUBLE_TEAM", + "MOVE_LIGHT_SCREEN" + ] + }, + { + "difficulty": 250, + "level": 53, + "species": "SPECIES_BEAUTIFLY", + "item": "ITEM_NONE", + "moves": [ + "MOVE_ENERGY_BALL", + "MOVE_BUG_BUZZ", + "MOVE_PSYCHIC", + "MOVE_SHADOW_BALL" + ] + }, + { + "difficulty": 250, + "level": 54, + "species": "SPECIES_VESPIQUEN", + "item": "ITEM_NONE", + "moves": [ + "MOVE_ATTACK_ORDER", + "MOVE_DEFEND_ORDER", + "MOVE_HEAL_ORDER", + "MOVE_POWER_GEM" + ] + }, + { + "difficulty": 250, + "level": 54, + "species": "SPECIES_HERACROSS", + "item": "ITEM_NONE", + "moves": [ + "MOVE_MEGAHORN", + "MOVE_CLOSE_COMBAT", + "MOVE_NIGHT_SLASH", + "MOVE_STONE_EDGE" + ] + }, + { + "difficulty": 250, + "level": 57, + "species": "SPECIES_DRAPION", + "item": "ITEM_SITRUS_BERRY", + "moves": [ + "MOVE_X_SCISSOR", + "MOVE_CROSS_POISON", + "MOVE_ICE_FANG", + "MOVE_AERIAL_ACE" + ] + } + ] + }, + { + "index": 262, + "type": 3, + "class": 66, + "unk2": 0, + "items": [ + "ITEM_FULL_RESTORE", + "ITEM_FULL_RESTORE" + ], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 250, + "level": 55, + "species": "SPECIES_QUAGSIRE", + "item": "ITEM_NONE", + "moves": [ + "MOVE_DIG", + "MOVE_DOUBLE_TEAM", + "MOVE_PROTECT", + "MOVE_SANDSTORM" + ] + }, + { + "difficulty": 250, + "level": 56, + "species": "SPECIES_SUDOWOODO", + "item": "ITEM_NONE", + "moves": [ + "MOVE_EARTHQUAKE", + "MOVE_SUCKER_PUNCH", + "MOVE_HAMMER_ARM", + "MOVE_SANDSTORM" + ] + }, + { + "difficulty": 250, + "level": 56, + "species": "SPECIES_GOLEM", + "item": "ITEM_NONE", + "moves": [ + "MOVE_EARTHQUAKE", + "MOVE_GYRO_BALL", + "MOVE_BRICK_BREAK", + "MOVE_SANDSTORM" + ] + }, + { + "difficulty": 250, + "level": 55, + "species": "SPECIES_WHISCASH", + "item": "ITEM_NONE", + "moves": [ + "MOVE_FISSURE", + "MOVE_AQUA_TAIL", + "MOVE_ZEN_HEADBUTT", + "MOVE_ROCK_SLIDE" + ] + }, + { + "difficulty": 250, + "level": 59, + "species": "SPECIES_HIPPOWDON", + "item": "ITEM_SITRUS_BERRY", + "moves": [ + "MOVE_EARTHQUAKE", + "MOVE_STONE_EDGE", + "MOVE_CRUNCH", + "MOVE_CURSE" + ] + } + ] + }, + { + "index": 263, + "type": 3, + "class": 67, + "unk2": 0, + "items": [ + "ITEM_FULL_RESTORE", + "ITEM_FULL_RESTORE" + ], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 250, + "level": 58, + "species": "SPECIES_RAPIDASH", + "item": "ITEM_NONE", + "moves": [ + "MOVE_FLARE_BLITZ", + "MOVE_SOLAR_BEAM", + "MOVE_BOUNCE", + "MOVE_SUNNY_DAY" + ] + }, + { + "difficulty": 250, + "level": 57, + "species": "SPECIES_STEELIX", + "item": "ITEM_NONE", + "moves": [ + "MOVE_FIRE_FANG", + "MOVE_ROCK_TOMB", + "MOVE_SCREECH", + "MOVE_SUNNY_DAY" + ] + }, + { + "difficulty": 250, + "level": 58, + "species": "SPECIES_DRIFBLIM", + "item": "ITEM_NONE", + "moves": [ + "MOVE_WILL_O_WISP", + "MOVE_OMINOUS_WIND", + "MOVE_DOUBLE_TEAM", + "MOVE_BATON_PASS" + ] + }, + { + "difficulty": 250, + "level": 57, + "species": "SPECIES_LOPUNNY", + "item": "ITEM_NONE", + "moves": [ + "MOVE_FIRE_PUNCH", + "MOVE_CHARM", + "MOVE_MIRROR_COAT", + "MOVE_SUNNY_DAY" + ] + }, + { + "difficulty": 250, + "level": 61, + "species": "SPECIES_INFERNAPE", + "item": "ITEM_SITRUS_BERRY", + "moves": [ + "MOVE_FLARE_BLITZ", + "MOVE_THUNDER_PUNCH", + "MOVE_MACH_PUNCH", + "MOVE_EARTHQUAKE" + ] + } + ] + }, + { + "index": 264, + "type": 3, + "class": 68, + "unk2": 0, + "items": [ + "ITEM_FULL_RESTORE", + "ITEM_FULL_RESTORE" + ], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 250, + "level": 59, + "species": "SPECIES_MR_MIME", + "item": "ITEM_NONE", + "moves": [ + "MOVE_PSYCHIC", + "MOVE_THUNDERBOLT", + "MOVE_REFLECT", + "MOVE_LIGHT_SCREEN" + ] + }, + { + "difficulty": 250, + "level": 59, + "species": "SPECIES_GIRAFARIG", + "item": "ITEM_NONE", + "moves": [ + "MOVE_PSYCHIC", + "MOVE_SHADOW_BALL", + "MOVE_DOUBLE_HIT", + "MOVE_CRUNCH" + ] + }, + { + "difficulty": 250, + "level": 60, + "species": "SPECIES_MEDICHAM", + "item": "ITEM_NONE", + "moves": [ + "MOVE_DRAIN_PUNCH", + "MOVE_FIRE_PUNCH", + "MOVE_THUNDER_PUNCH", + "MOVE_ICE_PUNCH" + ] + }, + { + "difficulty": 250, + "level": 60, + "species": "SPECIES_ALAKAZAM", + "item": "ITEM_NONE", + "moves": [ + "MOVE_PSYCHIC", + "MOVE_ENERGY_BALL", + "MOVE_FOCUS_BLAST", + "MOVE_RECOVER" + ] + }, + { + "difficulty": 250, + "level": 63, + "species": "SPECIES_BRONZONG", + "item": "ITEM_SITRUS_BERRY", + "moves": [ + "MOVE_PSYCHIC", + "MOVE_GYRO_BALL", + "MOVE_EARTHQUAKE", + "MOVE_CALM_MIND" + ] + } + ] + }, + { + "index": 265, + "type": 0, + "class": 4, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 7, + "species": "SPECIES_SHINX" + } + ] + }, + { + "index": 266, + "type": 1, + "class": 4, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 27, + "species": "SPECIES_GASTLY", + "moves": [ + "MOVE_PAYBACK", + "MOVE_SUCKER_PUNCH", + "MOVE_CONFUSE_RAY" + ] + }, + { + "difficulty": 10, + "level": 27, + "species": "SPECIES_GASTLY", + "moves": [ + "MOVE_SUCKER_PUNCH", + "MOVE_NIGHT_SHADE", + "MOVE_CONFUSE_RAY" + ] + }, + { + "difficulty": 10, + "level": 27, + "species": "SPECIES_GASTLY", + "moves": [ + "MOVE_NIGHT_SHADE", + "MOVE_PAYBACK", + "MOVE_CONFUSE_RAY" + ] + } + ] + }, + { + "index": 267, + "type": 3, + "class": 69, + "unk2": 0, + "items": [ + "ITEM_FULL_RESTORE", + "ITEM_FULL_RESTORE", + "ITEM_FULL_RESTORE", + "ITEM_FULL_RESTORE" + ], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 250, + "level": 61, + "species": "SPECIES_SPIRITOMB", + "item": "ITEM_NONE", + "moves": [ + "MOVE_DARK_PULSE", + "MOVE_PSYCHIC", + "MOVE_SILVER_WIND", + "MOVE_EMBARGO" + ] + }, + { + "difficulty": 250, + "level": 60, + "species": "SPECIES_ROSERADE", + "item": "ITEM_NONE", + "moves": [ + "MOVE_ENERGY_BALL", + "MOVE_SLUDGE_BOMB", + "MOVE_SHADOW_BALL", + "MOVE_EXTRASENSORY" + ] + }, + { + "difficulty": 250, + "level": 60, + "species": "SPECIES_GASTRODON", + "item": "ITEM_NONE", + "moves": [ + "MOVE_MUDDY_WATER", + "MOVE_EARTHQUAKE", + "MOVE_STONE_EDGE", + "MOVE_SLUDGE_BOMB" + ] + }, + { + "difficulty": 250, + "level": 63, + "species": "SPECIES_LUCARIO", + "item": "ITEM_NONE", + "moves": [ + "MOVE_AURA_SPHERE", + "MOVE_DRAGON_PULSE", + "MOVE_PSYCHIC", + "MOVE_EARTHQUAKE" + ] + }, + { + "difficulty": 250, + "level": 63, + "species": "SPECIES_MILOTIC", + "item": "ITEM_NONE", + "moves": [ + "MOVE_SURF", + "MOVE_ICE_BEAM", + "MOVE_MIRROR_COAT", + "MOVE_AQUA_RING" + ] + }, + { + "difficulty": 250, + "level": 66, + "species": "SPECIES_GARCHOMP", + "item": "ITEM_SITRUS_BERRY", + "moves": [ + "MOVE_DRAGON_RUSH", + "MOVE_EARTHQUAKE", + "MOVE_BRICK_BREAK", + "MOVE_GIGA_IMPACT" + ] + } + ] + }, + { + "index": 268, + "type": 1, + "class": 53, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 60, + "level": 37, + "species": "SPECIES_FLOATZEL", + "moves": [ + "MOVE_AQUA_JET", + "MOVE_CRUNCH", + "MOVE_QUICK_ATTACK", + "MOVE_ICE_FANG" + ] + }, + { + "difficulty": 60, + "level": 37, + "species": "SPECIES_SNEASEL", + "moves": [ + "MOVE_ICY_WIND", + "MOVE_SLASH", + "MOVE_FEINT_ATTACK", + "MOVE_QUICK_ATTACK" + ] + } + ] + }, + { + "index": 269, + "type": 1, + "class": 53, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 60, + "level": 39, + "species": "SPECIES_QUAGSIRE", + "moves": [ + "MOVE_EARTHQUAKE", + "MOVE_WATER_PULSE", + "MOVE_AMNESIA", + "MOVE_YAWN" + ] + } + ] + }, + { + "index": 270, + "type": 1, + "class": 54, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 60, + "level": 35, + "species": "SPECIES_PELIPPER", + "moves": [ + "MOVE_WATER_PULSE", + "MOVE_WING_ATTACK", + "MOVE_SUPERSONIC", + "MOVE_ROOST" + ] + }, + { + "difficulty": 60, + "level": 36, + "species": "SPECIES_GOLDUCK", + "moves": [ + "MOVE_WATER_PULSE", + "MOVE_CONFUSION", + "MOVE_DISABLE", + "MOVE_SCREECH" + ] + }, + { + "difficulty": 60, + "level": 37, + "species": "SPECIES_STEELIX", + "moves": [ + "MOVE_ICE_FANG", + "MOVE_ROCK_TOMB", + "MOVE_HARDEN", + "MOVE_SCREECH" + ] + } + ] + }, + { + "index": 271, + "type": 1, + "class": 54, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 60, + "level": 37, + "species": "SPECIES_SNEASEL", + "moves": [ + "MOVE_ICY_WIND", + "MOVE_SLASH", + "MOVE_SCREECH", + "MOVE_LEER" + ] + }, + { + "difficulty": 60, + "level": 37, + "species": "SPECIES_TENTACRUEL", + "moves": [ + "MOVE_WATER_PULSE", + "MOVE_POISON_JAB", + "MOVE_BARRIER" + ] + } + ] + }, + { + "index": 272, + "type": 0, + "class": 37, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 20, + "species": "SPECIES_ROSELIA" + }, + { + "difficulty": 0, + "level": 22, + "species": "SPECIES_ROSELIA" + }, + { + "difficulty": 0, + "level": 24, + "species": "SPECIES_ROSELIA" + } + ] + }, + { + "index": 273, + "type": 0, + "class": 37, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 22, + "species": "SPECIES_PONYTA" + }, + { + "difficulty": 0, + "level": 20, + "species": "SPECIES_PONYTA" + }, + { + "difficulty": 0, + "level": 24, + "species": "SPECIES_PONYTA" + } + ] + }, + { + "index": 274, + "type": 0, + "class": 37, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 28, + "species": "SPECIES_HIPPOPOTAS" + }, + { + "difficulty": 0, + "level": 28, + "species": "SPECIES_HIPPOPOTAS" + }, + { + "difficulty": 0, + "level": 34, + "species": "SPECIES_HIPPOPOTAS" + } + ] + }, + { + "index": 275, + "type": 0, + "class": 37, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_MR_MIME" + }, + { + "difficulty": 0, + "level": 20, + "species": "SPECIES_MR_MIME" + }, + { + "difficulty": 0, + "level": 20, + "species": "SPECIES_MR_MIME" + } + ] + }, + { + "index": 276, + "type": 0, + "class": 37, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_SUDOWOODO" + }, + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_SUDOWOODO" + }, + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_SUDOWOODO" + } + ] + }, + { + "index": 277, + "type": 0, + "class": 29, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 53, + "species": "SPECIES_SWABLU" + }, + { + "difficulty": 50, + "level": 57, + "species": "SPECIES_ALTARIA" + } + ] + }, + { + "index": 278, + "type": 1, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 23, + "species": "SPECIES_MONFERNO", + "moves": [ + "MOVE_FLAME_WHEEL", + "MOVE_MACH_PUNCH", + "MOVE_TAUNT", + "MOVE_TORMENT" + ] + }, + { + "difficulty": 50, + "level": 23, + "species": "SPECIES_GYARADOS", + "moves": [ + "MOVE_BITE", + "MOVE_THRASH" + ] + } + ] + }, + { + "index": 279, + "type": 1, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 60, + "level": 30, + "species": "SPECIES_SKORUPI", + "moves": [ + "MOVE_IRON_TAIL", + "MOVE_ACUPRESSURE", + "MOVE_PIN_MISSILE", + "MOVE_POISON_STING" + ] + }, + { + "difficulty": 60, + "level": 32, + "species": "SPECIES_STEELIX", + "moves": [ + "MOVE_IRON_TAIL", + "MOVE_SCREECH", + "MOVE_ROCK_THROW", + "MOVE_SANDSTORM" + ] + } + ] + }, + { + "index": 280, + "type": 1, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 60, + "level": 26, + "species": "SPECIES_GASTLY", + "moves": [ + "MOVE_SHADOW_BALL", + "MOVE_SUCKER_PUNCH", + "MOVE_CURSE", + "MOVE_CONFUSE_RAY" + ] + }, + { + "difficulty": 60, + "level": 28, + "species": "SPECIES_HAUNTER", + "moves": [ + "MOVE_SHADOW_BALL", + "MOVE_SUCKER_PUNCH", + "MOVE_HYPNOSIS", + "MOVE_CONFUSE_RAY" + ] + }, + { + "difficulty": 60, + "level": 30, + "species": "SPECIES_GENGAR", + "moves": [ + "MOVE_SHADOW_BALL", + "MOVE_CONFUSE_RAY", + "MOVE_CURSE", + "MOVE_MEAN_LOOK" + ] + } + ] + }, + { + "index": 281, + "type": 1, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 60, + "level": 44, + "species": "SPECIES_STEELIX", + "moves": [ + "MOVE_THUNDER_FANG", + "MOVE_ROCK_THROW", + "MOVE_SCREECH", + "MOVE_HARDEN" + ] + }, + { + "difficulty": 60, + "level": 44, + "species": "SPECIES_MEDICHAM", + "moves": [ + "MOVE_THUNDER_PUNCH", + "MOVE_MEDITATE", + "MOVE_DETECT" + ] + } + ] + }, + { + "index": 282, + "type": 1, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 54, + "species": "SPECIES_POLIWHIRL", + "moves": [ + "MOVE_HYDRO_PUMP", + "MOVE_WAKE_UP_SLAP", + "MOVE_HYPNOSIS" + ] + }, + { + "difficulty": 50, + "level": 54, + "species": "SPECIES_GYARADOS", + "moves": [ + "MOVE_HYPER_BEAM", + "MOVE_HYDRO_PUMP", + "MOVE_DRAGON_DANCE", + "MOVE_ICE_FANG" + ] + } + ] + }, + { + "index": 283, + "type": 1, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 60, + "level": 33, + "species": "SPECIES_AZUMARILL", + "moves": [ + "MOVE_IRON_TAIL", + "MOVE_ATTRACT", + "MOVE_TAIL_WHIP", + "MOVE_DEFENSE_CURL" + ] + } + ] + }, + { + "index": 284, + "type": 1, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 60, + "level": 30, + "species": "SPECIES_MISDREAVUS", + "moves": [ + "MOVE_PSYBEAM", + "MOVE_PAIN_SPLIT", + "MOVE_CONFUSE_RAY", + "MOVE_SPITE" + ] + }, + { + "difficulty": 60, + "level": 30, + "species": "SPECIES_DRIFBLIM", + "moves": [ + "MOVE_STOCKPILE", + "MOVE_SWALLOW", + "MOVE_SPIT_UP", + "MOVE_PAYBACK" + ] + } + ] + }, + { + "index": 285, + "type": 1, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 60, + "level": 44, + "species": "SPECIES_KADABRA", + "moves": [ + "MOVE_PSYCHIC", + "MOVE_REFLECT", + "MOVE_DISABLE", + "MOVE_RECOVER" + ] + }, + { + "difficulty": 60, + "level": 44, + "species": "SPECIES_RAICHU", + "moves": [ + "MOVE_THUNDERBOLT", + "MOVE_DIG", + "MOVE_THUNDER_WAVE", + "MOVE_LIGHT_SCREEN" + ] + } + ] + }, + { + "index": 286, + "type": 1, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 56, + "species": "SPECIES_METAGROSS", + "moves": [ + "MOVE_METEOR_MASH", + "MOVE_HAMMER_ARM", + "MOVE_PSYCHIC", + "MOVE_MAGNET_RISE" + ] + } + ] + }, + { + "index": 287, + "type": 1, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 23, + "species": "SPECIES_GLAMEOW", + "moves": [ + "MOVE_FURY_SWIPES", + "MOVE_FEINT_ATTACK", + "MOVE_HYPNOSIS", + "MOVE_GROWL" + ] + }, + { + "difficulty": 50, + "level": 23, + "species": "SPECIES_KADABRA", + "moves": [ + "MOVE_CONFUSION", + "MOVE_DISABLE", + "MOVE_MIRACLE_EYE" + ] + } + ] + }, + { + "index": 288, + "type": 0, + "class": 49, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 52, + "species": "SPECIES_MISDREAVUS" + }, + { + "difficulty": 0, + "level": 54, + "species": "SPECIES_HAUNTER" + } + ] + }, + { + "index": 289, + "type": 0, + "class": 50, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 52, + "species": "SPECIES_MEDICHAM" + }, + { + "difficulty": 0, + "level": 54, + "species": "SPECIES_ALAKAZAM" + } + ] + }, + { + "index": 290, + "type": 0, + "class": 70, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 2, + "party": [ + { + "difficulty": 0, + "level": 21, + "species": "SPECIES_STUNKY" + }, + { + "difficulty": 0, + "level": 21, + "species": "SPECIES_GLAMEOW" + } + ] + }, + { + "index": 291, + "type": 0, + "class": 71, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 292, + "type": 0, + "class": 71, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 18, + "species": "SPECIES_AIPOM" + }, + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_PSYDUCK" + }, + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_GIRAFARIG" + } + ] + }, + { + "index": 293, + "type": 1, + "class": 11, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 22, + "species": "SPECIES_GOLDEEN", + "moves": [ + "MOVE_WATER_PULSE", + "MOVE_PECK", + "MOVE_FLAIL", + "MOVE_SUPERSONIC" + ] + }, + { + "difficulty": 10, + "level": 23, + "species": "SPECIES_BARBOACH", + "moves": [ + "MOVE_WATER_PULSE", + "MOVE_MUD_BOMB", + "MOVE_MUD_SPORT" + ] + }, + { + "difficulty": 10, + "level": 24, + "species": "SPECIES_GYARADOS", + "moves": [ + "MOVE_THRASH", + "MOVE_BITE" + ] + } + ] + }, + { + "index": 294, + "type": 0, + "class": 8, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 2, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_BONSLY" + }, + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_MIME_JR" + } + ] + }, + { + "index": 295, + "type": 3, + "class": 72, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 100, + "level": 14, + "species": "SPECIES_ZUBAT", + "item": "ITEM_NONE", + "moves": [ + "MOVE_BITE", + "MOVE_LEECH_LIFE", + "MOVE_TOXIC" + ] + }, + { + "difficulty": 100, + "level": 16, + "species": "SPECIES_PURUGLY", + "item": "ITEM_ORAN_BERRY", + "moves": [ + "MOVE_FEINT_ATTACK", + "MOVE_SCRATCH", + "MOVE_FAKE_OUT" + ] + } + ] + }, + { + "index": 296, + "type": 1, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 9, + "species": "SPECIES_WURMPLE", + "moves": [ + "MOVE_TACKLE", + "MOVE_STRING_SHOT" + ] + }, + { + "difficulty": 30, + "level": 9, + "species": "SPECIES_SILCOON", + "moves": [ + "MOVE_TACKLE", + "MOVE_HARDEN" + ] + } + ] + }, + { + "index": 297, + "type": 1, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 11, + "species": "SPECIES_ZUBAT", + "moves": [ + "MOVE_LEECH_LIFE", + "MOVE_ASTONISH" + ] + } + ] + }, + { + "index": 298, + "type": 1, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 11, + "species": "SPECIES_CASCOON", + "moves": [ + "MOVE_TACKLE", + "MOVE_HARDEN", + "MOVE_POISON_STING" + ] + } + ] + }, + { + "index": 299, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 10, + "species": "SPECIES_WURMPLE" + }, + { + "difficulty": 30, + "level": 10, + "species": "SPECIES_GLAMEOW" + } + ] + }, + { + "index": 300, + "type": 0, + "class": 52, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_LUXIO" + } + ] + }, + { + "index": 301, + "type": 1, + "class": 52, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 44, + "species": "SPECIES_LUXIO", + "moves": [ + "MOVE_THUNDER_FANG", + "MOVE_CRUNCH", + "MOVE_LEER" + ] + } + ] + }, + { + "index": 302, + "type": 1, + "class": 52, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 42, + "species": "SPECIES_LUXIO", + "moves": [ + "MOVE_THUNDER_FANG", + "MOVE_CRUNCH", + "MOVE_LEER" + ] + }, + { + "difficulty": 10, + "level": 42, + "species": "SPECIES_BIBAREL", + "moves": [ + "MOVE_THUNDERBOLT", + "MOVE_WATER_PULSE", + "MOVE_SUPER_FANG", + "MOVE_THUNDER_WAVE" + ] + } + ] + }, + { + "index": 303, + "type": 1, + "class": 52, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 44, + "species": "SPECIES_RAICHU", + "moves": [ + "MOVE_THUNDERBOLT", + "MOVE_SLAM", + "MOVE_THUNDER_WAVE", + "MOVE_QUICK_ATTACK" + ] + } + ] + }, + { + "index": 304, + "type": 0, + "class": 48, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 21, + "species": "SPECIES_BRONZOR" + }, + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_SHIELDON" + } + ] + }, + { + "index": 305, + "type": 0, + "class": 48, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 54, + "species": "SPECIES_STEELIX" + } + ] + }, + { + "index": 306, + "type": 0, + "class": 19, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 21, + "species": "SPECIES_PONYTA" + } + ] + }, + { + "index": 307, + "type": 0, + "class": 19, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_LUXIO" + }, + { + "difficulty": 0, + "level": 21, + "species": "SPECIES_STARAVIA" + }, + { + "difficulty": 0, + "level": 20, + "species": "SPECIES_PONYTA" + } + ] + }, + { + "index": 308, + "type": 0, + "class": 19, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_STARAVIA" + } + ] + }, + { + "index": 309, + "type": 1, + "class": 14, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 40, + "level": 25, + "species": "SPECIES_MACHOKE", + "moves": [ + "MOVE_KARATE_CHOP", + "MOVE_LEER" + ] + }, + { + "difficulty": 40, + "level": 25, + "species": "SPECIES_MACHOKE", + "moves": [ + "MOVE_LOW_KICK", + "MOVE_FORESIGHT" + ] + }, + { + "difficulty": 40, + "level": 25, + "species": "SPECIES_MACHOKE", + "moves": [ + "MOVE_REVENGE", + "MOVE_LEER" + ] + } + ] + }, + { + "index": 310, + "type": 1, + "class": 14, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 40, + "level": 25, + "species": "SPECIES_MACHOKE", + "moves": [ + "MOVE_KARATE_CHOP", + "MOVE_FORESIGHT" + ] + }, + { + "difficulty": 40, + "level": 25, + "species": "SPECIES_MACHOP", + "moves": [ + "MOVE_LOW_KICK", + "MOVE_LEER" + ] + }, + { + "difficulty": 40, + "level": 25, + "species": "SPECIES_MACHOKE", + "moves": [ + "MOVE_SEISMIC_TOSS", + "MOVE_FORESIGHT" + ] + } + ] + }, + { + "index": 311, + "type": 1, + "class": 14, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 40, + "level": 28, + "species": "SPECIES_MEDITITE", + "moves": [ + "MOVE_FORCE_PALM", + "MOVE_CONFUSION", + "MOVE_DETECT", + "MOVE_MEDITATE" + ] + } + ] + }, + { + "index": 312, + "type": 1, + "class": 14, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 40, + "level": 26, + "species": "SPECIES_MACHOKE", + "moves": [ + "MOVE_VITAL_THROW", + "MOVE_FORESIGHT", + "MOVE_LEER" + ] + }, + { + "difficulty": 40, + "level": 26, + "species": "SPECIES_MEDITITE", + "moves": [ + "MOVE_FORCE_PALM", + "MOVE_CALM_MIND", + "MOVE_DETECT" + ] + } + ] + }, + { + "index": 313, + "type": 0, + "class": 14, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 52, + "species": "SPECIES_CROAGUNK" + }, + { + "difficulty": 30, + "level": 56, + "species": "SPECIES_MACHAMP" + } + ] + }, + { + "index": 314, + "type": 1, + "class": 14, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 40, + "level": 33, + "species": "SPECIES_STEELIX", + "moves": [ + "MOVE_DOUBLE_EDGE", + "MOVE_TAUNT", + "MOVE_TORMENT", + "MOVE_SCREECH" + ] + } + ] + }, + { + "index": 315, + "type": 3, + "class": 74, + "unk2": 0, + "items": [ + "ITEM_SUPER_POTION", + "ITEM_SUPER_POTION" + ], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 19, + "species": "SPECIES_CHERUBI", + "item": "ITEM_NONE", + "moves": [ + "MOVE_GRASS_KNOT", + "MOVE_LEECH_SEED", + "MOVE_GROWTH", + "MOVE_SAFEGUARD" + ] + }, + { + "difficulty": 50, + "level": 19, + "species": "SPECIES_TURTWIG", + "item": "ITEM_NONE", + "moves": [ + "MOVE_GRASS_KNOT", + "MOVE_RAZOR_LEAF", + "MOVE_WITHDRAW", + "MOVE_REFLECT" + ] + }, + { + "difficulty": 50, + "level": 22, + "species": "SPECIES_ROSERADE", + "item": "ITEM_SITRUS_BERRY", + "moves": [ + "MOVE_GRASS_KNOT", + "MOVE_MAGICAL_LEAF", + "MOVE_POISON_STING", + "MOVE_STUN_SPORE" + ] + } + ] + }, + { + "index": 316, + "type": 3, + "class": 75, + "unk2": 0, + "items": [ + "ITEM_SUPER_POTION", + "ITEM_SUPER_POTION" + ], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 100, + "level": 27, + "species": "SPECIES_GYARADOS", + "item": "ITEM_NONE", + "moves": [ + "MOVE_BRINE", + "MOVE_DRAGON_RAGE", + "MOVE_BITE", + "MOVE_SWAGGER" + ] + }, + { + "difficulty": 100, + "level": 27, + "species": "SPECIES_QUAGSIRE", + "item": "ITEM_NONE", + "moves": [ + "MOVE_MUD_BOMB", + "MOVE_SLAM", + "MOVE_MUD_SPORT", + "MOVE_TAIL_WHIP" + ] + }, + { + "difficulty": 100, + "level": 30, + "species": "SPECIES_FLOATZEL", + "item": "ITEM_SITRUS_BERRY", + "moves": [ + "MOVE_BRINE", + "MOVE_ICE_FANG", + "MOVE_PURSUIT", + "MOVE_SWIFT" + ] + } + ] + }, + { + "index": 317, + "type": 3, + "class": 76, + "unk2": 0, + "items": [ + "ITEM_HYPER_POTION", + "ITEM_HYPER_POTION" + ], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 100, + "level": 27, + "species": "SPECIES_MEDITITE", + "item": "ITEM_NONE", + "moves": [ + "MOVE_DRAIN_PUNCH", + "MOVE_CONFUSION", + "MOVE_MEDITATE", + "MOVE_DETECT" + ] + }, + { + "difficulty": 100, + "level": 27, + "species": "SPECIES_MACHOKE", + "item": "ITEM_NONE", + "moves": [ + "MOVE_BRICK_BREAK", + "MOVE_ROCK_TOMB", + "MOVE_LEER", + "MOVE_FORESIGHT" + ] + }, + { + "difficulty": 100, + "level": 30, + "species": "SPECIES_LUCARIO", + "item": "ITEM_SITRUS_BERRY", + "moves": [ + "MOVE_DRAIN_PUNCH", + "MOVE_FORCE_PALM", + "MOVE_METAL_CLAW", + "MOVE_BONE_RUSH" + ] + } + ] + }, + { + "index": 318, + "type": 3, + "class": 77, + "unk2": 0, + "items": [ + "ITEM_HYPER_POTION", + "ITEM_HYPER_POTION" + ], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 150, + "level": 32, + "species": "SPECIES_DRIFBLIM", + "item": "ITEM_NONE", + "moves": [ + "MOVE_OMINOUS_WIND", + "MOVE_GUST", + "MOVE_ASTONISH", + "MOVE_MINIMIZE" + ] + }, + { + "difficulty": 150, + "level": 34, + "species": "SPECIES_GENGAR", + "item": "ITEM_NONE", + "moves": [ + "MOVE_SHADOW_CLAW", + "MOVE_POISON_JAB", + "MOVE_SPITE", + "MOVE_CONFUSE_RAY" + ] + }, + { + "difficulty": 150, + "level": 36, + "species": "SPECIES_MISMAGIUS", + "item": "ITEM_SITRUS_BERRY", + "moves": [ + "MOVE_SHADOW_BALL", + "MOVE_PSYBEAM", + "MOVE_MAGICAL_LEAF", + "MOVE_CONFUSE_RAY" + ] + } + ] + }, + { + "index": 319, + "type": 3, + "class": 78, + "unk2": 0, + "items": [ + "ITEM_HYPER_POTION", + "ITEM_FULL_RESTORE" + ], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 200, + "level": 38, + "species": "SPECIES_SNOVER", + "item": "ITEM_NONE", + "moves": [ + "MOVE_AVALANCHE", + "MOVE_RAZOR_LEAF", + "MOVE_INGRAIN", + "MOVE_LEER" + ] + }, + { + "difficulty": 200, + "level": 38, + "species": "SPECIES_SNEASEL", + "item": "ITEM_NONE", + "moves": [ + "MOVE_AVALANCHE", + "MOVE_SLASH", + "MOVE_FEINT_ATTACK", + "MOVE_TAUNT" + ] + }, + { + "difficulty": 200, + "level": 40, + "species": "SPECIES_MEDICHAM", + "item": "ITEM_NONE", + "moves": [ + "MOVE_ICE_PUNCH", + "MOVE_FORCE_PALM", + "MOVE_DETECT", + "MOVE_BULK_UP" + ] + }, + { + "difficulty": 200, + "level": 42, + "species": "SPECIES_ABOMASNOW", + "item": "ITEM_SITRUS_BERRY", + "moves": [ + "MOVE_AVALANCHE", + "MOVE_WOOD_HAMMER", + "MOVE_GRASS_WHISTLE", + "MOVE_SWAGGER" + ] + } + ] + }, + { + "index": 320, + "type": 3, + "class": 79, + "unk2": 0, + "items": [ + "ITEM_HYPER_POTION", + "ITEM_FULL_RESTORE" + ], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 200, + "level": 46, + "species": "SPECIES_RAICHU", + "item": "ITEM_NONE", + "moves": [ + "MOVE_CHARGE_BEAM", + "MOVE_BRICK_BREAK", + "MOVE_THUNDER_WAVE", + "MOVE_LIGHT_SCREEN" + ] + }, + { + "difficulty": 200, + "level": 47, + "species": "SPECIES_AMBIPOM", + "item": "ITEM_NONE", + "moves": [ + "MOVE_SHOCK_WAVE", + "MOVE_AGILITY", + "MOVE_NASTY_PLOT", + "MOVE_BATON_PASS" + ] + }, + { + "difficulty": 200, + "level": 47, + "species": "SPECIES_OCTILLERY", + "item": "ITEM_NONE", + "moves": [ + "MOVE_CHARGE_BEAM", + "MOVE_OCTAZOOKA", + "MOVE_AURORA_BEAM", + "MOVE_BULLET_SEED" + ] + }, + { + "difficulty": 200, + "level": 49, + "species": "SPECIES_LUXRAY", + "item": "ITEM_SITRUS_BERRY", + "moves": [ + "MOVE_CHARGE_BEAM", + "MOVE_THUNDER_FANG", + "MOVE_CRUNCH", + "MOVE_THUNDER_WAVE" + ] + } + ] + }, + { + "index": 321, + "type": 0, + "class": 3, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 322, + "type": 0, + "class": 3, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_STARLY" + }, + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_BIDOOF" + } + ] + }, + { + "index": 323, + "type": 0, + "class": 3, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 4, + "species": "SPECIES_BIDOOF" + }, + { + "difficulty": 0, + "level": 4, + "species": "SPECIES_BUDEW" + }, + { + "difficulty": 0, + "level": 4, + "species": "SPECIES_STARLY" + } + ] + }, + { + "index": 324, + "type": 1, + "class": 3, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 15, + "species": "SPECIES_CHERUBI", + "moves": [ + "MOVE_TACKLE", + "MOVE_LEECH_SEED" + ] + }, + { + "difficulty": 10, + "level": 15, + "species": "SPECIES_ROSELIA", + "moves": [ + "MOVE_MEGA_DRAIN", + "MOVE_POISON_STING", + "MOVE_STUN_SPORE" + ] + } + ] + }, + { + "index": 325, + "type": 1, + "class": 3, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 30, + "species": "SPECIES_MISDREAVUS", + "moves": [ + "MOVE_PAIN_SPLIT", + "MOVE_PSYBEAM", + "MOVE_CONFUSE_RAY" + ] + } + ] + }, + { + "index": 326, + "type": 0, + "class": 9, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_GEODUDE" + }, + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_ONIX" + } + ] + }, + { + "index": 327, + "type": 0, + "class": 80, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_GOLDEEN" + }, + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_BUIZEL" + } + ] + }, + { + "index": 328, + "type": 0, + "class": 80, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 21, + "species": "SPECIES_PSYDUCK" + } + ] + }, + { + "index": 329, + "type": 1, + "class": 5, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_BUDEW", + "moves": [ + "MOVE_ABSORB", + "MOVE_GROWTH", + "MOVE_WATER_SPORT" + ] + }, + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_PSYDUCK", + "moves": [ + "MOVE_SCRATCH", + "MOVE_TAIL_WHIP" + ] + } + ] + }, + { + "index": 330, + "type": 1, + "class": 5, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 28, + "species": "SPECIES_DRIFLOON", + "moves": [ + "MOVE_SPIT_UP", + "MOVE_SWALLOW", + "MOVE_STOCKPILE" + ] + }, + { + "difficulty": 10, + "level": 28, + "species": "SPECIES_MISDREAVUS", + "moves": [ + "MOVE_PSYBEAM", + "MOVE_ASTONISH", + "MOVE_CONFUSE_RAY" + ] + } + ] + }, + { + "index": 331, + "type": 0, + "class": 22, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 41, + "species": "SPECIES_PIKACHU" + }, + { + "difficulty": 10, + "level": 41, + "species": "SPECIES_PIKACHU" + }, + { + "difficulty": 10, + "level": 41, + "species": "SPECIES_PIKACHU" + }, + { + "difficulty": 10, + "level": 41, + "species": "SPECIES_PIKACHU" + } + ] + }, + { + "index": 332, + "type": 0, + "class": 38, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 20, + "species": "SPECIES_HOOTHOOT" + }, + { + "difficulty": 0, + "level": 20, + "species": "SPECIES_MACHOP" + } + ] + }, + { + "index": 333, + "type": 0, + "class": 38, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 42, + "species": "SPECIES_NOCTOWL" + }, + { + "difficulty": 0, + "level": 42, + "species": "SPECIES_MACHOKE" + } + ] + }, + { + "index": 334, + "type": 0, + "class": 32, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 335, + "type": 0, + "class": 32, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 43, + "species": "SPECIES_LUXIO" + } + ] + }, + { + "index": 336, + "type": 0, + "class": 33, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 337, + "type": 0, + "class": 46, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 43, + "species": "SPECIES_MANTYKE" + } + ] + }, + { + "index": 338, + "type": 0, + "class": 46, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 27, + "species": "SPECIES_MANTYKE" + }, + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_GYARADOS" + } + ] + }, + { + "index": 339, + "type": 1, + "class": 46, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 24, + "species": "SPECIES_WINGULL", + "moves": [ + "MOVE_WATER_PULSE", + "MOVE_WING_ATTACK", + "MOVE_SUPERSONIC" + ] + }, + { + "difficulty": 10, + "level": 24, + "species": "SPECIES_WINGULL", + "moves": [ + "MOVE_WATER_PULSE", + "MOVE_WING_ATTACK", + "MOVE_SUPERSONIC" + ] + } + ] + }, + { + "index": 340, + "type": 1, + "class": 60, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 30, + "species": "SPECIES_HAUNTER", + "moves": [ + "MOVE_SHADOW_PUNCH", + "MOVE_SUCKER_PUNCH", + "MOVE_CONFUSE_RAY", + "MOVE_HYPNOSIS" + ] + } + ] + }, + { + "index": 341, + "type": 1, + "class": 60, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 44, + "species": "SPECIES_MR_MIME", + "moves": [ + "MOVE_THUNDERBOLT", + "MOVE_ENERGY_BALL", + "MOVE_THUNDER_WAVE", + "MOVE_FLASH" + ] + } + ] + }, + { + "index": 342, + "type": 1, + "class": 60, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 6, + "species": "SPECIES_ABRA", + "moves": [ + "MOVE_HIDDEN_POWER" + ] + } + ] + }, + { + "index": 343, + "type": 1, + "class": 61, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 28, + "species": "SPECIES_DRIFLOON", + "moves": [ + "MOVE_PAYBACK", + "MOVE_GUST", + "MOVE_ASTONISH", + "MOVE_MINIMIZE" + ] + }, + { + "difficulty": 10, + "level": 28, + "species": "SPECIES_DRIFLOON", + "moves": [ + "MOVE_SPIT_UP", + "MOVE_SWALLOW", + "MOVE_STOCKPILE" + ] + } + ] + }, + { + "index": 344, + "type": 1, + "class": 61, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 44, + "species": "SPECIES_PACHIRISU", + "moves": [ + "MOVE_LAST_RESORT", + "MOVE_SUPER_FANG", + "MOVE_DISCHARGE", + "MOVE_SWEET_KISS" + ] + } + ] + }, + { + "index": 345, + "type": 1, + "class": 61, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 6, + "species": "SPECIES_ABRA", + "moves": [ + "MOVE_HIDDEN_POWER" + ] + } + ] + }, + { + "index": 346, + "type": 0, + "class": 36, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_GLAMEOW" + } + ] + }, + { + "index": 347, + "type": 0, + "class": 36, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 348, + "type": 1, + "class": 36, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 17, + "species": "SPECIES_ROSELIA", + "moves": [ + "MOVE_MEGA_DRAIN", + "MOVE_POISON_STING", + "MOVE_STUN_SPORE" + ] + } + ] + }, + { + "index": 349, + "type": 0, + "class": 55, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 350, + "type": 0, + "class": 56, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 351, + "type": 0, + "class": 42, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 352, + "type": 0, + "class": 42, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 353, + "type": 0, + "class": 43, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 354, + "type": 0, + "class": 43, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 355, + "type": 0, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 7, + "species": "SPECIES_KRICKETOT" + } + ] + }, + { + "index": 356, + "type": 1, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 7, + "species": "SPECIES_MACHOP", + "moves": [ + "MOVE_LOW_KICK", + "MOVE_LEER" + ] + } + ] + }, + { + "index": 357, + "type": 1, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 27, + "species": "SPECIES_GASTLY", + "moves": [ + "MOVE_SUCKER_PUNCH", + "MOVE_NIGHT_SHADE", + "MOVE_CONFUSE_RAY", + "MOVE_CURSE" + ] + }, + { + "difficulty": 10, + "level": 29, + "species": "SPECIES_HAUNTER", + "moves": [ + "MOVE_SUCKER_PUNCH", + "MOVE_SHADOW_PUNCH", + "MOVE_CONFUSE_RAY", + "MOVE_SPITE" + ] + } + ] + }, + { + "index": 358, + "type": 0, + "class": 44, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 29, + "species": "SPECIES_SHELLOS" + }, + { + "difficulty": 0, + "level": 29, + "species": "SPECIES_SHELLOS" + } + ] + }, + { + "index": 359, + "type": 0, + "class": 44, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 43, + "species": "SPECIES_REMORAID" + } + ] + }, + { + "index": 360, + "type": 0, + "class": 45, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 29, + "species": "SPECIES_MARILL" + }, + { + "difficulty": 0, + "level": 29, + "species": "SPECIES_MARILL" + } + ] + }, + { + "index": 361, + "type": 0, + "class": 45, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 43, + "species": "SPECIES_REMORAID" + } + ] + }, + { + "index": 362, + "type": 1, + "class": 27, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 100, + "level": 52, + "species": "SPECIES_STARAVIA", + "moves": [ + "MOVE_BRAVE_BIRD", + "MOVE_TAKE_DOWN", + "MOVE_QUICK_ATTACK", + "MOVE_U_TURN" + ] + }, + { + "difficulty": 100, + "level": 53, + "species": "SPECIES_PELIPPER", + "moves": [ + "MOVE_STOCKPILE", + "MOVE_SWALLOW", + "MOVE_SPIT_UP", + "MOVE_WATER_PULSE" + ] + }, + { + "difficulty": 100, + "level": 54, + "species": "SPECIES_GOLBAT", + "moves": [ + "MOVE_AIR_SLASH", + "MOVE_POISON_FANG", + "MOVE_BITE", + "MOVE_CONFUSE_RAY" + ] + } + ] + }, + { + "index": 363, + "type": 0, + "class": 81, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 364, + "type": 0, + "class": 81, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 365, + "type": 0, + "class": 81, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 366, + "type": 0, + "class": 26, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 22, + "species": "SPECIES_CLEFAIRY" + } + ] + }, + { + "index": 367, + "type": 1, + "class": 59, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 29, + "species": "SPECIES_ONIX", + "moves": [ + "MOVE_IRON_TAIL", + "MOVE_SLAM", + "MOVE_DIG" + ] + }, + { + "difficulty": 10, + "level": 29, + "species": "SPECIES_ONIX", + "moves": [ + "MOVE_IRON_TAIL", + "MOVE_SLAM", + "MOVE_DIG" + ] + } + ] + }, + { + "index": 368, + "type": 0, + "class": 82, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 2, + "party": [ + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_WOOPER" + }, + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_MARILL" + } + ] + }, + { + "index": 369, + "type": 0, + "class": 83, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_PACHIRISU" + } + ] + }, + { + "index": 370, + "type": 0, + "class": 84, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_CHATOT" + } + ] + }, + { + "index": 371, + "type": 0, + "class": 85, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_PIKACHU" + }, + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_CLEFAIRY" + } + ] + }, + { + "index": 372, + "type": 0, + "class": 10, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 34, + "species": "SPECIES_MEDICHAM" + } + ] + }, + { + "index": 373, + "type": 0, + "class": 30, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 53, + "species": "SPECIES_MURKROW" + }, + { + "difficulty": 0, + "level": 57, + "species": "SPECIES_HONCHKROW" + } + ] + }, + { + "index": 374, + "type": 0, + "class": 16, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 375, + "type": 0, + "class": 17, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 376, + "type": 0, + "class": 83, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 377, + "type": 1, + "class": 4, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 14, + "species": "SPECIES_GEODUDE", + "moves": [ + "MOVE_ROCK_THROW", + "MOVE_TACKLE" + ] + } + ] + }, + { + "index": 378, + "type": 1, + "class": 4, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_LUXIO", + "moves": [ + "MOVE_SPARK", + "MOVE_BITE", + "MOVE_SWAGGER" + ] + }, + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_STUNKY", + "moves": [ + "MOVE_NIGHT_SLASH", + "MOVE_SLASH", + "MOVE_SMOKESCREEN", + "MOVE_TOXIC" + ] + } + ] + }, + { + "index": 379, + "type": 1, + "class": 4, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 13, + "species": "SPECIES_CASCOON", + "moves": [ + "MOVE_POISON_STING", + "MOVE_TACKLE" + ] + }, + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_DUSTOX", + "moves": [ + "MOVE_POISON_STING", + "MOVE_GUST", + "MOVE_CONFUSION" + ] + } + ] + }, + { + "index": 380, + "type": 1, + "class": 4, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_BUIZEL", + "moves": [ + "MOVE_WATER_GUN", + "MOVE_SWIFT", + "MOVE_QUICK_ATTACK" + ] + }, + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_SHINX", + "moves": [ + "MOVE_SPARK", + "MOVE_BITE" + ] + } + ] + }, + { + "index": 381, + "type": 0, + "class": 37, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 18, + "species": "SPECIES_GEODUDE" + }, + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_GEODUDE" + }, + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_GEODUDE" + } + ] + }, + { + "index": 382, + "type": 0, + "class": 37, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 21, + "species": "SPECIES_BUIZEL" + }, + { + "difficulty": 0, + "level": 21, + "species": "SPECIES_BUIZEL" + }, + { + "difficulty": 0, + "level": 24, + "species": "SPECIES_BUIZEL" + } + ] + }, + { + "index": 383, + "type": 0, + "class": 37, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 12, + "species": "SPECIES_GASTLY" + }, + { + "difficulty": 0, + "level": 13, + "species": "SPECIES_GASTLY" + }, + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_GASTLY" + } + ] + }, + { + "index": 384, + "type": 0, + "class": 20, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 385, + "type": 0, + "class": 21, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 386, + "type": 0, + "class": 29, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 56, + "species": "SPECIES_GABITE" + }, + { + "difficulty": 50, + "level": 56, + "species": "SPECIES_GYARADOS" + } + ] + }, + { + "index": 387, + "type": 0, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 388, + "type": 1, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 31, + "species": "SPECIES_PONYTA", + "moves": [ + "MOVE_TAKE_DOWN", + "MOVE_FIRE_SPIN", + "MOVE_STOMP", + "MOVE_GROWL" + ] + }, + { + "difficulty": 50, + "level": 31, + "species": "SPECIES_HAUNTER", + "moves": [ + "MOVE_SHADOW_BALL", + "MOVE_SUCKER_PUNCH", + "MOVE_CONFUSE_RAY", + "MOVE_SPITE" + ] + }, + { + "difficulty": 50, + "level": 34, + "species": "SPECIES_FLOATZEL", + "moves": [ + "MOVE_AQUA_JET", + "MOVE_CRUNCH", + "MOVE_SWIFT", + "MOVE_ICE_FANG" + ] + } + ] + }, + { + "index": 389, + "type": 1, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 54, + "species": "SPECIES_BIBAREL", + "moves": [ + "MOVE_SUPERPOWER", + "MOVE_SUPER_FANG", + "MOVE_HYPER_FANG", + "MOVE_YAWN" + ] + }, + { + "difficulty": 50, + "level": 54, + "species": "SPECIES_RAPIDASH", + "moves": [ + "MOVE_BOUNCE", + "MOVE_FIRE_BLAST", + "MOVE_QUICK_ATTACK", + "MOVE_GROWL" + ] + }, + { + "difficulty": 50, + "level": 54, + "species": "SPECIES_BEAUTIFLY", + "moves": [ + "MOVE_BUG_BUZZ", + "MOVE_GIGA_DRAIN", + "MOVE_SILVER_WIND", + "MOVE_ATTRACT" + ] + } + ] + }, + { + "index": 390, + "type": 1, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 55, + "species": "SPECIES_RAICHU", + "moves": [ + "MOVE_THUNDER", + "MOVE_RAIN_DANCE", + "MOVE_SLAM", + "MOVE_DOUBLE_TEAM" + ] + }, + { + "difficulty": 50, + "level": 55, + "species": "SPECIES_GASTRODON", + "moves": [ + "MOVE_MUDDY_WATER", + "MOVE_MUD_BOMB", + "MOVE_BODY_SLAM", + "MOVE_RECOVER" + ] + } + ] + }, + { + "index": 391, + "type": 0, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 392, + "type": 1, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 33, + "species": "SPECIES_PELIPPER", + "moves": [ + "MOVE_WATER_PULSE", + "MOVE_WING_ATTACK", + "MOVE_ROOST", + "MOVE_PROTECT" + ] + }, + { + "difficulty": 50, + "level": 33, + "species": "SPECIES_SUDOWOODO", + "moves": [ + "MOVE_ROCK_SLIDE", + "MOVE_FEINT_ATTACK", + "MOVE_LOW_KICK", + "MOVE_FLAIL" + ] + } + ] + }, + { + "index": 393, + "type": 1, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 54, + "species": "SPECIES_PACHIRISU", + "moves": [ + "MOVE_DISCHARGE", + "MOVE_SUPER_FANG", + "MOVE_SWEET_KISS", + "MOVE_CHARM" + ] + }, + { + "difficulty": 50, + "level": 54, + "species": "SPECIES_AZUMARILL", + "moves": [ + "MOVE_HYDRO_PUMP", + "MOVE_AQUA_TAIL", + "MOVE_DOUBLE_EDGE", + "MOVE_RAIN_DANCE" + ] + }, + { + "difficulty": 50, + "level": 54, + "species": "SPECIES_BLISSEY", + "moves": [ + "MOVE_HYPER_BEAM", + "MOVE_SOFT_BOILED", + "MOVE_LIGHT_SCREEN", + "MOVE_MINIMIZE" + ] + } + ] + }, + { + "index": 394, + "type": 1, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 54, + "species": "SPECIES_LOPUNNY", + "moves": [ + "MOVE_DIZZY_PUNCH", + "MOVE_JUMP_KICK", + "MOVE_AGILITY", + "MOVE_BATON_PASS" + ] + }, + { + "difficulty": 50, + "level": 54, + "species": "SPECIES_PELIPPER", + "moves": [ + "MOVE_AIR_SLASH", + "MOVE_WATER_PULSE", + "MOVE_PLUCK", + "MOVE_ROOST" + ] + }, + { + "difficulty": 50, + "level": 54, + "species": "SPECIES_QUAGSIRE", + "moves": [ + "MOVE_MUDDY_WATER", + "MOVE_EARTHQUAKE", + "MOVE_YAWN", + "MOVE_AMNESIA" + ] + } + ] + }, + { + "index": 395, + "type": 0, + "class": 49, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_MEDITITE" + } + ] + }, + { + "index": 396, + "type": 0, + "class": 49, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 56, + "species": "SPECIES_MR_MIME" + } + ] + }, + { + "index": 397, + "type": 0, + "class": 49, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 56, + "species": "SPECIES_GIRAFARIG" + } + ] + }, + { + "index": 398, + "type": 1, + "class": 50, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_PSYDUCK", + "moves": [ + "MOVE_CONFUSION", + "MOVE_WATER_GUN", + "MOVE_SCRATCH" + ] + } + ] + }, + { + "index": 399, + "type": 0, + "class": 50, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 54, + "species": "SPECIES_KADABRA" + }, + { + "difficulty": 0, + "level": 54, + "species": "SPECIES_KADABRA" + } + ] + }, + { + "index": 400, + "type": 0, + "class": 50, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 53, + "species": "SPECIES_CHINGLING" + }, + { + "difficulty": 0, + "level": 55, + "species": "SPECIES_CHIMECHO" + } + ] + }, + { + "index": 401, + "type": 1, + "class": 11, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 26, + "species": "SPECIES_BARBOACH", + "moves": [ + "MOVE_WATER_PULSE", + "MOVE_MUD_BOMB", + "MOVE_MUD_SLAP" + ] + } + ] + }, + { + "index": 402, + "type": 0, + "class": 34, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 403, + "type": 3, + "class": 86, + "unk2": 0, + "items": [ + "ITEM_SUPER_POTION", + "ITEM_SUPER_POTION" + ], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 150, + "level": 40, + "species": "SPECIES_MURKROW", + "item": "ITEM_NONE", + "moves": [ + "MOVE_DRILL_PECK", + "MOVE_NIGHT_SHADE", + "MOVE_ASTONISH", + "MOVE_EMBARGO" + ] + }, + { + "difficulty": 150, + "level": 40, + "species": "SPECIES_GOLBAT", + "item": "ITEM_NONE", + "moves": [ + "MOVE_POISON_FANG", + "MOVE_AIR_CUTTER", + "MOVE_BITE", + "MOVE_SUPERSONIC" + ] + }, + { + "difficulty": 150, + "level": 43, + "species": "SPECIES_SNEASEL", + "item": "ITEM_SITRUS_BERRY", + "moves": [ + "MOVE_SLASH", + "MOVE_ICE_PUNCH", + "MOVE_QUICK_ATTACK", + "MOVE_SCREECH" + ] + } + ] + }, + { + "index": 404, + "type": 3, + "class": 86, + "unk2": 0, + "items": [ + "ITEM_SUPER_POTION", + "ITEM_FULL_RESTORE" + ], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 200, + "level": 45, + "species": "SPECIES_HONCHKROW", + "item": "ITEM_NONE", + "moves": [ + "MOVE_DRILL_PECK", + "MOVE_DARK_PULSE", + "MOVE_STEEL_WING", + "MOVE_EMBARGO" + ] + }, + { + "difficulty": 200, + "level": 46, + "species": "SPECIES_CROBAT", + "item": "ITEM_NONE", + "moves": [ + "MOVE_CROSS_POISON", + "MOVE_AIR_SLASH", + "MOVE_BITE", + "MOVE_CONFUSE_RAY" + ] + }, + { + "difficulty": 200, + "level": 45, + "species": "SPECIES_GYARADOS", + "item": "ITEM_NONE", + "moves": [ + "MOVE_GIGA_IMPACT", + "MOVE_AQUA_TAIL", + "MOVE_ICE_FANG", + "MOVE_EARTHQUAKE" + ] + }, + { + "difficulty": 200, + "level": 48, + "species": "SPECIES_WEAVILE", + "item": "ITEM_SITRUS_BERRY", + "moves": [ + "MOVE_NIGHT_SLASH", + "MOVE_ICE_PUNCH", + "MOVE_BRICK_BREAK", + "MOVE_X_SCISSOR" + ] + } + ] + }, + { + "index": 405, + "type": 3, + "class": 72, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 100, + "level": 37, + "species": "SPECIES_GOLBAT", + "item": "ITEM_NONE", + "moves": [ + "MOVE_AIR_CUTTER", + "MOVE_BITE", + "MOVE_TOXIC", + "MOVE_SUPERSONIC" + ] + }, + { + "difficulty": 100, + "level": 37, + "species": "SPECIES_BRONZOR", + "item": "ITEM_NONE", + "moves": [ + "MOVE_GYRO_BALL", + "MOVE_EXTRASENSORY", + "MOVE_IRON_DEFENSE", + "MOVE_CONFUSE_RAY" + ] + }, + { + "difficulty": 100, + "level": 39, + "species": "SPECIES_PURUGLY", + "item": "ITEM_SITRUS_BERRY", + "moves": [ + "MOVE_SLASH", + "MOVE_FEINT_ATTACK", + "MOVE_HYPNOSIS", + "MOVE_FAKE_OUT" + ] + } + ] + }, + { + "index": 406, + "type": 3, + "class": 87, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 100, + "level": 18, + "species": "SPECIES_ZUBAT", + "item": "ITEM_NONE", + "moves": [ + "MOVE_GIGA_DRAIN", + "MOVE_WING_ATTACK", + "MOVE_BITE" + ] + }, + { + "difficulty": 100, + "level": 20, + "species": "SPECIES_SKUNTANK", + "item": "ITEM_SITRUS_BERRY", + "moves": [ + "MOVE_NIGHT_SLASH", + "MOVE_POISON_GAS", + "MOVE_SCREECH", + "MOVE_SMOKESCREEN" + ] + } + ] + }, + { + "index": 407, + "type": 3, + "class": 87, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 100, + "level": 41, + "species": "SPECIES_BRONZOR", + "item": "ITEM_NONE", + "moves": [ + "MOVE_GYRO_BALL", + "MOVE_EXTRASENSORY", + "MOVE_ROCK_SLIDE", + "MOVE_REFLECT" + ] + }, + { + "difficulty": 100, + "level": 41, + "species": "SPECIES_GOLBAT", + "item": "ITEM_NONE", + "moves": [ + "MOVE_SLUDGE_BOMB", + "MOVE_AIR_CUTTER", + "MOVE_GIGA_DRAIN", + "MOVE_MEAN_LOOK" + ] + }, + { + "difficulty": 100, + "level": 46, + "species": "SPECIES_SKUNTANK", + "item": "ITEM_SITRUS_BERRY", + "moves": [ + "MOVE_NIGHT_SLASH", + "MOVE_POISON_JAB", + "MOVE_FLAMETHROWER", + "MOVE_SMOKESCREEN" + ] + } + ] + }, + { + "index": 408, + "type": 3, + "class": 88, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 100, + "level": 35, + "species": "SPECIES_KADABRA", + "item": "ITEM_NONE", + "moves": [ + "MOVE_PSYCHIC", + "MOVE_SHOCK_WAVE", + "MOVE_RECOVER", + "MOVE_EMBARGO" + ] + }, + { + "difficulty": 100, + "level": 35, + "species": "SPECIES_BRONZOR", + "item": "ITEM_NONE", + "moves": [ + "MOVE_GYRO_BALL", + "MOVE_SHADOW_BALL", + "MOVE_ROCK_TOMB", + "MOVE_IRON_DEFENSE" + ] + }, + { + "difficulty": 100, + "level": 37, + "species": "SPECIES_TOXICROAK", + "item": "ITEM_SITRUS_BERRY", + "moves": [ + "MOVE_POISON_JAB", + "MOVE_REVENGE", + "MOVE_MUD_BOMB", + "MOVE_FEINT_ATTACK" + ] + } + ] + }, + { + "index": 409, + "type": 3, + "class": 88, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 100, + "level": 38, + "species": "SPECIES_KADABRA", + "item": "ITEM_NONE", + "moves": [ + "MOVE_PSYCHIC", + "MOVE_SHOCK_WAVE", + "MOVE_RECOVER", + "MOVE_EMBARGO" + ] + }, + { + "difficulty": 100, + "level": 38, + "species": "SPECIES_BRONZOR", + "item": "ITEM_NONE", + "moves": [ + "MOVE_GYRO_BALL", + "MOVE_EXTRASENSORY", + "MOVE_SHADOW_BALL", + "MOVE_CONFUSE_RAY" + ] + }, + { + "difficulty": 100, + "level": 40, + "species": "SPECIES_TOXICROAK", + "item": "ITEM_SITRUS_BERRY", + "moves": [ + "MOVE_POISON_JAB", + "MOVE_BRICK_BREAK", + "MOVE_X_SCISSOR", + "MOVE_SWAGGER" + ] + } + ] + }, + { + "index": 410, + "type": 1, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 13, + "species": "SPECIES_WURMPLE", + "moves": [ + "MOVE_TACKLE", + "MOVE_STRING_SHOT", + "MOVE_POISON_STING" + ] + }, + { + "difficulty": 30, + "level": 13, + "species": "SPECIES_CASCOON", + "moves": [ + "MOVE_TACKLE", + "MOVE_HARDEN", + "MOVE_POISON_STING" + ] + } + ] + }, + { + "index": 411, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 412, + "type": 1, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 13, + "species": "SPECIES_WURMPLE", + "moves": [ + "MOVE_TACKLE", + "MOVE_STRING_SHOT", + "MOVE_POISON_STING" + ] + }, + { + "difficulty": 30, + "level": 13, + "species": "SPECIES_ZUBAT", + "moves": [ + "MOVE_LEECH_LIFE", + "MOVE_ASTONISH" + ] + } + ] + }, + { + "index": 413, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 414, + "type": 1, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 9, + "species": "SPECIES_ZUBAT", + "moves": [ + "MOVE_LEECH_LIFE", + "MOVE_ASTONISH" + ] + } + ] + }, + { + "index": 415, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 9, + "species": "SPECIES_WURMPLE" + } + ] + }, + { + "index": 416, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 25, + "species": "SPECIES_BEAUTIFLY" + }, + { + "difficulty": 30, + "level": 27, + "species": "SPECIES_CROAGUNK" + } + ] + }, + { + "index": 417, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 32, + "species": "SPECIES_GOLBAT" + }, + { + "difficulty": 30, + "level": 36, + "species": "SPECIES_CROAGUNK" + } + ] + }, + { + "index": 418, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 34, + "species": "SPECIES_CROAGUNK" + }, + { + "difficulty": 30, + "level": 31, + "species": "SPECIES_DUSTOX" + }, + { + "difficulty": 30, + "level": 31, + "species": "SPECIES_BEAUTIFLY" + } + ] + }, + { + "index": 419, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 33, + "species": "SPECIES_GLAMEOW" + } + ] + }, + { + "index": 420, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 32, + "species": "SPECIES_STUNKY" + }, + { + "difficulty": 30, + "level": 32, + "species": "SPECIES_GLAMEOW" + } + ] + }, + { + "index": 421, + "type": 0, + "class": 89, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 14, + "species": "SPECIES_ZUBAT" + }, + { + "difficulty": 30, + "level": 14, + "species": "SPECIES_GLAMEOW" + } + ] + }, + { + "index": 422, + "type": 1, + "class": 89, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 15, + "species": "SPECIES_SILCOON", + "moves": [ + "MOVE_TACKLE", + "MOVE_HARDEN", + "MOVE_POISON_STING" + ] + } + ] + }, + { + "index": 423, + "type": 1, + "class": 89, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 12, + "species": "SPECIES_WURMPLE", + "moves": [ + "MOVE_TACKLE", + "MOVE_STRING_SHOT", + "MOVE_POISON_STING" + ] + }, + { + "difficulty": 30, + "level": 12, + "species": "SPECIES_SILCOON", + "moves": [ + "MOVE_TACKLE", + "MOVE_HARDEN", + "MOVE_POISON_STING" + ] + }, + { + "difficulty": 30, + "level": 12, + "species": "SPECIES_ZUBAT", + "moves": [ + "MOVE_LEECH_LIFE", + "MOVE_ASTONISH" + ] + } + ] + }, + { + "index": 424, + "type": 0, + "class": 89, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 425, + "type": 0, + "class": 89, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 33, + "species": "SPECIES_GLAMEOW" + }, + { + "difficulty": 30, + "level": 33, + "species": "SPECIES_CROAGUNK" + } + ] + }, + { + "index": 426, + "type": 1, + "class": 89, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 32, + "species": "SPECIES_SILCOON", + "moves": [ + "MOVE_TACKLE", + "MOVE_HARDEN", + "MOVE_POISON_STING" + ] + }, + { + "difficulty": 30, + "level": 32, + "species": "SPECIES_GOLBAT", + "moves": [ + "MOVE_AIR_CUTTER", + "MOVE_WING_ATTACK", + "MOVE_BITE", + "MOVE_SUPERSONIC" + ] + }, + { + "difficulty": 30, + "level": 32, + "species": "SPECIES_GLAMEOW", + "moves": [ + "MOVE_FURY_SWIPES", + "MOVE_FEINT_ATTACK", + "MOVE_GROWL", + "MOVE_FAKE_OUT" + ] + } + ] + }, + { + "index": 427, + "type": 0, + "class": 89, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 31, + "species": "SPECIES_BEAUTIFLY" + }, + { + "difficulty": 30, + "level": 33, + "species": "SPECIES_GLAMEOW" + } + ] + }, + { + "index": 428, + "type": 0, + "class": 89, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 37, + "species": "SPECIES_GLAMEOW" + } + ] + }, + { + "index": 429, + "type": 0, + "class": 89, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 430, + "type": 0, + "class": 89, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 36, + "species": "SPECIES_GOLBAT" + }, + { + "difficulty": 30, + "level": 34, + "species": "SPECIES_SILCOON" + } + ] + }, + { + "index": 431, + "type": 0, + "class": 52, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 16, + "species": "SPECIES_ZUBAT" + }, + { + "difficulty": 0, + "level": 16, + "species": "SPECIES_ZUBAT" + } + ] + }, + { + "index": 432, + "type": 0, + "class": 52, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 433, + "type": 0, + "class": 52, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 434, + "type": 0, + "class": 52, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 435, + "type": 0, + "class": 52, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 436, + "type": 0, + "class": 52, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 437, + "type": 0, + "class": 85, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 438, + "type": 0, + "class": 85, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 439, + "type": 0, + "class": 85, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 440, + "type": 0, + "class": 85, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 441, + "type": 0, + "class": 48, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 442, + "type": 0, + "class": 48, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 30, + "species": "SPECIES_BRONZOR" + } + ] + }, + { + "index": 443, + "type": 0, + "class": 48, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_GEODUDE" + }, + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_BRONZOR" + } + ] + }, + { + "index": 444, + "type": 0, + "class": 14, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 49, + "species": "SPECIES_MACHAMP" + } + ] + }, + { + "index": 445, + "type": 0, + "class": 14, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 35, + "species": "SPECIES_CROAGUNK" + } + ] + }, + { + "index": 446, + "type": 0, + "class": 14, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 52, + "species": "SPECIES_MACHOKE" + }, + { + "difficulty": 30, + "level": 58, + "species": "SPECIES_MACHAMP" + } + ] + }, + { + "index": 447, + "type": 0, + "class": 14, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 54, + "species": "SPECIES_ONIX" + }, + { + "difficulty": 30, + "level": 56, + "species": "SPECIES_MACHAMP" + } + ] + }, + { + "index": 448, + "type": 0, + "class": 35, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 449, + "type": 0, + "class": 3, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 450, + "type": 0, + "class": 3, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_BUNEARY" + } + ] + }, + { + "index": 451, + "type": 0, + "class": 9, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_ONIX" + }, + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_ONIX" + } + ] + }, + { + "index": 452, + "type": 0, + "class": 9, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 28, + "species": "SPECIES_ZUBAT" + }, + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_ONIX" + }, + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_GOLBAT" + } + ] + }, + { + "index": 453, + "type": 0, + "class": 9, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 30, + "species": "SPECIES_GRAVELER" + }, + { + "difficulty": 0, + "level": 32, + "species": "SPECIES_MACHOKE" + } + ] + }, + { + "index": 454, + "type": 0, + "class": 9, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_GEODUDE" + }, + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_MACHOP" + } + ] + }, + { + "index": 455, + "type": 0, + "class": 9, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_ONIX" + } + ] + }, + { + "index": 456, + "type": 1, + "class": 5, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 14, + "species": "SPECIES_PIPLUP", + "moves": [ + "MOVE_BUBBLE", + "MOVE_PECK" + ] + } + ] + }, + { + "index": 457, + "type": 1, + "class": 5, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_STARAVIA", + "moves": [ + "MOVE_AERIAL_ACE", + "MOVE_ENDEAVOR", + "MOVE_QUICK_ATTACK" + ] + }, + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_CHERRIM", + "moves": [ + "MOVE_SOLAR_BEAM", + "MOVE_MAGICAL_LEAF", + "MOVE_LEECH_SEED", + "MOVE_SUNNY_DAY" + ] + } + ] + }, + { + "index": 458, + "type": 1, + "class": 5, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_SILCOON", + "moves": [ + "MOVE_POISON_STING", + "MOVE_TACKLE" + ] + }, + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_BEAUTIFLY", + "moves": [ + "MOVE_GUST", + "MOVE_POISON_STING", + "MOVE_ABSORB" + ] + } + ] + }, + { + "index": 459, + "type": 1, + "class": 5, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_MEDITITE", + "moves": [ + "MOVE_CONFUSION", + "MOVE_BIDE" + ] + } + ] + }, + { + "index": 460, + "type": 0, + "class": 58, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_MR_MIME" + } + ] + }, + { + "index": 461, + "type": 0, + "class": 58, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 462, + "type": 0, + "class": 58, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 463, + "type": 0, + "class": 58, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 464, + "type": 0, + "class": 58, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 465, + "type": 0, + "class": 22, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_PIKACHU" + }, + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_PIKACHU" + } + ] + }, + { + "index": 466, + "type": 0, + "class": 38, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 467, + "type": 0, + "class": 32, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 468, + "type": 0, + "class": 32, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 469, + "type": 0, + "class": 33, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 470, + "type": 1, + "class": 63, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 19, + "species": "SPECIES_STARLY", + "moves": [ + "MOVE_WING_ATTACK", + "MOVE_QUICK_ATTACK", + "MOVE_ENDEAVOR", + "MOVE_DOUBLE_TEAM" + ] + }, + { + "difficulty": 50, + "level": 20, + "species": "SPECIES_BUIZEL", + "moves": [ + "MOVE_WATER_GUN", + "MOVE_QUICK_ATTACK", + "MOVE_PURSUIT", + "MOVE_GROWL" + ] + }, + { + "difficulty": 50, + "level": 20, + "species": "SPECIES_PONYTA", + "moves": [ + "MOVE_EMBER", + "MOVE_TACKLE", + "MOVE_TAIL_WHIP", + "MOVE_GROWL" + ] + }, + { + "difficulty": 50, + "level": 21, + "species": "SPECIES_GROTLE", + "moves": [ + "MOVE_RAZOR_LEAF", + "MOVE_TACKLE", + "MOVE_ABSORB", + "MOVE_WITHDRAW" + ] + } + ] + }, + { + "index": 471, + "type": 1, + "class": 63, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 19, + "species": "SPECIES_STARLY", + "moves": [ + "MOVE_WING_ATTACK", + "MOVE_QUICK_ATTACK", + "MOVE_ENDEAVOR", + "MOVE_DOUBLE_TEAM" + ] + }, + { + "difficulty": 50, + "level": 20, + "species": "SPECIES_BUIZEL", + "moves": [ + "MOVE_WATER_GUN", + "MOVE_QUICK_ATTACK", + "MOVE_PURSUIT", + "MOVE_GROWL" + ] + }, + { + "difficulty": 50, + "level": 20, + "species": "SPECIES_ROSELIA", + "moves": [ + "MOVE_MEGA_DRAIN", + "MOVE_POISON_STING", + "MOVE_LEECH_SEED", + "MOVE_STUN_SPORE" + ] + }, + { + "difficulty": 50, + "level": 21, + "species": "SPECIES_MONFERNO", + "moves": [ + "MOVE_FLAME_WHEEL", + "MOVE_MACH_PUNCH", + "MOVE_FURY_SWIPES", + "MOVE_LEER" + ] + } + ] + }, + { + "index": 472, + "type": 1, + "class": 63, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 19, + "species": "SPECIES_STARLY", + "moves": [ + "MOVE_WING_ATTACK", + "MOVE_QUICK_ATTACK", + "MOVE_ENDEAVOR", + "MOVE_DOUBLE_TEAM" + ] + }, + { + "difficulty": 50, + "level": 20, + "species": "SPECIES_ROSELIA", + "moves": [ + "MOVE_MEGA_DRAIN", + "MOVE_POISON_STING", + "MOVE_LEECH_SEED", + "MOVE_STUN_SPORE" + ] + }, + { + "difficulty": 50, + "level": 20, + "species": "SPECIES_PONYTA", + "moves": [ + "MOVE_EMBER", + "MOVE_TACKLE", + "MOVE_TAIL_WHIP", + "MOVE_GROWL" + ] + }, + { + "difficulty": 50, + "level": 21, + "species": "SPECIES_PRINPLUP", + "moves": [ + "MOVE_BUBBLE", + "MOVE_PECK", + "MOVE_METAL_CLAW", + "MOVE_GROWL" + ] + } + ] + }, + { + "index": 473, + "type": 1, + "class": 63, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 80, + "level": 26, + "species": "SPECIES_STARLY", + "moves": [ + "MOVE_WING_ATTACK", + "MOVE_QUICK_ATTACK", + "MOVE_ENDEAVOR", + "MOVE_DOUBLE_TEAM" + ] + }, + { + "difficulty": 80, + "level": 25, + "species": "SPECIES_BUIZEL", + "moves": [ + "MOVE_AQUA_JET", + "MOVE_QUICK_ATTACK", + "MOVE_PURSUIT", + "MOVE_GROWL" + ] + }, + { + "difficulty": 80, + "level": 25, + "species": "SPECIES_PONYTA", + "moves": [ + "MOVE_EMBER", + "MOVE_STOMP", + "MOVE_TAIL_WHIP", + "MOVE_GROWL" + ] + }, + { + "difficulty": 80, + "level": 28, + "species": "SPECIES_GROTLE", + "moves": [ + "MOVE_RAZOR_LEAF", + "MOVE_BITE", + "MOVE_MEGA_DRAIN", + "MOVE_WITHDRAW" + ] + } + ] + }, + { + "index": 474, + "type": 1, + "class": 63, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 80, + "level": 26, + "species": "SPECIES_STARLY", + "moves": [ + "MOVE_WING_ATTACK", + "MOVE_QUICK_ATTACK", + "MOVE_ENDEAVOR", + "MOVE_DOUBLE_TEAM" + ] + }, + { + "difficulty": 80, + "level": 25, + "species": "SPECIES_BUIZEL", + "moves": [ + "MOVE_AQUA_JET", + "MOVE_QUICK_ATTACK", + "MOVE_PURSUIT", + "MOVE_GROWL" + ] + }, + { + "difficulty": 80, + "level": 25, + "species": "SPECIES_ROSELIA", + "moves": [ + "MOVE_MEGA_DRAIN", + "MOVE_POISON_STING", + "MOVE_LEECH_SEED", + "MOVE_MAGICAL_LEAF" + ] + }, + { + "difficulty": 80, + "level": 28, + "species": "SPECIES_MONFERNO", + "moves": [ + "MOVE_FLAME_WHEEL", + "MOVE_MACH_PUNCH", + "MOVE_FURY_SWIPES", + "MOVE_LEER" + ] + } + ] + }, + { + "index": 475, + "type": 1, + "class": 63, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 80, + "level": 26, + "species": "SPECIES_STARLY", + "moves": [ + "MOVE_WING_ATTACK", + "MOVE_QUICK_ATTACK", + "MOVE_ENDEAVOR", + "MOVE_DOUBLE_TEAM" + ] + }, + { + "difficulty": 80, + "level": 25, + "species": "SPECIES_ROSELIA", + "moves": [ + "MOVE_MEGA_DRAIN", + "MOVE_POISON_STING", + "MOVE_LEECH_SEED", + "MOVE_MAGICAL_LEAF" + ] + }, + { + "difficulty": 80, + "level": 25, + "species": "SPECIES_PONYTA", + "moves": [ + "MOVE_EMBER", + "MOVE_STOMP", + "MOVE_TAIL_WHIP", + "MOVE_GROWL" + ] + }, + { + "difficulty": 80, + "level": 28, + "species": "SPECIES_PRINPLUP", + "moves": [ + "MOVE_BUBBLE_BEAM", + "MOVE_PECK", + "MOVE_METAL_CLAW", + "MOVE_GROWL" + ] + } + ] + }, + { + "index": 476, + "type": 1, + "class": 63, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 100, + "level": 31, + "species": "SPECIES_STARAVIA", + "moves": [ + "MOVE_AERIAL_ACE", + "MOVE_TAKE_DOWN", + "MOVE_QUICK_ATTACK", + "MOVE_DOUBLE_TEAM" + ] + }, + { + "difficulty": 100, + "level": 32, + "species": "SPECIES_BUIZEL", + "moves": [ + "MOVE_AQUA_JET", + "MOVE_PURSUIT", + "MOVE_QUICK_ATTACK", + "MOVE_SWIFT" + ] + }, + { + "difficulty": 100, + "level": 30, + "species": "SPECIES_HERACROSS", + "moves": [ + "MOVE_BRICK_BREAK", + "MOVE_AERIAL_ACE", + "MOVE_NIGHT_SLASH", + "MOVE_HORN_ATTACK" + ] + }, + { + "difficulty": 100, + "level": 32, + "species": "SPECIES_PONYTA", + "moves": [ + "MOVE_FIRE_SPIN", + "MOVE_TAKE_DOWN", + "MOVE_STOMP", + "MOVE_TAIL_WHIP" + ] + }, + { + "difficulty": 100, + "level": 35, + "species": "SPECIES_GROTLE", + "moves": [ + "MOVE_RAZOR_LEAF", + "MOVE_BITE", + "MOVE_MEGA_DRAIN", + "MOVE_LEECH_SEED" + ] + } + ] + }, + { + "index": 477, + "type": 1, + "class": 63, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 100, + "level": 31, + "species": "SPECIES_STARAVIA", + "moves": [ + "MOVE_AERIAL_ACE", + "MOVE_TAKE_DOWN", + "MOVE_QUICK_ATTACK", + "MOVE_DOUBLE_TEAM" + ] + }, + { + "difficulty": 100, + "level": 32, + "species": "SPECIES_BUIZEL", + "moves": [ + "MOVE_AQUA_JET", + "MOVE_PURSUIT", + "MOVE_QUICK_ATTACK", + "MOVE_SWIFT" + ] + }, + { + "difficulty": 100, + "level": 30, + "species": "SPECIES_HERACROSS", + "moves": [ + "MOVE_BRICK_BREAK", + "MOVE_AERIAL_ACE", + "MOVE_NIGHT_SLASH", + "MOVE_HORN_ATTACK" + ] + }, + { + "difficulty": 100, + "level": 32, + "species": "SPECIES_ROSELIA", + "moves": [ + "MOVE_GIGA_DRAIN", + "MOVE_TOXIC_SPIKES", + "MOVE_LEECH_SEED", + "MOVE_GRASS_WHISTLE" + ] + }, + { + "difficulty": 100, + "level": 35, + "species": "SPECIES_MONFERNO", + "moves": [ + "MOVE_BRICK_BREAK", + "MOVE_FLAME_WHEEL", + "MOVE_MACH_PUNCH", + "MOVE_AERIAL_ACE" + ] + } + ] + }, + { + "index": 478, + "type": 1, + "class": 63, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 100, + "level": 31, + "species": "SPECIES_STARAVIA", + "moves": [ + "MOVE_AERIAL_ACE", + "MOVE_TAKE_DOWN", + "MOVE_QUICK_ATTACK", + "MOVE_DOUBLE_TEAM" + ] + }, + { + "difficulty": 100, + "level": 32, + "species": "SPECIES_ROSELIA", + "moves": [ + "MOVE_GIGA_DRAIN", + "MOVE_TOXIC_SPIKES", + "MOVE_LEECH_SEED", + "MOVE_GRASS_WHISTLE" + ] + }, + { + "difficulty": 100, + "level": 30, + "species": "SPECIES_HERACROSS", + "moves": [ + "MOVE_BRICK_BREAK", + "MOVE_AERIAL_ACE", + "MOVE_NIGHT_SLASH", + "MOVE_HORN_ATTACK" + ] + }, + { + "difficulty": 100, + "level": 32, + "species": "SPECIES_PONYTA", + "moves": [ + "MOVE_FIRE_SPIN", + "MOVE_TAKE_DOWN", + "MOVE_STOMP", + "MOVE_TAIL_WHIP" + ] + }, + { + "difficulty": 100, + "level": 35, + "species": "SPECIES_PRINPLUP", + "moves": [ + "MOVE_BUBBLE_BEAM", + "MOVE_AERIAL_ACE", + "MOVE_METAL_CLAW", + "MOVE_FURY_ATTACK" + ] + } + ] + }, + { + "index": 479, + "type": 1, + "class": 63, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 200, + "level": 48, + "species": "SPECIES_STARAPTOR", + "moves": [ + "MOVE_CLOSE_COMBAT", + "MOVE_AERIAL_ACE", + "MOVE_STEEL_WING", + "MOVE_U_TURN" + ] + }, + { + "difficulty": 200, + "level": 49, + "species": "SPECIES_FLOATZEL", + "moves": [ + "MOVE_AQUA_JET", + "MOVE_CRUNCH", + "MOVE_ICE_FANG", + "MOVE_BRICK_BREAK" + ] + }, + { + "difficulty": 200, + "level": 50, + "species": "SPECIES_HERACROSS", + "moves": [ + "MOVE_CLOSE_COMBAT", + "MOVE_ROCK_SLIDE", + "MOVE_NIGHT_SLASH", + "MOVE_AERIAL_ACE" + ] + }, + { + "difficulty": 200, + "level": 49, + "species": "SPECIES_RAPIDASH", + "moves": [ + "MOVE_FIRE_BLAST", + "MOVE_SUNNY_DAY", + "MOVE_BOUNCE", + "MOVE_WILL_O_WISP" + ] + }, + { + "difficulty": 200, + "level": 51, + "species": "SPECIES_SNORLAX", + "moves": [ + "MOVE_BODY_SLAM", + "MOVE_CRUNCH", + "MOVE_EARTHQUAKE", + "MOVE_REST" + ] + }, + { + "difficulty": 200, + "level": 53, + "species": "SPECIES_TORTERRA", + "moves": [ + "MOVE_LEAF_STORM", + "MOVE_EARTHQUAKE", + "MOVE_CRUNCH", + "MOVE_SYNTHESIS" + ] + } + ] + }, + { + "index": 480, + "type": 1, + "class": 63, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 200, + "level": 48, + "species": "SPECIES_STARAPTOR", + "moves": [ + "MOVE_CLOSE_COMBAT", + "MOVE_AERIAL_ACE", + "MOVE_STEEL_WING", + "MOVE_U_TURN" + ] + }, + { + "difficulty": 200, + "level": 49, + "species": "SPECIES_FLOATZEL", + "moves": [ + "MOVE_AQUA_JET", + "MOVE_CRUNCH", + "MOVE_ICE_FANG", + "MOVE_BRICK_BREAK" + ] + }, + { + "difficulty": 200, + "level": 50, + "species": "SPECIES_HERACROSS", + "moves": [ + "MOVE_CLOSE_COMBAT", + "MOVE_ROCK_SLIDE", + "MOVE_NIGHT_SLASH", + "MOVE_AERIAL_ACE" + ] + }, + { + "difficulty": 200, + "level": 49, + "species": "SPECIES_ROSERADE", + "moves": [ + "MOVE_POISON_JAB", + "MOVE_GIGA_DRAIN", + "MOVE_SHADOW_BALL", + "MOVE_GRASS_WHISTLE" + ] + }, + { + "difficulty": 200, + "level": 51, + "species": "SPECIES_SNORLAX", + "moves": [ + "MOVE_BODY_SLAM", + "MOVE_CRUNCH", + "MOVE_EARTHQUAKE", + "MOVE_REST" + ] + }, + { + "difficulty": 200, + "level": 53, + "species": "SPECIES_INFERNAPE", + "moves": [ + "MOVE_FLAMETHROWER", + "MOVE_FOCUS_BLAST", + "MOVE_SHADOW_CLAW", + "MOVE_AERIAL_ACE" + ] + } + ] + }, + { + "index": 481, + "type": 1, + "class": 63, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 200, + "level": 48, + "species": "SPECIES_STARAPTOR", + "moves": [ + "MOVE_CLOSE_COMBAT", + "MOVE_AERIAL_ACE", + "MOVE_STEEL_WING", + "MOVE_U_TURN" + ] + }, + { + "difficulty": 200, + "level": 49, + "species": "SPECIES_ROSERADE", + "moves": [ + "MOVE_POISON_JAB", + "MOVE_GIGA_DRAIN", + "MOVE_SHADOW_BALL", + "MOVE_GRASS_WHISTLE" + ] + }, + { + "difficulty": 200, + "level": 50, + "species": "SPECIES_HERACROSS", + "moves": [ + "MOVE_CLOSE_COMBAT", + "MOVE_ROCK_SLIDE", + "MOVE_NIGHT_SLASH", + "MOVE_AERIAL_ACE" + ] + }, + { + "difficulty": 200, + "level": 49, + "species": "SPECIES_RAPIDASH", + "moves": [ + "MOVE_FIRE_BLAST", + "MOVE_SUNNY_DAY", + "MOVE_BOUNCE", + "MOVE_WILL_O_WISP" + ] + }, + { + "difficulty": 200, + "level": 51, + "species": "SPECIES_SNORLAX", + "moves": [ + "MOVE_BODY_SLAM", + "MOVE_CRUNCH", + "MOVE_EARTHQUAKE", + "MOVE_REST" + ] + }, + { + "difficulty": 200, + "level": 53, + "species": "SPECIES_EMPOLEON", + "moves": [ + "MOVE_BRINE", + "MOVE_AERIAL_ACE", + "MOVE_METAL_CLAW", + "MOVE_SHADOW_CLAW" + ] + } + ] + }, + { + "index": 482, + "type": 0, + "class": 46, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 38, + "species": "SPECIES_PELIPPER" + }, + { + "difficulty": 0, + "level": 38, + "species": "SPECIES_MACHOKE" + }, + { + "difficulty": 0, + "level": 44, + "species": "SPECIES_GASTRODON" + } + ] + }, + { + "index": 483, + "type": 1, + "class": 46, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 24, + "species": "SPECIES_SHELLOS", + "moves": [ + "MOVE_WATER_PULSE", + "MOVE_MUD_BOMB", + "MOVE_RAIN_DANCE" + ] + }, + { + "difficulty": 10, + "level": 24, + "species": "SPECIES_WINGULL", + "moves": [ + "MOVE_WATER_PULSE", + "MOVE_WING_ATTACK", + "MOVE_SUPERSONIC" + ] + }, + { + "difficulty": 10, + "level": 24, + "species": "SPECIES_SHELLOS", + "moves": [ + "MOVE_WATER_PULSE", + "MOVE_MUD_BOMB", + "MOVE_RAIN_DANCE" + ] + } + ] + }, + { + "index": 484, + "type": 0, + "class": 60, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 485, + "type": 0, + "class": 61, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 486, + "type": 1, + "class": 41, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_ABRA", + "moves": [ + "MOVE_HIDDEN_POWER" + ] + }, + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_KADABRA", + "moves": [ + "MOVE_CONFUSION", + "MOVE_DISABLE", + "MOVE_KINESIS", + "MOVE_THUNDER_PUNCH" + ] + } + ] + }, + { + "index": 487, + "type": 0, + "class": 41, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 488, + "type": 0, + "class": 28, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_GEODUDE" + }, + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_GEODUDE" + }, + { + "difficulty": 0, + "level": 26, + "species": "SPECIES_GEODUDE" + } + ] + }, + { + "index": 489, + "type": 0, + "class": 28, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 25, + "species": "SPECIES_ZUBAT" + }, + { + "difficulty": 0, + "level": 25, + "species": "SPECIES_SKORUPI" + } + ] + }, + { + "index": 490, + "type": 0, + "class": 28, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 27, + "species": "SPECIES_STUNKY" + } + ] + }, + { + "index": 491, + "type": 0, + "class": 36, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 25, + "species": "SPECIES_WORMADAM" + } + ] + }, + { + "index": 492, + "type": 0, + "class": 36, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 43, + "species": "SPECIES_LOPUNNY" + } + ] + }, + { + "index": 493, + "type": 0, + "class": 42, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 494, + "type": 0, + "class": 43, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_BUIZEL" + } + ] + }, + { + "index": 495, + "type": 0, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 496, + "type": 0, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 13, + "species": "SPECIES_BIDOOF" + }, + { + "difficulty": 0, + "level": 14, + "species": "SPECIES_ZUBAT" + }, + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_AIPOM" + } + ] + }, + { + "index": 497, + "type": 1, + "class": 44, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 26, + "species": "SPECIES_BUIZEL", + "moves": [ + "MOVE_AQUA_JET", + "MOVE_SONIC_BOOM", + "MOVE_QUICK_ATTACK", + "MOVE_PURSUIT" + ] + } + ] + }, + { + "index": 498, + "type": 1, + "class": 45, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 24, + "species": "SPECIES_AZURILL", + "moves": [ + "MOVE_WATER_GUN", + "MOVE_SLAM", + "MOVE_CHARM" + ] + }, + { + "difficulty": 10, + "level": 24, + "species": "SPECIES_MARILL", + "moves": [ + "MOVE_BUBBLE_BEAM", + "MOVE_ROLLOUT", + "MOVE_DEFENSE_CURL", + "MOVE_AQUA_RING" + ] + } + ] + }, + { + "index": 499, + "type": 1, + "class": 27, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 100, + "level": 54, + "species": "SPECIES_KRICKETUNE", + "moves": [ + "MOVE_X_SCISSOR", + "MOVE_BRICK_BREAK", + "MOVE_AERIAL_ACE", + "MOVE_SCREECH" + ] + }, + { + "difficulty": 100, + "level": 54, + "species": "SPECIES_QUAGSIRE", + "moves": [ + "MOVE_MUDDY_WATER", + "MOVE_EARTHQUAKE", + "MOVE_YAWN", + "MOVE_SLAM" + ] + }, + { + "difficulty": 100, + "level": 54, + "species": "SPECIES_GENGAR", + "moves": [ + "MOVE_SHADOW_BALL", + "MOVE_DREAM_EATER", + "MOVE_HYPNOSIS", + "MOVE_CONFUSE_RAY" + ] + } + ] + }, + { + "index": 500, + "type": 1, + "class": 27, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 100, + "level": 54, + "species": "SPECIES_PURUGLY", + "moves": [ + "MOVE_SLASH", + "MOVE_PAYBACK", + "MOVE_ATTRACT", + "MOVE_FAKE_OUT" + ] + }, + { + "difficulty": 100, + "level": 54, + "species": "SPECIES_GRAVELER", + "moves": [ + "MOVE_EARTHQUAKE", + "MOVE_STONE_EDGE", + "MOVE_DOUBLE_EDGE", + "MOVE_BRICK_BREAK" + ] + }, + { + "difficulty": 100, + "level": 54, + "species": "SPECIES_GOLBAT", + "moves": [ + "MOVE_AIR_SLASH", + "MOVE_POISON_FANG", + "MOVE_PLUCK", + "MOVE_CONFUSE_RAY" + ] + } + ] + }, + { + "index": 501, + "type": 0, + "class": 81, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 502, + "type": 0, + "class": 59, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 503, + "type": 0, + "class": 59, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_ONIX" + }, + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_GRAVELER" + } + ] + }, + { + "index": 504, + "type": 0, + "class": 59, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 33, + "species": "SPECIES_GRAVELER" + } + ] + }, + { + "index": 505, + "type": 0, + "class": 59, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 29, + "species": "SPECIES_ONIX" + }, + { + "difficulty": 0, + "level": 33, + "species": "SPECIES_STEELIX" + } + ] + }, + { + "index": 506, + "type": 0, + "class": 59, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 27, + "species": "SPECIES_GEODUDE" + }, + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_GRAVELER" + }, + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_ONIX" + } + ] + }, + { + "index": 507, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 37, + "species": "SPECIES_GOLBAT" + } + ] + }, + { + "index": 508, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 35, + "species": "SPECIES_DUSTOX" + }, + { + "difficulty": 30, + "level": 35, + "species": "SPECIES_BRONZOR" + } + ] + }, + { + "index": 509, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 37, + "species": "SPECIES_STUNKY" + } + ] + }, + { + "index": 510, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 32, + "species": "SPECIES_WURMPLE" + }, + { + "difficulty": 30, + "level": 34, + "species": "SPECIES_CASCOON" + }, + { + "difficulty": 30, + "level": 36, + "species": "SPECIES_DUSTOX" + } + ] + }, + { + "index": 511, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 512, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 36, + "species": "SPECIES_BRONZOR" + }, + { + "difficulty": 30, + "level": 36, + "species": "SPECIES_STUNKY" + } + ] + }, + { + "index": 513, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 36, + "species": "SPECIES_GOLBAT" + }, + { + "difficulty": 30, + "level": 36, + "species": "SPECIES_GOLBAT" + } + ] + }, + { + "index": 514, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 36, + "species": "SPECIES_STUNKY" + }, + { + "difficulty": 30, + "level": 36, + "species": "SPECIES_CROAGUNK" + } + ] + }, + { + "index": 515, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 39, + "species": "SPECIES_BRONZOR" + } + ] + }, + { + "index": 516, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 35, + "species": "SPECIES_DUSTOX" + }, + { + "difficulty": 30, + "level": 38, + "species": "SPECIES_GOLBAT" + }, + { + "difficulty": 30, + "level": 35, + "species": "SPECIES_DUSTOX" + } + ] + }, + { + "index": 517, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 38, + "species": "SPECIES_STUNKY" + }, + { + "difficulty": 30, + "level": 38, + "species": "SPECIES_GOLBAT" + } + ] + }, + { + "index": 518, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 35, + "species": "SPECIES_CROAGUNK" + }, + { + "difficulty": 30, + "level": 38, + "species": "SPECIES_STUNKY" + }, + { + "difficulty": 30, + "level": 38, + "species": "SPECIES_CROAGUNK" + } + ] + }, + { + "index": 519, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 40, + "species": "SPECIES_GOLBAT" + } + ] + }, + { + "index": 520, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 37, + "species": "SPECIES_BRONZOR" + }, + { + "difficulty": 30, + "level": 37, + "species": "SPECIES_GOLBAT" + } + ] + }, + { + "index": 521, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 38, + "species": "SPECIES_DUSTOX" + }, + { + "difficulty": 30, + "level": 38, + "species": "SPECIES_CROAGUNK" + } + ] + }, + { + "index": 522, + "type": 0, + "class": 89, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 35, + "species": "SPECIES_CROAGUNK" + }, + { + "difficulty": 30, + "level": 35, + "species": "SPECIES_STUNKY" + }, + { + "difficulty": 30, + "level": 35, + "species": "SPECIES_GLAMEOW" + } + ] + }, + { + "index": 523, + "type": 0, + "class": 89, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 40, + "species": "SPECIES_BEAUTIFLY" + } + ] + }, + { + "index": 524, + "type": 0, + "class": 89, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 34, + "species": "SPECIES_WURMPLE" + }, + { + "difficulty": 30, + "level": 36, + "species": "SPECIES_SILCOON" + }, + { + "difficulty": 30, + "level": 38, + "species": "SPECIES_BEAUTIFLY" + } + ] + }, + { + "index": 525, + "type": 0, + "class": 89, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 38, + "species": "SPECIES_BRONZOR" + }, + { + "difficulty": 30, + "level": 38, + "species": "SPECIES_GLAMEOW" + } + ] + }, + { + "index": 526, + "type": 0, + "class": 89, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 37, + "species": "SPECIES_GOLBAT" + }, + { + "difficulty": 30, + "level": 37, + "species": "SPECIES_GLAMEOW" + }, + { + "difficulty": 30, + "level": 37, + "species": "SPECIES_BRONZOR" + } + ] + }, + { + "index": 527, + "type": 0, + "class": 89, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 38, + "species": "SPECIES_STUNKY" + }, + { + "difficulty": 30, + "level": 38, + "species": "SPECIES_GLAMEOW" + } + ] + }, + { + "index": 528, + "type": 3, + "class": 72, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 100, + "level": 41, + "species": "SPECIES_BRONZOR", + "item": "ITEM_NONE", + "moves": [ + "MOVE_GYRO_BALL", + "MOVE_EXTRASENSORY", + "MOVE_LIGHT_SCREEN", + "MOVE_CONFUSE_RAY" + ] + }, + { + "difficulty": 100, + "level": 42, + "species": "SPECIES_GOLBAT", + "item": "ITEM_NONE", + "moves": [ + "MOVE_AIR_CUTTER", + "MOVE_BITE", + "MOVE_POISON_FANG", + "MOVE_CONFUSE_RAY" + ] + }, + { + "difficulty": 100, + "level": 45, + "species": "SPECIES_PURUGLY", + "item": "ITEM_SITRUS_BERRY", + "moves": [ + "MOVE_SLASH", + "MOVE_SHADOW_CLAW", + "MOVE_AERIAL_ACE", + "MOVE_HYPNOSIS" + ] + } + ] + }, + { + "index": 529, + "type": 0, + "class": 57, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_CLEFFA" + } + ] + }, + { + "index": 530, + "type": 0, + "class": 20, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_PICHU" + }, + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_PICHU" + }, + { + "difficulty": 0, + "level": 18, + "species": "SPECIES_PIKACHU" + } + ] + }, + { + "index": 531, + "type": 0, + "class": 21, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_BONSLY" + } + ] + }, + { + "index": 532, + "type": 0, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 16, + "species": "SPECIES_STUNKY" + }, + { + "difficulty": 0, + "level": 16, + "species": "SPECIES_KRICKETUNE" + }, + { + "difficulty": 0, + "level": 16, + "species": "SPECIES_SHELLOS" + } + ] + }, + { + "index": 533, + "type": 0, + "class": 70, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 2, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_PONYTA" + }, + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_BUIZEL" + } + ] + }, + { + "index": 534, + "type": 0, + "class": 23, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 2, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_MURKROW" + }, + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_MISDREAVUS" + } + ] + }, + { + "index": 535, + "type": 0, + "class": 7, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_ROSELIA" + } + ] + }, + { + "index": 536, + "type": 0, + "class": 15, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_MR_MIME" + } + ] + }, + { + "index": 537, + "type": 0, + "class": 17, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 21, + "species": "SPECIES_STUNKY" + }, + { + "difficulty": 0, + "level": 21, + "species": "SPECIES_BUIZEL" + } + ] + }, + { + "index": 538, + "type": 0, + "class": 83, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 21, + "species": "SPECIES_LUXIO" + }, + { + "difficulty": 0, + "level": 21, + "species": "SPECIES_PIKACHU" + } + ] + }, + { + "index": 539, + "type": 0, + "class": 37, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 20, + "species": "SPECIES_CLEFAIRY" + }, + { + "difficulty": 0, + "level": 20, + "species": "SPECIES_CLEFAIRY" + }, + { + "difficulty": 0, + "level": 20, + "species": "SPECIES_CLEFAIRY" + } + ] + }, + { + "index": 540, + "type": 0, + "class": 21, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 21, + "species": "SPECIES_MARILL" + }, + { + "difficulty": 0, + "level": 21, + "species": "SPECIES_AIPOM" + } + ] + }, + { + "index": 541, + "type": 1, + "class": 51, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 22, + "species": "SPECIES_GOLDEEN", + "moves": [ + "MOVE_HORN_DRILL", + "MOVE_FLAIL" + ] + }, + { + "difficulty": 50, + "level": 22, + "species": "SPECIES_GOLDEEN", + "moves": [ + "MOVE_HORN_DRILL", + "MOVE_FLAIL" + ] + } + ] + }, + { + "index": 542, + "type": 0, + "class": 34, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 21, + "species": "SPECIES_STARLY" + }, + { + "difficulty": 0, + "level": 21, + "species": "SPECIES_HOOTHOOT" + } + ] + }, + { + "index": 543, + "type": 0, + "class": 35, + "unk2": 0, + "items": [ + "ITEM_FULL_RESTORE" + ], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 22, + "species": "SPECIES_LOPUNNY" + }, + { + "difficulty": 0, + "level": 20, + "species": "SPECIES_GLAMEOW" + } + ] + }, + { + "index": 544, + "type": 0, + "class": 3, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 21, + "species": "SPECIES_BIDOOF" + }, + { + "difficulty": 0, + "level": 21, + "species": "SPECIES_BIDOOF" + } + ] + }, + { + "index": 545, + "type": 0, + "class": 32, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_SUDOWOODO" + } + ] + }, + { + "index": 546, + "type": 0, + "class": 33, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 21, + "species": "SPECIES_BONSLY" + }, + { + "difficulty": 0, + "level": 21, + "species": "SPECIES_PICHU" + } + ] + }, + { + "index": 547, + "type": 0, + "class": 84, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_MURKROW" + } + ] + }, + { + "index": 548, + "type": 1, + "class": 60, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_WOOPER", + "moves": [ + "MOVE_MUD_BOMB", + "MOVE_SLAM", + "MOVE_WATER_GUN", + "MOVE_AMNESIA" + ] + } + ] + }, + { + "index": 549, + "type": 0, + "class": 41, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_KADABRA" + } + ] + }, + { + "index": 550, + "type": 0, + "class": 36, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_FINNEON" + } + ] + }, + { + "index": 551, + "type": 0, + "class": 36, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_PSYDUCK" + } + ] + }, + { + "index": 552, + "type": 1, + "class": 27, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 100, + "level": 23, + "species": "SPECIES_MACHOP", + "moves": [ + "MOVE_SEISMIC_TOSS", + "MOVE_LOW_KICK", + "MOVE_FORESIGHT" + ] + }, + { + "difficulty": 100, + "level": 23, + "species": "SPECIES_BRONZOR", + "moves": [ + "MOVE_EXTRASENSORY", + "MOVE_TACKLE", + "MOVE_CONFUSE_RAY" + ] + } + ] + }, + { + "index": 553, + "type": 0, + "class": 48, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 16, + "species": "SPECIES_GEODUDE" + }, + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_GEODUDE" + }, + { + "difficulty": 0, + "level": 18, + "species": "SPECIES_BRONZOR" + } + ] + }, + { + "index": 554, + "type": 0, + "class": 30, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 52, + "species": "SPECIES_FARFETCHD" + }, + { + "difficulty": 0, + "level": 54, + "species": "SPECIES_SWELLOW" + } + ] + }, + { + "index": 555, + "type": 0, + "class": 30, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 53, + "species": "SPECIES_GOLBAT" + }, + { + "difficulty": 0, + "level": 57, + "species": "SPECIES_XATU" + } + ] + }, + { + "index": 556, + "type": 0, + "class": 30, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 55, + "species": "SPECIES_DODRIO" + }, + { + "difficulty": 0, + "level": 55, + "species": "SPECIES_FEAROW" + }, + { + "difficulty": 0, + "level": 55, + "species": "SPECIES_HONCHKROW" + } + ] + }, + { + "index": 557, + "type": 0, + "class": 29, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 53, + "species": "SPECIES_DRATINI" + }, + { + "difficulty": 50, + "level": 55, + "species": "SPECIES_DRAGONAIR" + } + ] + }, + { + "index": 558, + "type": 0, + "class": 29, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 60, + "species": "SPECIES_GYARADOS" + } + ] + }, + { + "index": 559, + "type": 0, + "class": 29, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 58, + "species": "SPECIES_GYARADOS" + } + ] + }, + { + "index": 560, + "type": 0, + "class": 29, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 56, + "species": "SPECIES_SEADRA" + }, + { + "difficulty": 50, + "level": 56, + "species": "SPECIES_GYARADOS" + } + ] + }, + { + "index": 561, + "type": 0, + "class": 29, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 57, + "species": "SPECIES_VIBRAVA" + }, + { + "difficulty": 50, + "level": 57, + "species": "SPECIES_SEADRA" + }, + { + "difficulty": 50, + "level": 57, + "species": "SPECIES_DRAGONAIR" + } + ] + }, + { + "index": 562, + "type": 0, + "class": 29, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 57, + "species": "SPECIES_BAGON" + }, + { + "difficulty": 50, + "level": 59, + "species": "SPECIES_SHELGON" + } + ] + }, + { + "index": 563, + "type": 1, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 53, + "species": "SPECIES_LICKITUNG", + "moves": [ + "MOVE_POWER_WHIP", + "MOVE_SLAM", + "MOVE_DISABLE", + "MOVE_KNOCK_OFF" + ] + }, + { + "difficulty": 50, + "level": 53, + "species": "SPECIES_MILTANK", + "moves": [ + "MOVE_ZEN_HEADBUTT", + "MOVE_BODY_SLAM", + "MOVE_CAPTIVATE", + "MOVE_MILK_DRINK" + ] + } + ] + }, + { + "index": 564, + "type": 1, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 55, + "species": "SPECIES_TAUROS", + "moves": [ + "MOVE_THRASH", + "MOVE_ZEN_HEADBUTT", + "MOVE_SWAGGER", + "MOVE_PAYBACK" + ] + } + ] + }, + { + "index": 565, + "type": 1, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 55, + "species": "SPECIES_GOLDUCK", + "moves": [ + "MOVE_HYDRO_PUMP", + "MOVE_BRICK_BREAK", + "MOVE_ZEN_HEADBUTT", + "MOVE_SCREECH" + ] + }, + { + "difficulty": 50, + "level": 55, + "species": "SPECIES_SANDSLASH", + "moves": [ + "MOVE_EARTHQUAKE", + "MOVE_CRUSH_CLAW", + "MOVE_POISON_JAB", + "MOVE_SAND_TOMB" + ] + } + ] + }, + { + "index": 566, + "type": 1, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 55, + "species": "SPECIES_DUSCLOPS", + "moves": [ + "MOVE_SHADOW_SNEAK", + "MOVE_PAYBACK", + "MOVE_CURSE", + "MOVE_WILL_O_WISP" + ] + }, + { + "difficulty": 50, + "level": 55, + "species": "SPECIES_SALAMENCE", + "moves": [ + "MOVE_DRAGON_CLAW", + "MOVE_AERIAL_ACE", + "MOVE_ZEN_HEADBUTT", + "MOVE_CRUNCH" + ] + } + ] + }, + { + "index": 567, + "type": 1, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 53, + "species": "SPECIES_PINSIR", + "moves": [ + "MOVE_SUPERPOWER", + "MOVE_X_SCISSOR", + "MOVE_SWORDS_DANCE", + "MOVE_ROCK_TOMB" + ] + }, + { + "difficulty": 50, + "level": 53, + "species": "SPECIES_MIGHTYENA", + "moves": [ + "MOVE_CRUNCH", + "MOVE_SUCKER_PUNCH", + "MOVE_SCARY_FACE", + "MOVE_EMBARGO" + ] + } + ] + }, + { + "index": 568, + "type": 1, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 56, + "species": "SPECIES_SKARMORY", + "moves": [ + "MOVE_AIR_SLASH", + "MOVE_SLASH", + "MOVE_NIGHT_SLASH", + "MOVE_STEEL_WING" + ] + } + ] + }, + { + "index": 569, + "type": 1, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 57, + "species": "SPECIES_PRIMEAPE", + "moves": [ + "MOVE_CROSS_CHOP", + "MOVE_PUNISHMENT", + "MOVE_U_TURN", + "MOVE_SCREECH" + ] + }, + { + "difficulty": 50, + "level": 57, + "species": "SPECIES_TORKOAL", + "moves": [ + "MOVE_HEAT_WAVE", + "MOVE_SMOKESCREEN", + "MOVE_IRON_DEFENSE", + "MOVE_AMNESIA" + ] + } + ] + }, + { + "index": 570, + "type": 1, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 57, + "species": "SPECIES_LARVITAR", + "moves": [ + "MOVE_HYPER_BEAM", + "MOVE_STONE_EDGE", + "MOVE_EARTHQUAKE", + "MOVE_CRUNCH" + ] + }, + { + "difficulty": 50, + "level": 57, + "species": "SPECIES_MAGCARGO", + "moves": [ + "MOVE_EARTH_POWER", + "MOVE_FLAMETHROWER", + "MOVE_AMNESIA", + "MOVE_RECOVER" + ] + } + ] + }, + { + "index": 571, + "type": 1, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 57, + "species": "SPECIES_LOUDRED", + "moves": [ + "MOVE_HYPER_VOICE", + "MOVE_BITE", + "MOVE_SUPERSONIC", + "MOVE_SCREECH" + ] + }, + { + "difficulty": 50, + "level": 57, + "species": "SPECIES_RAMPARDOS", + "moves": [ + "MOVE_HEAD_SMASH", + "MOVE_ZEN_HEADBUTT", + "MOVE_ANCIENT_POWER", + "MOVE_SCREECH" + ] + } + ] + }, + { + "index": 572, + "type": 1, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 59, + "species": "SPECIES_AERODACTYL", + "moves": [ + "MOVE_STONE_EDGE", + "MOVE_IRON_HEAD", + "MOVE_AERIAL_ACE", + "MOVE_CRUNCH" + ] + } + ] + }, + { + "index": 573, + "type": 1, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 53, + "species": "SPECIES_FLAAFFY", + "moves": [ + "MOVE_DISCHARGE", + "MOVE_POWER_GEM", + "MOVE_SIGNAL_BEAM", + "MOVE_LIGHT_SCREEN" + ] + }, + { + "difficulty": 50, + "level": 53, + "species": "SPECIES_TROPIUS", + "moves": [ + "MOVE_SOLAR_BEAM", + "MOVE_AIR_SLASH", + "MOVE_SYNTHESIS", + "MOVE_SUNNY_DAY" + ] + } + ] + }, + { + "index": 574, + "type": 1, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 54, + "species": "SPECIES_AMBIPOM", + "moves": [ + "MOVE_DOUBLE_HIT", + "MOVE_ASTONISH", + "MOVE_AGILITY", + "MOVE_BATON_PASS" + ] + }, + { + "difficulty": 50, + "level": 54, + "species": "SPECIES_RAPIDASH", + "moves": [ + "MOVE_BOUNCE", + "MOVE_FIRE_BLAST", + "MOVE_STOMP", + "MOVE_GROWL" + ] + }, + { + "difficulty": 50, + "level": 54, + "species": "SPECIES_CHANSEY", + "moves": [ + "MOVE_DOUBLE_EDGE", + "MOVE_MINIMIZE", + "MOVE_DEFENSE_CURL", + "MOVE_LIGHT_SCREEN" + ] + } + ] + }, + { + "index": 575, + "type": 1, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 55, + "species": "SPECIES_MIGHTYENA", + "moves": [ + "MOVE_CRUNCH", + "MOVE_SUCKER_PUNCH", + "MOVE_IRON_TAIL", + "MOVE_SCARY_FACE" + ] + }, + { + "difficulty": 50, + "level": 55, + "species": "SPECIES_KIRLIA", + "moves": [ + "MOVE_PSYCHIC", + "MOVE_MAGICAL_LEAF", + "MOVE_SHOCK_WAVE", + "MOVE_SHADOW_BALL" + ] + } + ] + }, + { + "index": 576, + "type": 1, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 56, + "species": "SPECIES_MEOWTH", + "moves": [ + "MOVE_NIGHT_SLASH", + "MOVE_BITE", + "MOVE_TAUNT", + "MOVE_FAKE_OUT" + ] + }, + { + "difficulty": 50, + "level": 56, + "species": "SPECIES_PERSIAN", + "moves": [ + "MOVE_NIGHT_SLASH", + "MOVE_POWER_GEM", + "MOVE_FEINT_ATTACK", + "MOVE_FAKE_OUT" + ] + }, + { + "difficulty": 50, + "level": 56, + "species": "SPECIES_HYPNO", + "moves": [ + "MOVE_PSYCHIC", + "MOVE_ZEN_HEADBUTT", + "MOVE_HYPNOSIS", + "MOVE_DISABLE" + ] + } + ] + }, + { + "index": 577, + "type": 1, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 55, + "species": "SPECIES_DELCATTY", + "moves": [ + "MOVE_DOUBLE_EDGE", + "MOVE_COPYCAT", + "MOVE_FEINT_ATTACK", + "MOVE_CHARM" + ] + }, + { + "difficulty": 50, + "level": 55, + "species": "SPECIES_YANMA", + "moves": [ + "MOVE_BUG_BUZZ", + "MOVE_AIR_SLASH", + "MOVE_U_TURN", + "MOVE_QUICK_ATTACK" + ] + } + ] + }, + { + "index": 578, + "type": 1, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 57, + "species": "SPECIES_GRANBULL", + "moves": [ + "MOVE_CRUNCH", + "MOVE_PAYBACK", + "MOVE_TAKE_DOWN", + "MOVE_SCARY_FACE" + ] + } + ] + }, + { + "index": 579, + "type": 1, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 58, + "species": "SPECIES_STANTLER", + "moves": [ + "MOVE_ME_FIRST", + "MOVE_ZEN_HEADBUTT", + "MOVE_STOMP", + "MOVE_CONFUSE_RAY" + ] + }, + { + "difficulty": 50, + "level": 58, + "species": "SPECIES_CARNIVINE", + "moves": [ + "MOVE_POWER_WHIP", + "MOVE_WRING_OUT", + "MOVE_CRUNCH", + "MOVE_BIND" + ] + } + ] + }, + { + "index": 580, + "type": 1, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 59, + "species": "SPECIES_DRAPION", + "moves": [ + "MOVE_CROSS_POISON", + "MOVE_CRUNCH", + "MOVE_X_SCISSOR", + "MOVE_AERIAL_ACE" + ] + } + ] + }, + { + "index": 581, + "type": 1, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 56, + "species": "SPECIES_DUNSPARCE", + "moves": [ + "MOVE_ENDEAVOR", + "MOVE_ANCIENT_POWER", + "MOVE_SCREECH", + "MOVE_YAWN" + ] + }, + { + "difficulty": 50, + "level": 56, + "species": "SPECIES_SCYTHER", + "moves": [ + "MOVE_X_SCISSOR", + "MOVE_AIR_SLASH", + "MOVE_NIGHT_SLASH", + "MOVE_DOUBLE_HIT" + ] + }, + { + "difficulty": 50, + "level": 56, + "species": "SPECIES_MAROWAK", + "moves": [ + "MOVE_EARTHQUAKE", + "MOVE_DOUBLE_EDGE", + "MOVE_ROCK_SLIDE", + "MOVE_LEER" + ] + } + ] + }, + { + "index": 582, + "type": 1, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 57, + "species": "SPECIES_KANGASKHAN", + "moves": [ + "MOVE_DIZZY_PUNCH", + "MOVE_CRUNCH", + "MOVE_ENDURE", + "MOVE_REVERSAL" + ] + }, + { + "difficulty": 50, + "level": 57, + "species": "SPECIES_URSARING", + "moves": [ + "MOVE_SLASH", + "MOVE_BRICK_BREAK", + "MOVE_AERIAL_ACE", + "MOVE_SCARY_FACE" + ] + } + ] + }, + { + "index": 583, + "type": 0, + "class": 49, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 53, + "species": "SPECIES_SHUPPET" + }, + { + "difficulty": 0, + "level": 55, + "species": "SPECIES_DUSKULL" + } + ] + }, + { + "index": 584, + "type": 0, + "class": 49, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 54, + "species": "SPECIES_BALTOY" + }, + { + "difficulty": 0, + "level": 58, + "species": "SPECIES_GRUMPIG" + } + ] + }, + { + "index": 585, + "type": 0, + "class": 50, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 51, + "species": "SPECIES_SLOWPOKE" + }, + { + "difficulty": 0, + "level": 55, + "species": "SPECIES_SLOWBRO" + } + ] + }, + { + "index": 586, + "type": 0, + "class": 50, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 56, + "species": "SPECIES_XATU" + }, + { + "difficulty": 0, + "level": 58, + "species": "SPECIES_MISMAGIUS" + } + ] + }, + { + "index": 587, + "type": 0, + "class": 14, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 54, + "species": "SPECIES_MANKEY" + }, + { + "difficulty": 30, + "level": 53, + "species": "SPECIES_MAKUHITA" + }, + { + "difficulty": 30, + "level": 55, + "species": "SPECIES_HARIYAMA" + } + ] + }, + { + "index": 588, + "type": 0, + "class": 14, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 57, + "species": "SPECIES_CACTURNE" + }, + { + "difficulty": 30, + "level": 57, + "species": "SPECIES_MACHAMP" + } + ] + }, + { + "index": 589, + "type": 0, + "class": 14, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 53, + "species": "SPECIES_TYROGUE" + }, + { + "difficulty": 30, + "level": 57, + "species": "SPECIES_MAROWAK" + }, + { + "difficulty": 30, + "level": 58, + "species": "SPECIES_BRELOOM" + } + ] + }, + { + "index": 590, + "type": 0, + "class": 14, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 59, + "species": "SPECIES_MACHAMP" + } + ] + }, + { + "index": 591, + "type": 0, + "class": 39, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 52, + "species": "SPECIES_EXEGGCUTE" + }, + { + "difficulty": 50, + "level": 58, + "species": "SPECIES_URSARING" + } + ] + }, + { + "index": 592, + "type": 0, + "class": 39, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 55, + "species": "SPECIES_SPINDA" + }, + { + "difficulty": 50, + "level": 55, + "species": "SPECIES_KECLEON" + } + ] + }, + { + "index": 593, + "type": 0, + "class": 39, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 55, + "species": "SPECIES_DONPHAN" + } + ] + }, + { + "index": 594, + "type": 0, + "class": 40, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 50, + "species": "SPECIES_ZIGZAGOON" + }, + { + "difficulty": 50, + "level": 56, + "species": "SPECIES_SKARMORY" + } + ] + }, + { + "index": 595, + "type": 0, + "class": 40, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 57, + "species": "SPECIES_LICKITUNG" + }, + { + "difficulty": 50, + "level": 57, + "species": "SPECIES_VIGOROTH" + } + ] + }, + { + "index": 596, + "type": 0, + "class": 40, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 54, + "species": "SPECIES_TRAPINCH" + }, + { + "difficulty": 50, + "level": 56, + "species": "SPECIES_VIBRAVA" + } + ] + }, + { + "index": 597, + "type": 0, + "class": 42, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 51, + "species": "SPECIES_SEEL" + }, + { + "difficulty": 0, + "level": 51, + "species": "SPECIES_STARMIE" + } + ] + }, + { + "index": 598, + "type": 0, + "class": 42, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 53, + "species": "SPECIES_CRAWDAUNT" + } + ] + }, + { + "index": 599, + "type": 0, + "class": 42, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 51, + "species": "SPECIES_CHINCHOU" + }, + { + "difficulty": 0, + "level": 51, + "species": "SPECIES_LANTURN" + } + ] + }, + { + "index": 600, + "type": 0, + "class": 42, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 51, + "species": "SPECIES_CARVANHA" + }, + { + "difficulty": 0, + "level": 51, + "species": "SPECIES_CARVANHA" + }, + { + "difficulty": 0, + "level": 54, + "species": "SPECIES_SHARPEDO" + } + ] + }, + { + "index": 601, + "type": 0, + "class": 43, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 50, + "species": "SPECIES_LUVDISC" + }, + { + "difficulty": 0, + "level": 54, + "species": "SPECIES_LAPRAS" + } + ] + }, + { + "index": 602, + "type": 0, + "class": 43, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 50, + "species": "SPECIES_MANTYKE" + }, + { + "difficulty": 0, + "level": 52, + "species": "SPECIES_MANTINE" + } + ] + }, + { + "index": 603, + "type": 0, + "class": 43, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 50, + "species": "SPECIES_SEEL" + }, + { + "difficulty": 0, + "level": 54, + "species": "SPECIES_DEWGONG" + } + ] + }, + { + "index": 604, + "type": 0, + "class": 43, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 52, + "species": "SPECIES_BIBAREL" + }, + { + "difficulty": 0, + "level": 52, + "species": "SPECIES_AZUMARILL" + }, + { + "difficulty": 0, + "level": 52, + "species": "SPECIES_SEALEO" + } + ] + }, + { + "index": 605, + "type": 0, + "class": 27, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 606, + "type": 1, + "class": 27, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 100, + "level": 56, + "species": "SPECIES_LOUDRED", + "moves": [ + "MOVE_HYPER_VOICE", + "MOVE_BITE", + "MOVE_SCREECH", + "MOVE_UPROAR" + ] + }, + { + "difficulty": 100, + "level": 56, + "species": "SPECIES_DONPHAN", + "moves": [ + "MOVE_EARTHQUAKE", + "MOVE_SLAM", + "MOVE_SCARY_FACE", + "MOVE_ROCK_TOMB" + ] + }, + { + "difficulty": 100, + "level": 56, + "species": "SPECIES_TAUROS", + "moves": [ + "MOVE_GIGA_IMPACT", + "MOVE_ZEN_HEADBUTT", + "MOVE_PURSUIT", + "MOVE_ROCK_SLIDE" + ] + } + ] + }, + { + "index": 607, + "type": 1, + "class": 63, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 150, + "level": 40, + "species": "SPECIES_MUNCHLAX", + "moves": [ + "MOVE_BODY_SLAM", + "MOVE_STOCKPILE", + "MOVE_SWALLOW", + "MOVE_SCREECH" + ] + }, + { + "difficulty": 150, + "level": 40, + "species": "SPECIES_STARAPTOR", + "moves": [ + "MOVE_CLOSE_COMBAT", + "MOVE_AERIAL_ACE", + "MOVE_TAKE_DOWN", + "MOVE_QUICK_ATTACK" + ] + }, + { + "difficulty": 150, + "level": 41, + "species": "SPECIES_BUIZEL", + "moves": [ + "MOVE_AQUA_JET", + "MOVE_PURSUIT", + "MOVE_BRICK_BREAK", + "MOVE_IRON_TAIL" + ] + }, + { + "difficulty": 150, + "level": 42, + "species": "SPECIES_HERACROSS", + "moves": [ + "MOVE_CLOSE_COMBAT", + "MOVE_BRICK_BREAK", + "MOVE_NIGHT_SLASH", + "MOVE_AERIAL_ACE" + ] + }, + { + "difficulty": 150, + "level": 41, + "species": "SPECIES_PONYTA", + "moves": [ + "MOVE_FIRE_BLAST", + "MOVE_WILL_O_WISP", + "MOVE_STOMP", + "MOVE_TAKE_DOWN" + ] + }, + { + "difficulty": 150, + "level": 43, + "species": "SPECIES_TORTERRA", + "moves": [ + "MOVE_GIGA_DRAIN", + "MOVE_BITE", + "MOVE_LEECH_SEED", + "MOVE_SYNTHESIS" + ] + } + ] + }, + { + "index": 608, + "type": 1, + "class": 90, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 15, + "species": "SPECIES_CHANSEY", + "moves": [ + "MOVE_EGG_BOMB", + "MOVE_SOFT_BOILED", + "MOVE_REFRESH" + ] + } + ] + }, + { + "index": 609, + "type": 1, + "class": 91, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 34, + "species": "SPECIES_LUCARIO", + "moves": [ + "MOVE_METAL_CLAW", + "MOVE_FORCE_PALM", + "MOVE_QUICK_ATTACK", + "MOVE_BONE_RUSH" + ] + } + ] + }, + { + "index": 610, + "type": 1, + "class": 92, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 57, + "species": "SPECIES_ARCANINE", + "moves": [ + "MOVE_EXTREME_SPEED", + "MOVE_FIRE_FANG", + "MOVE_HELPING_HAND", + "MOVE_AGILITY" + ] + } + ] + }, + { + "index": 611, + "type": 1, + "class": 93, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 58, + "species": "SPECIES_CLAYDOL", + "moves": [ + "MOVE_PSYCHIC", + "MOVE_ANCIENT_POWER", + "MOVE_LIGHT_SCREEN", + "MOVE_REFLECT" + ] + } + ] + }, + { + "index": 612, + "type": 1, + "class": 94, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 18, + "species": "SPECIES_KADABRA", + "moves": [ + "MOVE_CONFUSION", + "MOVE_SHOCK_WAVE", + "MOVE_FLASH", + "MOVE_KINESIS" + ] + } + ] + }, + { + "index": 613, + "type": 1, + "class": 95, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 13, + "species": "SPECIES_TURTWIG", + "moves": [ + "MOVE_ABSORB", + "MOVE_TACKLE" + ] + } + ] + }, + { + "index": 614, + "type": 1, + "class": 95, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 13, + "species": "SPECIES_CHIMCHAR", + "moves": [ + "MOVE_EMBER", + "MOVE_SCRATCH" + ] + } + ] + }, + { + "index": 615, + "type": 1, + "class": 95, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 13, + "species": "SPECIES_PIPLUP", + "moves": [ + "MOVE_BUBBLE", + "MOVE_POUND" + ] + } + ] + }, + { + "index": 616, + "type": 1, + "class": 96, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 13, + "species": "SPECIES_TURTWIG", + "moves": [ + "MOVE_ABSORB", + "MOVE_TACKLE" + ] + } + ] + }, + { + "index": 617, + "type": 1, + "class": 96, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 13, + "species": "SPECIES_CHIMCHAR", + "moves": [ + "MOVE_EMBER", + "MOVE_SCRATCH" + ] + } + ] + }, + { + "index": 618, + "type": 1, + "class": 96, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 13, + "species": "SPECIES_PIPLUP", + "moves": [ + "MOVE_BUBBLE", + "MOVE_POUND" + ] + } + ] + }, + { + "index": 619, + "type": 1, + "class": 63, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 150, + "level": 40, + "species": "SPECIES_MUNCHLAX", + "moves": [ + "MOVE_BODY_SLAM", + "MOVE_STOCKPILE", + "MOVE_SWALLOW", + "MOVE_SCREECH" + ] + }, + { + "difficulty": 150, + "level": 40, + "species": "SPECIES_STARAPTOR", + "moves": [ + "MOVE_CLOSE_COMBAT", + "MOVE_AERIAL_ACE", + "MOVE_TAKE_DOWN", + "MOVE_QUICK_ATTACK" + ] + }, + { + "difficulty": 150, + "level": 41, + "species": "SPECIES_BUIZEL", + "moves": [ + "MOVE_AQUA_JET", + "MOVE_PURSUIT", + "MOVE_BRICK_BREAK", + "MOVE_IRON_TAIL" + ] + }, + { + "difficulty": 150, + "level": 42, + "species": "SPECIES_HERACROSS", + "moves": [ + "MOVE_CLOSE_COMBAT", + "MOVE_BRICK_BREAK", + "MOVE_NIGHT_SLASH", + "MOVE_AERIAL_ACE" + ] + }, + { + "difficulty": 150, + "level": 41, + "species": "SPECIES_ROSELIA", + "moves": [ + "MOVE_GIGA_DRAIN", + "MOVE_TOXIC", + "MOVE_INGRAIN", + "MOVE_GRASS_WHISTLE" + ] + }, + { + "difficulty": 150, + "level": 43, + "species": "SPECIES_INFERNAPE", + "moves": [ + "MOVE_CLOSE_COMBAT", + "MOVE_PUNISHMENT", + "MOVE_FLAME_WHEEL", + "MOVE_WILL_O_WISP" + ] + } + ] + }, + { + "index": 620, + "type": 1, + "class": 63, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 150, + "level": 40, + "species": "SPECIES_MUNCHLAX", + "moves": [ + "MOVE_BODY_SLAM", + "MOVE_STOCKPILE", + "MOVE_SWALLOW", + "MOVE_SCREECH" + ] + }, + { + "difficulty": 150, + "level": 40, + "species": "SPECIES_STARAPTOR", + "moves": [ + "MOVE_CLOSE_COMBAT", + "MOVE_AERIAL_ACE", + "MOVE_TAKE_DOWN", + "MOVE_QUICK_ATTACK" + ] + }, + { + "difficulty": 150, + "level": 41, + "species": "SPECIES_ROSELIA", + "moves": [ + "MOVE_GIGA_DRAIN", + "MOVE_TOXIC", + "MOVE_INGRAIN", + "MOVE_GRASS_WHISTLE" + ] + }, + { + "difficulty": 150, + "level": 42, + "species": "SPECIES_HERACROSS", + "moves": [ + "MOVE_CLOSE_COMBAT", + "MOVE_BRICK_BREAK", + "MOVE_NIGHT_SLASH", + "MOVE_AERIAL_ACE" + ] + }, + { + "difficulty": 150, + "level": 41, + "species": "SPECIES_PONYTA", + "moves": [ + "MOVE_FIRE_BLAST", + "MOVE_WILL_O_WISP", + "MOVE_STOMP", + "MOVE_TAKE_DOWN" + ] + }, + { + "difficulty": 150, + "level": 43, + "species": "SPECIES_EMPOLEON", + "moves": [ + "MOVE_AQUA_JET", + "MOVE_AERIAL_ACE", + "MOVE_METAL_CLAW", + "MOVE_SWAGGER" + ] + } + ] + }, + { + "index": 621, + "type": 1, + "class": 95, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 60, + "level": 25, + "species": "SPECIES_CLEFAIRY", + "moves": [ + "MOVE_METRONOME", + "MOVE_GRAVITY", + "MOVE_WAKE_UP_SLAP", + "MOVE_SING" + ] + }, + { + "difficulty": 60, + "level": 25, + "species": "SPECIES_KADABRA", + "moves": [ + "MOVE_PSYBEAM", + "MOVE_PSYCHO_CUT", + "MOVE_REFLECT", + "MOVE_LIGHT_SCREEN" + ] + }, + { + "difficulty": 60, + "level": 28, + "species": "SPECIES_PRINPLUP", + "moves": [ + "MOVE_BUBBLE_BEAM", + "MOVE_METAL_CLAW", + "MOVE_PECK", + "MOVE_GROWL" + ] + } + ] + }, + { + "index": 622, + "type": 1, + "class": 95, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 60, + "level": 25, + "species": "SPECIES_CLEFAIRY", + "moves": [ + "MOVE_METRONOME", + "MOVE_GRAVITY", + "MOVE_WAKE_UP_SLAP", + "MOVE_SING" + ] + }, + { + "difficulty": 60, + "level": 25, + "species": "SPECIES_KADABRA", + "moves": [ + "MOVE_PSYBEAM", + "MOVE_PSYCHO_CUT", + "MOVE_REFLECT", + "MOVE_LIGHT_SCREEN" + ] + }, + { + "difficulty": 60, + "level": 28, + "species": "SPECIES_GROTLE", + "moves": [ + "MOVE_RAZOR_LEAF", + "MOVE_MEGA_DRAIN", + "MOVE_BITE", + "MOVE_CURSE" + ] + } + ] + }, + { + "index": 623, + "type": 1, + "class": 95, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 60, + "level": 25, + "species": "SPECIES_CLEFAIRY", + "moves": [ + "MOVE_METRONOME", + "MOVE_GRAVITY", + "MOVE_WAKE_UP_SLAP", + "MOVE_SING" + ] + }, + { + "difficulty": 60, + "level": 25, + "species": "SPECIES_KADABRA", + "moves": [ + "MOVE_PSYBEAM", + "MOVE_PSYCHO_CUT", + "MOVE_REFLECT", + "MOVE_LIGHT_SCREEN" + ] + }, + { + "difficulty": 60, + "level": 28, + "species": "SPECIES_MONFERNO", + "moves": [ + "MOVE_FLAME_WHEEL", + "MOVE_MACH_PUNCH", + "MOVE_FURY_SWIPES", + "MOVE_TORMENT" + ] + } + ] + }, + { + "index": 624, + "type": 1, + "class": 96, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 60, + "level": 25, + "species": "SPECIES_CLEFAIRY", + "moves": [ + "MOVE_METRONOME", + "MOVE_GRAVITY", + "MOVE_WAKE_UP_SLAP", + "MOVE_SING" + ] + }, + { + "difficulty": 60, + "level": 25, + "species": "SPECIES_KADABRA", + "moves": [ + "MOVE_PSYBEAM", + "MOVE_PSYCHO_CUT", + "MOVE_REFLECT", + "MOVE_LIGHT_SCREEN" + ] + }, + { + "difficulty": 60, + "level": 28, + "species": "SPECIES_PRINPLUP", + "moves": [ + "MOVE_BUBBLE_BEAM", + "MOVE_METAL_CLAW", + "MOVE_PECK", + "MOVE_GROWL" + ] + } + ] + }, + { + "index": 625, + "type": 1, + "class": 96, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 60, + "level": 25, + "species": "SPECIES_CLEFAIRY", + "moves": [ + "MOVE_METRONOME", + "MOVE_GRAVITY", + "MOVE_WAKE_UP_SLAP", + "MOVE_SING" + ] + }, + { + "difficulty": 60, + "level": 25, + "species": "SPECIES_KADABRA", + "moves": [ + "MOVE_PSYBEAM", + "MOVE_PSYCHO_CUT", + "MOVE_REFLECT", + "MOVE_LIGHT_SCREEN" + ] + }, + { + "difficulty": 60, + "level": 28, + "species": "SPECIES_GROTLE", + "moves": [ + "MOVE_RAZOR_LEAF", + "MOVE_MEGA_DRAIN", + "MOVE_BITE", + "MOVE_CURSE" + ] + } + ] + }, + { + "index": 626, + "type": 1, + "class": 96, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 60, + "level": 25, + "species": "SPECIES_CLEFAIRY", + "moves": [ + "MOVE_METRONOME", + "MOVE_GRAVITY", + "MOVE_WAKE_UP_SLAP", + "MOVE_SING" + ] + }, + { + "difficulty": 60, + "level": 25, + "species": "SPECIES_KADABRA", + "moves": [ + "MOVE_PSYBEAM", + "MOVE_PSYCHO_CUT", + "MOVE_REFLECT", + "MOVE_LIGHT_SCREEN" + ] + }, + { + "difficulty": 60, + "level": 28, + "species": "SPECIES_MONFERNO", + "moves": [ + "MOVE_FLAME_WHEEL", + "MOVE_MACH_PUNCH", + "MOVE_FURY_SWIPES", + "MOVE_TORMENT" + ] + } + ] + }, + { + "index": 627, + "type": 0, + "class": 7, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_BUDEW" + } + ] + }, + { + "index": 628, + "type": 0, + "class": 7, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_ROSELIA" + } + ] + }, + { + "index": 629, + "type": 0, + "class": 7, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 55, + "species": "SPECIES_ROSELIA" + } + ] + }, + { + "index": 630, + "type": 0, + "class": 15, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 29, + "species": "SPECIES_MR_MIME" + }, + { + "difficulty": 0, + "level": 29, + "species": "SPECIES_SUDOWOODO" + } + ] + }, + { + "index": 631, + "type": 0, + "class": 15, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 37, + "species": "SPECIES_MR_MIME" + }, + { + "difficulty": 0, + "level": 39, + "species": "SPECIES_SUDOWOODO" + } + ] + }, + { + "index": 632, + "type": 0, + "class": 15, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 57, + "species": "SPECIES_MR_MIME" + }, + { + "difficulty": 0, + "level": 59, + "species": "SPECIES_SUDOWOODO" + } + ] + }, + { + "index": 633, + "type": 0, + "class": 10, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 31, + "species": "SPECIES_MEDITITE" + }, + { + "difficulty": 30, + "level": 33, + "species": "SPECIES_MACHOP" + } + ] + }, + { + "index": 634, + "type": 0, + "class": 10, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 38, + "species": "SPECIES_MEDICHAM" + }, + { + "difficulty": 30, + "level": 40, + "species": "SPECIES_MACHOKE" + } + ] + }, + { + "index": 635, + "type": 0, + "class": 10, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 58, + "species": "SPECIES_MEDICHAM" + }, + { + "difficulty": 30, + "level": 60, + "species": "SPECIES_MACHAMP" + } + ] + }, + { + "index": 636, + "type": 0, + "class": 30, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 38, + "species": "SPECIES_NOCTOWL" + }, + { + "difficulty": 50, + "level": 42, + "species": "SPECIES_NOCTOWL" + } + ] + }, + { + "index": 637, + "type": 0, + "class": 30, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 60, + "species": "SPECIES_NOCTOWL" + }, + { + "difficulty": 50, + "level": 60, + "species": "SPECIES_NOCTOWL" + } + ] + }, + { + "index": 638, + "type": 0, + "class": 30, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 59, + "species": "SPECIES_FARFETCHD" + }, + { + "difficulty": 0, + "level": 59, + "species": "SPECIES_SWELLOW" + } + ] + }, + { + "index": 639, + "type": 0, + "class": 16, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 27, + "species": "SPECIES_SUDOWOODO" + }, + { + "difficulty": 0, + "level": 29, + "species": "SPECIES_ROSELIA" + }, + { + "difficulty": 0, + "level": 28, + "species": "SPECIES_PIKACHU" + } + ] + }, + { + "index": 640, + "type": 0, + "class": 16, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 37, + "species": "SPECIES_SUDOWOODO" + }, + { + "difficulty": 0, + "level": 38, + "species": "SPECIES_ROSELIA" + }, + { + "difficulty": 0, + "level": 36, + "species": "SPECIES_PIKACHU" + } + ] + }, + { + "index": 641, + "type": 0, + "class": 16, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 52, + "species": "SPECIES_SUDOWOODO" + }, + { + "difficulty": 0, + "level": 51, + "species": "SPECIES_ROSELIA" + }, + { + "difficulty": 0, + "level": 53, + "species": "SPECIES_RAICHU" + } + ] + }, + { + "index": 642, + "type": 0, + "class": 17, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 28, + "species": "SPECIES_MIME_JR" + }, + { + "difficulty": 0, + "level": 27, + "species": "SPECIES_ROSELIA" + }, + { + "difficulty": 0, + "level": 29, + "species": "SPECIES_CLEFAIRY" + } + ] + }, + { + "index": 643, + "type": 0, + "class": 17, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 37, + "species": "SPECIES_MR_MIME" + }, + { + "difficulty": 0, + "level": 36, + "species": "SPECIES_ROSELIA" + }, + { + "difficulty": 0, + "level": 38, + "species": "SPECIES_CLEFAIRY" + } + ] + }, + { + "index": 644, + "type": 0, + "class": 17, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 52, + "species": "SPECIES_MR_MIME" + }, + { + "difficulty": 0, + "level": 51, + "species": "SPECIES_ROSELIA" + }, + { + "difficulty": 0, + "level": 53, + "species": "SPECIES_CLEFABLE" + } + ] + }, + { + "index": 645, + "type": 1, + "class": 4, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_GEODUDE", + "moves": [ + "MOVE_MAGNITUDE", + "MOVE_ROCK_THROW", + "MOVE_ROCK_POLISH", + "MOVE_DEFENSE_CURL" + ] + } + ] + }, + { + "index": 646, + "type": 1, + "class": 4, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_GRAVELER", + "moves": [ + "MOVE_ROCK_BLAST", + "MOVE_MAGNITUDE", + "MOVE_ROCK_POLISH", + "MOVE_DEFENSE_CURL" + ] + } + ] + }, + { + "index": 647, + "type": 1, + "class": 4, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 55, + "species": "SPECIES_GRAVELER", + "moves": [ + "MOVE_EARTHQUAKE", + "MOVE_ROCK_SLIDE", + "MOVE_BRICK_BREAK", + "MOVE_SANDSTORM" + ] + } + ] + }, + { + "index": 648, + "type": 1, + "class": 53, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 54, + "species": "SPECIES_RAICHU", + "moves": [ + "MOVE_THUNDER", + "MOVE_RAIN_DANCE", + "MOVE_SLAM", + "MOVE_THUNDER_WAVE" + ] + }, + { + "difficulty": 50, + "level": 54, + "species": "SPECIES_PELIPPER", + "moves": [ + "MOVE_AIR_SLASH", + "MOVE_WATER_PULSE", + "MOVE_SUPERSONIC", + "MOVE_QUICK_ATTACK" + ] + }, + { + "difficulty": 50, + "level": 54, + "species": "SPECIES_HIPPOPOTAS", + "moves": [ + "MOVE_EARTHQUAKE", + "MOVE_DOUBLE_EDGE", + "MOVE_CRUNCH", + "MOVE_SAND_TOMB" + ] + } + ] + }, + { + "index": 649, + "type": 1, + "class": 54, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 55, + "species": "SPECIES_ROSELIA", + "moves": [ + "MOVE_GIGA_DRAIN", + "MOVE_TOXIC", + "MOVE_INGRAIN", + "MOVE_DOUBLE_TEAM" + ] + }, + { + "difficulty": 50, + "level": 55, + "species": "SPECIES_SEAKING", + "moves": [ + "MOVE_MEGAHORN", + "MOVE_HORN_DRILL", + "MOVE_WATER_PULSE", + "MOVE_POISON_JAB" + ] + } + ] + }, + { + "index": 650, + "type": 0, + "class": 37, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 51, + "species": "SPECIES_HIPPOPOTAS" + }, + { + "difficulty": 0, + "level": 53, + "species": "SPECIES_HIPPOPOTAS" + }, + { + "difficulty": 0, + "level": 52, + "species": "SPECIES_HIPPOPOTAS" + } + ] + }, + { + "index": 651, + "type": 0, + "class": 18, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 652, + "type": 0, + "class": 18, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 653, + "type": 0, + "class": 12, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 28, + "species": "SPECIES_STARAVIA" + }, + { + "difficulty": 0, + "level": 30, + "species": "SPECIES_STARAVIA" + } + ] + }, + { + "index": 654, + "type": 0, + "class": 12, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 37, + "species": "SPECIES_STARAVIA" + }, + { + "difficulty": 0, + "level": 39, + "species": "SPECIES_STARAVIA" + } + ] + }, + { + "index": 655, + "type": 0, + "class": 12, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 58, + "species": "SPECIES_STARAPTOR" + }, + { + "difficulty": 0, + "level": 58, + "species": "SPECIES_STARAPTOR" + } + ] + }, + { + "index": 656, + "type": 0, + "class": 13, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_PIKACHU" + } + ] + }, + { + "index": 657, + "type": 0, + "class": 13, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 40, + "species": "SPECIES_PIKACHU" + } + ] + }, + { + "index": 658, + "type": 0, + "class": 13, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 60, + "species": "SPECIES_RAICHU" + } + ] + }, + { + "index": 659, + "type": 0, + "class": 29, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 43, + "species": "SPECIES_GABITE" + } + ] + }, + { + "index": 660, + "type": 0, + "class": 29, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 63, + "species": "SPECIES_GABITE" + } + ] + }, + { + "index": 661, + "type": 0, + "class": 29, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 60, + "species": "SPECIES_ALTARIA" + }, + { + "difficulty": 50, + "level": 60, + "species": "SPECIES_ALTARIA" + } + ] + }, + { + "index": 662, + "type": 0, + "class": 29, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 61, + "species": "SPECIES_DRAGONAIR" + }, + { + "difficulty": 50, + "level": 61, + "species": "SPECIES_DRAGONAIR" + } + ] + }, + { + "index": 663, + "type": 1, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 0, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 55, + "species": "SPECIES_STARAVIA", + "moves": [ + "MOVE_BRAVE_BIRD", + "MOVE_TAKE_DOWN", + "MOVE_STEEL_WING", + "MOVE_QUICK_ATTACK" + ] + }, + { + "difficulty": 50, + "level": 55, + "species": "SPECIES_GIRAFARIG", + "moves": [ + "MOVE_PSYCHIC", + "MOVE_DOUBLE_HIT", + "MOVE_CRUNCH", + "MOVE_THUNDER_WAVE" + ] + } + ] + }, + { + "index": 664, + "type": 1, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 39, + "species": "SPECIES_MONFERNO", + "moves": [ + "MOVE_FIRE_SPIN", + "MOVE_MACH_PUNCH", + "MOVE_ROCK_TOMB", + "MOVE_TORMENT" + ] + }, + { + "difficulty": 50, + "level": 39, + "species": "SPECIES_LUXIO", + "moves": [ + "MOVE_THUNDER_FANG", + "MOVE_CRUNCH", + "MOVE_SCARY_FACE", + "MOVE_SWAGGER" + ] + }, + { + "difficulty": 50, + "level": 39, + "species": "SPECIES_GYARADOS", + "moves": [ + "MOVE_AQUA_TAIL", + "MOVE_ICE_FANG", + "MOVE_BITE", + "MOVE_LEER" + ] + } + ] + }, + { + "index": 665, + "type": 1, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 59, + "species": "SPECIES_MONFERNO", + "moves": [ + "MOVE_FLARE_BLITZ", + "MOVE_CLOSE_COMBAT", + "MOVE_ROCK_SLIDE", + "MOVE_TORMENT" + ] + }, + { + "difficulty": 50, + "level": 59, + "species": "SPECIES_LUXIO", + "moves": [ + "MOVE_THUNDER_FANG", + "MOVE_CRUNCH", + "MOVE_IRON_TAIL", + "MOVE_THUNDER_WAVE" + ] + }, + { + "difficulty": 50, + "level": 59, + "species": "SPECIES_GYARADOS", + "moves": [ + "MOVE_HYPER_BEAM", + "MOVE_AQUA_TAIL", + "MOVE_ICE_FANG", + "MOVE_EARTHQUAKE" + ] + } + ] + }, + { + "index": 666, + "type": 1, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 60, + "species": "SPECIES_LICKITUNG", + "moves": [ + "MOVE_POWER_WHIP", + "MOVE_WRING_OUT", + "MOVE_SCREECH", + "MOVE_ME_FIRST" + ] + }, + { + "difficulty": 50, + "level": 60, + "species": "SPECIES_MILTANK", + "moves": [ + "MOVE_DOUBLE_EDGE", + "MOVE_ZEN_HEADBUTT", + "MOVE_BRICK_BREAK", + "MOVE_MILK_DRINK" + ] + } + ] + }, + { + "index": 667, + "type": 1, + "class": 24, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 62, + "species": "SPECIES_TAUROS", + "moves": [ + "MOVE_GIGA_IMPACT", + "MOVE_ZEN_HEADBUTT", + "MOVE_EARTHQUAKE", + "MOVE_STONE_EDGE" + ] + } + ] + }, + { + "index": 668, + "type": 1, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 54, + "species": "SPECIES_CHERRIM", + "moves": [ + "MOVE_SOLAR_BEAM", + "MOVE_TAKE_DOWN", + "MOVE_FLASH", + "MOVE_SUNNY_DAY" + ] + }, + { + "difficulty": 50, + "level": 54, + "species": "SPECIES_MARILL", + "moves": [ + "MOVE_ICE_BEAM", + "MOVE_DOUBLE_EDGE", + "MOVE_AQUA_TAIL", + "MOVE_AQUA_RING" + ] + }, + { + "difficulty": 50, + "level": 54, + "species": "SPECIES_LOPUNNY", + "moves": [ + "MOVE_DIZZY_PUNCH", + "MOVE_JUMP_KICK", + "MOVE_QUICK_ATTACK", + "MOVE_BOUNCE" + ] + } + ] + }, + { + "index": 669, + "type": 1, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 40, + "species": "SPECIES_GLAMEOW", + "moves": [ + "MOVE_SLASH", + "MOVE_FEINT_ATTACK", + "MOVE_HYPNOSIS", + "MOVE_CAPTIVATE" + ] + }, + { + "difficulty": 50, + "level": 40, + "species": "SPECIES_KADABRA", + "moves": [ + "MOVE_PSYBEAM", + "MOVE_SHADOW_BALL", + "MOVE_DISABLE", + "MOVE_MIRACLE_EYE" + ] + } + ] + }, + { + "index": 670, + "type": 1, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 60, + "species": "SPECIES_PURUGLY", + "moves": [ + "MOVE_SLASH", + "MOVE_FAKE_OUT", + "MOVE_HYPNOSIS", + "MOVE_DREAM_EATER" + ] + }, + { + "difficulty": 50, + "level": 60, + "species": "SPECIES_ALAKAZAM", + "moves": [ + "MOVE_PSYCHIC", + "MOVE_SHADOW_BALL", + "MOVE_DISABLE", + "MOVE_MIRACLE_EYE" + ] + } + ] + }, + { + "index": 671, + "type": 1, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 60, + "species": "SPECIES_AMPHAROS", + "moves": [ + "MOVE_DISCHARGE", + "MOVE_POWER_GEM", + "MOVE_SIGNAL_BEAM", + "MOVE_FIRE_PUNCH" + ] + }, + { + "difficulty": 50, + "level": 60, + "species": "SPECIES_TROPIUS", + "moves": [ + "MOVE_LEAF_STORM", + "MOVE_AIR_SLASH", + "MOVE_EARTHQUAKE", + "MOVE_SILVER_WIND" + ] + } + ] + }, + { + "index": 672, + "type": 1, + "class": 25, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 59, + "species": "SPECIES_AMBIPOM", + "moves": [ + "MOVE_DOUBLE_HIT", + "MOVE_IRON_TAIL", + "MOVE_U_TURN", + "MOVE_SCREECH" + ] + }, + { + "difficulty": 50, + "level": 59, + "species": "SPECIES_RAPIDASH", + "moves": [ + "MOVE_FLARE_BLITZ", + "MOVE_BOUNCE", + "MOVE_POISON_JAB", + "MOVE_WILL_O_WISP" + ] + }, + { + "difficulty": 50, + "level": 59, + "species": "SPECIES_CHANSEY", + "moves": [ + "MOVE_DOUBLE_EDGE", + "MOVE_DEFENSE_CURL", + "MOVE_SING", + "MOVE_DREAM_EATER" + ] + } + ] + }, + { + "index": 673, + "type": 0, + "class": 49, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 38, + "species": "SPECIES_HAUNTER" + }, + { + "difficulty": 0, + "level": 42, + "species": "SPECIES_KADABRA" + } + ] + }, + { + "index": 674, + "type": 0, + "class": 49, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 58, + "species": "SPECIES_GENGAR" + }, + { + "difficulty": 0, + "level": 58, + "species": "SPECIES_ALAKAZAM" + } + ] + }, + { + "index": 675, + "type": 0, + "class": 49, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 56, + "species": "SPECIES_MISDREAVUS" + }, + { + "difficulty": 0, + "level": 58, + "species": "SPECIES_GENGAR" + } + ] + }, + { + "index": 676, + "type": 0, + "class": 49, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 58, + "species": "SPECIES_BANETTE" + }, + { + "difficulty": 0, + "level": 60, + "species": "SPECIES_DUSCLOPS" + } + ] + }, + { + "index": 677, + "type": 0, + "class": 50, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 37, + "species": "SPECIES_HAUNTER" + }, + { + "difficulty": 0, + "level": 39, + "species": "SPECIES_MISDREAVUS" + }, + { + "difficulty": 0, + "level": 38, + "species": "SPECIES_KADABRA" + } + ] + }, + { + "index": 678, + "type": 0, + "class": 50, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 58, + "species": "SPECIES_GENGAR" + }, + { + "difficulty": 0, + "level": 57, + "species": "SPECIES_MISDREAVUS" + }, + { + "difficulty": 0, + "level": 59, + "species": "SPECIES_ALAKAZAM" + } + ] + }, + { + "index": 679, + "type": 0, + "class": 50, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 58, + "species": "SPECIES_MEDICHAM" + }, + { + "difficulty": 0, + "level": 58, + "species": "SPECIES_ALAKAZAM" + } + ] + }, + { + "index": 680, + "type": 0, + "class": 50, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 58, + "species": "SPECIES_SLOWBRO" + }, + { + "difficulty": 0, + "level": 60, + "species": "SPECIES_SLOWBRO" + } + ] + }, + { + "index": 681, + "type": 0, + "class": 71, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 36, + "species": "SPECIES_AMBIPOM" + }, + { + "difficulty": 0, + "level": 37, + "species": "SPECIES_GOLDUCK" + }, + { + "difficulty": 0, + "level": 38, + "species": "SPECIES_GIRAFARIG" + } + ] + }, + { + "index": 682, + "type": 0, + "class": 71, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 57, + "species": "SPECIES_AMBIPOM" + }, + { + "difficulty": 0, + "level": 58, + "species": "SPECIES_GOLDUCK" + }, + { + "difficulty": 0, + "level": 56, + "species": "SPECIES_GIRAFARIG" + } + ] + }, + { + "index": 683, + "type": 0, + "class": 11, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_SEAKING" + } + ] + }, + { + "index": 684, + "type": 0, + "class": 11, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 55, + "species": "SPECIES_SEAKING" + } + ] + }, + { + "index": 685, + "type": 0, + "class": 11, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 53, + "species": "SPECIES_GYARADOS" + }, + { + "difficulty": 0, + "level": 53, + "species": "SPECIES_GYARADOS" + } + ] + }, + { + "index": 686, + "type": 0, + "class": 11, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 53, + "species": "SPECIES_GYARADOS" + }, + { + "difficulty": 0, + "level": 53, + "species": "SPECIES_GYARADOS" + } + ] + }, + { + "index": 687, + "type": 0, + "class": 8, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 2, + "party": [ + { + "difficulty": 0, + "level": 40, + "species": "SPECIES_PIKACHU" + }, + { + "difficulty": 0, + "level": 40, + "species": "SPECIES_CLEFAIRY" + } + ] + }, + { + "index": 688, + "type": 0, + "class": 8, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 2, + "party": [ + { + "difficulty": 0, + "level": 60, + "species": "SPECIES_RAICHU" + }, + { + "difficulty": 0, + "level": 60, + "species": "SPECIES_CLEFABLE" + } + ] + }, + { + "index": 689, + "type": 1, + "class": 51, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 36, + "species": "SPECIES_GOLDEEN", + "moves": [ + "MOVE_HORN_DRILL", + "MOVE_FLAIL" + ] + }, + { + "difficulty": 30, + "level": 37, + "species": "SPECIES_SEAKING", + "moves": [ + "MOVE_HORN_DRILL", + "MOVE_FLAIL" + ] + }, + { + "difficulty": 50, + "level": 38, + "species": "SPECIES_SEAKING", + "moves": [ + "MOVE_HORN_DRILL", + "MOVE_FLAIL" + ] + } + ] + }, + { + "index": 690, + "type": 1, + "class": 51, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 10, + "level": 56, + "species": "SPECIES_SEAKING", + "moves": [ + "MOVE_HORN_DRILL", + "MOVE_FLAIL" + ] + }, + { + "difficulty": 30, + "level": 57, + "species": "SPECIES_SEAKING", + "moves": [ + "MOVE_HORN_DRILL", + "MOVE_FLAIL" + ] + }, + { + "difficulty": 50, + "level": 58, + "species": "SPECIES_SEAKING", + "moves": [ + "MOVE_HORN_DRILL", + "MOVE_FLAIL" + ] + } + ] + }, + { + "index": 691, + "type": 0, + "class": 34, + "unk2": 0, + "items": [ + "ITEM_FULL_RESTORE" + ], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_CHATOT" + } + ] + }, + { + "index": 692, + "type": 0, + "class": 34, + "unk2": 0, + "items": [ + "ITEM_FULL_RESTORE" + ], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 40, + "species": "SPECIES_CHATOT" + } + ] + }, + { + "index": 693, + "type": 0, + "class": 34, + "unk2": 0, + "items": [ + "ITEM_FULL_RESTORE" + ], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 60, + "species": "SPECIES_CHATOT" + } + ] + }, + { + "index": 694, + "type": 0, + "class": 52, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 55, + "species": "SPECIES_LUXIO" + } + ] + }, + { + "index": 695, + "type": 0, + "class": 48, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 41, + "species": "SPECIES_BRONZOR" + } + ] + }, + { + "index": 696, + "type": 0, + "class": 48, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 56, + "species": "SPECIES_BRONZOR" + } + ] + }, + { + "index": 697, + "type": 0, + "class": 19, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 36, + "species": "SPECIES_LUXIO" + }, + { + "difficulty": 0, + "level": 36, + "species": "SPECIES_STARAVIA" + }, + { + "difficulty": 0, + "level": 39, + "species": "SPECIES_RAPIDASH" + } + ] + }, + { + "index": 698, + "type": 0, + "class": 19, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 56, + "species": "SPECIES_LUXIO" + }, + { + "difficulty": 0, + "level": 57, + "species": "SPECIES_STARAPTOR" + }, + { + "difficulty": 0, + "level": 58, + "species": "SPECIES_RAPIDASH" + } + ] + }, + { + "index": 699, + "type": 0, + "class": 14, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 57, + "species": "SPECIES_MACHAMP" + } + ] + }, + { + "index": 700, + "type": 0, + "class": 14, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 58, + "species": "SPECIES_PRIMEAPE" + }, + { + "difficulty": 30, + "level": 59, + "species": "SPECIES_HARIYAMA" + }, + { + "difficulty": 30, + "level": 60, + "species": "SPECIES_HARIYAMA" + } + ] + }, + { + "index": 701, + "type": 0, + "class": 35, + "unk2": 0, + "items": [ + "ITEM_FULL_RESTORE" + ], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 40, + "species": "SPECIES_ROSELIA" + } + ] + }, + { + "index": 702, + "type": 0, + "class": 35, + "unk2": 0, + "items": [ + "ITEM_FULL_RESTORE" + ], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 60, + "species": "SPECIES_ROSELIA" + } + ] + }, + { + "index": 703, + "type": 0, + "class": 3, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_BUDEW" + } + ] + }, + { + "index": 704, + "type": 0, + "class": 3, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_ROSELIA" + } + ] + }, + { + "index": 705, + "type": 0, + "class": 3, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 55, + "species": "SPECIES_ROSELIA" + } + ] + }, + { + "index": 706, + "type": 0, + "class": 3, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_STARLY" + }, + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_BIDOOF" + } + ] + }, + { + "index": 707, + "type": 0, + "class": 3, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 29, + "species": "SPECIES_STARAVIA" + }, + { + "difficulty": 0, + "level": 29, + "species": "SPECIES_BIBAREL" + } + ] + }, + { + "index": 708, + "type": 0, + "class": 3, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 38, + "species": "SPECIES_STARAPTOR" + }, + { + "difficulty": 0, + "level": 38, + "species": "SPECIES_BIBAREL" + } + ] + }, + { + "index": 709, + "type": 0, + "class": 9, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 29, + "species": "SPECIES_ONIX" + }, + { + "difficulty": 0, + "level": 29, + "species": "SPECIES_ONIX" + } + ] + }, + { + "index": 710, + "type": 0, + "class": 9, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 37, + "species": "SPECIES_ONIX" + }, + { + "difficulty": 0, + "level": 39, + "species": "SPECIES_STEELIX" + } + ] + }, + { + "index": 711, + "type": 0, + "class": 9, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 57, + "species": "SPECIES_STEELIX" + }, + { + "difficulty": 0, + "level": 59, + "species": "SPECIES_STEELIX" + } + ] + }, + { + "index": 712, + "type": 0, + "class": 6, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_KRICKETOT" + }, + { + "difficulty": 0, + "level": 17, + "species": "SPECIES_SILCOON" + } + ] + }, + { + "index": 713, + "type": 0, + "class": 6, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 29, + "species": "SPECIES_KRICKETUNE" + }, + { + "difficulty": 0, + "level": 29, + "species": "SPECIES_SILCOON" + } + ] + }, + { + "index": 714, + "type": 0, + "class": 6, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 53, + "species": "SPECIES_KRICKETUNE" + }, + { + "difficulty": 0, + "level": 53, + "species": "SPECIES_BEAUTIFLY" + } + ] + }, + { + "index": 715, + "type": 0, + "class": 80, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 28, + "species": "SPECIES_GOLDEEN" + }, + { + "difficulty": 0, + "level": 30, + "species": "SPECIES_BUIZEL" + } + ] + }, + { + "index": 716, + "type": 0, + "class": 80, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 38, + "species": "SPECIES_SEAKING" + }, + { + "difficulty": 0, + "level": 38, + "species": "SPECIES_BUIZEL" + } + ] + }, + { + "index": 717, + "type": 0, + "class": 80, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 53, + "species": "SPECIES_SEAKING" + }, + { + "difficulty": 0, + "level": 53, + "species": "SPECIES_FLOATZEL" + } + ] + }, + { + "index": 718, + "type": 1, + "class": 5, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_PIPLUP", + "moves": [ + "MOVE_BUBBLE", + "MOVE_PECK", + "MOVE_POUND", + "MOVE_GROWL" + ] + } + ] + }, + { + "index": 719, + "type": 1, + "class": 5, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_PRINPLUP", + "moves": [ + "MOVE_BUBBLE_BEAM", + "MOVE_METAL_CLAW", + "MOVE_PECK", + "MOVE_GROWL" + ] + } + ] + }, + { + "index": 720, + "type": 1, + "class": 5, + "unk2": 0, + "items": [], + "unkC": 0, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 55, + "species": "SPECIES_EMPOLEON", + "moves": [ + "MOVE_HYDRO_PUMP", + "MOVE_DRILL_PECK", + "MOVE_METAL_CLAW", + "MOVE_GROWL" + ] + } + ] + }, + { + "index": 721, + "type": 0, + "class": 22, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_PIKACHU" + } + ] + }, + { + "index": 722, + "type": 0, + "class": 22, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 40, + "species": "SPECIES_PIKACHU" + } + ] + }, + { + "index": 723, + "type": 0, + "class": 22, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 55, + "species": "SPECIES_PIKACHU" + } + ] + }, + { + "index": 724, + "type": 0, + "class": 38, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 28, + "species": "SPECIES_HOOTHOOT" + }, + { + "difficulty": 0, + "level": 30, + "species": "SPECIES_MACHOKE" + } + ] + }, + { + "index": 725, + "type": 0, + "class": 38, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 38, + "species": "SPECIES_NOCTOWL" + }, + { + "difficulty": 0, + "level": 40, + "species": "SPECIES_MACHOKE" + } + ] + }, + { + "index": 726, + "type": 0, + "class": 38, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 53, + "species": "SPECIES_NOCTOWL" + }, + { + "difficulty": 0, + "level": 55, + "species": "SPECIES_MACHAMP" + } + ] + }, + { + "index": 727, + "type": 0, + "class": 32, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 55, + "species": "SPECIES_LUXIO" + } + ] + }, + { + "index": 728, + "type": 0, + "class": 32, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 60, + "species": "SPECIES_LUXIO" + } + ] + }, + { + "index": 729, + "type": 0, + "class": 33, + "unk2": 0, + "items": [ + "ITEM_FULL_RESTORE" + ], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_BUNEARY" + } + ] + }, + { + "index": 730, + "type": 0, + "class": 33, + "unk2": 0, + "items": [ + "ITEM_FULL_RESTORE" + ], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 40, + "species": "SPECIES_LOPUNNY" + } + ] + }, + { + "index": 731, + "type": 0, + "class": 33, + "unk2": 0, + "items": [ + "ITEM_FULL_RESTORE" + ], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 60, + "species": "SPECIES_LOPUNNY" + } + ] + }, + { + "index": 732, + "type": 0, + "class": 39, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 31, + "species": "SPECIES_LUXIO" + }, + { + "difficulty": 50, + "level": 31, + "species": "SPECIES_BUIZEL" + } + ] + }, + { + "index": 733, + "type": 0, + "class": 39, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 40, + "species": "SPECIES_LUXIO" + }, + { + "difficulty": 50, + "level": 40, + "species": "SPECIES_FLOATZEL" + } + ] + }, + { + "index": 734, + "type": 0, + "class": 39, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 60, + "species": "SPECIES_LUXIO" + }, + { + "difficulty": 50, + "level": 60, + "species": "SPECIES_FLOATZEL" + } + ] + }, + { + "index": 735, + "type": 0, + "class": 39, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 60, + "species": "SPECIES_EXEGGUTOR" + }, + { + "difficulty": 50, + "level": 60, + "species": "SPECIES_URSARING" + } + ] + }, + { + "index": 736, + "type": 0, + "class": 40, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 30, + "species": "SPECIES_AIPOM" + }, + { + "difficulty": 50, + "level": 32, + "species": "SPECIES_MARILL" + } + ] + }, + { + "index": 737, + "type": 0, + "class": 40, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 41, + "species": "SPECIES_AIPOM" + }, + { + "difficulty": 50, + "level": 39, + "species": "SPECIES_AZUMARILL" + } + ] + }, + { + "index": 738, + "type": 0, + "class": 40, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 61, + "species": "SPECIES_AMBIPOM" + }, + { + "difficulty": 50, + "level": 59, + "species": "SPECIES_AZUMARILL" + } + ] + }, + { + "index": 739, + "type": 0, + "class": 40, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 60, + "species": "SPECIES_LINOONE" + }, + { + "difficulty": 50, + "level": 60, + "species": "SPECIES_SKARMORY" + } + ] + }, + { + "index": 740, + "type": 0, + "class": 46, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 54, + "species": "SPECIES_MANTINE" + }, + { + "difficulty": 0, + "level": 52, + "species": "SPECIES_PELIPPER" + } + ] + }, + { + "index": 741, + "type": 0, + "class": 46, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 57, + "species": "SPECIES_MANTINE" + }, + { + "difficulty": 0, + "level": 59, + "species": "SPECIES_PELIPPER" + } + ] + }, + { + "index": 742, + "type": 0, + "class": 46, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 55, + "species": "SPECIES_PELIPPER" + }, + { + "difficulty": 0, + "level": 58, + "species": "SPECIES_MACHAMP" + }, + { + "difficulty": 0, + "level": 58, + "species": "SPECIES_GASTRODON" + } + ] + }, + { + "index": 743, + "type": 0, + "class": 41, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 30, + "species": "SPECIES_KADABRA" + }, + { + "difficulty": 0, + "level": 28, + "species": "SPECIES_KADABRA" + } + ] + }, + { + "index": 744, + "type": 0, + "class": 41, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 40, + "species": "SPECIES_KADABRA" + }, + { + "difficulty": 0, + "level": 36, + "species": "SPECIES_KADABRA" + } + ] + }, + { + "index": 745, + "type": 0, + "class": 41, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 53, + "species": "SPECIES_ALAKAZAM" + }, + { + "difficulty": 0, + "level": 53, + "species": "SPECIES_ALAKAZAM" + } + ] + }, + { + "index": 746, + "type": 0, + "class": 28, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 26, + "species": "SPECIES_ZUBAT" + }, + { + "difficulty": 0, + "level": 29, + "species": "SPECIES_GOLBAT" + }, + { + "difficulty": 0, + "level": 29, + "species": "SPECIES_GOLBAT" + } + ] + }, + { + "index": 747, + "type": 0, + "class": 28, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 36, + "species": "SPECIES_GOLBAT" + }, + { + "difficulty": 0, + "level": 37, + "species": "SPECIES_GOLBAT" + }, + { + "difficulty": 0, + "level": 38, + "species": "SPECIES_GOLBAT" + } + ] + }, + { + "index": 748, + "type": 0, + "class": 28, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 51, + "species": "SPECIES_GOLBAT" + }, + { + "difficulty": 0, + "level": 52, + "species": "SPECIES_CROBAT" + }, + { + "difficulty": 0, + "level": 53, + "species": "SPECIES_CROBAT" + } + ] + }, + { + "index": 749, + "type": 0, + "class": 36, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 40, + "species": "SPECIES_GLAMEOW" + } + ] + }, + { + "index": 750, + "type": 0, + "class": 36, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 60, + "species": "SPECIES_PURUGLY" + } + ] + }, + { + "index": 751, + "type": 0, + "class": 55, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 40, + "species": "SPECIES_SNEASEL" + } + ] + }, + { + "index": 752, + "type": 0, + "class": 55, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 55, + "species": "SPECIES_SNEASEL" + } + ] + }, + { + "index": 753, + "type": 0, + "class": 55, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 37, + "species": "SPECIES_MANTINE" + }, + { + "difficulty": 0, + "level": 39, + "species": "SPECIES_SNEASEL" + } + ] + }, + { + "index": 754, + "type": 0, + "class": 55, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 58, + "species": "SPECIES_MANTINE" + }, + { + "difficulty": 0, + "level": 58, + "species": "SPECIES_SNEASEL" + } + ] + }, + { + "index": 755, + "type": 0, + "class": 56, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 40, + "species": "SPECIES_STARAVIA" + } + ] + }, + { + "index": 756, + "type": 0, + "class": 56, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 55, + "species": "SPECIES_STARAPTOR" + } + ] + }, + { + "index": 757, + "type": 0, + "class": 56, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 40, + "species": "SPECIES_SNOVER" + } + ] + }, + { + "index": 758, + "type": 0, + "class": 56, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 55, + "species": "SPECIES_SNOVER" + } + ] + }, + { + "index": 759, + "type": 0, + "class": 42, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 58, + "species": "SPECIES_FLOATZEL" + }, + { + "difficulty": 0, + "level": 58, + "species": "SPECIES_TENTACRUEL" + } + ] + }, + { + "index": 760, + "type": 0, + "class": 42, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 58, + "species": "SPECIES_TENTACOOL" + }, + { + "difficulty": 0, + "level": 58, + "species": "SPECIES_GOLDUCK" + } + ] + }, + { + "index": 761, + "type": 0, + "class": 42, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 58, + "species": "SPECIES_DEWGONG" + }, + { + "difficulty": 0, + "level": 58, + "species": "SPECIES_STARMIE" + } + ] + }, + { + "index": 762, + "type": 0, + "class": 43, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 60, + "species": "SPECIES_LUMINEON" + } + ] + }, + { + "index": 763, + "type": 0, + "class": 43, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 58, + "species": "SPECIES_PELIPPER" + }, + { + "difficulty": 0, + "level": 58, + "species": "SPECIES_SEAKING" + } + ] + }, + { + "index": 764, + "type": 0, + "class": 43, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 56, + "species": "SPECIES_LUVDISC" + }, + { + "difficulty": 0, + "level": 60, + "species": "SPECIES_LAPRAS" + } + ] + }, + { + "index": 765, + "type": 0, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_STARLY" + } + ] + }, + { + "index": 766, + "type": 0, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_STARAVIA" + } + ] + }, + { + "index": 767, + "type": 0, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 40, + "species": "SPECIES_STARAVIA" + } + ] + }, + { + "index": 768, + "type": 0, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 19, + "species": "SPECIES_KRICKETUNE" + } + ] + }, + { + "index": 769, + "type": 0, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_KRICKETUNE" + } + ] + }, + { + "index": 770, + "type": 0, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 55, + "species": "SPECIES_KRICKETUNE" + } + ] + }, + { + "index": 771, + "type": 0, + "class": 44, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 28, + "species": "SPECIES_SHELLOS" + }, + { + "difficulty": 0, + "level": 27, + "species": "SPECIES_SHELLOS" + }, + { + "difficulty": 0, + "level": 29, + "species": "SPECIES_SHELLOS" + } + ] + }, + { + "index": 772, + "type": 0, + "class": 44, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 52, + "species": "SPECIES_GASTRODON" + }, + { + "difficulty": 0, + "level": 53, + "species": "SPECIES_GASTRODON" + }, + { + "difficulty": 0, + "level": 51, + "species": "SPECIES_GASTRODON" + } + ] + }, + { + "index": 773, + "type": 1, + "class": 45, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 40, + "species": "SPECIES_BIBAREL", + "moves": [ + "MOVE_SURF", + "MOVE_HYPER_FANG", + "MOVE_TAKE_DOWN", + "MOVE_AMNESIA" + ] + } + ] + }, + { + "index": 774, + "type": 1, + "class": 27, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 100, + "level": 38, + "species": "SPECIES_BUIZEL", + "moves": [ + "MOVE_AQUA_JET", + "MOVE_WHIRLPOOL", + "MOVE_SWIFT", + "MOVE_PURSUIT" + ] + }, + { + "difficulty": 100, + "level": 40, + "species": "SPECIES_GIRAFARIG", + "moves": [ + "MOVE_PSYCHIC", + "MOVE_DOUBLE_HIT", + "MOVE_STOMP", + "MOVE_GROWL" + ] + }, + { + "difficulty": 100, + "level": 39, + "species": "SPECIES_MACHOKE", + "moves": [ + "MOVE_SUBMISSION", + "MOVE_LOW_KICK", + "MOVE_LEER", + "MOVE_FORESIGHT" + ] + } + ] + }, + { + "index": 775, + "type": 1, + "class": 45, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 55, + "species": "SPECIES_BIBAREL", + "moves": [ + "MOVE_SURF", + "MOVE_HYPER_FANG", + "MOVE_AMNESIA", + "MOVE_SUPERPOWER" + ] + } + ] + }, + { + "index": 776, + "type": 1, + "class": 27, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 100, + "level": 58, + "species": "SPECIES_FLOATZEL", + "moves": [ + "MOVE_AQUA_JET", + "MOVE_ICE_FANG", + "MOVE_QUICK_ATTACK", + "MOVE_RAZOR_WIND" + ] + }, + { + "difficulty": 100, + "level": 59, + "species": "SPECIES_GIRAFARIG", + "moves": [ + "MOVE_PSYCHIC", + "MOVE_CRUNCH", + "MOVE_ZEN_HEADBUTT", + "MOVE_STOMP" + ] + }, + { + "difficulty": 100, + "level": 60, + "species": "SPECIES_MACHAMP", + "moves": [ + "MOVE_CROSS_CHOP", + "MOVE_LOW_KICK", + "MOVE_SCARY_FACE", + "MOVE_ROCK_SLIDE" + ] + } + ] + }, + { + "index": 777, + "type": 1, + "class": 27, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 100, + "level": 58, + "species": "SPECIES_STARAPTOR", + "moves": [ + "MOVE_BRAVE_BIRD", + "MOVE_CLOSE_COMBAT", + "MOVE_QUICK_ATTACK", + "MOVE_U_TURN" + ] + }, + { + "difficulty": 100, + "level": 58, + "species": "SPECIES_PELIPPER", + "moves": [ + "MOVE_STOCKPILE", + "MOVE_SWALLOW", + "MOVE_SPIT_UP", + "MOVE_HYDRO_PUMP" + ] + }, + { + "difficulty": 100, + "level": 58, + "species": "SPECIES_CROBAT", + "moves": [ + "MOVE_AIR_SLASH", + "MOVE_CROSS_POISON", + "MOVE_BITE", + "MOVE_CONFUSE_RAY" + ] + } + ] + }, + { + "index": 778, + "type": 0, + "class": 27, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 779, + "type": 0, + "class": 83, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 780, + "type": 0, + "class": 83, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 781, + "type": 0, + "class": 83, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 782, + "type": 0, + "class": 83, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 783, + "type": 0, + "class": 83, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 784, + "type": 0, + "class": 52, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 785, + "type": 0, + "class": 52, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 786, + "type": 0, + "class": 52, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 787, + "type": 0, + "class": 52, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 788, + "type": 0, + "class": 52, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 789, + "type": 0, + "class": 52, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 790, + "type": 0, + "class": 85, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 791, + "type": 0, + "class": 85, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 792, + "type": 0, + "class": 85, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 793, + "type": 0, + "class": 85, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 794, + "type": 0, + "class": 85, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 795, + "type": 0, + "class": 82, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 2, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + }, + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 796, + "type": 0, + "class": 82, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 2, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + }, + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 797, + "type": 0, + "class": 82, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 2, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + }, + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 798, + "type": 0, + "class": 82, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 2, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + }, + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 799, + "type": 0, + "class": 58, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 800, + "type": 0, + "class": 58, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 801, + "type": 0, + "class": 58, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 802, + "type": 0, + "class": 58, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 803, + "type": 0, + "class": 58, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 804, + "type": 0, + "class": 22, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 805, + "type": 0, + "class": 22, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 806, + "type": 0, + "class": 22, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 807, + "type": 0, + "class": 22, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 808, + "type": 0, + "class": 38, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 809, + "type": 0, + "class": 84, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 810, + "type": 0, + "class": 84, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 811, + "type": 0, + "class": 84, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 812, + "type": 0, + "class": 84, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 813, + "type": 0, + "class": 41, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 814, + "type": 0, + "class": 42, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 815, + "type": 0, + "class": 81, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 816, + "type": 0, + "class": 59, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 817, + "type": 0, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_MUNCHLAX" + }, + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_KRICKETOT" + } + ] + }, + { + "index": 818, + "type": 1, + "class": 3, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_BONSLY", + "moves": [ + "MOVE_BLOCK", + "MOVE_ROCK_THROW" + ] + }, + { + "difficulty": 0, + "level": 24, + "species": "SPECIES_MIME_JR", + "moves": [ + "MOVE_REFLECT", + "MOVE_LIGHT_SCREEN", + "MOVE_DOUBLE_SLAP" + ] + } + ] + }, + { + "index": 819, + "type": 0, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 24, + "species": "SPECIES_WEAVILE" + }, + { + "difficulty": 0, + "level": 25, + "species": "SPECIES_PACHIRISU" + } + ] + }, + { + "index": 820, + "type": 0, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_BUIZEL" + }, + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_MANTYKE" + } + ] + }, + { + "index": 821, + "type": 1, + "class": 3, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_CHATOT", + "moves": [ + "MOVE_FURY_ATTACK", + "MOVE_SING", + "MOVE_GROWL", + "MOVE_PECK" + ] + }, + { + "difficulty": 0, + "level": 24, + "species": "SPECIES_PACHIRISU", + "moves": [ + "MOVE_SWIFT", + "MOVE_ENDURE", + "MOVE_SPARK", + "MOVE_CHARM" + ] + } + ] + }, + { + "index": 822, + "type": 0, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 24, + "species": "SPECIES_KRICKETOT" + }, + { + "difficulty": 0, + "level": 25, + "species": "SPECIES_CHERRIM" + } + ] + }, + { + "index": 823, + "type": 0, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_PACHIRISU" + }, + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_MUNCHLAX" + } + ] + }, + { + "index": 824, + "type": 0, + "class": 3, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 23, + "species": "SPECIES_STARLY" + }, + { + "difficulty": 0, + "level": 24, + "species": "SPECIES_BIDOOF" + } + ] + }, + { + "index": 825, + "type": 1, + "class": 2, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 24, + "species": "SPECIES_CHATOT", + "moves": [ + "MOVE_FURY_ATTACK", + "MOVE_SING", + "MOVE_GROWL", + "MOVE_PECK" + ] + }, + { + "difficulty": 0, + "level": 25, + "species": "SPECIES_CHERRIM", + "moves": [ + "MOVE_PETAL_DANCE", + "MOVE_SUNNY_DAY", + "MOVE_MAGICAL_LEAF", + "MOVE_HELPING_HAND" + ] + } + ] + }, + { + "index": 826, + "type": 0, + "class": 97, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 5, + "species": "SPECIES_RATTATA" + } + ] + }, + { + "index": 827, + "type": 1, + "class": 53, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 39, + "species": "SPECIES_SNOVER", + "moves": [ + "MOVE_ICE_SHARD", + "MOVE_WOOD_HAMMER", + "MOVE_SWAGGER" + ] + } + ] + }, + { + "index": 828, + "type": 1, + "class": 54, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 50, + "level": 39, + "species": "SPECIES_SNOVER", + "moves": [ + "MOVE_ICE_SHARD", + "MOVE_WOOD_HAMMER", + "MOVE_LEER" + ] + } + ] + }, + { + "index": 829, + "type": 1, + "class": 41, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 37, + "species": "SPECIES_KADABRA", + "moves": [ + "MOVE_PSYBEAM", + "MOVE_DISABLE", + "MOVE_MIRACLE_EYE" + ] + } + ] + }, + { + "index": 830, + "type": 1, + "class": 41, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 35, + "species": "SPECIES_KADABRA", + "moves": [ + "MOVE_PSYBEAM", + "MOVE_FLASH", + "MOVE_REFLECT", + "MOVE_LIGHT_SCREEN" + ] + }, + { + "difficulty": 0, + "level": 35, + "species": "SPECIES_KADABRA", + "moves": [ + "MOVE_PSYBEAM", + "MOVE_PSYCHO_CUT", + "MOVE_THUNDER_WAVE", + "MOVE_DISABLE" + ] + } + ] + }, + { + "index": 831, + "type": 1, + "class": 41, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 15, + "species": "SPECIES_KADABRA", + "moves": [ + "MOVE_CONFUSION", + "MOVE_KINESIS" + ] + } + ] + }, + { + "index": 832, + "type": 0, + "class": 22, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 41, + "species": "SPECIES_PIKACHU" + }, + { + "difficulty": 0, + "level": 41, + "species": "SPECIES_PIKACHU" + } + ] + }, + { + "index": 833, + "type": 1, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 28, + "species": "SPECIES_CASCOON", + "moves": [ + "MOVE_TACKLE", + "MOVE_HARDEN", + "MOVE_POISON_STING" + ] + }, + { + "difficulty": 30, + "level": 28, + "species": "SPECIES_DUSTOX", + "moves": [ + "MOVE_PSYBEAM", + "MOVE_MOONLIGHT", + "MOVE_PROTECT", + "MOVE_GUST" + ] + }, + { + "difficulty": 30, + "level": 28, + "species": "SPECIES_BEAUTIFLY", + "moves": [ + "MOVE_MEGA_DRAIN", + "MOVE_MORNING_SUN", + "MOVE_STUN_SPORE", + "MOVE_GUST" + ] + } + ] + }, + { + "index": 834, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 28, + "species": "SPECIES_ZUBAT" + }, + { + "difficulty": 30, + "level": 28, + "species": "SPECIES_STUNKY" + }, + { + "difficulty": 30, + "level": 28, + "species": "SPECIES_CROAGUNK" + } + ] + }, + { + "index": 835, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 31, + "species": "SPECIES_ZUBAT" + }, + { + "difficulty": 30, + "level": 31, + "species": "SPECIES_ZUBAT" + }, + { + "difficulty": 30, + "level": 34, + "species": "SPECIES_GOLBAT" + } + ] + }, + { + "index": 836, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 32, + "species": "SPECIES_GLAMEOW" + }, + { + "difficulty": 30, + "level": 32, + "species": "SPECIES_STUNKY" + }, + { + "difficulty": 30, + "level": 32, + "species": "SPECIES_CROAGUNK" + } + ] + }, + { + "index": 837, + "type": 1, + "class": 63, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 250, + "level": 58, + "species": "SPECIES_STARAPTOR", + "moves": [ + "MOVE_CLOSE_COMBAT", + "MOVE_AERIAL_ACE", + "MOVE_STEEL_WING", + "MOVE_U_TURN" + ] + }, + { + "difficulty": 250, + "level": 59, + "species": "SPECIES_FLOATZEL", + "moves": [ + "MOVE_AQUA_JET", + "MOVE_CRUNCH", + "MOVE_ICE_FANG", + "MOVE_BRICK_BREAK" + ] + }, + { + "difficulty": 250, + "level": 60, + "species": "SPECIES_HERACROSS", + "moves": [ + "MOVE_MEGAHORN", + "MOVE_CLOSE_COMBAT", + "MOVE_NIGHT_SLASH", + "MOVE_ROCK_SLIDE" + ] + }, + { + "difficulty": 250, + "level": 59, + "species": "SPECIES_RAPIDASH", + "moves": [ + "MOVE_FIRE_BLAST", + "MOVE_SUNNY_DAY", + "MOVE_BOUNCE", + "MOVE_WILL_O_WISP" + ] + }, + { + "difficulty": 250, + "level": 60, + "species": "SPECIES_SNORLAX", + "moves": [ + "MOVE_BODY_SLAM", + "MOVE_CRUNCH", + "MOVE_EARTHQUAKE", + "MOVE_REST" + ] + }, + { + "difficulty": 250, + "level": 64, + "species": "SPECIES_TORTERRA", + "moves": [ + "MOVE_LEAF_STORM", + "MOVE_EARTHQUAKE", + "MOVE_CRUNCH", + "MOVE_LEECH_SEED" + ] + } + ] + }, + { + "index": 838, + "type": 1, + "class": 63, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 250, + "level": 58, + "species": "SPECIES_STARAPTOR", + "moves": [ + "MOVE_CLOSE_COMBAT", + "MOVE_AERIAL_ACE", + "MOVE_STEEL_WING", + "MOVE_U_TURN" + ] + }, + { + "difficulty": 250, + "level": 59, + "species": "SPECIES_FLOATZEL", + "moves": [ + "MOVE_AQUA_JET", + "MOVE_CRUNCH", + "MOVE_ICE_FANG", + "MOVE_BRICK_BREAK" + ] + }, + { + "difficulty": 250, + "level": 60, + "species": "SPECIES_HERACROSS", + "moves": [ + "MOVE_MEGAHORN", + "MOVE_CLOSE_COMBAT", + "MOVE_NIGHT_SLASH", + "MOVE_ROCK_SLIDE" + ] + }, + { + "difficulty": 250, + "level": 59, + "species": "SPECIES_ROSERADE", + "moves": [ + "MOVE_POISON_JAB", + "MOVE_GIGA_DRAIN", + "MOVE_SHADOW_BALL", + "MOVE_GRASS_WHISTLE" + ] + }, + { + "difficulty": 250, + "level": 60, + "species": "SPECIES_SNORLAX", + "moves": [ + "MOVE_BODY_SLAM", + "MOVE_CRUNCH", + "MOVE_EARTHQUAKE", + "MOVE_REST" + ] + }, + { + "difficulty": 250, + "level": 64, + "species": "SPECIES_INFERNAPE", + "moves": [ + "MOVE_FLAMETHROWER", + "MOVE_FOCUS_BLAST", + "MOVE_SHADOW_CLAW", + "MOVE_AERIAL_ACE" + ] + } + ] + }, + { + "index": 839, + "type": 1, + "class": 63, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 250, + "level": 58, + "species": "SPECIES_STARAPTOR", + "moves": [ + "MOVE_CLOSE_COMBAT", + "MOVE_AERIAL_ACE", + "MOVE_STEEL_WING", + "MOVE_U_TURN" + ] + }, + { + "difficulty": 250, + "level": 59, + "species": "SPECIES_ROSERADE", + "moves": [ + "MOVE_POISON_JAB", + "MOVE_GIGA_DRAIN", + "MOVE_SHADOW_BALL", + "MOVE_GRASS_WHISTLE" + ] + }, + { + "difficulty": 250, + "level": 60, + "species": "SPECIES_HERACROSS", + "moves": [ + "MOVE_MEGAHORN", + "MOVE_CLOSE_COMBAT", + "MOVE_NIGHT_SLASH", + "MOVE_ROCK_SLIDE" + ] + }, + { + "difficulty": 250, + "level": 59, + "species": "SPECIES_RAPIDASH", + "moves": [ + "MOVE_FIRE_BLAST", + "MOVE_SUNNY_DAY", + "MOVE_BOUNCE", + "MOVE_WILL_O_WISP" + ] + }, + { + "difficulty": 250, + "level": 60, + "species": "SPECIES_SNORLAX", + "moves": [ + "MOVE_BODY_SLAM", + "MOVE_CRUNCH", + "MOVE_EARTHQUAKE", + "MOVE_REST" + ] + }, + { + "difficulty": 250, + "level": 64, + "species": "SPECIES_EMPOLEON", + "moves": [ + "MOVE_HYDRO_PUMP", + "MOVE_METAL_CLAW", + "MOVE_DRILL_PECK", + "MOVE_SHADOW_CLAW" + ] + } + ] + }, + { + "index": 840, + "type": 1, + "class": 63, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 250, + "level": 68, + "species": "SPECIES_STARAPTOR", + "moves": [ + "MOVE_CLOSE_COMBAT", + "MOVE_AERIAL_ACE", + "MOVE_STEEL_WING", + "MOVE_U_TURN" + ] + }, + { + "difficulty": 250, + "level": 69, + "species": "SPECIES_FLOATZEL", + "moves": [ + "MOVE_AQUA_JET", + "MOVE_CRUNCH", + "MOVE_ICE_FANG", + "MOVE_BRICK_BREAK" + ] + }, + { + "difficulty": 250, + "level": 70, + "species": "SPECIES_HERACROSS", + "moves": [ + "MOVE_MEGAHORN", + "MOVE_CLOSE_COMBAT", + "MOVE_NIGHT_SLASH", + "MOVE_ROCK_SLIDE" + ] + }, + { + "difficulty": 250, + "level": 69, + "species": "SPECIES_RAPIDASH", + "moves": [ + "MOVE_FIRE_BLAST", + "MOVE_SUNNY_DAY", + "MOVE_MEGAHORN", + "MOVE_WILL_O_WISP" + ] + }, + { + "difficulty": 250, + "level": 70, + "species": "SPECIES_SNORLAX", + "moves": [ + "MOVE_GIGA_IMPACT", + "MOVE_CRUNCH", + "MOVE_EARTHQUAKE", + "MOVE_BRICK_BREAK" + ] + }, + { + "difficulty": 250, + "level": 74, + "species": "SPECIES_TORTERRA", + "moves": [ + "MOVE_LEAF_STORM", + "MOVE_EARTHQUAKE", + "MOVE_CRUNCH", + "MOVE_STONE_EDGE" + ] + } + ] + }, + { + "index": 841, + "type": 1, + "class": 63, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 250, + "level": 68, + "species": "SPECIES_STARAPTOR", + "moves": [ + "MOVE_CLOSE_COMBAT", + "MOVE_AERIAL_ACE", + "MOVE_STEEL_WING", + "MOVE_U_TURN" + ] + }, + { + "difficulty": 250, + "level": 69, + "species": "SPECIES_FLOATZEL", + "moves": [ + "MOVE_AQUA_JET", + "MOVE_CRUNCH", + "MOVE_ICE_FANG", + "MOVE_BRICK_BREAK" + ] + }, + { + "difficulty": 250, + "level": 70, + "species": "SPECIES_HERACROSS", + "moves": [ + "MOVE_MEGAHORN", + "MOVE_CLOSE_COMBAT", + "MOVE_NIGHT_SLASH", + "MOVE_ROCK_SLIDE" + ] + }, + { + "difficulty": 250, + "level": 69, + "species": "SPECIES_ROSERADE", + "moves": [ + "MOVE_SLUDGE_BOMB", + "MOVE_GIGA_DRAIN", + "MOVE_SHADOW_BALL", + "MOVE_GRASS_WHISTLE" + ] + }, + { + "difficulty": 250, + "level": 70, + "species": "SPECIES_SNORLAX", + "moves": [ + "MOVE_GIGA_IMPACT", + "MOVE_CRUNCH", + "MOVE_EARTHQUAKE", + "MOVE_BRICK_BREAK" + ] + }, + { + "difficulty": 250, + "level": 74, + "species": "SPECIES_INFERNAPE", + "moves": [ + "MOVE_FLARE_BLITZ", + "MOVE_FOCUS_BLAST", + "MOVE_SHADOW_CLAW", + "MOVE_AERIAL_ACE" + ] + } + ] + }, + { + "index": 842, + "type": 1, + "class": 63, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 250, + "level": 68, + "species": "SPECIES_STARAPTOR", + "moves": [ + "MOVE_CLOSE_COMBAT", + "MOVE_AERIAL_ACE", + "MOVE_STEEL_WING", + "MOVE_U_TURN" + ] + }, + { + "difficulty": 250, + "level": 69, + "species": "SPECIES_ROSERADE", + "moves": [ + "MOVE_SLUDGE_BOMB", + "MOVE_GIGA_DRAIN", + "MOVE_SHADOW_BALL", + "MOVE_GRASS_WHISTLE" + ] + }, + { + "difficulty": 250, + "level": 70, + "species": "SPECIES_HERACROSS", + "moves": [ + "MOVE_MEGAHORN", + "MOVE_CLOSE_COMBAT", + "MOVE_NIGHT_SLASH", + "MOVE_ROCK_SLIDE" + ] + }, + { + "difficulty": 250, + "level": 69, + "species": "SPECIES_RAPIDASH", + "moves": [ + "MOVE_FIRE_BLAST", + "MOVE_SUNNY_DAY", + "MOVE_MEGAHORN", + "MOVE_WILL_O_WISP" + ] + }, + { + "difficulty": 250, + "level": 70, + "species": "SPECIES_SNORLAX", + "moves": [ + "MOVE_GIGA_IMPACT", + "MOVE_CRUNCH", + "MOVE_EARTHQUAKE", + "MOVE_BRICK_BREAK" + ] + }, + { + "difficulty": 250, + "level": 74, + "species": "SPECIES_EMPOLEON", + "moves": [ + "MOVE_HYDRO_PUMP", + "MOVE_METAL_CLAW", + "MOVE_DRILL_PECK", + "MOVE_ICE_BEAM" + ] + } + ] + }, + { + "index": 843, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 11, + "species": "SPECIES_GLAMEOW" + } + ] + }, + { + "index": 844, + "type": 0, + "class": 59, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_MACHOP" + }, + { + "difficulty": 0, + "level": 31, + "species": "SPECIES_MACHOKE" + } + ] + }, + { + "index": 845, + "type": 0, + "class": 59, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 33, + "species": "SPECIES_STEELIX" + } + ] + }, + { + "index": 846, + "type": 0, + "class": 59, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 0, + "level": 33, + "species": "SPECIES_RAPIDASH" + } + ] + }, + { + "index": 847, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 25, + "species": "SPECIES_GLAMEOW" + } + ] + }, + { + "index": 848, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 25, + "species": "SPECIES_BEAUTIFLY" + }, + { + "difficulty": 30, + "level": 25, + "species": "SPECIES_STUNKY" + } + ] + }, + { + "index": 849, + "type": 0, + "class": 73, + "unk2": 0, + "items": [], + "unkC": 1, + "unk10": 0, + "party": [ + { + "difficulty": 30, + "level": 25, + "species": "SPECIES_DUSTOX" + }, + { + "difficulty": 30, + "level": 25, + "species": "SPECIES_CROAGUNK" + } + ] + } + ] +} diff --git a/files/poketool/trainer/trdata.json.txt b/files/poketool/trainer/trdata.json.txt new file mode 100644 index 00000000..3c84dc27 --- /dev/null +++ b/files/poketool/trainer/trdata.json.txt @@ -0,0 +1,22 @@ +{{ doNotModifyHeader }} + +#include "global.h" +#include "trainer_data.h" +#include "constants/items.h" + +u32 __size = sizeof(struct TrainerData); + +const struct TrainerData __data[] = { + {}, +## for trainer in trdata + { + {{ trainer.type }}, + {{ trainer.class }}, + {{ trainer.unk2 }}, + {{ length(trainer.party) }}, + { {% for item in trainer.items %}{{ item }},{% endfor %} }, + {{ trainer.unkC }}, + {{ trainer.unk10 }} + }, +## endfor +}; diff --git a/files/poketool/trainer/trdata/.knarcignore b/files/poketool/trainer/trdata/.knarcignore deleted file mode 100644 index 2856080a..00000000 --- a/files/poketool/trainer/trdata/.knarcignore +++ /dev/null @@ -1,2 +0,0 @@ -*.png -*.pal diff --git a/files/poketool/trainer/trdata/narc_0000.bin b/files/poketool/trainer/trdata/narc_0000.bin deleted file mode 100644 index df879cf4..00000000 Binary files a/files/poketool/trainer/trdata/narc_0000.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0001.bin b/files/poketool/trainer/trdata/narc_0001.bin deleted file mode 100644 index 7f3f4d63..00000000 Binary files a/files/poketool/trainer/trdata/narc_0001.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0002.bin b/files/poketool/trainer/trdata/narc_0002.bin deleted file mode 100644 index 7f3f4d63..00000000 Binary files a/files/poketool/trainer/trdata/narc_0002.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0003.bin b/files/poketool/trainer/trdata/narc_0003.bin deleted file mode 100644 index f1a6c7be..00000000 Binary files a/files/poketool/trainer/trdata/narc_0003.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0004.bin b/files/poketool/trainer/trdata/narc_0004.bin deleted file mode 100644 index 5f259161..00000000 Binary files a/files/poketool/trainer/trdata/narc_0004.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0005.bin b/files/poketool/trainer/trdata/narc_0005.bin deleted file mode 100644 index 69c6f738..00000000 Binary files a/files/poketool/trainer/trdata/narc_0005.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0006.bin b/files/poketool/trainer/trdata/narc_0006.bin deleted file mode 100644 index 69c6f738..00000000 Binary files a/files/poketool/trainer/trdata/narc_0006.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0007.bin b/files/poketool/trainer/trdata/narc_0007.bin deleted file mode 100644 index e7a424ba..00000000 Binary files a/files/poketool/trainer/trdata/narc_0007.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0008.bin b/files/poketool/trainer/trdata/narc_0008.bin deleted file mode 100644 index e7a424ba..00000000 Binary files a/files/poketool/trainer/trdata/narc_0008.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0009.bin b/files/poketool/trainer/trdata/narc_0009.bin deleted file mode 100644 index 7f3f4d63..00000000 Binary files a/files/poketool/trainer/trdata/narc_0009.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0010.bin b/files/poketool/trainer/trdata/narc_0010.bin deleted file mode 100644 index 5f259161..00000000 Binary files a/files/poketool/trainer/trdata/narc_0010.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0011.bin b/files/poketool/trainer/trdata/narc_0011.bin deleted file mode 100644 index cc4b0ebf..00000000 Binary files a/files/poketool/trainer/trdata/narc_0011.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0012.bin b/files/poketool/trainer/trdata/narc_0012.bin deleted file mode 100644 index cc4b0ebf..00000000 Binary files a/files/poketool/trainer/trdata/narc_0012.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0013.bin b/files/poketool/trainer/trdata/narc_0013.bin deleted file mode 100644 index bbee0ad1..00000000 Binary files a/files/poketool/trainer/trdata/narc_0013.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0014.bin b/files/poketool/trainer/trdata/narc_0014.bin deleted file mode 100644 index 570f4d80..00000000 Binary files a/files/poketool/trainer/trdata/narc_0014.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0015.bin b/files/poketool/trainer/trdata/narc_0015.bin deleted file mode 100644 index 5b752f7d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0015.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0016.bin b/files/poketool/trainer/trdata/narc_0016.bin deleted file mode 100644 index 02a78315..00000000 Binary files a/files/poketool/trainer/trdata/narc_0016.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0017.bin b/files/poketool/trainer/trdata/narc_0017.bin deleted file mode 100644 index 4766aa43..00000000 Binary files a/files/poketool/trainer/trdata/narc_0017.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0018.bin b/files/poketool/trainer/trdata/narc_0018.bin deleted file mode 100644 index 696caf41..00000000 Binary files a/files/poketool/trainer/trdata/narc_0018.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0019.bin b/files/poketool/trainer/trdata/narc_0019.bin deleted file mode 100644 index a26745d9..00000000 Binary files a/files/poketool/trainer/trdata/narc_0019.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0020.bin b/files/poketool/trainer/trdata/narc_0020.bin deleted file mode 100644 index dd29802e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0020.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0021.bin b/files/poketool/trainer/trdata/narc_0021.bin deleted file mode 100644 index 41f66e47..00000000 Binary files a/files/poketool/trainer/trdata/narc_0021.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0022.bin b/files/poketool/trainer/trdata/narc_0022.bin deleted file mode 100644 index 2e6217b0..00000000 Binary files a/files/poketool/trainer/trdata/narc_0022.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0023.bin b/files/poketool/trainer/trdata/narc_0023.bin deleted file mode 100644 index 2bbdea64..00000000 Binary files a/files/poketool/trainer/trdata/narc_0023.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0024.bin b/files/poketool/trainer/trdata/narc_0024.bin deleted file mode 100644 index 1b9114f9..00000000 Binary files a/files/poketool/trainer/trdata/narc_0024.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0025.bin b/files/poketool/trainer/trdata/narc_0025.bin deleted file mode 100644 index 421bd2f3..00000000 Binary files a/files/poketool/trainer/trdata/narc_0025.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0026.bin b/files/poketool/trainer/trdata/narc_0026.bin deleted file mode 100644 index 421bd2f3..00000000 Binary files a/files/poketool/trainer/trdata/narc_0026.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0027.bin b/files/poketool/trainer/trdata/narc_0027.bin deleted file mode 100644 index ef7cb2c8..00000000 Binary files a/files/poketool/trainer/trdata/narc_0027.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0028.bin b/files/poketool/trainer/trdata/narc_0028.bin deleted file mode 100644 index 421bd2f3..00000000 Binary files a/files/poketool/trainer/trdata/narc_0028.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0029.bin b/files/poketool/trainer/trdata/narc_0029.bin deleted file mode 100644 index b3f17d3d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0029.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0030.bin b/files/poketool/trainer/trdata/narc_0030.bin deleted file mode 100644 index 6222c996..00000000 Binary files a/files/poketool/trainer/trdata/narc_0030.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0031.bin b/files/poketool/trainer/trdata/narc_0031.bin deleted file mode 100644 index b3f17d3d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0031.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0032.bin b/files/poketool/trainer/trdata/narc_0032.bin deleted file mode 100644 index 6222c996..00000000 Binary files a/files/poketool/trainer/trdata/narc_0032.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0033.bin b/files/poketool/trainer/trdata/narc_0033.bin deleted file mode 100644 index 6fe8c60d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0033.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0034.bin b/files/poketool/trainer/trdata/narc_0034.bin deleted file mode 100644 index 02a78315..00000000 Binary files a/files/poketool/trainer/trdata/narc_0034.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0035.bin b/files/poketool/trainer/trdata/narc_0035.bin deleted file mode 100644 index 63471c10..00000000 Binary files a/files/poketool/trainer/trdata/narc_0035.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0036.bin b/files/poketool/trainer/trdata/narc_0036.bin deleted file mode 100644 index 696caf41..00000000 Binary files a/files/poketool/trainer/trdata/narc_0036.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0037.bin b/files/poketool/trainer/trdata/narc_0037.bin deleted file mode 100644 index 34600ee3..00000000 Binary files a/files/poketool/trainer/trdata/narc_0037.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0038.bin b/files/poketool/trainer/trdata/narc_0038.bin deleted file mode 100644 index 3bdfd715..00000000 Binary files a/files/poketool/trainer/trdata/narc_0038.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0039.bin b/files/poketool/trainer/trdata/narc_0039.bin deleted file mode 100644 index 34600ee3..00000000 Binary files a/files/poketool/trainer/trdata/narc_0039.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0040.bin b/files/poketool/trainer/trdata/narc_0040.bin deleted file mode 100644 index 6bbdce94..00000000 Binary files a/files/poketool/trainer/trdata/narc_0040.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0041.bin b/files/poketool/trainer/trdata/narc_0041.bin deleted file mode 100644 index a26745d9..00000000 Binary files a/files/poketool/trainer/trdata/narc_0041.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0042.bin b/files/poketool/trainer/trdata/narc_0042.bin deleted file mode 100644 index 9c9d3435..00000000 Binary files a/files/poketool/trainer/trdata/narc_0042.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0043.bin b/files/poketool/trainer/trdata/narc_0043.bin deleted file mode 100644 index 45af2a9b..00000000 Binary files a/files/poketool/trainer/trdata/narc_0043.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0044.bin b/files/poketool/trainer/trdata/narc_0044.bin deleted file mode 100644 index 570f4d80..00000000 Binary files a/files/poketool/trainer/trdata/narc_0044.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0045.bin b/files/poketool/trainer/trdata/narc_0045.bin deleted file mode 100644 index 93c51bf7..00000000 Binary files a/files/poketool/trainer/trdata/narc_0045.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0046.bin b/files/poketool/trainer/trdata/narc_0046.bin deleted file mode 100644 index ee98e551..00000000 Binary files a/files/poketool/trainer/trdata/narc_0046.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0047.bin b/files/poketool/trainer/trdata/narc_0047.bin deleted file mode 100644 index 14e818df..00000000 Binary files a/files/poketool/trainer/trdata/narc_0047.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0048.bin b/files/poketool/trainer/trdata/narc_0048.bin deleted file mode 100644 index 2279a05a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0048.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0049.bin b/files/poketool/trainer/trdata/narc_0049.bin deleted file mode 100644 index 772fdcef..00000000 Binary files a/files/poketool/trainer/trdata/narc_0049.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0050.bin b/files/poketool/trainer/trdata/narc_0050.bin deleted file mode 100644 index 0b892d1d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0050.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0051.bin b/files/poketool/trainer/trdata/narc_0051.bin deleted file mode 100644 index 33bbf307..00000000 Binary files a/files/poketool/trainer/trdata/narc_0051.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0052.bin b/files/poketool/trainer/trdata/narc_0052.bin deleted file mode 100644 index 7f3f4d63..00000000 Binary files a/files/poketool/trainer/trdata/narc_0052.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0053.bin b/files/poketool/trainer/trdata/narc_0053.bin deleted file mode 100644 index 7ac32e6c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0053.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0054.bin b/files/poketool/trainer/trdata/narc_0054.bin deleted file mode 100644 index 2bbdea64..00000000 Binary files a/files/poketool/trainer/trdata/narc_0054.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0055.bin b/files/poketool/trainer/trdata/narc_0055.bin deleted file mode 100644 index 5f50e7c6..00000000 Binary files a/files/poketool/trainer/trdata/narc_0055.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0056.bin b/files/poketool/trainer/trdata/narc_0056.bin deleted file mode 100644 index ee98e551..00000000 Binary files a/files/poketool/trainer/trdata/narc_0056.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0057.bin b/files/poketool/trainer/trdata/narc_0057.bin deleted file mode 100644 index 14e818df..00000000 Binary files a/files/poketool/trainer/trdata/narc_0057.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0058.bin b/files/poketool/trainer/trdata/narc_0058.bin deleted file mode 100644 index dc86effa..00000000 Binary files a/files/poketool/trainer/trdata/narc_0058.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0059.bin b/files/poketool/trainer/trdata/narc_0059.bin deleted file mode 100644 index 772fdcef..00000000 Binary files a/files/poketool/trainer/trdata/narc_0059.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0060.bin b/files/poketool/trainer/trdata/narc_0060.bin deleted file mode 100644 index 0b892d1d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0060.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0061.bin b/files/poketool/trainer/trdata/narc_0061.bin deleted file mode 100644 index 33bbf307..00000000 Binary files a/files/poketool/trainer/trdata/narc_0061.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0062.bin b/files/poketool/trainer/trdata/narc_0062.bin deleted file mode 100644 index b5fceed9..00000000 Binary files a/files/poketool/trainer/trdata/narc_0062.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0063.bin b/files/poketool/trainer/trdata/narc_0063.bin deleted file mode 100644 index a7f8a89a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0063.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0064.bin b/files/poketool/trainer/trdata/narc_0064.bin deleted file mode 100644 index faa97bff..00000000 Binary files a/files/poketool/trainer/trdata/narc_0064.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0065.bin b/files/poketool/trainer/trdata/narc_0065.bin deleted file mode 100644 index 5b752f7d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0065.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0066.bin b/files/poketool/trainer/trdata/narc_0066.bin deleted file mode 100644 index 150ff10e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0066.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0067.bin b/files/poketool/trainer/trdata/narc_0067.bin deleted file mode 100644 index 7bfc3d16..00000000 Binary files a/files/poketool/trainer/trdata/narc_0067.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0068.bin b/files/poketool/trainer/trdata/narc_0068.bin deleted file mode 100644 index 8d46840d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0068.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0069.bin b/files/poketool/trainer/trdata/narc_0069.bin deleted file mode 100644 index 9c9d3435..00000000 Binary files a/files/poketool/trainer/trdata/narc_0069.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0070.bin b/files/poketool/trainer/trdata/narc_0070.bin deleted file mode 100644 index c1398d1e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0070.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0071.bin b/files/poketool/trainer/trdata/narc_0071.bin deleted file mode 100644 index 730e2129..00000000 Binary files a/files/poketool/trainer/trdata/narc_0071.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0072.bin b/files/poketool/trainer/trdata/narc_0072.bin deleted file mode 100644 index ea80f172..00000000 Binary files a/files/poketool/trainer/trdata/narc_0072.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0073.bin b/files/poketool/trainer/trdata/narc_0073.bin deleted file mode 100644 index b245c3b1..00000000 Binary files a/files/poketool/trainer/trdata/narc_0073.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0074.bin b/files/poketool/trainer/trdata/narc_0074.bin deleted file mode 100644 index b954069c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0074.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0075.bin b/files/poketool/trainer/trdata/narc_0075.bin deleted file mode 100644 index f61b201a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0075.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0076.bin b/files/poketool/trainer/trdata/narc_0076.bin deleted file mode 100644 index 9c9d48b2..00000000 Binary files a/files/poketool/trainer/trdata/narc_0076.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0077.bin b/files/poketool/trainer/trdata/narc_0077.bin deleted file mode 100644 index dd29802e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0077.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0078.bin b/files/poketool/trainer/trdata/narc_0078.bin deleted file mode 100644 index d1ba9d5c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0078.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0079.bin b/files/poketool/trainer/trdata/narc_0079.bin deleted file mode 100644 index 67ddc3a2..00000000 Binary files a/files/poketool/trainer/trdata/narc_0079.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0080.bin b/files/poketool/trainer/trdata/narc_0080.bin deleted file mode 100644 index 730e2129..00000000 Binary files a/files/poketool/trainer/trdata/narc_0080.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0081.bin b/files/poketool/trainer/trdata/narc_0081.bin deleted file mode 100644 index 9c9d48b2..00000000 Binary files a/files/poketool/trainer/trdata/narc_0081.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0082.bin b/files/poketool/trainer/trdata/narc_0082.bin deleted file mode 100644 index aee5bdfe..00000000 Binary files a/files/poketool/trainer/trdata/narc_0082.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0083.bin b/files/poketool/trainer/trdata/narc_0083.bin deleted file mode 100644 index dd4e0cac..00000000 Binary files a/files/poketool/trainer/trdata/narc_0083.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0084.bin b/files/poketool/trainer/trdata/narc_0084.bin deleted file mode 100644 index 6f7608cb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0084.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0085.bin b/files/poketool/trainer/trdata/narc_0085.bin deleted file mode 100644 index 4e847a03..00000000 Binary files a/files/poketool/trainer/trdata/narc_0085.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0086.bin b/files/poketool/trainer/trdata/narc_0086.bin deleted file mode 100644 index b58a1adb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0086.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0087.bin b/files/poketool/trainer/trdata/narc_0087.bin deleted file mode 100644 index 72cf2ebc..00000000 Binary files a/files/poketool/trainer/trdata/narc_0087.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0088.bin b/files/poketool/trainer/trdata/narc_0088.bin deleted file mode 100644 index 7611c80a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0088.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0089.bin b/files/poketool/trainer/trdata/narc_0089.bin deleted file mode 100644 index 7611c80a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0089.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0090.bin b/files/poketool/trainer/trdata/narc_0090.bin deleted file mode 100644 index 7611c80a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0090.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0091.bin b/files/poketool/trainer/trdata/narc_0091.bin deleted file mode 100644 index 2bbdea64..00000000 Binary files a/files/poketool/trainer/trdata/narc_0091.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0092.bin b/files/poketool/trainer/trdata/narc_0092.bin deleted file mode 100644 index 45af2a9b..00000000 Binary files a/files/poketool/trainer/trdata/narc_0092.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0093.bin b/files/poketool/trainer/trdata/narc_0093.bin deleted file mode 100644 index c4df596c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0093.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0094.bin b/files/poketool/trainer/trdata/narc_0094.bin deleted file mode 100644 index b8562b25..00000000 Binary files a/files/poketool/trainer/trdata/narc_0094.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0095.bin b/files/poketool/trainer/trdata/narc_0095.bin deleted file mode 100644 index b8562b25..00000000 Binary files a/files/poketool/trainer/trdata/narc_0095.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0096.bin b/files/poketool/trainer/trdata/narc_0096.bin deleted file mode 100644 index 003eb31d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0096.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0097.bin b/files/poketool/trainer/trdata/narc_0097.bin deleted file mode 100644 index d2b6035c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0097.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0098.bin b/files/poketool/trainer/trdata/narc_0098.bin deleted file mode 100644 index 7b5ada8b..00000000 Binary files a/files/poketool/trainer/trdata/narc_0098.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0099.bin b/files/poketool/trainer/trdata/narc_0099.bin deleted file mode 100644 index 8c1aa653..00000000 Binary files a/files/poketool/trainer/trdata/narc_0099.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0100.bin b/files/poketool/trainer/trdata/narc_0100.bin deleted file mode 100644 index 7f3f4d63..00000000 Binary files a/files/poketool/trainer/trdata/narc_0100.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0101.bin b/files/poketool/trainer/trdata/narc_0101.bin deleted file mode 100644 index 7f3f4d63..00000000 Binary files a/files/poketool/trainer/trdata/narc_0101.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0102.bin b/files/poketool/trainer/trdata/narc_0102.bin deleted file mode 100644 index 7611c80a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0102.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0103.bin b/files/poketool/trainer/trdata/narc_0103.bin deleted file mode 100644 index fc4849c1..00000000 Binary files a/files/poketool/trainer/trdata/narc_0103.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0104.bin b/files/poketool/trainer/trdata/narc_0104.bin deleted file mode 100644 index 06f70012..00000000 Binary files a/files/poketool/trainer/trdata/narc_0104.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0105.bin b/files/poketool/trainer/trdata/narc_0105.bin deleted file mode 100644 index aeccc746..00000000 Binary files a/files/poketool/trainer/trdata/narc_0105.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0106.bin b/files/poketool/trainer/trdata/narc_0106.bin deleted file mode 100644 index aeccc746..00000000 Binary files a/files/poketool/trainer/trdata/narc_0106.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0107.bin b/files/poketool/trainer/trdata/narc_0107.bin deleted file mode 100644 index 337775bd..00000000 Binary files a/files/poketool/trainer/trdata/narc_0107.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0108.bin b/files/poketool/trainer/trdata/narc_0108.bin deleted file mode 100644 index 63631284..00000000 Binary files a/files/poketool/trainer/trdata/narc_0108.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0109.bin b/files/poketool/trainer/trdata/narc_0109.bin deleted file mode 100644 index dd29802e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0109.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0110.bin b/files/poketool/trainer/trdata/narc_0110.bin deleted file mode 100644 index 972c8d32..00000000 Binary files a/files/poketool/trainer/trdata/narc_0110.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0111.bin b/files/poketool/trainer/trdata/narc_0111.bin deleted file mode 100644 index 1b9114f9..00000000 Binary files a/files/poketool/trainer/trdata/narc_0111.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0112.bin b/files/poketool/trainer/trdata/narc_0112.bin deleted file mode 100644 index 8b908fcc..00000000 Binary files a/files/poketool/trainer/trdata/narc_0112.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0113.bin b/files/poketool/trainer/trdata/narc_0113.bin deleted file mode 100644 index 9c98c21e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0113.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0114.bin b/files/poketool/trainer/trdata/narc_0114.bin deleted file mode 100644 index 8694d813..00000000 Binary files a/files/poketool/trainer/trdata/narc_0114.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0115.bin b/files/poketool/trainer/trdata/narc_0115.bin deleted file mode 100644 index a26745d9..00000000 Binary files a/files/poketool/trainer/trdata/narc_0115.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0116.bin b/files/poketool/trainer/trdata/narc_0116.bin deleted file mode 100644 index 007cd3fa..00000000 Binary files a/files/poketool/trainer/trdata/narc_0116.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0117.bin b/files/poketool/trainer/trdata/narc_0117.bin deleted file mode 100644 index 69c6f738..00000000 Binary files a/files/poketool/trainer/trdata/narc_0117.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0118.bin b/files/poketool/trainer/trdata/narc_0118.bin deleted file mode 100644 index e7a424ba..00000000 Binary files a/files/poketool/trainer/trdata/narc_0118.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0119.bin b/files/poketool/trainer/trdata/narc_0119.bin deleted file mode 100644 index 5ce2c67c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0119.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0120.bin b/files/poketool/trainer/trdata/narc_0120.bin deleted file mode 100644 index cbfba442..00000000 Binary files a/files/poketool/trainer/trdata/narc_0120.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0121.bin b/files/poketool/trainer/trdata/narc_0121.bin deleted file mode 100644 index 549da886..00000000 Binary files a/files/poketool/trainer/trdata/narc_0121.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0122.bin b/files/poketool/trainer/trdata/narc_0122.bin deleted file mode 100644 index f322b90e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0122.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0123.bin b/files/poketool/trainer/trdata/narc_0123.bin deleted file mode 100644 index fca61ba2..00000000 Binary files a/files/poketool/trainer/trdata/narc_0123.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0124.bin b/files/poketool/trainer/trdata/narc_0124.bin deleted file mode 100644 index b58a1adb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0124.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0125.bin b/files/poketool/trainer/trdata/narc_0125.bin deleted file mode 100644 index b58a1adb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0125.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0126.bin b/files/poketool/trainer/trdata/narc_0126.bin deleted file mode 100644 index 9c9d3435..00000000 Binary files a/files/poketool/trainer/trdata/narc_0126.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0127.bin b/files/poketool/trainer/trdata/narc_0127.bin deleted file mode 100644 index 67ddc3a2..00000000 Binary files a/files/poketool/trainer/trdata/narc_0127.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0128.bin b/files/poketool/trainer/trdata/narc_0128.bin deleted file mode 100644 index 9c9d3435..00000000 Binary files a/files/poketool/trainer/trdata/narc_0128.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0129.bin b/files/poketool/trainer/trdata/narc_0129.bin deleted file mode 100644 index 67ddc3a2..00000000 Binary files a/files/poketool/trainer/trdata/narc_0129.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0130.bin b/files/poketool/trainer/trdata/narc_0130.bin deleted file mode 100644 index 772fdcef..00000000 Binary files a/files/poketool/trainer/trdata/narc_0130.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0131.bin b/files/poketool/trainer/trdata/narc_0131.bin deleted file mode 100644 index 9c9d48b2..00000000 Binary files a/files/poketool/trainer/trdata/narc_0131.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0132.bin b/files/poketool/trainer/trdata/narc_0132.bin deleted file mode 100644 index d02a85a5..00000000 Binary files a/files/poketool/trainer/trdata/narc_0132.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0133.bin b/files/poketool/trainer/trdata/narc_0133.bin deleted file mode 100644 index 942f4373..00000000 Binary files a/files/poketool/trainer/trdata/narc_0133.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0134.bin b/files/poketool/trainer/trdata/narc_0134.bin deleted file mode 100644 index a3aab1c5..00000000 Binary files a/files/poketool/trainer/trdata/narc_0134.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0135.bin b/files/poketool/trainer/trdata/narc_0135.bin deleted file mode 100644 index 02272b8e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0135.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0136.bin b/files/poketool/trainer/trdata/narc_0136.bin deleted file mode 100644 index 49115ae9..00000000 Binary files a/files/poketool/trainer/trdata/narc_0136.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0137.bin b/files/poketool/trainer/trdata/narc_0137.bin deleted file mode 100644 index b7e00871..00000000 Binary files a/files/poketool/trainer/trdata/narc_0137.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0138.bin b/files/poketool/trainer/trdata/narc_0138.bin deleted file mode 100644 index 9ead7ae9..00000000 Binary files a/files/poketool/trainer/trdata/narc_0138.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0139.bin b/files/poketool/trainer/trdata/narc_0139.bin deleted file mode 100644 index 75ef0429..00000000 Binary files a/files/poketool/trainer/trdata/narc_0139.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0140.bin b/files/poketool/trainer/trdata/narc_0140.bin deleted file mode 100644 index 942f4373..00000000 Binary files a/files/poketool/trainer/trdata/narc_0140.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0141.bin b/files/poketool/trainer/trdata/narc_0141.bin deleted file mode 100644 index 0eb6d263..00000000 Binary files a/files/poketool/trainer/trdata/narc_0141.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0142.bin b/files/poketool/trainer/trdata/narc_0142.bin deleted file mode 100644 index d318079b..00000000 Binary files a/files/poketool/trainer/trdata/narc_0142.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0143.bin b/files/poketool/trainer/trdata/narc_0143.bin deleted file mode 100644 index bfe62fdb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0143.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0144.bin b/files/poketool/trainer/trdata/narc_0144.bin deleted file mode 100644 index 9ead7ae9..00000000 Binary files a/files/poketool/trainer/trdata/narc_0144.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0145.bin b/files/poketool/trainer/trdata/narc_0145.bin deleted file mode 100644 index 75ef0429..00000000 Binary files a/files/poketool/trainer/trdata/narc_0145.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0146.bin b/files/poketool/trainer/trdata/narc_0146.bin deleted file mode 100644 index c1398d1e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0146.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0147.bin b/files/poketool/trainer/trdata/narc_0147.bin deleted file mode 100644 index 730e2129..00000000 Binary files a/files/poketool/trainer/trdata/narc_0147.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0148.bin b/files/poketool/trainer/trdata/narc_0148.bin deleted file mode 100644 index 67ddc3a2..00000000 Binary files a/files/poketool/trainer/trdata/narc_0148.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0149.bin b/files/poketool/trainer/trdata/narc_0149.bin deleted file mode 100644 index f4f52d21..00000000 Binary files a/files/poketool/trainer/trdata/narc_0149.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0150.bin b/files/poketool/trainer/trdata/narc_0150.bin deleted file mode 100644 index f4f52d21..00000000 Binary files a/files/poketool/trainer/trdata/narc_0150.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0151.bin b/files/poketool/trainer/trdata/narc_0151.bin deleted file mode 100644 index 172b4b81..00000000 Binary files a/files/poketool/trainer/trdata/narc_0151.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0152.bin b/files/poketool/trainer/trdata/narc_0152.bin deleted file mode 100644 index 172b4b81..00000000 Binary files a/files/poketool/trainer/trdata/narc_0152.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0153.bin b/files/poketool/trainer/trdata/narc_0153.bin deleted file mode 100644 index 45af2a9b..00000000 Binary files a/files/poketool/trainer/trdata/narc_0153.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0154.bin b/files/poketool/trainer/trdata/narc_0154.bin deleted file mode 100644 index e6c39810..00000000 Binary files a/files/poketool/trainer/trdata/narc_0154.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0155.bin b/files/poketool/trainer/trdata/narc_0155.bin deleted file mode 100644 index 8b908fcc..00000000 Binary files a/files/poketool/trainer/trdata/narc_0155.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0156.bin b/files/poketool/trainer/trdata/narc_0156.bin deleted file mode 100644 index f4f52d21..00000000 Binary files a/files/poketool/trainer/trdata/narc_0156.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0157.bin b/files/poketool/trainer/trdata/narc_0157.bin deleted file mode 100644 index f4f52d21..00000000 Binary files a/files/poketool/trainer/trdata/narc_0157.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0158.bin b/files/poketool/trainer/trdata/narc_0158.bin deleted file mode 100644 index 172b4b81..00000000 Binary files a/files/poketool/trainer/trdata/narc_0158.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0159.bin b/files/poketool/trainer/trdata/narc_0159.bin deleted file mode 100644 index fc4849c1..00000000 Binary files a/files/poketool/trainer/trdata/narc_0159.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0160.bin b/files/poketool/trainer/trdata/narc_0160.bin deleted file mode 100644 index f4f52d21..00000000 Binary files a/files/poketool/trainer/trdata/narc_0160.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0161.bin b/files/poketool/trainer/trdata/narc_0161.bin deleted file mode 100644 index 06f70012..00000000 Binary files a/files/poketool/trainer/trdata/narc_0161.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0162.bin b/files/poketool/trainer/trdata/narc_0162.bin deleted file mode 100644 index 241b0f45..00000000 Binary files a/files/poketool/trainer/trdata/narc_0162.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0163.bin b/files/poketool/trainer/trdata/narc_0163.bin deleted file mode 100644 index aeccc746..00000000 Binary files a/files/poketool/trainer/trdata/narc_0163.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0164.bin b/files/poketool/trainer/trdata/narc_0164.bin deleted file mode 100644 index bc2afe0e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0164.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0165.bin b/files/poketool/trainer/trdata/narc_0165.bin deleted file mode 100644 index 8b908fcc..00000000 Binary files a/files/poketool/trainer/trdata/narc_0165.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0166.bin b/files/poketool/trainer/trdata/narc_0166.bin deleted file mode 100644 index 06f70012..00000000 Binary files a/files/poketool/trainer/trdata/narc_0166.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0167.bin b/files/poketool/trainer/trdata/narc_0167.bin deleted file mode 100644 index 172b4b81..00000000 Binary files a/files/poketool/trainer/trdata/narc_0167.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0168.bin b/files/poketool/trainer/trdata/narc_0168.bin deleted file mode 100644 index 1b9114f9..00000000 Binary files a/files/poketool/trainer/trdata/narc_0168.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0169.bin b/files/poketool/trainer/trdata/narc_0169.bin deleted file mode 100644 index 8694d813..00000000 Binary files a/files/poketool/trainer/trdata/narc_0169.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0170.bin b/files/poketool/trainer/trdata/narc_0170.bin deleted file mode 100644 index 1a48a8ce..00000000 Binary files a/files/poketool/trainer/trdata/narc_0170.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0171.bin b/files/poketool/trainer/trdata/narc_0171.bin deleted file mode 100644 index 5f5dee1e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0171.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0172.bin b/files/poketool/trainer/trdata/narc_0172.bin deleted file mode 100644 index 1b9114f9..00000000 Binary files a/files/poketool/trainer/trdata/narc_0172.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0173.bin b/files/poketool/trainer/trdata/narc_0173.bin deleted file mode 100644 index 45af2a9b..00000000 Binary files a/files/poketool/trainer/trdata/narc_0173.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0174.bin b/files/poketool/trainer/trdata/narc_0174.bin deleted file mode 100644 index c4df596c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0174.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0175.bin b/files/poketool/trainer/trdata/narc_0175.bin deleted file mode 100644 index 1b9114f9..00000000 Binary files a/files/poketool/trainer/trdata/narc_0175.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0176.bin b/files/poketool/trainer/trdata/narc_0176.bin deleted file mode 100644 index cde7cb76..00000000 Binary files a/files/poketool/trainer/trdata/narc_0176.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0177.bin b/files/poketool/trainer/trdata/narc_0177.bin deleted file mode 100644 index cde7cb76..00000000 Binary files a/files/poketool/trainer/trdata/narc_0177.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0178.bin b/files/poketool/trainer/trdata/narc_0178.bin deleted file mode 100644 index f322b90e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0178.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0179.bin b/files/poketool/trainer/trdata/narc_0179.bin deleted file mode 100644 index 94015172..00000000 Binary files a/files/poketool/trainer/trdata/narc_0179.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0180.bin b/files/poketool/trainer/trdata/narc_0180.bin deleted file mode 100644 index 7e07d284..00000000 Binary files a/files/poketool/trainer/trdata/narc_0180.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0181.bin b/files/poketool/trainer/trdata/narc_0181.bin deleted file mode 100644 index 2822319d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0181.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0182.bin b/files/poketool/trainer/trdata/narc_0182.bin deleted file mode 100644 index 5f50e7c6..00000000 Binary files a/files/poketool/trainer/trdata/narc_0182.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0183.bin b/files/poketool/trainer/trdata/narc_0183.bin deleted file mode 100644 index 06f70012..00000000 Binary files a/files/poketool/trainer/trdata/narc_0183.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0184.bin b/files/poketool/trainer/trdata/narc_0184.bin deleted file mode 100644 index f4f52d21..00000000 Binary files a/files/poketool/trainer/trdata/narc_0184.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0185.bin b/files/poketool/trainer/trdata/narc_0185.bin deleted file mode 100644 index 06f70012..00000000 Binary files a/files/poketool/trainer/trdata/narc_0185.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0186.bin b/files/poketool/trainer/trdata/narc_0186.bin deleted file mode 100644 index fc4849c1..00000000 Binary files a/files/poketool/trainer/trdata/narc_0186.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0187.bin b/files/poketool/trainer/trdata/narc_0187.bin deleted file mode 100644 index f4f52d21..00000000 Binary files a/files/poketool/trainer/trdata/narc_0187.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0188.bin b/files/poketool/trainer/trdata/narc_0188.bin deleted file mode 100644 index fc4849c1..00000000 Binary files a/files/poketool/trainer/trdata/narc_0188.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0189.bin b/files/poketool/trainer/trdata/narc_0189.bin deleted file mode 100644 index 172b4b81..00000000 Binary files a/files/poketool/trainer/trdata/narc_0189.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0190.bin b/files/poketool/trainer/trdata/narc_0190.bin deleted file mode 100644 index aeccc746..00000000 Binary files a/files/poketool/trainer/trdata/narc_0190.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0191.bin b/files/poketool/trainer/trdata/narc_0191.bin deleted file mode 100644 index 4da77e80..00000000 Binary files a/files/poketool/trainer/trdata/narc_0191.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0192.bin b/files/poketool/trainer/trdata/narc_0192.bin deleted file mode 100644 index aeccc746..00000000 Binary files a/files/poketool/trainer/trdata/narc_0192.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0193.bin b/files/poketool/trainer/trdata/narc_0193.bin deleted file mode 100644 index aeccc746..00000000 Binary files a/files/poketool/trainer/trdata/narc_0193.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0194.bin b/files/poketool/trainer/trdata/narc_0194.bin deleted file mode 100644 index 172b4b81..00000000 Binary files a/files/poketool/trainer/trdata/narc_0194.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0195.bin b/files/poketool/trainer/trdata/narc_0195.bin deleted file mode 100644 index bda798c4..00000000 Binary files a/files/poketool/trainer/trdata/narc_0195.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0196.bin b/files/poketool/trainer/trdata/narc_0196.bin deleted file mode 100644 index d68549f0..00000000 Binary files a/files/poketool/trainer/trdata/narc_0196.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0197.bin b/files/poketool/trainer/trdata/narc_0197.bin deleted file mode 100644 index b1fae20e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0197.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0198.bin b/files/poketool/trainer/trdata/narc_0198.bin deleted file mode 100644 index 7b5ada8b..00000000 Binary files a/files/poketool/trainer/trdata/narc_0198.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0199.bin b/files/poketool/trainer/trdata/narc_0199.bin deleted file mode 100644 index 7b5ada8b..00000000 Binary files a/files/poketool/trainer/trdata/narc_0199.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0200.bin b/files/poketool/trainer/trdata/narc_0200.bin deleted file mode 100644 index 7b5ada8b..00000000 Binary files a/files/poketool/trainer/trdata/narc_0200.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0201.bin b/files/poketool/trainer/trdata/narc_0201.bin deleted file mode 100644 index 9d28bc2d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0201.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0202.bin b/files/poketool/trainer/trdata/narc_0202.bin deleted file mode 100644 index 9d28bc2d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0202.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0203.bin b/files/poketool/trainer/trdata/narc_0203.bin deleted file mode 100644 index bbee0ad1..00000000 Binary files a/files/poketool/trainer/trdata/narc_0203.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0204.bin b/files/poketool/trainer/trdata/narc_0204.bin deleted file mode 100644 index cc4b0ebf..00000000 Binary files a/files/poketool/trainer/trdata/narc_0204.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0205.bin b/files/poketool/trainer/trdata/narc_0205.bin deleted file mode 100644 index 1aa75ca0..00000000 Binary files a/files/poketool/trainer/trdata/narc_0205.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0206.bin b/files/poketool/trainer/trdata/narc_0206.bin deleted file mode 100644 index f239c87b..00000000 Binary files a/files/poketool/trainer/trdata/narc_0206.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0207.bin b/files/poketool/trainer/trdata/narc_0207.bin deleted file mode 100644 index 5f50e7c6..00000000 Binary files a/files/poketool/trainer/trdata/narc_0207.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0208.bin b/files/poketool/trainer/trdata/narc_0208.bin deleted file mode 100644 index b1fae20e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0208.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0209.bin b/files/poketool/trainer/trdata/narc_0209.bin deleted file mode 100644 index b1fae20e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0209.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0210.bin b/files/poketool/trainer/trdata/narc_0210.bin deleted file mode 100644 index b1fae20e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0210.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0211.bin b/files/poketool/trainer/trdata/narc_0211.bin deleted file mode 100644 index 3c50fede..00000000 Binary files a/files/poketool/trainer/trdata/narc_0211.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0212.bin b/files/poketool/trainer/trdata/narc_0212.bin deleted file mode 100644 index 3c50fede..00000000 Binary files a/files/poketool/trainer/trdata/narc_0212.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0213.bin b/files/poketool/trainer/trdata/narc_0213.bin deleted file mode 100644 index da84e8d1..00000000 Binary files a/files/poketool/trainer/trdata/narc_0213.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0214.bin b/files/poketool/trainer/trdata/narc_0214.bin deleted file mode 100644 index da84e8d1..00000000 Binary files a/files/poketool/trainer/trdata/narc_0214.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0215.bin b/files/poketool/trainer/trdata/narc_0215.bin deleted file mode 100644 index 007cd3fa..00000000 Binary files a/files/poketool/trainer/trdata/narc_0215.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0216.bin b/files/poketool/trainer/trdata/narc_0216.bin deleted file mode 100644 index 007cd3fa..00000000 Binary files a/files/poketool/trainer/trdata/narc_0216.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0217.bin b/files/poketool/trainer/trdata/narc_0217.bin deleted file mode 100644 index 69954115..00000000 Binary files a/files/poketool/trainer/trdata/narc_0217.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0218.bin b/files/poketool/trainer/trdata/narc_0218.bin deleted file mode 100644 index 0cceb605..00000000 Binary files a/files/poketool/trainer/trdata/narc_0218.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0219.bin b/files/poketool/trainer/trdata/narc_0219.bin deleted file mode 100644 index b245c3b1..00000000 Binary files a/files/poketool/trainer/trdata/narc_0219.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0220.bin b/files/poketool/trainer/trdata/narc_0220.bin deleted file mode 100644 index 3ff5b340..00000000 Binary files a/files/poketool/trainer/trdata/narc_0220.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0221.bin b/files/poketool/trainer/trdata/narc_0221.bin deleted file mode 100644 index 2338a967..00000000 Binary files a/files/poketool/trainer/trdata/narc_0221.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0222.bin b/files/poketool/trainer/trdata/narc_0222.bin deleted file mode 100644 index be36e090..00000000 Binary files a/files/poketool/trainer/trdata/narc_0222.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0223.bin b/files/poketool/trainer/trdata/narc_0223.bin deleted file mode 100644 index 5f50e7c6..00000000 Binary files a/files/poketool/trainer/trdata/narc_0223.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0224.bin b/files/poketool/trainer/trdata/narc_0224.bin deleted file mode 100644 index 150ff10e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0224.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0225.bin b/files/poketool/trainer/trdata/narc_0225.bin deleted file mode 100644 index e5a38ad2..00000000 Binary files a/files/poketool/trainer/trdata/narc_0225.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0226.bin b/files/poketool/trainer/trdata/narc_0226.bin deleted file mode 100644 index 7bfc3d16..00000000 Binary files a/files/poketool/trainer/trdata/narc_0226.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0227.bin b/files/poketool/trainer/trdata/narc_0227.bin deleted file mode 100644 index 7bfc3d16..00000000 Binary files a/files/poketool/trainer/trdata/narc_0227.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0228.bin b/files/poketool/trainer/trdata/narc_0228.bin deleted file mode 100644 index 8d46840d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0228.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0229.bin b/files/poketool/trainer/trdata/narc_0229.bin deleted file mode 100644 index fd1f828c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0229.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0230.bin b/files/poketool/trainer/trdata/narc_0230.bin deleted file mode 100644 index b245c3b1..00000000 Binary files a/files/poketool/trainer/trdata/narc_0230.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0231.bin b/files/poketool/trainer/trdata/narc_0231.bin deleted file mode 100644 index fab42c3c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0231.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0232.bin b/files/poketool/trainer/trdata/narc_0232.bin deleted file mode 100644 index 77dec775..00000000 Binary files a/files/poketool/trainer/trdata/narc_0232.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0233.bin b/files/poketool/trainer/trdata/narc_0233.bin deleted file mode 100644 index b954069c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0233.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0234.bin b/files/poketool/trainer/trdata/narc_0234.bin deleted file mode 100644 index bfd4bed2..00000000 Binary files a/files/poketool/trainer/trdata/narc_0234.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0235.bin b/files/poketool/trainer/trdata/narc_0235.bin deleted file mode 100644 index c68fff44..00000000 Binary files a/files/poketool/trainer/trdata/narc_0235.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0236.bin b/files/poketool/trainer/trdata/narc_0236.bin deleted file mode 100644 index f61b201a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0236.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0237.bin b/files/poketool/trainer/trdata/narc_0237.bin deleted file mode 100644 index f61b201a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0237.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0238.bin b/files/poketool/trainer/trdata/narc_0238.bin deleted file mode 100644 index 7f3f4d63..00000000 Binary files a/files/poketool/trainer/trdata/narc_0238.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0239.bin b/files/poketool/trainer/trdata/narc_0239.bin deleted file mode 100644 index cc4b0ebf..00000000 Binary files a/files/poketool/trainer/trdata/narc_0239.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0240.bin b/files/poketool/trainer/trdata/narc_0240.bin deleted file mode 100644 index 8d46840d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0240.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0241.bin b/files/poketool/trainer/trdata/narc_0241.bin deleted file mode 100644 index 2bbdea64..00000000 Binary files a/files/poketool/trainer/trdata/narc_0241.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0242.bin b/files/poketool/trainer/trdata/narc_0242.bin deleted file mode 100644 index 3ff5b340..00000000 Binary files a/files/poketool/trainer/trdata/narc_0242.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0243.bin b/files/poketool/trainer/trdata/narc_0243.bin deleted file mode 100644 index b58a1adb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0243.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0244.bin b/files/poketool/trainer/trdata/narc_0244.bin deleted file mode 100644 index 58ac33b0..00000000 Binary files a/files/poketool/trainer/trdata/narc_0244.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0245.bin b/files/poketool/trainer/trdata/narc_0245.bin deleted file mode 100644 index 2b6fc472..00000000 Binary files a/files/poketool/trainer/trdata/narc_0245.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0246.bin b/files/poketool/trainer/trdata/narc_0246.bin deleted file mode 100644 index feeff6e6..00000000 Binary files a/files/poketool/trainer/trdata/narc_0246.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0247.bin b/files/poketool/trainer/trdata/narc_0247.bin deleted file mode 100644 index e5d8c9a2..00000000 Binary files a/files/poketool/trainer/trdata/narc_0247.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0248.bin b/files/poketool/trainer/trdata/narc_0248.bin deleted file mode 100644 index e5d8c9a2..00000000 Binary files a/files/poketool/trainer/trdata/narc_0248.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0249.bin b/files/poketool/trainer/trdata/narc_0249.bin deleted file mode 100644 index e5d8c9a2..00000000 Binary files a/files/poketool/trainer/trdata/narc_0249.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0250.bin b/files/poketool/trainer/trdata/narc_0250.bin deleted file mode 100644 index e19b8c0e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0250.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0251.bin b/files/poketool/trainer/trdata/narc_0251.bin deleted file mode 100644 index a7f8a89a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0251.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0252.bin b/files/poketool/trainer/trdata/narc_0252.bin deleted file mode 100644 index 69c6f738..00000000 Binary files a/files/poketool/trainer/trdata/narc_0252.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0253.bin b/files/poketool/trainer/trdata/narc_0253.bin deleted file mode 100644 index 69c6f738..00000000 Binary files a/files/poketool/trainer/trdata/narc_0253.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0254.bin b/files/poketool/trainer/trdata/narc_0254.bin deleted file mode 100644 index 69c6f738..00000000 Binary files a/files/poketool/trainer/trdata/narc_0254.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0255.bin b/files/poketool/trainer/trdata/narc_0255.bin deleted file mode 100644 index 69c6f738..00000000 Binary files a/files/poketool/trainer/trdata/narc_0255.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0256.bin b/files/poketool/trainer/trdata/narc_0256.bin deleted file mode 100644 index 707f1525..00000000 Binary files a/files/poketool/trainer/trdata/narc_0256.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0257.bin b/files/poketool/trainer/trdata/narc_0257.bin deleted file mode 100644 index d68549f0..00000000 Binary files a/files/poketool/trainer/trdata/narc_0257.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0258.bin b/files/poketool/trainer/trdata/narc_0258.bin deleted file mode 100644 index 9c9d3435..00000000 Binary files a/files/poketool/trainer/trdata/narc_0258.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0259.bin b/files/poketool/trainer/trdata/narc_0259.bin deleted file mode 100644 index 5e82fd45..00000000 Binary files a/files/poketool/trainer/trdata/narc_0259.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0260.bin b/files/poketool/trainer/trdata/narc_0260.bin deleted file mode 100644 index 8ea78b0a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0260.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0261.bin b/files/poketool/trainer/trdata/narc_0261.bin deleted file mode 100644 index 7464edbf..00000000 Binary files a/files/poketool/trainer/trdata/narc_0261.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0262.bin b/files/poketool/trainer/trdata/narc_0262.bin deleted file mode 100644 index 3d0df004..00000000 Binary files a/files/poketool/trainer/trdata/narc_0262.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0263.bin b/files/poketool/trainer/trdata/narc_0263.bin deleted file mode 100644 index 832f2d02..00000000 Binary files a/files/poketool/trainer/trdata/narc_0263.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0264.bin b/files/poketool/trainer/trdata/narc_0264.bin deleted file mode 100644 index e4a85266..00000000 Binary files a/files/poketool/trainer/trdata/narc_0264.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0265.bin b/files/poketool/trainer/trdata/narc_0265.bin deleted file mode 100644 index 69c6f738..00000000 Binary files a/files/poketool/trainer/trdata/narc_0265.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0266.bin b/files/poketool/trainer/trdata/narc_0266.bin deleted file mode 100644 index 1e546e4d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0266.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0267.bin b/files/poketool/trainer/trdata/narc_0267.bin deleted file mode 100644 index 39fce73d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0267.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0268.bin b/files/poketool/trainer/trdata/narc_0268.bin deleted file mode 100644 index d02a85a5..00000000 Binary files a/files/poketool/trainer/trdata/narc_0268.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0269.bin b/files/poketool/trainer/trdata/narc_0269.bin deleted file mode 100644 index 19d0b19d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0269.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0270.bin b/files/poketool/trainer/trdata/narc_0270.bin deleted file mode 100644 index 02272b8e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0270.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0271.bin b/files/poketool/trainer/trdata/narc_0271.bin deleted file mode 100644 index 0eb6d263..00000000 Binary files a/files/poketool/trainer/trdata/narc_0271.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0272.bin b/files/poketool/trainer/trdata/narc_0272.bin deleted file mode 100644 index 19a45642..00000000 Binary files a/files/poketool/trainer/trdata/narc_0272.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0273.bin b/files/poketool/trainer/trdata/narc_0273.bin deleted file mode 100644 index 19a45642..00000000 Binary files a/files/poketool/trainer/trdata/narc_0273.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0274.bin b/files/poketool/trainer/trdata/narc_0274.bin deleted file mode 100644 index 19a45642..00000000 Binary files a/files/poketool/trainer/trdata/narc_0274.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0275.bin b/files/poketool/trainer/trdata/narc_0275.bin deleted file mode 100644 index 19a45642..00000000 Binary files a/files/poketool/trainer/trdata/narc_0275.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0276.bin b/files/poketool/trainer/trdata/narc_0276.bin deleted file mode 100644 index 19a45642..00000000 Binary files a/files/poketool/trainer/trdata/narc_0276.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0277.bin b/files/poketool/trainer/trdata/narc_0277.bin deleted file mode 100644 index c9b2c5ba..00000000 Binary files a/files/poketool/trainer/trdata/narc_0277.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0278.bin b/files/poketool/trainer/trdata/narc_0278.bin deleted file mode 100644 index 1a48a8ce..00000000 Binary files a/files/poketool/trainer/trdata/narc_0278.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0279.bin b/files/poketool/trainer/trdata/narc_0279.bin deleted file mode 100644 index 1a48a8ce..00000000 Binary files a/files/poketool/trainer/trdata/narc_0279.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0280.bin b/files/poketool/trainer/trdata/narc_0280.bin deleted file mode 100644 index 150ff10e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0280.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0281.bin b/files/poketool/trainer/trdata/narc_0281.bin deleted file mode 100644 index 1a48a8ce..00000000 Binary files a/files/poketool/trainer/trdata/narc_0281.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0282.bin b/files/poketool/trainer/trdata/narc_0282.bin deleted file mode 100644 index 1a48a8ce..00000000 Binary files a/files/poketool/trainer/trdata/narc_0282.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0283.bin b/files/poketool/trainer/trdata/narc_0283.bin deleted file mode 100644 index c1b66113..00000000 Binary files a/files/poketool/trainer/trdata/narc_0283.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0284.bin b/files/poketool/trainer/trdata/narc_0284.bin deleted file mode 100644 index 7bfc3d16..00000000 Binary files a/files/poketool/trainer/trdata/narc_0284.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0285.bin b/files/poketool/trainer/trdata/narc_0285.bin deleted file mode 100644 index 7bfc3d16..00000000 Binary files a/files/poketool/trainer/trdata/narc_0285.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0286.bin b/files/poketool/trainer/trdata/narc_0286.bin deleted file mode 100644 index c1b66113..00000000 Binary files a/files/poketool/trainer/trdata/narc_0286.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0287.bin b/files/poketool/trainer/trdata/narc_0287.bin deleted file mode 100644 index 7bfc3d16..00000000 Binary files a/files/poketool/trainer/trdata/narc_0287.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0288.bin b/files/poketool/trainer/trdata/narc_0288.bin deleted file mode 100644 index 5ce2c67c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0288.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0289.bin b/files/poketool/trainer/trdata/narc_0289.bin deleted file mode 100644 index c68fff44..00000000 Binary files a/files/poketool/trainer/trdata/narc_0289.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0290.bin b/files/poketool/trainer/trdata/narc_0290.bin deleted file mode 100644 index 141f67b9..00000000 Binary files a/files/poketool/trainer/trdata/narc_0290.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0291.bin b/files/poketool/trainer/trdata/narc_0291.bin deleted file mode 100644 index e79d339f..00000000 Binary files a/files/poketool/trainer/trdata/narc_0291.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0292.bin b/files/poketool/trainer/trdata/narc_0292.bin deleted file mode 100644 index 4f026089..00000000 Binary files a/files/poketool/trainer/trdata/narc_0292.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0293.bin b/files/poketool/trainer/trdata/narc_0293.bin deleted file mode 100644 index 1567b7b2..00000000 Binary files a/files/poketool/trainer/trdata/narc_0293.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0294.bin b/files/poketool/trainer/trdata/narc_0294.bin deleted file mode 100644 index 5b752f7d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0294.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0295.bin b/files/poketool/trainer/trdata/narc_0295.bin deleted file mode 100644 index 0a9b9b0a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0295.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0296.bin b/files/poketool/trainer/trdata/narc_0296.bin deleted file mode 100644 index ba35ff8c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0296.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0297.bin b/files/poketool/trainer/trdata/narc_0297.bin deleted file mode 100644 index b5fae930..00000000 Binary files a/files/poketool/trainer/trdata/narc_0297.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0298.bin b/files/poketool/trainer/trdata/narc_0298.bin deleted file mode 100644 index b5fae930..00000000 Binary files a/files/poketool/trainer/trdata/narc_0298.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0299.bin b/files/poketool/trainer/trdata/narc_0299.bin deleted file mode 100644 index 4e09951f..00000000 Binary files a/files/poketool/trainer/trdata/narc_0299.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0300.bin b/files/poketool/trainer/trdata/narc_0300.bin deleted file mode 100644 index f322b90e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0300.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0301.bin b/files/poketool/trainer/trdata/narc_0301.bin deleted file mode 100644 index 71ecbdf7..00000000 Binary files a/files/poketool/trainer/trdata/narc_0301.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0302.bin b/files/poketool/trainer/trdata/narc_0302.bin deleted file mode 100644 index 04384397..00000000 Binary files a/files/poketool/trainer/trdata/narc_0302.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0303.bin b/files/poketool/trainer/trdata/narc_0303.bin deleted file mode 100644 index 71ecbdf7..00000000 Binary files a/files/poketool/trainer/trdata/narc_0303.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0304.bin b/files/poketool/trainer/trdata/narc_0304.bin deleted file mode 100644 index de816f46..00000000 Binary files a/files/poketool/trainer/trdata/narc_0304.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0305.bin b/files/poketool/trainer/trdata/narc_0305.bin deleted file mode 100644 index 8694d813..00000000 Binary files a/files/poketool/trainer/trdata/narc_0305.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0306.bin b/files/poketool/trainer/trdata/narc_0306.bin deleted file mode 100644 index 772fdcef..00000000 Binary files a/files/poketool/trainer/trdata/narc_0306.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0307.bin b/files/poketool/trainer/trdata/narc_0307.bin deleted file mode 100644 index 2f326060..00000000 Binary files a/files/poketool/trainer/trdata/narc_0307.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0308.bin b/files/poketool/trainer/trdata/narc_0308.bin deleted file mode 100644 index 772fdcef..00000000 Binary files a/files/poketool/trainer/trdata/narc_0308.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0309.bin b/files/poketool/trainer/trdata/narc_0309.bin deleted file mode 100644 index d7baba3c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0309.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0310.bin b/files/poketool/trainer/trdata/narc_0310.bin deleted file mode 100644 index d7baba3c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0310.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0311.bin b/files/poketool/trainer/trdata/narc_0311.bin deleted file mode 100644 index 5d56750e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0311.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0312.bin b/files/poketool/trainer/trdata/narc_0312.bin deleted file mode 100644 index 77dec775..00000000 Binary files a/files/poketool/trainer/trdata/narc_0312.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0313.bin b/files/poketool/trainer/trdata/narc_0313.bin deleted file mode 100644 index e6ddce27..00000000 Binary files a/files/poketool/trainer/trdata/narc_0313.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0314.bin b/files/poketool/trainer/trdata/narc_0314.bin deleted file mode 100644 index 5d56750e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0314.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0315.bin b/files/poketool/trainer/trdata/narc_0315.bin deleted file mode 100644 index 7531a2b9..00000000 Binary files a/files/poketool/trainer/trdata/narc_0315.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0316.bin b/files/poketool/trainer/trdata/narc_0316.bin deleted file mode 100644 index 9f14e5fb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0316.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0317.bin b/files/poketool/trainer/trdata/narc_0317.bin deleted file mode 100644 index a363a260..00000000 Binary files a/files/poketool/trainer/trdata/narc_0317.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0318.bin b/files/poketool/trainer/trdata/narc_0318.bin deleted file mode 100644 index 7c7b14fb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0318.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0319.bin b/files/poketool/trainer/trdata/narc_0319.bin deleted file mode 100644 index 87719c31..00000000 Binary files a/files/poketool/trainer/trdata/narc_0319.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0320.bin b/files/poketool/trainer/trdata/narc_0320.bin deleted file mode 100644 index 6cf82d80..00000000 Binary files a/files/poketool/trainer/trdata/narc_0320.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0321.bin b/files/poketool/trainer/trdata/narc_0321.bin deleted file mode 100644 index cc4b0ebf..00000000 Binary files a/files/poketool/trainer/trdata/narc_0321.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0322.bin b/files/poketool/trainer/trdata/narc_0322.bin deleted file mode 100644 index f1a6c7be..00000000 Binary files a/files/poketool/trainer/trdata/narc_0322.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0323.bin b/files/poketool/trainer/trdata/narc_0323.bin deleted file mode 100644 index 29ca855d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0323.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0324.bin b/files/poketool/trainer/trdata/narc_0324.bin deleted file mode 100644 index ae12af86..00000000 Binary files a/files/poketool/trainer/trdata/narc_0324.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0325.bin b/files/poketool/trainer/trdata/narc_0325.bin deleted file mode 100644 index 95fa6375..00000000 Binary files a/files/poketool/trainer/trdata/narc_0325.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0326.bin b/files/poketool/trainer/trdata/narc_0326.bin deleted file mode 100644 index 34600ee3..00000000 Binary files a/files/poketool/trainer/trdata/narc_0326.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0327.bin b/files/poketool/trainer/trdata/narc_0327.bin deleted file mode 100644 index c4fad157..00000000 Binary files a/files/poketool/trainer/trdata/narc_0327.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0328.bin b/files/poketool/trainer/trdata/narc_0328.bin deleted file mode 100644 index d80b5fa5..00000000 Binary files a/files/poketool/trainer/trdata/narc_0328.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0329.bin b/files/poketool/trainer/trdata/narc_0329.bin deleted file mode 100644 index 4766aa43..00000000 Binary files a/files/poketool/trainer/trdata/narc_0329.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0330.bin b/files/poketool/trainer/trdata/narc_0330.bin deleted file mode 100644 index 4766aa43..00000000 Binary files a/files/poketool/trainer/trdata/narc_0330.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0331.bin b/files/poketool/trainer/trdata/narc_0331.bin deleted file mode 100644 index a3e02695..00000000 Binary files a/files/poketool/trainer/trdata/narc_0331.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0332.bin b/files/poketool/trainer/trdata/narc_0332.bin deleted file mode 100644 index 7611c80a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0332.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0333.bin b/files/poketool/trainer/trdata/narc_0333.bin deleted file mode 100644 index 7611c80a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0333.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0334.bin b/files/poketool/trainer/trdata/narc_0334.bin deleted file mode 100644 index 3b1cf942..00000000 Binary files a/files/poketool/trainer/trdata/narc_0334.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0335.bin b/files/poketool/trainer/trdata/narc_0335.bin deleted file mode 100644 index 3b1cf942..00000000 Binary files a/files/poketool/trainer/trdata/narc_0335.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0336.bin b/files/poketool/trainer/trdata/narc_0336.bin deleted file mode 100644 index 493573f7..00000000 Binary files a/files/poketool/trainer/trdata/narc_0336.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0337.bin b/files/poketool/trainer/trdata/narc_0337.bin deleted file mode 100644 index 3ff5b340..00000000 Binary files a/files/poketool/trainer/trdata/narc_0337.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0338.bin b/files/poketool/trainer/trdata/narc_0338.bin deleted file mode 100644 index 972c8d32..00000000 Binary files a/files/poketool/trainer/trdata/narc_0338.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0339.bin b/files/poketool/trainer/trdata/narc_0339.bin deleted file mode 100644 index 1205b2ae..00000000 Binary files a/files/poketool/trainer/trdata/narc_0339.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0340.bin b/files/poketool/trainer/trdata/narc_0340.bin deleted file mode 100644 index 34773a14..00000000 Binary files a/files/poketool/trainer/trdata/narc_0340.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0341.bin b/files/poketool/trainer/trdata/narc_0341.bin deleted file mode 100644 index 34773a14..00000000 Binary files a/files/poketool/trainer/trdata/narc_0341.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0342.bin b/files/poketool/trainer/trdata/narc_0342.bin deleted file mode 100644 index 34773a14..00000000 Binary files a/files/poketool/trainer/trdata/narc_0342.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0343.bin b/files/poketool/trainer/trdata/narc_0343.bin deleted file mode 100644 index 24a13ddd..00000000 Binary files a/files/poketool/trainer/trdata/narc_0343.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0344.bin b/files/poketool/trainer/trdata/narc_0344.bin deleted file mode 100644 index 707d6b2a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0344.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0345.bin b/files/poketool/trainer/trdata/narc_0345.bin deleted file mode 100644 index 707d6b2a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0345.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0346.bin b/files/poketool/trainer/trdata/narc_0346.bin deleted file mode 100644 index b58a1adb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0346.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0347.bin b/files/poketool/trainer/trdata/narc_0347.bin deleted file mode 100644 index b58a1adb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0347.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0348.bin b/files/poketool/trainer/trdata/narc_0348.bin deleted file mode 100644 index bff1e47e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0348.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0349.bin b/files/poketool/trainer/trdata/narc_0349.bin deleted file mode 100644 index b7e00871..00000000 Binary files a/files/poketool/trainer/trdata/narc_0349.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0350.bin b/files/poketool/trainer/trdata/narc_0350.bin deleted file mode 100644 index 75ef0429..00000000 Binary files a/files/poketool/trainer/trdata/narc_0350.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0351.bin b/files/poketool/trainer/trdata/narc_0351.bin deleted file mode 100644 index f4f52d21..00000000 Binary files a/files/poketool/trainer/trdata/narc_0351.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0352.bin b/files/poketool/trainer/trdata/narc_0352.bin deleted file mode 100644 index f4f52d21..00000000 Binary files a/files/poketool/trainer/trdata/narc_0352.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0353.bin b/files/poketool/trainer/trdata/narc_0353.bin deleted file mode 100644 index 172b4b81..00000000 Binary files a/files/poketool/trainer/trdata/narc_0353.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0354.bin b/files/poketool/trainer/trdata/narc_0354.bin deleted file mode 100644 index 172b4b81..00000000 Binary files a/files/poketool/trainer/trdata/narc_0354.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0355.bin b/files/poketool/trainer/trdata/narc_0355.bin deleted file mode 100644 index 7f3f4d63..00000000 Binary files a/files/poketool/trainer/trdata/narc_0355.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0356.bin b/files/poketool/trainer/trdata/narc_0356.bin deleted file mode 100644 index 58ac33b0..00000000 Binary files a/files/poketool/trainer/trdata/narc_0356.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0357.bin b/files/poketool/trainer/trdata/narc_0357.bin deleted file mode 100644 index 2b6fc472..00000000 Binary files a/files/poketool/trainer/trdata/narc_0357.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0358.bin b/files/poketool/trainer/trdata/narc_0358.bin deleted file mode 100644 index 87c08c98..00000000 Binary files a/files/poketool/trainer/trdata/narc_0358.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0359.bin b/files/poketool/trainer/trdata/narc_0359.bin deleted file mode 100644 index 3855e65d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0359.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0360.bin b/files/poketool/trainer/trdata/narc_0360.bin deleted file mode 100644 index 25b4b422..00000000 Binary files a/files/poketool/trainer/trdata/narc_0360.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0361.bin b/files/poketool/trainer/trdata/narc_0361.bin deleted file mode 100644 index 0ece065b..00000000 Binary files a/files/poketool/trainer/trdata/narc_0361.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0362.bin b/files/poketool/trainer/trdata/narc_0362.bin deleted file mode 100644 index 8d46840d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0362.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0363.bin b/files/poketool/trainer/trdata/narc_0363.bin deleted file mode 100644 index 0ac27deb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0363.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0364.bin b/files/poketool/trainer/trdata/narc_0364.bin deleted file mode 100644 index 0ac27deb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0364.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0365.bin b/files/poketool/trainer/trdata/narc_0365.bin deleted file mode 100644 index 0ac27deb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0365.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0366.bin b/files/poketool/trainer/trdata/narc_0366.bin deleted file mode 100644 index faa97bff..00000000 Binary files a/files/poketool/trainer/trdata/narc_0366.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0367.bin b/files/poketool/trainer/trdata/narc_0367.bin deleted file mode 100644 index bda798c4..00000000 Binary files a/files/poketool/trainer/trdata/narc_0367.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0368.bin b/files/poketool/trainer/trdata/narc_0368.bin deleted file mode 100644 index 84abdd3a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0368.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0369.bin b/files/poketool/trainer/trdata/narc_0369.bin deleted file mode 100644 index 1a29e585..00000000 Binary files a/files/poketool/trainer/trdata/narc_0369.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0370.bin b/files/poketool/trainer/trdata/narc_0370.bin deleted file mode 100644 index a4bac0b2..00000000 Binary files a/files/poketool/trainer/trdata/narc_0370.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0371.bin b/files/poketool/trainer/trdata/narc_0371.bin deleted file mode 100644 index cffdde91..00000000 Binary files a/files/poketool/trainer/trdata/narc_0371.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0372.bin b/files/poketool/trainer/trdata/narc_0372.bin deleted file mode 100644 index dd29802e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0372.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0373.bin b/files/poketool/trainer/trdata/narc_0373.bin deleted file mode 100644 index b954069c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0373.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0374.bin b/files/poketool/trainer/trdata/narc_0374.bin deleted file mode 100644 index f31f73f7..00000000 Binary files a/files/poketool/trainer/trdata/narc_0374.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0375.bin b/files/poketool/trainer/trdata/narc_0375.bin deleted file mode 100644 index 7ddeabc9..00000000 Binary files a/files/poketool/trainer/trdata/narc_0375.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0376.bin b/files/poketool/trainer/trdata/narc_0376.bin deleted file mode 100644 index 1a29e585..00000000 Binary files a/files/poketool/trainer/trdata/narc_0376.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0377.bin b/files/poketool/trainer/trdata/narc_0377.bin deleted file mode 100644 index 02a78315..00000000 Binary files a/files/poketool/trainer/trdata/narc_0377.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0378.bin b/files/poketool/trainer/trdata/narc_0378.bin deleted file mode 100644 index 5bec4752..00000000 Binary files a/files/poketool/trainer/trdata/narc_0378.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0379.bin b/files/poketool/trainer/trdata/narc_0379.bin deleted file mode 100644 index 5bec4752..00000000 Binary files a/files/poketool/trainer/trdata/narc_0379.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0380.bin b/files/poketool/trainer/trdata/narc_0380.bin deleted file mode 100644 index 5bec4752..00000000 Binary files a/files/poketool/trainer/trdata/narc_0380.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0381.bin b/files/poketool/trainer/trdata/narc_0381.bin deleted file mode 100644 index 19a45642..00000000 Binary files a/files/poketool/trainer/trdata/narc_0381.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0382.bin b/files/poketool/trainer/trdata/narc_0382.bin deleted file mode 100644 index 19a45642..00000000 Binary files a/files/poketool/trainer/trdata/narc_0382.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0383.bin b/files/poketool/trainer/trdata/narc_0383.bin deleted file mode 100644 index 19a45642..00000000 Binary files a/files/poketool/trainer/trdata/narc_0383.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0384.bin b/files/poketool/trainer/trdata/narc_0384.bin deleted file mode 100644 index 0b892d1d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0384.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0385.bin b/files/poketool/trainer/trdata/narc_0385.bin deleted file mode 100644 index 33bbf307..00000000 Binary files a/files/poketool/trainer/trdata/narc_0385.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0386.bin b/files/poketool/trainer/trdata/narc_0386.bin deleted file mode 100644 index c9b2c5ba..00000000 Binary files a/files/poketool/trainer/trdata/narc_0386.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0387.bin b/files/poketool/trainer/trdata/narc_0387.bin deleted file mode 100644 index b5fceed9..00000000 Binary files a/files/poketool/trainer/trdata/narc_0387.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0388.bin b/files/poketool/trainer/trdata/narc_0388.bin deleted file mode 100644 index 150ff10e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0388.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0389.bin b/files/poketool/trainer/trdata/narc_0389.bin deleted file mode 100644 index 150ff10e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0389.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0390.bin b/files/poketool/trainer/trdata/narc_0390.bin deleted file mode 100644 index 1a48a8ce..00000000 Binary files a/files/poketool/trainer/trdata/narc_0390.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0391.bin b/files/poketool/trainer/trdata/narc_0391.bin deleted file mode 100644 index a7f8a89a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0391.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0392.bin b/files/poketool/trainer/trdata/narc_0392.bin deleted file mode 100644 index 7bfc3d16..00000000 Binary files a/files/poketool/trainer/trdata/narc_0392.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0393.bin b/files/poketool/trainer/trdata/narc_0393.bin deleted file mode 100644 index 5f5dee1e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0393.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0394.bin b/files/poketool/trainer/trdata/narc_0394.bin deleted file mode 100644 index 5f5dee1e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0394.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0395.bin b/files/poketool/trainer/trdata/narc_0395.bin deleted file mode 100644 index 69954115..00000000 Binary files a/files/poketool/trainer/trdata/narc_0395.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0396.bin b/files/poketool/trainer/trdata/narc_0396.bin deleted file mode 100644 index 69954115..00000000 Binary files a/files/poketool/trainer/trdata/narc_0396.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0397.bin b/files/poketool/trainer/trdata/narc_0397.bin deleted file mode 100644 index 69954115..00000000 Binary files a/files/poketool/trainer/trdata/narc_0397.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0398.bin b/files/poketool/trainer/trdata/narc_0398.bin deleted file mode 100644 index f239c87b..00000000 Binary files a/files/poketool/trainer/trdata/narc_0398.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0399.bin b/files/poketool/trainer/trdata/narc_0399.bin deleted file mode 100644 index c68fff44..00000000 Binary files a/files/poketool/trainer/trdata/narc_0399.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0400.bin b/files/poketool/trainer/trdata/narc_0400.bin deleted file mode 100644 index c68fff44..00000000 Binary files a/files/poketool/trainer/trdata/narc_0400.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0401.bin b/files/poketool/trainer/trdata/narc_0401.bin deleted file mode 100644 index 5eb40ab0..00000000 Binary files a/files/poketool/trainer/trdata/narc_0401.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0402.bin b/files/poketool/trainer/trdata/narc_0402.bin deleted file mode 100644 index 65f46d42..00000000 Binary files a/files/poketool/trainer/trdata/narc_0402.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0403.bin b/files/poketool/trainer/trdata/narc_0403.bin deleted file mode 100644 index cf7404e8..00000000 Binary files a/files/poketool/trainer/trdata/narc_0403.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0404.bin b/files/poketool/trainer/trdata/narc_0404.bin deleted file mode 100644 index 35a99bfa..00000000 Binary files a/files/poketool/trainer/trdata/narc_0404.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0405.bin b/files/poketool/trainer/trdata/narc_0405.bin deleted file mode 100644 index 52d1e27f..00000000 Binary files a/files/poketool/trainer/trdata/narc_0405.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0406.bin b/files/poketool/trainer/trdata/narc_0406.bin deleted file mode 100644 index 87852afd..00000000 Binary files a/files/poketool/trainer/trdata/narc_0406.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0407.bin b/files/poketool/trainer/trdata/narc_0407.bin deleted file mode 100644 index 8d6b8c08..00000000 Binary files a/files/poketool/trainer/trdata/narc_0407.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0408.bin b/files/poketool/trainer/trdata/narc_0408.bin deleted file mode 100644 index bdd1a4c8..00000000 Binary files a/files/poketool/trainer/trdata/narc_0408.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0409.bin b/files/poketool/trainer/trdata/narc_0409.bin deleted file mode 100644 index bdd1a4c8..00000000 Binary files a/files/poketool/trainer/trdata/narc_0409.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0410.bin b/files/poketool/trainer/trdata/narc_0410.bin deleted file mode 100644 index ba35ff8c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0410.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0411.bin b/files/poketool/trainer/trdata/narc_0411.bin deleted file mode 100644 index 5c3198fb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0411.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0412.bin b/files/poketool/trainer/trdata/narc_0412.bin deleted file mode 100644 index ba35ff8c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0412.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0413.bin b/files/poketool/trainer/trdata/narc_0413.bin deleted file mode 100644 index 5c3198fb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0413.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0414.bin b/files/poketool/trainer/trdata/narc_0414.bin deleted file mode 100644 index b5fae930..00000000 Binary files a/files/poketool/trainer/trdata/narc_0414.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0415.bin b/files/poketool/trainer/trdata/narc_0415.bin deleted file mode 100644 index 5c3198fb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0415.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0416.bin b/files/poketool/trainer/trdata/narc_0416.bin deleted file mode 100644 index 4e09951f..00000000 Binary files a/files/poketool/trainer/trdata/narc_0416.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0417.bin b/files/poketool/trainer/trdata/narc_0417.bin deleted file mode 100644 index 4e09951f..00000000 Binary files a/files/poketool/trainer/trdata/narc_0417.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0418.bin b/files/poketool/trainer/trdata/narc_0418.bin deleted file mode 100644 index d7e26687..00000000 Binary files a/files/poketool/trainer/trdata/narc_0418.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0419.bin b/files/poketool/trainer/trdata/narc_0419.bin deleted file mode 100644 index 5c3198fb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0419.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0420.bin b/files/poketool/trainer/trdata/narc_0420.bin deleted file mode 100644 index 4e09951f..00000000 Binary files a/files/poketool/trainer/trdata/narc_0420.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0421.bin b/files/poketool/trainer/trdata/narc_0421.bin deleted file mode 100644 index 74051774..00000000 Binary files a/files/poketool/trainer/trdata/narc_0421.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0422.bin b/files/poketool/trainer/trdata/narc_0422.bin deleted file mode 100644 index 39b9f511..00000000 Binary files a/files/poketool/trainer/trdata/narc_0422.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0423.bin b/files/poketool/trainer/trdata/narc_0423.bin deleted file mode 100644 index 412c3d60..00000000 Binary files a/files/poketool/trainer/trdata/narc_0423.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0424.bin b/files/poketool/trainer/trdata/narc_0424.bin deleted file mode 100644 index 6fd4e3c5..00000000 Binary files a/files/poketool/trainer/trdata/narc_0424.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0425.bin b/files/poketool/trainer/trdata/narc_0425.bin deleted file mode 100644 index 74051774..00000000 Binary files a/files/poketool/trainer/trdata/narc_0425.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0426.bin b/files/poketool/trainer/trdata/narc_0426.bin deleted file mode 100644 index 412c3d60..00000000 Binary files a/files/poketool/trainer/trdata/narc_0426.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0427.bin b/files/poketool/trainer/trdata/narc_0427.bin deleted file mode 100644 index 74051774..00000000 Binary files a/files/poketool/trainer/trdata/narc_0427.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0428.bin b/files/poketool/trainer/trdata/narc_0428.bin deleted file mode 100644 index 6fd4e3c5..00000000 Binary files a/files/poketool/trainer/trdata/narc_0428.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0429.bin b/files/poketool/trainer/trdata/narc_0429.bin deleted file mode 100644 index 6fd4e3c5..00000000 Binary files a/files/poketool/trainer/trdata/narc_0429.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0430.bin b/files/poketool/trainer/trdata/narc_0430.bin deleted file mode 100644 index 74051774..00000000 Binary files a/files/poketool/trainer/trdata/narc_0430.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0431.bin b/files/poketool/trainer/trdata/narc_0431.bin deleted file mode 100644 index 38ea0dda..00000000 Binary files a/files/poketool/trainer/trdata/narc_0431.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0432.bin b/files/poketool/trainer/trdata/narc_0432.bin deleted file mode 100644 index f322b90e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0432.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0433.bin b/files/poketool/trainer/trdata/narc_0433.bin deleted file mode 100644 index f322b90e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0433.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0434.bin b/files/poketool/trainer/trdata/narc_0434.bin deleted file mode 100644 index f322b90e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0434.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0435.bin b/files/poketool/trainer/trdata/narc_0435.bin deleted file mode 100644 index f322b90e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0435.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0436.bin b/files/poketool/trainer/trdata/narc_0436.bin deleted file mode 100644 index f322b90e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0436.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0437.bin b/files/poketool/trainer/trdata/narc_0437.bin deleted file mode 100644 index 895c47bd..00000000 Binary files a/files/poketool/trainer/trdata/narc_0437.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0438.bin b/files/poketool/trainer/trdata/narc_0438.bin deleted file mode 100644 index 895c47bd..00000000 Binary files a/files/poketool/trainer/trdata/narc_0438.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0439.bin b/files/poketool/trainer/trdata/narc_0439.bin deleted file mode 100644 index 895c47bd..00000000 Binary files a/files/poketool/trainer/trdata/narc_0439.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0440.bin b/files/poketool/trainer/trdata/narc_0440.bin deleted file mode 100644 index 895c47bd..00000000 Binary files a/files/poketool/trainer/trdata/narc_0440.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0441.bin b/files/poketool/trainer/trdata/narc_0441.bin deleted file mode 100644 index 8694d813..00000000 Binary files a/files/poketool/trainer/trdata/narc_0441.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0442.bin b/files/poketool/trainer/trdata/narc_0442.bin deleted file mode 100644 index 8694d813..00000000 Binary files a/files/poketool/trainer/trdata/narc_0442.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0443.bin b/files/poketool/trainer/trdata/narc_0443.bin deleted file mode 100644 index de816f46..00000000 Binary files a/files/poketool/trainer/trdata/narc_0443.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0444.bin b/files/poketool/trainer/trdata/narc_0444.bin deleted file mode 100644 index 9c9d3435..00000000 Binary files a/files/poketool/trainer/trdata/narc_0444.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0445.bin b/files/poketool/trainer/trdata/narc_0445.bin deleted file mode 100644 index 9c9d3435..00000000 Binary files a/files/poketool/trainer/trdata/narc_0445.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0446.bin b/files/poketool/trainer/trdata/narc_0446.bin deleted file mode 100644 index e6ddce27..00000000 Binary files a/files/poketool/trainer/trdata/narc_0446.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0447.bin b/files/poketool/trainer/trdata/narc_0447.bin deleted file mode 100644 index e6ddce27..00000000 Binary files a/files/poketool/trainer/trdata/narc_0447.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0448.bin b/files/poketool/trainer/trdata/narc_0448.bin deleted file mode 100644 index 26a335b7..00000000 Binary files a/files/poketool/trainer/trdata/narc_0448.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0449.bin b/files/poketool/trainer/trdata/narc_0449.bin deleted file mode 100644 index cc4b0ebf..00000000 Binary files a/files/poketool/trainer/trdata/narc_0449.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0450.bin b/files/poketool/trainer/trdata/narc_0450.bin deleted file mode 100644 index cc4b0ebf..00000000 Binary files a/files/poketool/trainer/trdata/narc_0450.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0451.bin b/files/poketool/trainer/trdata/narc_0451.bin deleted file mode 100644 index 34600ee3..00000000 Binary files a/files/poketool/trainer/trdata/narc_0451.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0452.bin b/files/poketool/trainer/trdata/narc_0452.bin deleted file mode 100644 index 6bbdce94..00000000 Binary files a/files/poketool/trainer/trdata/narc_0452.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0453.bin b/files/poketool/trainer/trdata/narc_0453.bin deleted file mode 100644 index 34600ee3..00000000 Binary files a/files/poketool/trainer/trdata/narc_0453.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0454.bin b/files/poketool/trainer/trdata/narc_0454.bin deleted file mode 100644 index 34600ee3..00000000 Binary files a/files/poketool/trainer/trdata/narc_0454.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0455.bin b/files/poketool/trainer/trdata/narc_0455.bin deleted file mode 100644 index a26745d9..00000000 Binary files a/files/poketool/trainer/trdata/narc_0455.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0456.bin b/files/poketool/trainer/trdata/narc_0456.bin deleted file mode 100644 index 63471c10..00000000 Binary files a/files/poketool/trainer/trdata/narc_0456.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0457.bin b/files/poketool/trainer/trdata/narc_0457.bin deleted file mode 100644 index 4766aa43..00000000 Binary files a/files/poketool/trainer/trdata/narc_0457.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0458.bin b/files/poketool/trainer/trdata/narc_0458.bin deleted file mode 100644 index 4766aa43..00000000 Binary files a/files/poketool/trainer/trdata/narc_0458.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0459.bin b/files/poketool/trainer/trdata/narc_0459.bin deleted file mode 100644 index 63471c10..00000000 Binary files a/files/poketool/trainer/trdata/narc_0459.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0460.bin b/files/poketool/trainer/trdata/narc_0460.bin deleted file mode 100644 index 94015172..00000000 Binary files a/files/poketool/trainer/trdata/narc_0460.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0461.bin b/files/poketool/trainer/trdata/narc_0461.bin deleted file mode 100644 index 94015172..00000000 Binary files a/files/poketool/trainer/trdata/narc_0461.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0462.bin b/files/poketool/trainer/trdata/narc_0462.bin deleted file mode 100644 index 94015172..00000000 Binary files a/files/poketool/trainer/trdata/narc_0462.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0463.bin b/files/poketool/trainer/trdata/narc_0463.bin deleted file mode 100644 index 94015172..00000000 Binary files a/files/poketool/trainer/trdata/narc_0463.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0464.bin b/files/poketool/trainer/trdata/narc_0464.bin deleted file mode 100644 index 94015172..00000000 Binary files a/files/poketool/trainer/trdata/narc_0464.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0465.bin b/files/poketool/trainer/trdata/narc_0465.bin deleted file mode 100644 index 8cdac29c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0465.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0466.bin b/files/poketool/trainer/trdata/narc_0466.bin deleted file mode 100644 index cc11cd42..00000000 Binary files a/files/poketool/trainer/trdata/narc_0466.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0467.bin b/files/poketool/trainer/trdata/narc_0467.bin deleted file mode 100644 index 3b1cf942..00000000 Binary files a/files/poketool/trainer/trdata/narc_0467.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0468.bin b/files/poketool/trainer/trdata/narc_0468.bin deleted file mode 100644 index 3b1cf942..00000000 Binary files a/files/poketool/trainer/trdata/narc_0468.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0469.bin b/files/poketool/trainer/trdata/narc_0469.bin deleted file mode 100644 index 493573f7..00000000 Binary files a/files/poketool/trainer/trdata/narc_0469.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0470.bin b/files/poketool/trainer/trdata/narc_0470.bin deleted file mode 100644 index 2a39ff7f..00000000 Binary files a/files/poketool/trainer/trdata/narc_0470.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0471.bin b/files/poketool/trainer/trdata/narc_0471.bin deleted file mode 100644 index 2a39ff7f..00000000 Binary files a/files/poketool/trainer/trdata/narc_0471.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0472.bin b/files/poketool/trainer/trdata/narc_0472.bin deleted file mode 100644 index 2a39ff7f..00000000 Binary files a/files/poketool/trainer/trdata/narc_0472.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0473.bin b/files/poketool/trainer/trdata/narc_0473.bin deleted file mode 100644 index 2a39ff7f..00000000 Binary files a/files/poketool/trainer/trdata/narc_0473.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0474.bin b/files/poketool/trainer/trdata/narc_0474.bin deleted file mode 100644 index 2a39ff7f..00000000 Binary files a/files/poketool/trainer/trdata/narc_0474.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0475.bin b/files/poketool/trainer/trdata/narc_0475.bin deleted file mode 100644 index 2a39ff7f..00000000 Binary files a/files/poketool/trainer/trdata/narc_0475.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0476.bin b/files/poketool/trainer/trdata/narc_0476.bin deleted file mode 100644 index bc46df5a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0476.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0477.bin b/files/poketool/trainer/trdata/narc_0477.bin deleted file mode 100644 index bc46df5a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0477.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0478.bin b/files/poketool/trainer/trdata/narc_0478.bin deleted file mode 100644 index bc46df5a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0478.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0479.bin b/files/poketool/trainer/trdata/narc_0479.bin deleted file mode 100644 index c188464a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0479.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0480.bin b/files/poketool/trainer/trdata/narc_0480.bin deleted file mode 100644 index c188464a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0480.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0481.bin b/files/poketool/trainer/trdata/narc_0481.bin deleted file mode 100644 index c188464a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0481.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0482.bin b/files/poketool/trainer/trdata/narc_0482.bin deleted file mode 100644 index 7e07d284..00000000 Binary files a/files/poketool/trainer/trdata/narc_0482.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0483.bin b/files/poketool/trainer/trdata/narc_0483.bin deleted file mode 100644 index 9d15a4ec..00000000 Binary files a/files/poketool/trainer/trdata/narc_0483.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0484.bin b/files/poketool/trainer/trdata/narc_0484.bin deleted file mode 100644 index 2338a967..00000000 Binary files a/files/poketool/trainer/trdata/narc_0484.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0485.bin b/files/poketool/trainer/trdata/narc_0485.bin deleted file mode 100644 index be36e090..00000000 Binary files a/files/poketool/trainer/trdata/narc_0485.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0486.bin b/files/poketool/trainer/trdata/narc_0486.bin deleted file mode 100644 index 20a9d315..00000000 Binary files a/files/poketool/trainer/trdata/narc_0486.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0487.bin b/files/poketool/trainer/trdata/narc_0487.bin deleted file mode 100644 index 7b5ada8b..00000000 Binary files a/files/poketool/trainer/trdata/narc_0487.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0488.bin b/files/poketool/trainer/trdata/narc_0488.bin deleted file mode 100644 index d1ba9d5c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0488.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0489.bin b/files/poketool/trainer/trdata/narc_0489.bin deleted file mode 100644 index 730e2129..00000000 Binary files a/files/poketool/trainer/trdata/narc_0489.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0490.bin b/files/poketool/trainer/trdata/narc_0490.bin deleted file mode 100644 index ea80f172..00000000 Binary files a/files/poketool/trainer/trdata/narc_0490.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0491.bin b/files/poketool/trainer/trdata/narc_0491.bin deleted file mode 100644 index b58a1adb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0491.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0492.bin b/files/poketool/trainer/trdata/narc_0492.bin deleted file mode 100644 index b58a1adb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0492.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0493.bin b/files/poketool/trainer/trdata/narc_0493.bin deleted file mode 100644 index f4f52d21..00000000 Binary files a/files/poketool/trainer/trdata/narc_0493.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0494.bin b/files/poketool/trainer/trdata/narc_0494.bin deleted file mode 100644 index 172b4b81..00000000 Binary files a/files/poketool/trainer/trdata/narc_0494.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0495.bin b/files/poketool/trainer/trdata/narc_0495.bin deleted file mode 100644 index 7f3f4d63..00000000 Binary files a/files/poketool/trainer/trdata/narc_0495.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0496.bin b/files/poketool/trainer/trdata/narc_0496.bin deleted file mode 100644 index 6fe8c60d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0496.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0497.bin b/files/poketool/trainer/trdata/narc_0497.bin deleted file mode 100644 index 885c3018..00000000 Binary files a/files/poketool/trainer/trdata/narc_0497.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0498.bin b/files/poketool/trainer/trdata/narc_0498.bin deleted file mode 100644 index c9ef989b..00000000 Binary files a/files/poketool/trainer/trdata/narc_0498.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0499.bin b/files/poketool/trainer/trdata/narc_0499.bin deleted file mode 100644 index 8d46840d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0499.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0500.bin b/files/poketool/trainer/trdata/narc_0500.bin deleted file mode 100644 index 8d46840d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0500.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0501.bin b/files/poketool/trainer/trdata/narc_0501.bin deleted file mode 100644 index 0ac27deb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0501.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0502.bin b/files/poketool/trainer/trdata/narc_0502.bin deleted file mode 100644 index b1fae20e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0502.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0503.bin b/files/poketool/trainer/trdata/narc_0503.bin deleted file mode 100644 index 5354608b..00000000 Binary files a/files/poketool/trainer/trdata/narc_0503.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0504.bin b/files/poketool/trainer/trdata/narc_0504.bin deleted file mode 100644 index b1fae20e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0504.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0505.bin b/files/poketool/trainer/trdata/narc_0505.bin deleted file mode 100644 index 5354608b..00000000 Binary files a/files/poketool/trainer/trdata/narc_0505.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0506.bin b/files/poketool/trainer/trdata/narc_0506.bin deleted file mode 100644 index 8c82c171..00000000 Binary files a/files/poketool/trainer/trdata/narc_0506.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0507.bin b/files/poketool/trainer/trdata/narc_0507.bin deleted file mode 100644 index 5c3198fb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0507.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0508.bin b/files/poketool/trainer/trdata/narc_0508.bin deleted file mode 100644 index 4e09951f..00000000 Binary files a/files/poketool/trainer/trdata/narc_0508.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0509.bin b/files/poketool/trainer/trdata/narc_0509.bin deleted file mode 100644 index 5c3198fb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0509.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0510.bin b/files/poketool/trainer/trdata/narc_0510.bin deleted file mode 100644 index d7e26687..00000000 Binary files a/files/poketool/trainer/trdata/narc_0510.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0511.bin b/files/poketool/trainer/trdata/narc_0511.bin deleted file mode 100644 index 5c3198fb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0511.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0512.bin b/files/poketool/trainer/trdata/narc_0512.bin deleted file mode 100644 index 4e09951f..00000000 Binary files a/files/poketool/trainer/trdata/narc_0512.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0513.bin b/files/poketool/trainer/trdata/narc_0513.bin deleted file mode 100644 index 4e09951f..00000000 Binary files a/files/poketool/trainer/trdata/narc_0513.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0514.bin b/files/poketool/trainer/trdata/narc_0514.bin deleted file mode 100644 index 4e09951f..00000000 Binary files a/files/poketool/trainer/trdata/narc_0514.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0515.bin b/files/poketool/trainer/trdata/narc_0515.bin deleted file mode 100644 index 5c3198fb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0515.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0516.bin b/files/poketool/trainer/trdata/narc_0516.bin deleted file mode 100644 index d7e26687..00000000 Binary files a/files/poketool/trainer/trdata/narc_0516.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0517.bin b/files/poketool/trainer/trdata/narc_0517.bin deleted file mode 100644 index 4e09951f..00000000 Binary files a/files/poketool/trainer/trdata/narc_0517.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0518.bin b/files/poketool/trainer/trdata/narc_0518.bin deleted file mode 100644 index d7e26687..00000000 Binary files a/files/poketool/trainer/trdata/narc_0518.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0519.bin b/files/poketool/trainer/trdata/narc_0519.bin deleted file mode 100644 index 5c3198fb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0519.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0520.bin b/files/poketool/trainer/trdata/narc_0520.bin deleted file mode 100644 index 4e09951f..00000000 Binary files a/files/poketool/trainer/trdata/narc_0520.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0521.bin b/files/poketool/trainer/trdata/narc_0521.bin deleted file mode 100644 index 4e09951f..00000000 Binary files a/files/poketool/trainer/trdata/narc_0521.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0522.bin b/files/poketool/trainer/trdata/narc_0522.bin deleted file mode 100644 index 6554b623..00000000 Binary files a/files/poketool/trainer/trdata/narc_0522.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0523.bin b/files/poketool/trainer/trdata/narc_0523.bin deleted file mode 100644 index 6fd4e3c5..00000000 Binary files a/files/poketool/trainer/trdata/narc_0523.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0524.bin b/files/poketool/trainer/trdata/narc_0524.bin deleted file mode 100644 index 6554b623..00000000 Binary files a/files/poketool/trainer/trdata/narc_0524.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0525.bin b/files/poketool/trainer/trdata/narc_0525.bin deleted file mode 100644 index 74051774..00000000 Binary files a/files/poketool/trainer/trdata/narc_0525.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0526.bin b/files/poketool/trainer/trdata/narc_0526.bin deleted file mode 100644 index 6554b623..00000000 Binary files a/files/poketool/trainer/trdata/narc_0526.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0527.bin b/files/poketool/trainer/trdata/narc_0527.bin deleted file mode 100644 index 74051774..00000000 Binary files a/files/poketool/trainer/trdata/narc_0527.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0528.bin b/files/poketool/trainer/trdata/narc_0528.bin deleted file mode 100644 index 52d1e27f..00000000 Binary files a/files/poketool/trainer/trdata/narc_0528.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0529.bin b/files/poketool/trainer/trdata/narc_0529.bin deleted file mode 100644 index cde7cb76..00000000 Binary files a/files/poketool/trainer/trdata/narc_0529.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0530.bin b/files/poketool/trainer/trdata/narc_0530.bin deleted file mode 100644 index 4a163b76..00000000 Binary files a/files/poketool/trainer/trdata/narc_0530.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0531.bin b/files/poketool/trainer/trdata/narc_0531.bin deleted file mode 100644 index 33bbf307..00000000 Binary files a/files/poketool/trainer/trdata/narc_0531.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0532.bin b/files/poketool/trainer/trdata/narc_0532.bin deleted file mode 100644 index 6fe8c60d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0532.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0533.bin b/files/poketool/trainer/trdata/narc_0533.bin deleted file mode 100644 index 141f67b9..00000000 Binary files a/files/poketool/trainer/trdata/narc_0533.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0534.bin b/files/poketool/trainer/trdata/narc_0534.bin deleted file mode 100644 index 5f50e7c6..00000000 Binary files a/files/poketool/trainer/trdata/narc_0534.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0535.bin b/files/poketool/trainer/trdata/narc_0535.bin deleted file mode 100644 index 41f66e47..00000000 Binary files a/files/poketool/trainer/trdata/narc_0535.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0536.bin b/files/poketool/trainer/trdata/narc_0536.bin deleted file mode 100644 index 2822319d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0536.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0537.bin b/files/poketool/trainer/trdata/narc_0537.bin deleted file mode 100644 index 03f3ea6d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0537.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0538.bin b/files/poketool/trainer/trdata/narc_0538.bin deleted file mode 100644 index c5ec8936..00000000 Binary files a/files/poketool/trainer/trdata/narc_0538.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0539.bin b/files/poketool/trainer/trdata/narc_0539.bin deleted file mode 100644 index 19a45642..00000000 Binary files a/files/poketool/trainer/trdata/narc_0539.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0540.bin b/files/poketool/trainer/trdata/narc_0540.bin deleted file mode 100644 index 4b4e675f..00000000 Binary files a/files/poketool/trainer/trdata/narc_0540.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0541.bin b/files/poketool/trainer/trdata/narc_0541.bin deleted file mode 100644 index c105598a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0541.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0542.bin b/files/poketool/trainer/trdata/narc_0542.bin deleted file mode 100644 index 6c34694a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0542.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0543.bin b/files/poketool/trainer/trdata/narc_0543.bin deleted file mode 100644 index 2adcf1cf..00000000 Binary files a/files/poketool/trainer/trdata/narc_0543.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0544.bin b/files/poketool/trainer/trdata/narc_0544.bin deleted file mode 100644 index f1a6c7be..00000000 Binary files a/files/poketool/trainer/trdata/narc_0544.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0545.bin b/files/poketool/trainer/trdata/narc_0545.bin deleted file mode 100644 index 3b1cf942..00000000 Binary files a/files/poketool/trainer/trdata/narc_0545.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0546.bin b/files/poketool/trainer/trdata/narc_0546.bin deleted file mode 100644 index 49379142..00000000 Binary files a/files/poketool/trainer/trdata/narc_0546.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0547.bin b/files/poketool/trainer/trdata/narc_0547.bin deleted file mode 100644 index a4bac0b2..00000000 Binary files a/files/poketool/trainer/trdata/narc_0547.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0548.bin b/files/poketool/trainer/trdata/narc_0548.bin deleted file mode 100644 index 34773a14..00000000 Binary files a/files/poketool/trainer/trdata/narc_0548.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0549.bin b/files/poketool/trainer/trdata/narc_0549.bin deleted file mode 100644 index 7b5ada8b..00000000 Binary files a/files/poketool/trainer/trdata/narc_0549.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0550.bin b/files/poketool/trainer/trdata/narc_0550.bin deleted file mode 100644 index b58a1adb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0550.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0551.bin b/files/poketool/trainer/trdata/narc_0551.bin deleted file mode 100644 index b58a1adb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0551.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0552.bin b/files/poketool/trainer/trdata/narc_0552.bin deleted file mode 100644 index fd1f828c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0552.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0553.bin b/files/poketool/trainer/trdata/narc_0553.bin deleted file mode 100644 index 9c98c21e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0553.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0554.bin b/files/poketool/trainer/trdata/narc_0554.bin deleted file mode 100644 index b954069c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0554.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0555.bin b/files/poketool/trainer/trdata/narc_0555.bin deleted file mode 100644 index b954069c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0555.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0556.bin b/files/poketool/trainer/trdata/narc_0556.bin deleted file mode 100644 index 0075dde0..00000000 Binary files a/files/poketool/trainer/trdata/narc_0556.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0557.bin b/files/poketool/trainer/trdata/narc_0557.bin deleted file mode 100644 index c9b2c5ba..00000000 Binary files a/files/poketool/trainer/trdata/narc_0557.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0558.bin b/files/poketool/trainer/trdata/narc_0558.bin deleted file mode 100644 index b245c3b1..00000000 Binary files a/files/poketool/trainer/trdata/narc_0558.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0559.bin b/files/poketool/trainer/trdata/narc_0559.bin deleted file mode 100644 index b245c3b1..00000000 Binary files a/files/poketool/trainer/trdata/narc_0559.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0560.bin b/files/poketool/trainer/trdata/narc_0560.bin deleted file mode 100644 index c9b2c5ba..00000000 Binary files a/files/poketool/trainer/trdata/narc_0560.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0561.bin b/files/poketool/trainer/trdata/narc_0561.bin deleted file mode 100644 index fab42c3c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0561.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0562.bin b/files/poketool/trainer/trdata/narc_0562.bin deleted file mode 100644 index c9b2c5ba..00000000 Binary files a/files/poketool/trainer/trdata/narc_0562.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0563.bin b/files/poketool/trainer/trdata/narc_0563.bin deleted file mode 100644 index 1a48a8ce..00000000 Binary files a/files/poketool/trainer/trdata/narc_0563.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0564.bin b/files/poketool/trainer/trdata/narc_0564.bin deleted file mode 100644 index e5a38ad2..00000000 Binary files a/files/poketool/trainer/trdata/narc_0564.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0565.bin b/files/poketool/trainer/trdata/narc_0565.bin deleted file mode 100644 index 1a48a8ce..00000000 Binary files a/files/poketool/trainer/trdata/narc_0565.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0566.bin b/files/poketool/trainer/trdata/narc_0566.bin deleted file mode 100644 index 1a48a8ce..00000000 Binary files a/files/poketool/trainer/trdata/narc_0566.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0567.bin b/files/poketool/trainer/trdata/narc_0567.bin deleted file mode 100644 index 1a48a8ce..00000000 Binary files a/files/poketool/trainer/trdata/narc_0567.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0568.bin b/files/poketool/trainer/trdata/narc_0568.bin deleted file mode 100644 index e5a38ad2..00000000 Binary files a/files/poketool/trainer/trdata/narc_0568.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0569.bin b/files/poketool/trainer/trdata/narc_0569.bin deleted file mode 100644 index 1a48a8ce..00000000 Binary files a/files/poketool/trainer/trdata/narc_0569.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0570.bin b/files/poketool/trainer/trdata/narc_0570.bin deleted file mode 100644 index 1a48a8ce..00000000 Binary files a/files/poketool/trainer/trdata/narc_0570.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0571.bin b/files/poketool/trainer/trdata/narc_0571.bin deleted file mode 100644 index 1a48a8ce..00000000 Binary files a/files/poketool/trainer/trdata/narc_0571.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0572.bin b/files/poketool/trainer/trdata/narc_0572.bin deleted file mode 100644 index e5a38ad2..00000000 Binary files a/files/poketool/trainer/trdata/narc_0572.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0573.bin b/files/poketool/trainer/trdata/narc_0573.bin deleted file mode 100644 index 7bfc3d16..00000000 Binary files a/files/poketool/trainer/trdata/narc_0573.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0574.bin b/files/poketool/trainer/trdata/narc_0574.bin deleted file mode 100644 index 5f5dee1e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0574.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0575.bin b/files/poketool/trainer/trdata/narc_0575.bin deleted file mode 100644 index 7bfc3d16..00000000 Binary files a/files/poketool/trainer/trdata/narc_0575.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0576.bin b/files/poketool/trainer/trdata/narc_0576.bin deleted file mode 100644 index 5f5dee1e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0576.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0577.bin b/files/poketool/trainer/trdata/narc_0577.bin deleted file mode 100644 index 7bfc3d16..00000000 Binary files a/files/poketool/trainer/trdata/narc_0577.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0578.bin b/files/poketool/trainer/trdata/narc_0578.bin deleted file mode 100644 index c1b66113..00000000 Binary files a/files/poketool/trainer/trdata/narc_0578.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0579.bin b/files/poketool/trainer/trdata/narc_0579.bin deleted file mode 100644 index 7bfc3d16..00000000 Binary files a/files/poketool/trainer/trdata/narc_0579.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0580.bin b/files/poketool/trainer/trdata/narc_0580.bin deleted file mode 100644 index c1b66113..00000000 Binary files a/files/poketool/trainer/trdata/narc_0580.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0581.bin b/files/poketool/trainer/trdata/narc_0581.bin deleted file mode 100644 index 5f5dee1e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0581.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0582.bin b/files/poketool/trainer/trdata/narc_0582.bin deleted file mode 100644 index 7bfc3d16..00000000 Binary files a/files/poketool/trainer/trdata/narc_0582.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0583.bin b/files/poketool/trainer/trdata/narc_0583.bin deleted file mode 100644 index 5ce2c67c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0583.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0584.bin b/files/poketool/trainer/trdata/narc_0584.bin deleted file mode 100644 index 5ce2c67c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0584.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0585.bin b/files/poketool/trainer/trdata/narc_0585.bin deleted file mode 100644 index c68fff44..00000000 Binary files a/files/poketool/trainer/trdata/narc_0585.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0586.bin b/files/poketool/trainer/trdata/narc_0586.bin deleted file mode 100644 index c68fff44..00000000 Binary files a/files/poketool/trainer/trdata/narc_0586.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0587.bin b/files/poketool/trainer/trdata/narc_0587.bin deleted file mode 100644 index 67ddc3a2..00000000 Binary files a/files/poketool/trainer/trdata/narc_0587.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0588.bin b/files/poketool/trainer/trdata/narc_0588.bin deleted file mode 100644 index e6ddce27..00000000 Binary files a/files/poketool/trainer/trdata/narc_0588.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0589.bin b/files/poketool/trainer/trdata/narc_0589.bin deleted file mode 100644 index 67ddc3a2..00000000 Binary files a/files/poketool/trainer/trdata/narc_0589.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0590.bin b/files/poketool/trainer/trdata/narc_0590.bin deleted file mode 100644 index 9c9d3435..00000000 Binary files a/files/poketool/trainer/trdata/narc_0590.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0591.bin b/files/poketool/trainer/trdata/narc_0591.bin deleted file mode 100644 index b8562b25..00000000 Binary files a/files/poketool/trainer/trdata/narc_0591.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0592.bin b/files/poketool/trainer/trdata/narc_0592.bin deleted file mode 100644 index b8562b25..00000000 Binary files a/files/poketool/trainer/trdata/narc_0592.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0593.bin b/files/poketool/trainer/trdata/narc_0593.bin deleted file mode 100644 index 5e6ea68f..00000000 Binary files a/files/poketool/trainer/trdata/narc_0593.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0594.bin b/files/poketool/trainer/trdata/narc_0594.bin deleted file mode 100644 index 8843728d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0594.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0595.bin b/files/poketool/trainer/trdata/narc_0595.bin deleted file mode 100644 index 8843728d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0595.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0596.bin b/files/poketool/trainer/trdata/narc_0596.bin deleted file mode 100644 index 8843728d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0596.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0597.bin b/files/poketool/trainer/trdata/narc_0597.bin deleted file mode 100644 index 06f70012..00000000 Binary files a/files/poketool/trainer/trdata/narc_0597.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0598.bin b/files/poketool/trainer/trdata/narc_0598.bin deleted file mode 100644 index f4f52d21..00000000 Binary files a/files/poketool/trainer/trdata/narc_0598.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0599.bin b/files/poketool/trainer/trdata/narc_0599.bin deleted file mode 100644 index 06f70012..00000000 Binary files a/files/poketool/trainer/trdata/narc_0599.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0600.bin b/files/poketool/trainer/trdata/narc_0600.bin deleted file mode 100644 index fc4849c1..00000000 Binary files a/files/poketool/trainer/trdata/narc_0600.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0601.bin b/files/poketool/trainer/trdata/narc_0601.bin deleted file mode 100644 index aeccc746..00000000 Binary files a/files/poketool/trainer/trdata/narc_0601.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0602.bin b/files/poketool/trainer/trdata/narc_0602.bin deleted file mode 100644 index aeccc746..00000000 Binary files a/files/poketool/trainer/trdata/narc_0602.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0603.bin b/files/poketool/trainer/trdata/narc_0603.bin deleted file mode 100644 index aeccc746..00000000 Binary files a/files/poketool/trainer/trdata/narc_0603.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0604.bin b/files/poketool/trainer/trdata/narc_0604.bin deleted file mode 100644 index 4da77e80..00000000 Binary files a/files/poketool/trainer/trdata/narc_0604.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0605.bin b/files/poketool/trainer/trdata/narc_0605.bin deleted file mode 100644 index 007cd3fa..00000000 Binary files a/files/poketool/trainer/trdata/narc_0605.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0606.bin b/files/poketool/trainer/trdata/narc_0606.bin deleted file mode 100644 index 8d46840d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0606.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0607.bin b/files/poketool/trainer/trdata/narc_0607.bin deleted file mode 100644 index c188464a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0607.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0608.bin b/files/poketool/trainer/trdata/narc_0608.bin deleted file mode 100644 index 25f19624..00000000 Binary files a/files/poketool/trainer/trdata/narc_0608.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0609.bin b/files/poketool/trainer/trdata/narc_0609.bin deleted file mode 100644 index 4058d3e1..00000000 Binary files a/files/poketool/trainer/trdata/narc_0609.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0610.bin b/files/poketool/trainer/trdata/narc_0610.bin deleted file mode 100644 index 51055bc8..00000000 Binary files a/files/poketool/trainer/trdata/narc_0610.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0611.bin b/files/poketool/trainer/trdata/narc_0611.bin deleted file mode 100644 index a588f52b..00000000 Binary files a/files/poketool/trainer/trdata/narc_0611.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0612.bin b/files/poketool/trainer/trdata/narc_0612.bin deleted file mode 100644 index c38d2bb7..00000000 Binary files a/files/poketool/trainer/trdata/narc_0612.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0613.bin b/files/poketool/trainer/trdata/narc_0613.bin deleted file mode 100644 index adb67597..00000000 Binary files a/files/poketool/trainer/trdata/narc_0613.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0614.bin b/files/poketool/trainer/trdata/narc_0614.bin deleted file mode 100644 index adb67597..00000000 Binary files a/files/poketool/trainer/trdata/narc_0614.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0615.bin b/files/poketool/trainer/trdata/narc_0615.bin deleted file mode 100644 index adb67597..00000000 Binary files a/files/poketool/trainer/trdata/narc_0615.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0616.bin b/files/poketool/trainer/trdata/narc_0616.bin deleted file mode 100644 index 3329300d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0616.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0617.bin b/files/poketool/trainer/trdata/narc_0617.bin deleted file mode 100644 index 3329300d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0617.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0618.bin b/files/poketool/trainer/trdata/narc_0618.bin deleted file mode 100644 index 3329300d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0618.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0619.bin b/files/poketool/trainer/trdata/narc_0619.bin deleted file mode 100644 index c188464a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0619.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0620.bin b/files/poketool/trainer/trdata/narc_0620.bin deleted file mode 100644 index c188464a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0620.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0621.bin b/files/poketool/trainer/trdata/narc_0621.bin deleted file mode 100644 index 8f1f80f0..00000000 Binary files a/files/poketool/trainer/trdata/narc_0621.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0622.bin b/files/poketool/trainer/trdata/narc_0622.bin deleted file mode 100644 index 8f1f80f0..00000000 Binary files a/files/poketool/trainer/trdata/narc_0622.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0623.bin b/files/poketool/trainer/trdata/narc_0623.bin deleted file mode 100644 index 8f1f80f0..00000000 Binary files a/files/poketool/trainer/trdata/narc_0623.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0624.bin b/files/poketool/trainer/trdata/narc_0624.bin deleted file mode 100644 index ae755ee0..00000000 Binary files a/files/poketool/trainer/trdata/narc_0624.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0625.bin b/files/poketool/trainer/trdata/narc_0625.bin deleted file mode 100644 index ae755ee0..00000000 Binary files a/files/poketool/trainer/trdata/narc_0625.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0626.bin b/files/poketool/trainer/trdata/narc_0626.bin deleted file mode 100644 index ae755ee0..00000000 Binary files a/files/poketool/trainer/trdata/narc_0626.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0627.bin b/files/poketool/trainer/trdata/narc_0627.bin deleted file mode 100644 index 41f66e47..00000000 Binary files a/files/poketool/trainer/trdata/narc_0627.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0628.bin b/files/poketool/trainer/trdata/narc_0628.bin deleted file mode 100644 index 41f66e47..00000000 Binary files a/files/poketool/trainer/trdata/narc_0628.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0629.bin b/files/poketool/trainer/trdata/narc_0629.bin deleted file mode 100644 index 41f66e47..00000000 Binary files a/files/poketool/trainer/trdata/narc_0629.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0630.bin b/files/poketool/trainer/trdata/narc_0630.bin deleted file mode 100644 index 93c51bf7..00000000 Binary files a/files/poketool/trainer/trdata/narc_0630.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0631.bin b/files/poketool/trainer/trdata/narc_0631.bin deleted file mode 100644 index 93c51bf7..00000000 Binary files a/files/poketool/trainer/trdata/narc_0631.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0632.bin b/files/poketool/trainer/trdata/narc_0632.bin deleted file mode 100644 index 93c51bf7..00000000 Binary files a/files/poketool/trainer/trdata/narc_0632.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0633.bin b/files/poketool/trainer/trdata/narc_0633.bin deleted file mode 100644 index 3bdfd715..00000000 Binary files a/files/poketool/trainer/trdata/narc_0633.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0634.bin b/files/poketool/trainer/trdata/narc_0634.bin deleted file mode 100644 index 3bdfd715..00000000 Binary files a/files/poketool/trainer/trdata/narc_0634.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0635.bin b/files/poketool/trainer/trdata/narc_0635.bin deleted file mode 100644 index 3bdfd715..00000000 Binary files a/files/poketool/trainer/trdata/narc_0635.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0636.bin b/files/poketool/trainer/trdata/narc_0636.bin deleted file mode 100644 index b954069c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0636.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0637.bin b/files/poketool/trainer/trdata/narc_0637.bin deleted file mode 100644 index b954069c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0637.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0638.bin b/files/poketool/trainer/trdata/narc_0638.bin deleted file mode 100644 index b954069c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0638.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0639.bin b/files/poketool/trainer/trdata/narc_0639.bin deleted file mode 100644 index ee98e551..00000000 Binary files a/files/poketool/trainer/trdata/narc_0639.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0640.bin b/files/poketool/trainer/trdata/narc_0640.bin deleted file mode 100644 index ee98e551..00000000 Binary files a/files/poketool/trainer/trdata/narc_0640.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0641.bin b/files/poketool/trainer/trdata/narc_0641.bin deleted file mode 100644 index ee98e551..00000000 Binary files a/files/poketool/trainer/trdata/narc_0641.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0642.bin b/files/poketool/trainer/trdata/narc_0642.bin deleted file mode 100644 index 14e818df..00000000 Binary files a/files/poketool/trainer/trdata/narc_0642.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0643.bin b/files/poketool/trainer/trdata/narc_0643.bin deleted file mode 100644 index 14e818df..00000000 Binary files a/files/poketool/trainer/trdata/narc_0643.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0644.bin b/files/poketool/trainer/trdata/narc_0644.bin deleted file mode 100644 index 14e818df..00000000 Binary files a/files/poketool/trainer/trdata/narc_0644.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0645.bin b/files/poketool/trainer/trdata/narc_0645.bin deleted file mode 100644 index 02a78315..00000000 Binary files a/files/poketool/trainer/trdata/narc_0645.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0646.bin b/files/poketool/trainer/trdata/narc_0646.bin deleted file mode 100644 index 02a78315..00000000 Binary files a/files/poketool/trainer/trdata/narc_0646.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0647.bin b/files/poketool/trainer/trdata/narc_0647.bin deleted file mode 100644 index 02a78315..00000000 Binary files a/files/poketool/trainer/trdata/narc_0647.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0648.bin b/files/poketool/trainer/trdata/narc_0648.bin deleted file mode 100644 index 942f4373..00000000 Binary files a/files/poketool/trainer/trdata/narc_0648.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0649.bin b/files/poketool/trainer/trdata/narc_0649.bin deleted file mode 100644 index 0eb6d263..00000000 Binary files a/files/poketool/trainer/trdata/narc_0649.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0650.bin b/files/poketool/trainer/trdata/narc_0650.bin deleted file mode 100644 index 19a45642..00000000 Binary files a/files/poketool/trainer/trdata/narc_0650.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0651.bin b/files/poketool/trainer/trdata/narc_0651.bin deleted file mode 100644 index dc86effa..00000000 Binary files a/files/poketool/trainer/trdata/narc_0651.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0652.bin b/files/poketool/trainer/trdata/narc_0652.bin deleted file mode 100644 index dc86effa..00000000 Binary files a/files/poketool/trainer/trdata/narc_0652.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0653.bin b/files/poketool/trainer/trdata/narc_0653.bin deleted file mode 100644 index ef7cb2c8..00000000 Binary files a/files/poketool/trainer/trdata/narc_0653.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0654.bin b/files/poketool/trainer/trdata/narc_0654.bin deleted file mode 100644 index ef7cb2c8..00000000 Binary files a/files/poketool/trainer/trdata/narc_0654.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0655.bin b/files/poketool/trainer/trdata/narc_0655.bin deleted file mode 100644 index ef7cb2c8..00000000 Binary files a/files/poketool/trainer/trdata/narc_0655.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0656.bin b/files/poketool/trainer/trdata/narc_0656.bin deleted file mode 100644 index b3f17d3d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0656.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0657.bin b/files/poketool/trainer/trdata/narc_0657.bin deleted file mode 100644 index b3f17d3d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0657.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0658.bin b/files/poketool/trainer/trdata/narc_0658.bin deleted file mode 100644 index b3f17d3d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0658.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0659.bin b/files/poketool/trainer/trdata/narc_0659.bin deleted file mode 100644 index b245c3b1..00000000 Binary files a/files/poketool/trainer/trdata/narc_0659.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0660.bin b/files/poketool/trainer/trdata/narc_0660.bin deleted file mode 100644 index b245c3b1..00000000 Binary files a/files/poketool/trainer/trdata/narc_0660.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0661.bin b/files/poketool/trainer/trdata/narc_0661.bin deleted file mode 100644 index c9b2c5ba..00000000 Binary files a/files/poketool/trainer/trdata/narc_0661.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0662.bin b/files/poketool/trainer/trdata/narc_0662.bin deleted file mode 100644 index c9b2c5ba..00000000 Binary files a/files/poketool/trainer/trdata/narc_0662.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0663.bin b/files/poketool/trainer/trdata/narc_0663.bin deleted file mode 100644 index 5dddc4c6..00000000 Binary files a/files/poketool/trainer/trdata/narc_0663.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0664.bin b/files/poketool/trainer/trdata/narc_0664.bin deleted file mode 100644 index 150ff10e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0664.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0665.bin b/files/poketool/trainer/trdata/narc_0665.bin deleted file mode 100644 index 150ff10e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0665.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0666.bin b/files/poketool/trainer/trdata/narc_0666.bin deleted file mode 100644 index 1a48a8ce..00000000 Binary files a/files/poketool/trainer/trdata/narc_0666.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0667.bin b/files/poketool/trainer/trdata/narc_0667.bin deleted file mode 100644 index e5a38ad2..00000000 Binary files a/files/poketool/trainer/trdata/narc_0667.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0668.bin b/files/poketool/trainer/trdata/narc_0668.bin deleted file mode 100644 index 5f5dee1e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0668.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0669.bin b/files/poketool/trainer/trdata/narc_0669.bin deleted file mode 100644 index 7bfc3d16..00000000 Binary files a/files/poketool/trainer/trdata/narc_0669.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0670.bin b/files/poketool/trainer/trdata/narc_0670.bin deleted file mode 100644 index 7bfc3d16..00000000 Binary files a/files/poketool/trainer/trdata/narc_0670.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0671.bin b/files/poketool/trainer/trdata/narc_0671.bin deleted file mode 100644 index 7bfc3d16..00000000 Binary files a/files/poketool/trainer/trdata/narc_0671.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0672.bin b/files/poketool/trainer/trdata/narc_0672.bin deleted file mode 100644 index 5f5dee1e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0672.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0673.bin b/files/poketool/trainer/trdata/narc_0673.bin deleted file mode 100644 index 5ce2c67c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0673.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0674.bin b/files/poketool/trainer/trdata/narc_0674.bin deleted file mode 100644 index 5ce2c67c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0674.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0675.bin b/files/poketool/trainer/trdata/narc_0675.bin deleted file mode 100644 index 5ce2c67c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0675.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0676.bin b/files/poketool/trainer/trdata/narc_0676.bin deleted file mode 100644 index 5ce2c67c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0676.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0677.bin b/files/poketool/trainer/trdata/narc_0677.bin deleted file mode 100644 index cbfba442..00000000 Binary files a/files/poketool/trainer/trdata/narc_0677.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0678.bin b/files/poketool/trainer/trdata/narc_0678.bin deleted file mode 100644 index cbfba442..00000000 Binary files a/files/poketool/trainer/trdata/narc_0678.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0679.bin b/files/poketool/trainer/trdata/narc_0679.bin deleted file mode 100644 index c68fff44..00000000 Binary files a/files/poketool/trainer/trdata/narc_0679.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0680.bin b/files/poketool/trainer/trdata/narc_0680.bin deleted file mode 100644 index c68fff44..00000000 Binary files a/files/poketool/trainer/trdata/narc_0680.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0681.bin b/files/poketool/trainer/trdata/narc_0681.bin deleted file mode 100644 index 4f026089..00000000 Binary files a/files/poketool/trainer/trdata/narc_0681.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0682.bin b/files/poketool/trainer/trdata/narc_0682.bin deleted file mode 100644 index 4f026089..00000000 Binary files a/files/poketool/trainer/trdata/narc_0682.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0683.bin b/files/poketool/trainer/trdata/narc_0683.bin deleted file mode 100644 index 2bbdea64..00000000 Binary files a/files/poketool/trainer/trdata/narc_0683.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0684.bin b/files/poketool/trainer/trdata/narc_0684.bin deleted file mode 100644 index 2bbdea64..00000000 Binary files a/files/poketool/trainer/trdata/narc_0684.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0685.bin b/files/poketool/trainer/trdata/narc_0685.bin deleted file mode 100644 index 45af2a9b..00000000 Binary files a/files/poketool/trainer/trdata/narc_0685.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0686.bin b/files/poketool/trainer/trdata/narc_0686.bin deleted file mode 100644 index 45af2a9b..00000000 Binary files a/files/poketool/trainer/trdata/narc_0686.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0687.bin b/files/poketool/trainer/trdata/narc_0687.bin deleted file mode 100644 index 5b752f7d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0687.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0688.bin b/files/poketool/trainer/trdata/narc_0688.bin deleted file mode 100644 index 5b752f7d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0688.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0689.bin b/files/poketool/trainer/trdata/narc_0689.bin deleted file mode 100644 index 549da886..00000000 Binary files a/files/poketool/trainer/trdata/narc_0689.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0690.bin b/files/poketool/trainer/trdata/narc_0690.bin deleted file mode 100644 index 549da886..00000000 Binary files a/files/poketool/trainer/trdata/narc_0690.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0691.bin b/files/poketool/trainer/trdata/narc_0691.bin deleted file mode 100644 index 6f7608cb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0691.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0692.bin b/files/poketool/trainer/trdata/narc_0692.bin deleted file mode 100644 index 6f7608cb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0692.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0693.bin b/files/poketool/trainer/trdata/narc_0693.bin deleted file mode 100644 index 6f7608cb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0693.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0694.bin b/files/poketool/trainer/trdata/narc_0694.bin deleted file mode 100644 index f322b90e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0694.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0695.bin b/files/poketool/trainer/trdata/narc_0695.bin deleted file mode 100644 index 8694d813..00000000 Binary files a/files/poketool/trainer/trdata/narc_0695.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0696.bin b/files/poketool/trainer/trdata/narc_0696.bin deleted file mode 100644 index 8694d813..00000000 Binary files a/files/poketool/trainer/trdata/narc_0696.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0697.bin b/files/poketool/trainer/trdata/narc_0697.bin deleted file mode 100644 index 2f326060..00000000 Binary files a/files/poketool/trainer/trdata/narc_0697.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0698.bin b/files/poketool/trainer/trdata/narc_0698.bin deleted file mode 100644 index 2f326060..00000000 Binary files a/files/poketool/trainer/trdata/narc_0698.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0699.bin b/files/poketool/trainer/trdata/narc_0699.bin deleted file mode 100644 index 9c9d3435..00000000 Binary files a/files/poketool/trainer/trdata/narc_0699.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0700.bin b/files/poketool/trainer/trdata/narc_0700.bin deleted file mode 100644 index 67ddc3a2..00000000 Binary files a/files/poketool/trainer/trdata/narc_0700.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0701.bin b/files/poketool/trainer/trdata/narc_0701.bin deleted file mode 100644 index 4e847a03..00000000 Binary files a/files/poketool/trainer/trdata/narc_0701.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0702.bin b/files/poketool/trainer/trdata/narc_0702.bin deleted file mode 100644 index 4e847a03..00000000 Binary files a/files/poketool/trainer/trdata/narc_0702.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0703.bin b/files/poketool/trainer/trdata/narc_0703.bin deleted file mode 100644 index cc4b0ebf..00000000 Binary files a/files/poketool/trainer/trdata/narc_0703.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0704.bin b/files/poketool/trainer/trdata/narc_0704.bin deleted file mode 100644 index cc4b0ebf..00000000 Binary files a/files/poketool/trainer/trdata/narc_0704.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0705.bin b/files/poketool/trainer/trdata/narc_0705.bin deleted file mode 100644 index cc4b0ebf..00000000 Binary files a/files/poketool/trainer/trdata/narc_0705.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0706.bin b/files/poketool/trainer/trdata/narc_0706.bin deleted file mode 100644 index f1a6c7be..00000000 Binary files a/files/poketool/trainer/trdata/narc_0706.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0707.bin b/files/poketool/trainer/trdata/narc_0707.bin deleted file mode 100644 index f1a6c7be..00000000 Binary files a/files/poketool/trainer/trdata/narc_0707.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0708.bin b/files/poketool/trainer/trdata/narc_0708.bin deleted file mode 100644 index f1a6c7be..00000000 Binary files a/files/poketool/trainer/trdata/narc_0708.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0709.bin b/files/poketool/trainer/trdata/narc_0709.bin deleted file mode 100644 index 34600ee3..00000000 Binary files a/files/poketool/trainer/trdata/narc_0709.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0710.bin b/files/poketool/trainer/trdata/narc_0710.bin deleted file mode 100644 index 34600ee3..00000000 Binary files a/files/poketool/trainer/trdata/narc_0710.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0711.bin b/files/poketool/trainer/trdata/narc_0711.bin deleted file mode 100644 index 34600ee3..00000000 Binary files a/files/poketool/trainer/trdata/narc_0711.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0712.bin b/files/poketool/trainer/trdata/narc_0712.bin deleted file mode 100644 index bbee0ad1..00000000 Binary files a/files/poketool/trainer/trdata/narc_0712.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0713.bin b/files/poketool/trainer/trdata/narc_0713.bin deleted file mode 100644 index bbee0ad1..00000000 Binary files a/files/poketool/trainer/trdata/narc_0713.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0714.bin b/files/poketool/trainer/trdata/narc_0714.bin deleted file mode 100644 index bbee0ad1..00000000 Binary files a/files/poketool/trainer/trdata/narc_0714.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0715.bin b/files/poketool/trainer/trdata/narc_0715.bin deleted file mode 100644 index c4fad157..00000000 Binary files a/files/poketool/trainer/trdata/narc_0715.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0716.bin b/files/poketool/trainer/trdata/narc_0716.bin deleted file mode 100644 index c4fad157..00000000 Binary files a/files/poketool/trainer/trdata/narc_0716.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0717.bin b/files/poketool/trainer/trdata/narc_0717.bin deleted file mode 100644 index c4fad157..00000000 Binary files a/files/poketool/trainer/trdata/narc_0717.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0718.bin b/files/poketool/trainer/trdata/narc_0718.bin deleted file mode 100644 index 63471c10..00000000 Binary files a/files/poketool/trainer/trdata/narc_0718.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0719.bin b/files/poketool/trainer/trdata/narc_0719.bin deleted file mode 100644 index 63471c10..00000000 Binary files a/files/poketool/trainer/trdata/narc_0719.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0720.bin b/files/poketool/trainer/trdata/narc_0720.bin deleted file mode 100644 index 7640a237..00000000 Binary files a/files/poketool/trainer/trdata/narc_0720.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0721.bin b/files/poketool/trainer/trdata/narc_0721.bin deleted file mode 100644 index 7ac32e6c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0721.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0722.bin b/files/poketool/trainer/trdata/narc_0722.bin deleted file mode 100644 index 7ac32e6c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0722.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0723.bin b/files/poketool/trainer/trdata/narc_0723.bin deleted file mode 100644 index 7ac32e6c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0723.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0724.bin b/files/poketool/trainer/trdata/narc_0724.bin deleted file mode 100644 index 7611c80a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0724.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0725.bin b/files/poketool/trainer/trdata/narc_0725.bin deleted file mode 100644 index 7611c80a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0725.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0726.bin b/files/poketool/trainer/trdata/narc_0726.bin deleted file mode 100644 index 7611c80a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0726.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0727.bin b/files/poketool/trainer/trdata/narc_0727.bin deleted file mode 100644 index 3b1cf942..00000000 Binary files a/files/poketool/trainer/trdata/narc_0727.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0728.bin b/files/poketool/trainer/trdata/narc_0728.bin deleted file mode 100644 index 3b1cf942..00000000 Binary files a/files/poketool/trainer/trdata/narc_0728.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0729.bin b/files/poketool/trainer/trdata/narc_0729.bin deleted file mode 100644 index dd4e0cac..00000000 Binary files a/files/poketool/trainer/trdata/narc_0729.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0730.bin b/files/poketool/trainer/trdata/narc_0730.bin deleted file mode 100644 index dd4e0cac..00000000 Binary files a/files/poketool/trainer/trdata/narc_0730.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0731.bin b/files/poketool/trainer/trdata/narc_0731.bin deleted file mode 100644 index dd4e0cac..00000000 Binary files a/files/poketool/trainer/trdata/narc_0731.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0732.bin b/files/poketool/trainer/trdata/narc_0732.bin deleted file mode 100644 index b8562b25..00000000 Binary files a/files/poketool/trainer/trdata/narc_0732.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0733.bin b/files/poketool/trainer/trdata/narc_0733.bin deleted file mode 100644 index b8562b25..00000000 Binary files a/files/poketool/trainer/trdata/narc_0733.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0734.bin b/files/poketool/trainer/trdata/narc_0734.bin deleted file mode 100644 index b8562b25..00000000 Binary files a/files/poketool/trainer/trdata/narc_0734.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0735.bin b/files/poketool/trainer/trdata/narc_0735.bin deleted file mode 100644 index b8562b25..00000000 Binary files a/files/poketool/trainer/trdata/narc_0735.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0736.bin b/files/poketool/trainer/trdata/narc_0736.bin deleted file mode 100644 index 8843728d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0736.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0737.bin b/files/poketool/trainer/trdata/narc_0737.bin deleted file mode 100644 index 8843728d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0737.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0738.bin b/files/poketool/trainer/trdata/narc_0738.bin deleted file mode 100644 index 8843728d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0738.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0739.bin b/files/poketool/trainer/trdata/narc_0739.bin deleted file mode 100644 index 8843728d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0739.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0740.bin b/files/poketool/trainer/trdata/narc_0740.bin deleted file mode 100644 index 972c8d32..00000000 Binary files a/files/poketool/trainer/trdata/narc_0740.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0741.bin b/files/poketool/trainer/trdata/narc_0741.bin deleted file mode 100644 index 972c8d32..00000000 Binary files a/files/poketool/trainer/trdata/narc_0741.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0742.bin b/files/poketool/trainer/trdata/narc_0742.bin deleted file mode 100644 index 7e07d284..00000000 Binary files a/files/poketool/trainer/trdata/narc_0742.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0743.bin b/files/poketool/trainer/trdata/narc_0743.bin deleted file mode 100644 index 4a1839af..00000000 Binary files a/files/poketool/trainer/trdata/narc_0743.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0744.bin b/files/poketool/trainer/trdata/narc_0744.bin deleted file mode 100644 index 4a1839af..00000000 Binary files a/files/poketool/trainer/trdata/narc_0744.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0745.bin b/files/poketool/trainer/trdata/narc_0745.bin deleted file mode 100644 index 4a1839af..00000000 Binary files a/files/poketool/trainer/trdata/narc_0745.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0746.bin b/files/poketool/trainer/trdata/narc_0746.bin deleted file mode 100644 index d1ba9d5c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0746.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0747.bin b/files/poketool/trainer/trdata/narc_0747.bin deleted file mode 100644 index d1ba9d5c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0747.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0748.bin b/files/poketool/trainer/trdata/narc_0748.bin deleted file mode 100644 index d1ba9d5c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0748.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0749.bin b/files/poketool/trainer/trdata/narc_0749.bin deleted file mode 100644 index b58a1adb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0749.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0750.bin b/files/poketool/trainer/trdata/narc_0750.bin deleted file mode 100644 index b58a1adb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0750.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0751.bin b/files/poketool/trainer/trdata/narc_0751.bin deleted file mode 100644 index b7e00871..00000000 Binary files a/files/poketool/trainer/trdata/narc_0751.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0752.bin b/files/poketool/trainer/trdata/narc_0752.bin deleted file mode 100644 index b7e00871..00000000 Binary files a/files/poketool/trainer/trdata/narc_0752.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0753.bin b/files/poketool/trainer/trdata/narc_0753.bin deleted file mode 100644 index bfe62fdb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0753.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0754.bin b/files/poketool/trainer/trdata/narc_0754.bin deleted file mode 100644 index bfe62fdb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0754.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0755.bin b/files/poketool/trainer/trdata/narc_0755.bin deleted file mode 100644 index 75ef0429..00000000 Binary files a/files/poketool/trainer/trdata/narc_0755.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0756.bin b/files/poketool/trainer/trdata/narc_0756.bin deleted file mode 100644 index 75ef0429..00000000 Binary files a/files/poketool/trainer/trdata/narc_0756.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0757.bin b/files/poketool/trainer/trdata/narc_0757.bin deleted file mode 100644 index 75ef0429..00000000 Binary files a/files/poketool/trainer/trdata/narc_0757.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0758.bin b/files/poketool/trainer/trdata/narc_0758.bin deleted file mode 100644 index 75ef0429..00000000 Binary files a/files/poketool/trainer/trdata/narc_0758.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0759.bin b/files/poketool/trainer/trdata/narc_0759.bin deleted file mode 100644 index 06f70012..00000000 Binary files a/files/poketool/trainer/trdata/narc_0759.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0760.bin b/files/poketool/trainer/trdata/narc_0760.bin deleted file mode 100644 index 06f70012..00000000 Binary files a/files/poketool/trainer/trdata/narc_0760.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0761.bin b/files/poketool/trainer/trdata/narc_0761.bin deleted file mode 100644 index 06f70012..00000000 Binary files a/files/poketool/trainer/trdata/narc_0761.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0762.bin b/files/poketool/trainer/trdata/narc_0762.bin deleted file mode 100644 index 172b4b81..00000000 Binary files a/files/poketool/trainer/trdata/narc_0762.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0763.bin b/files/poketool/trainer/trdata/narc_0763.bin deleted file mode 100644 index aeccc746..00000000 Binary files a/files/poketool/trainer/trdata/narc_0763.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0764.bin b/files/poketool/trainer/trdata/narc_0764.bin deleted file mode 100644 index aeccc746..00000000 Binary files a/files/poketool/trainer/trdata/narc_0764.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0765.bin b/files/poketool/trainer/trdata/narc_0765.bin deleted file mode 100644 index 7f3f4d63..00000000 Binary files a/files/poketool/trainer/trdata/narc_0765.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0766.bin b/files/poketool/trainer/trdata/narc_0766.bin deleted file mode 100644 index 7f3f4d63..00000000 Binary files a/files/poketool/trainer/trdata/narc_0766.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0767.bin b/files/poketool/trainer/trdata/narc_0767.bin deleted file mode 100644 index 7f3f4d63..00000000 Binary files a/files/poketool/trainer/trdata/narc_0767.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0768.bin b/files/poketool/trainer/trdata/narc_0768.bin deleted file mode 100644 index 7f3f4d63..00000000 Binary files a/files/poketool/trainer/trdata/narc_0768.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0769.bin b/files/poketool/trainer/trdata/narc_0769.bin deleted file mode 100644 index 7f3f4d63..00000000 Binary files a/files/poketool/trainer/trdata/narc_0769.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0770.bin b/files/poketool/trainer/trdata/narc_0770.bin deleted file mode 100644 index 7f3f4d63..00000000 Binary files a/files/poketool/trainer/trdata/narc_0770.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0771.bin b/files/poketool/trainer/trdata/narc_0771.bin deleted file mode 100644 index 337775bd..00000000 Binary files a/files/poketool/trainer/trdata/narc_0771.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0772.bin b/files/poketool/trainer/trdata/narc_0772.bin deleted file mode 100644 index 337775bd..00000000 Binary files a/files/poketool/trainer/trdata/narc_0772.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0773.bin b/files/poketool/trainer/trdata/narc_0773.bin deleted file mode 100644 index 63631284..00000000 Binary files a/files/poketool/trainer/trdata/narc_0773.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0774.bin b/files/poketool/trainer/trdata/narc_0774.bin deleted file mode 100644 index 8d46840d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0774.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0775.bin b/files/poketool/trainer/trdata/narc_0775.bin deleted file mode 100644 index 63631284..00000000 Binary files a/files/poketool/trainer/trdata/narc_0775.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0776.bin b/files/poketool/trainer/trdata/narc_0776.bin deleted file mode 100644 index 8d46840d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0776.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0777.bin b/files/poketool/trainer/trdata/narc_0777.bin deleted file mode 100644 index 8d46840d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0777.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0778.bin b/files/poketool/trainer/trdata/narc_0778.bin deleted file mode 100644 index 007cd3fa..00000000 Binary files a/files/poketool/trainer/trdata/narc_0778.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0779.bin b/files/poketool/trainer/trdata/narc_0779.bin deleted file mode 100644 index 1a29e585..00000000 Binary files a/files/poketool/trainer/trdata/narc_0779.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0780.bin b/files/poketool/trainer/trdata/narc_0780.bin deleted file mode 100644 index 1a29e585..00000000 Binary files a/files/poketool/trainer/trdata/narc_0780.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0781.bin b/files/poketool/trainer/trdata/narc_0781.bin deleted file mode 100644 index 1a29e585..00000000 Binary files a/files/poketool/trainer/trdata/narc_0781.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0782.bin b/files/poketool/trainer/trdata/narc_0782.bin deleted file mode 100644 index 1a29e585..00000000 Binary files a/files/poketool/trainer/trdata/narc_0782.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0783.bin b/files/poketool/trainer/trdata/narc_0783.bin deleted file mode 100644 index 1a29e585..00000000 Binary files a/files/poketool/trainer/trdata/narc_0783.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0784.bin b/files/poketool/trainer/trdata/narc_0784.bin deleted file mode 100644 index f322b90e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0784.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0785.bin b/files/poketool/trainer/trdata/narc_0785.bin deleted file mode 100644 index f322b90e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0785.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0786.bin b/files/poketool/trainer/trdata/narc_0786.bin deleted file mode 100644 index f322b90e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0786.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0787.bin b/files/poketool/trainer/trdata/narc_0787.bin deleted file mode 100644 index f322b90e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0787.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0788.bin b/files/poketool/trainer/trdata/narc_0788.bin deleted file mode 100644 index f322b90e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0788.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0789.bin b/files/poketool/trainer/trdata/narc_0789.bin deleted file mode 100644 index f322b90e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0789.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0790.bin b/files/poketool/trainer/trdata/narc_0790.bin deleted file mode 100644 index 895c47bd..00000000 Binary files a/files/poketool/trainer/trdata/narc_0790.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0791.bin b/files/poketool/trainer/trdata/narc_0791.bin deleted file mode 100644 index 895c47bd..00000000 Binary files a/files/poketool/trainer/trdata/narc_0791.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0792.bin b/files/poketool/trainer/trdata/narc_0792.bin deleted file mode 100644 index 895c47bd..00000000 Binary files a/files/poketool/trainer/trdata/narc_0792.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0793.bin b/files/poketool/trainer/trdata/narc_0793.bin deleted file mode 100644 index 895c47bd..00000000 Binary files a/files/poketool/trainer/trdata/narc_0793.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0794.bin b/files/poketool/trainer/trdata/narc_0794.bin deleted file mode 100644 index 895c47bd..00000000 Binary files a/files/poketool/trainer/trdata/narc_0794.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0795.bin b/files/poketool/trainer/trdata/narc_0795.bin deleted file mode 100644 index 84abdd3a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0795.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0796.bin b/files/poketool/trainer/trdata/narc_0796.bin deleted file mode 100644 index 84abdd3a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0796.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0797.bin b/files/poketool/trainer/trdata/narc_0797.bin deleted file mode 100644 index 84abdd3a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0797.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0798.bin b/files/poketool/trainer/trdata/narc_0798.bin deleted file mode 100644 index 84abdd3a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0798.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0799.bin b/files/poketool/trainer/trdata/narc_0799.bin deleted file mode 100644 index 94015172..00000000 Binary files a/files/poketool/trainer/trdata/narc_0799.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0800.bin b/files/poketool/trainer/trdata/narc_0800.bin deleted file mode 100644 index 94015172..00000000 Binary files a/files/poketool/trainer/trdata/narc_0800.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0801.bin b/files/poketool/trainer/trdata/narc_0801.bin deleted file mode 100644 index 94015172..00000000 Binary files a/files/poketool/trainer/trdata/narc_0801.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0802.bin b/files/poketool/trainer/trdata/narc_0802.bin deleted file mode 100644 index 94015172..00000000 Binary files a/files/poketool/trainer/trdata/narc_0802.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0803.bin b/files/poketool/trainer/trdata/narc_0803.bin deleted file mode 100644 index 94015172..00000000 Binary files a/files/poketool/trainer/trdata/narc_0803.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0804.bin b/files/poketool/trainer/trdata/narc_0804.bin deleted file mode 100644 index 7ac32e6c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0804.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0805.bin b/files/poketool/trainer/trdata/narc_0805.bin deleted file mode 100644 index 7ac32e6c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0805.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0806.bin b/files/poketool/trainer/trdata/narc_0806.bin deleted file mode 100644 index 7ac32e6c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0806.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0807.bin b/files/poketool/trainer/trdata/narc_0807.bin deleted file mode 100644 index 7ac32e6c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0807.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0808.bin b/files/poketool/trainer/trdata/narc_0808.bin deleted file mode 100644 index cc11cd42..00000000 Binary files a/files/poketool/trainer/trdata/narc_0808.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0809.bin b/files/poketool/trainer/trdata/narc_0809.bin deleted file mode 100644 index a4bac0b2..00000000 Binary files a/files/poketool/trainer/trdata/narc_0809.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0810.bin b/files/poketool/trainer/trdata/narc_0810.bin deleted file mode 100644 index a4bac0b2..00000000 Binary files a/files/poketool/trainer/trdata/narc_0810.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0811.bin b/files/poketool/trainer/trdata/narc_0811.bin deleted file mode 100644 index a4bac0b2..00000000 Binary files a/files/poketool/trainer/trdata/narc_0811.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0812.bin b/files/poketool/trainer/trdata/narc_0812.bin deleted file mode 100644 index a4bac0b2..00000000 Binary files a/files/poketool/trainer/trdata/narc_0812.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0813.bin b/files/poketool/trainer/trdata/narc_0813.bin deleted file mode 100644 index 7b5ada8b..00000000 Binary files a/files/poketool/trainer/trdata/narc_0813.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0814.bin b/files/poketool/trainer/trdata/narc_0814.bin deleted file mode 100644 index f4f52d21..00000000 Binary files a/files/poketool/trainer/trdata/narc_0814.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0815.bin b/files/poketool/trainer/trdata/narc_0815.bin deleted file mode 100644 index 0ac27deb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0815.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0816.bin b/files/poketool/trainer/trdata/narc_0816.bin deleted file mode 100644 index b1fae20e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0816.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0817.bin b/files/poketool/trainer/trdata/narc_0817.bin deleted file mode 100644 index 5f259161..00000000 Binary files a/files/poketool/trainer/trdata/narc_0817.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0818.bin b/files/poketool/trainer/trdata/narc_0818.bin deleted file mode 100644 index ae12af86..00000000 Binary files a/files/poketool/trainer/trdata/narc_0818.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0819.bin b/files/poketool/trainer/trdata/narc_0819.bin deleted file mode 100644 index 5f259161..00000000 Binary files a/files/poketool/trainer/trdata/narc_0819.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0820.bin b/files/poketool/trainer/trdata/narc_0820.bin deleted file mode 100644 index 5f259161..00000000 Binary files a/files/poketool/trainer/trdata/narc_0820.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0821.bin b/files/poketool/trainer/trdata/narc_0821.bin deleted file mode 100644 index ae12af86..00000000 Binary files a/files/poketool/trainer/trdata/narc_0821.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0822.bin b/files/poketool/trainer/trdata/narc_0822.bin deleted file mode 100644 index 5f259161..00000000 Binary files a/files/poketool/trainer/trdata/narc_0822.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0823.bin b/files/poketool/trainer/trdata/narc_0823.bin deleted file mode 100644 index 5f259161..00000000 Binary files a/files/poketool/trainer/trdata/narc_0823.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0824.bin b/files/poketool/trainer/trdata/narc_0824.bin deleted file mode 100644 index f1a6c7be..00000000 Binary files a/files/poketool/trainer/trdata/narc_0824.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0825.bin b/files/poketool/trainer/trdata/narc_0825.bin deleted file mode 100644 index 2b6fc472..00000000 Binary files a/files/poketool/trainer/trdata/narc_0825.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0826.bin b/files/poketool/trainer/trdata/narc_0826.bin deleted file mode 100644 index b8b1054b..00000000 Binary files a/files/poketool/trainer/trdata/narc_0826.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0827.bin b/files/poketool/trainer/trdata/narc_0827.bin deleted file mode 100644 index 19d0b19d..00000000 Binary files a/files/poketool/trainer/trdata/narc_0827.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0828.bin b/files/poketool/trainer/trdata/narc_0828.bin deleted file mode 100644 index a3aab1c5..00000000 Binary files a/files/poketool/trainer/trdata/narc_0828.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0829.bin b/files/poketool/trainer/trdata/narc_0829.bin deleted file mode 100644 index 8c1aa653..00000000 Binary files a/files/poketool/trainer/trdata/narc_0829.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0830.bin b/files/poketool/trainer/trdata/narc_0830.bin deleted file mode 100644 index 20a9d315..00000000 Binary files a/files/poketool/trainer/trdata/narc_0830.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0831.bin b/files/poketool/trainer/trdata/narc_0831.bin deleted file mode 100644 index 8c1aa653..00000000 Binary files a/files/poketool/trainer/trdata/narc_0831.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0832.bin b/files/poketool/trainer/trdata/narc_0832.bin deleted file mode 100644 index 8cdac29c..00000000 Binary files a/files/poketool/trainer/trdata/narc_0832.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0833.bin b/files/poketool/trainer/trdata/narc_0833.bin deleted file mode 100644 index 1fc45f0a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0833.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0834.bin b/files/poketool/trainer/trdata/narc_0834.bin deleted file mode 100644 index d7e26687..00000000 Binary files a/files/poketool/trainer/trdata/narc_0834.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0835.bin b/files/poketool/trainer/trdata/narc_0835.bin deleted file mode 100644 index d7e26687..00000000 Binary files a/files/poketool/trainer/trdata/narc_0835.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0836.bin b/files/poketool/trainer/trdata/narc_0836.bin deleted file mode 100644 index d7e26687..00000000 Binary files a/files/poketool/trainer/trdata/narc_0836.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0837.bin b/files/poketool/trainer/trdata/narc_0837.bin deleted file mode 100644 index c188464a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0837.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0838.bin b/files/poketool/trainer/trdata/narc_0838.bin deleted file mode 100644 index c188464a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0838.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0839.bin b/files/poketool/trainer/trdata/narc_0839.bin deleted file mode 100644 index c188464a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0839.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0840.bin b/files/poketool/trainer/trdata/narc_0840.bin deleted file mode 100644 index c188464a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0840.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0841.bin b/files/poketool/trainer/trdata/narc_0841.bin deleted file mode 100644 index c188464a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0841.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0842.bin b/files/poketool/trainer/trdata/narc_0842.bin deleted file mode 100644 index c188464a..00000000 Binary files a/files/poketool/trainer/trdata/narc_0842.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0843.bin b/files/poketool/trainer/trdata/narc_0843.bin deleted file mode 100644 index 5c3198fb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0843.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0844.bin b/files/poketool/trainer/trdata/narc_0844.bin deleted file mode 100644 index 5354608b..00000000 Binary files a/files/poketool/trainer/trdata/narc_0844.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0845.bin b/files/poketool/trainer/trdata/narc_0845.bin deleted file mode 100644 index b1fae20e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0845.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0846.bin b/files/poketool/trainer/trdata/narc_0846.bin deleted file mode 100644 index b1fae20e..00000000 Binary files a/files/poketool/trainer/trdata/narc_0846.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0847.bin b/files/poketool/trainer/trdata/narc_0847.bin deleted file mode 100644 index 5c3198fb..00000000 Binary files a/files/poketool/trainer/trdata/narc_0847.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0848.bin b/files/poketool/trainer/trdata/narc_0848.bin deleted file mode 100644 index 4e09951f..00000000 Binary files a/files/poketool/trainer/trdata/narc_0848.bin and /dev/null differ diff --git a/files/poketool/trainer/trdata/narc_0849.bin b/files/poketool/trainer/trdata/narc_0849.bin deleted file mode 100644 index 4e09951f..00000000 Binary files a/files/poketool/trainer/trdata/narc_0849.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke.json.txt b/files/poketool/trainer/trpoke.json.txt new file mode 100644 index 00000000..09fa70b3 --- /dev/null +++ b/files/poketool/trainer/trpoke.json.txt @@ -0,0 +1,52 @@ +{{ doNotModifyHeader }} + +#include "global.h" +#include "trainer_data.h" +#include "constants/species.h" +#include "constants/moves.h" +#include "constants/items.h" + +#define max(a, b) ((a) >= (b) ? (a) : (b)) + +u32 __size[] = { 8, +## for trainer in trdata + (max({{ length(trainer.party) }} * {% if trainer.type == 0 %}6{% else if trainer.type == 1 %}14{% else if trainer.type == 2 %}8{% else %}16{% endif %}, 8) + 3) & ~3, +## endfor +}; + +const u16 __data[] = { 0, 0, 0, 0, +## for trainer in trdata + // Trainer #{{ trainer.index }} +## if trainer.type == 0 +## set mon_length = 3 +## else if trainer.type == 1 +## set mon_length = 7 +## else if trainer.type == 2 +## set mon_length = 4 +## else if trainer.type == 3 +## set mon_length = 8 +## endif +## set total_length = mon_length * length(trainer.party) +## for mon in trainer.party + {{ mon.difficulty }}, // Difficulty 0-255 + {{ mon.level }}, // Level + {{ mon.species }}, // Species +## if trainer.type == 2 or trainer.type == 3 + {{ mon.item }}, // Held item +## endif +## if trainer.type == 1 or trainer.type == 3 + // Moveset +## for i in range(4) +## if i < length(mon.moves) + {{ at(mon.moves, i) }}, +## else + MOVE_NONE, +## endif +## endfor +## endif +## endfor +## if total_length < 4 or total_length % 2 != 0 + 0, // Padding +## endif +## endfor +}; diff --git a/files/poketool/trainer/trpoke/.knarcignore b/files/poketool/trainer/trpoke/.knarcignore deleted file mode 100644 index 2856080a..00000000 --- a/files/poketool/trainer/trpoke/.knarcignore +++ /dev/null @@ -1,2 +0,0 @@ -*.png -*.pal diff --git a/files/poketool/trainer/trpoke/narc_0000.bin b/files/poketool/trainer/trpoke/narc_0000.bin deleted file mode 100644 index 1b1cb4d4..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0000.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0001.bin b/files/poketool/trainer/trpoke/narc_0001.bin deleted file mode 100644 index bde4ded3..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0001.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0002.bin b/files/poketool/trainer/trpoke/narc_0002.bin deleted file mode 100644 index 6622f6c0..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0002.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0003.bin b/files/poketool/trainer/trpoke/narc_0003.bin deleted file mode 100644 index 7fc43875..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0003.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0004.bin b/files/poketool/trainer/trpoke/narc_0004.bin deleted file mode 100644 index 53370b72..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0004.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0005.bin b/files/poketool/trainer/trpoke/narc_0005.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0005.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0006.bin b/files/poketool/trainer/trpoke/narc_0006.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0006.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0007.bin b/files/poketool/trainer/trpoke/narc_0007.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0007.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0008.bin b/files/poketool/trainer/trpoke/narc_0008.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0008.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0009.bin b/files/poketool/trainer/trpoke/narc_0009.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0009.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0010.bin b/files/poketool/trainer/trpoke/narc_0010.bin deleted file mode 100644 index b319e69f..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0010.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0011.bin b/files/poketool/trainer/trpoke/narc_0011.bin deleted file mode 100644 index b8af87e1..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0011.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0012.bin b/files/poketool/trainer/trpoke/narc_0012.bin deleted file mode 100644 index 6cd579eb..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0012.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0013.bin b/files/poketool/trainer/trpoke/narc_0013.bin deleted file mode 100644 index e7a24611..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0013.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0014.bin b/files/poketool/trainer/trpoke/narc_0014.bin deleted file mode 100644 index 91b4d102..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0014.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0015.bin b/files/poketool/trainer/trpoke/narc_0015.bin deleted file mode 100644 index 1b09a2f0..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0015.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0016.bin b/files/poketool/trainer/trpoke/narc_0016.bin deleted file mode 100644 index 436335e9..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0016.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0017.bin b/files/poketool/trainer/trpoke/narc_0017.bin deleted file mode 100644 index b4d7e0c3..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0017.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0018.bin b/files/poketool/trainer/trpoke/narc_0018.bin deleted file mode 100644 index 5e19ed7b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0018.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0019.bin b/files/poketool/trainer/trpoke/narc_0019.bin deleted file mode 100644 index 5971bf36..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0019.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0020.bin b/files/poketool/trainer/trpoke/narc_0020.bin deleted file mode 100644 index 909bf61a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0020.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0021.bin b/files/poketool/trainer/trpoke/narc_0021.bin deleted file mode 100644 index 856cb429..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0021.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0022.bin b/files/poketool/trainer/trpoke/narc_0022.bin deleted file mode 100644 index bbcc073c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0022.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0023.bin b/files/poketool/trainer/trpoke/narc_0023.bin deleted file mode 100644 index 2edcd028..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0023.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0024.bin b/files/poketool/trainer/trpoke/narc_0024.bin deleted file mode 100644 index d291493e..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0024.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0025.bin b/files/poketool/trainer/trpoke/narc_0025.bin deleted file mode 100644 index 11a4b6cb..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0025.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0026.bin b/files/poketool/trainer/trpoke/narc_0026.bin deleted file mode 100644 index 71d3e71d..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0026.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0027.bin b/files/poketool/trainer/trpoke/narc_0027.bin deleted file mode 100644 index 7bf26d48..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0027.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0028.bin b/files/poketool/trainer/trpoke/narc_0028.bin deleted file mode 100644 index 9f36bc24..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0028.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0029.bin b/files/poketool/trainer/trpoke/narc_0029.bin deleted file mode 100644 index bc24d65b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0029.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0030.bin b/files/poketool/trainer/trpoke/narc_0030.bin deleted file mode 100644 index ecfa9d84..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0030.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0031.bin b/files/poketool/trainer/trpoke/narc_0031.bin deleted file mode 100644 index 6bf70a02..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0031.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0032.bin b/files/poketool/trainer/trpoke/narc_0032.bin deleted file mode 100644 index a6f8e7f4..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0032.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0033.bin b/files/poketool/trainer/trpoke/narc_0033.bin deleted file mode 100644 index d4be0a74..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0033.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0034.bin b/files/poketool/trainer/trpoke/narc_0034.bin deleted file mode 100644 index da6961f7..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0034.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0035.bin b/files/poketool/trainer/trpoke/narc_0035.bin deleted file mode 100644 index 5b79cf77..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0035.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0036.bin b/files/poketool/trainer/trpoke/narc_0036.bin deleted file mode 100644 index 0fed8833..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0036.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0037.bin b/files/poketool/trainer/trpoke/narc_0037.bin deleted file mode 100644 index f0567871..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0037.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0038.bin b/files/poketool/trainer/trpoke/narc_0038.bin deleted file mode 100644 index 4377c696..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0038.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0039.bin b/files/poketool/trainer/trpoke/narc_0039.bin deleted file mode 100644 index 9d7af69d..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0039.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0040.bin b/files/poketool/trainer/trpoke/narc_0040.bin deleted file mode 100644 index 78eb455a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0040.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0041.bin b/files/poketool/trainer/trpoke/narc_0041.bin deleted file mode 100644 index 626ddce9..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0041.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0042.bin b/files/poketool/trainer/trpoke/narc_0042.bin deleted file mode 100644 index 401dd7c6..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0042.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0043.bin b/files/poketool/trainer/trpoke/narc_0043.bin deleted file mode 100644 index 965c71cb..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0043.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0044.bin b/files/poketool/trainer/trpoke/narc_0044.bin deleted file mode 100644 index 7178c05a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0044.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0045.bin b/files/poketool/trainer/trpoke/narc_0045.bin deleted file mode 100644 index 73452543..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0045.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0046.bin b/files/poketool/trainer/trpoke/narc_0046.bin deleted file mode 100644 index 23e869bb..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0046.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0047.bin b/files/poketool/trainer/trpoke/narc_0047.bin deleted file mode 100644 index 5ffdc35e..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0047.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0048.bin b/files/poketool/trainer/trpoke/narc_0048.bin deleted file mode 100644 index 589dc44c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0048.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0049.bin b/files/poketool/trainer/trpoke/narc_0049.bin deleted file mode 100644 index 4372e85d..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0049.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0050.bin b/files/poketool/trainer/trpoke/narc_0050.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0050.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0051.bin b/files/poketool/trainer/trpoke/narc_0051.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0051.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0052.bin b/files/poketool/trainer/trpoke/narc_0052.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0052.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0053.bin b/files/poketool/trainer/trpoke/narc_0053.bin deleted file mode 100644 index 4b9ee62f..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0053.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0054.bin b/files/poketool/trainer/trpoke/narc_0054.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0054.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0055.bin b/files/poketool/trainer/trpoke/narc_0055.bin deleted file mode 100644 index cbcdcb8b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0055.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0056.bin b/files/poketool/trainer/trpoke/narc_0056.bin deleted file mode 100644 index 7aad7e94..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0056.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0057.bin b/files/poketool/trainer/trpoke/narc_0057.bin deleted file mode 100644 index db785ea9..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0057.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0058.bin b/files/poketool/trainer/trpoke/narc_0058.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0058.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0059.bin b/files/poketool/trainer/trpoke/narc_0059.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0059.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0060.bin b/files/poketool/trainer/trpoke/narc_0060.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0060.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0061.bin b/files/poketool/trainer/trpoke/narc_0061.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0061.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0062.bin b/files/poketool/trainer/trpoke/narc_0062.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0062.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0063.bin b/files/poketool/trainer/trpoke/narc_0063.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0063.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0064.bin b/files/poketool/trainer/trpoke/narc_0064.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0064.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0065.bin b/files/poketool/trainer/trpoke/narc_0065.bin deleted file mode 100644 index 102e8cf4..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0065.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0066.bin b/files/poketool/trainer/trpoke/narc_0066.bin deleted file mode 100644 index 3de6b9d3..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0066.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0067.bin b/files/poketool/trainer/trpoke/narc_0067.bin deleted file mode 100644 index 4b1f8db0..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0067.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0068.bin b/files/poketool/trainer/trpoke/narc_0068.bin deleted file mode 100644 index 24f6484c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0068.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0069.bin b/files/poketool/trainer/trpoke/narc_0069.bin deleted file mode 100644 index 403b87e4..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0069.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0070.bin b/files/poketool/trainer/trpoke/narc_0070.bin deleted file mode 100644 index 444b7052..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0070.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0071.bin b/files/poketool/trainer/trpoke/narc_0071.bin deleted file mode 100644 index c5a73669..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0071.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0072.bin b/files/poketool/trainer/trpoke/narc_0072.bin deleted file mode 100644 index 7d67c824..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0072.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0073.bin b/files/poketool/trainer/trpoke/narc_0073.bin deleted file mode 100644 index 316c763f..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0073.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0074.bin b/files/poketool/trainer/trpoke/narc_0074.bin deleted file mode 100644 index badf8e8b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0074.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0075.bin b/files/poketool/trainer/trpoke/narc_0075.bin deleted file mode 100644 index 4316723c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0075.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0076.bin b/files/poketool/trainer/trpoke/narc_0076.bin deleted file mode 100644 index 010df800..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0076.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0077.bin b/files/poketool/trainer/trpoke/narc_0077.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0077.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0078.bin b/files/poketool/trainer/trpoke/narc_0078.bin deleted file mode 100644 index f2444b07..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0078.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0079.bin b/files/poketool/trainer/trpoke/narc_0079.bin deleted file mode 100644 index eb996607..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0079.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0080.bin b/files/poketool/trainer/trpoke/narc_0080.bin deleted file mode 100644 index f1fbdba1..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0080.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0081.bin b/files/poketool/trainer/trpoke/narc_0081.bin deleted file mode 100644 index ff2b829c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0081.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0082.bin b/files/poketool/trainer/trpoke/narc_0082.bin deleted file mode 100644 index 4372e85d..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0082.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0083.bin b/files/poketool/trainer/trpoke/narc_0083.bin deleted file mode 100644 index f64eecd1..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0083.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0084.bin b/files/poketool/trainer/trpoke/narc_0084.bin deleted file mode 100644 index 90ed0817..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0084.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0085.bin b/files/poketool/trainer/trpoke/narc_0085.bin deleted file mode 100644 index bc0f7a5f..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0085.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0086.bin b/files/poketool/trainer/trpoke/narc_0086.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0086.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0087.bin b/files/poketool/trainer/trpoke/narc_0087.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0087.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0088.bin b/files/poketool/trainer/trpoke/narc_0088.bin deleted file mode 100644 index f96e5e8f..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0088.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0089.bin b/files/poketool/trainer/trpoke/narc_0089.bin deleted file mode 100644 index f96e5e8f..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0089.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0090.bin b/files/poketool/trainer/trpoke/narc_0090.bin deleted file mode 100644 index 3d32274a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0090.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0091.bin b/files/poketool/trainer/trpoke/narc_0091.bin deleted file mode 100644 index 619da722..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0091.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0092.bin b/files/poketool/trainer/trpoke/narc_0092.bin deleted file mode 100644 index f2fd51ab..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0092.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0093.bin b/files/poketool/trainer/trpoke/narc_0093.bin deleted file mode 100644 index 5f48099d..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0093.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0094.bin b/files/poketool/trainer/trpoke/narc_0094.bin deleted file mode 100644 index 161df9be..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0094.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0095.bin b/files/poketool/trainer/trpoke/narc_0095.bin deleted file mode 100644 index eabc9eaf..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0095.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0096.bin b/files/poketool/trainer/trpoke/narc_0096.bin deleted file mode 100644 index 32274c8a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0096.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0097.bin b/files/poketool/trainer/trpoke/narc_0097.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0097.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0098.bin b/files/poketool/trainer/trpoke/narc_0098.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0098.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0099.bin b/files/poketool/trainer/trpoke/narc_0099.bin deleted file mode 100644 index da1bcdd9..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0099.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0100.bin b/files/poketool/trainer/trpoke/narc_0100.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0100.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0101.bin b/files/poketool/trainer/trpoke/narc_0101.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0101.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0102.bin b/files/poketool/trainer/trpoke/narc_0102.bin deleted file mode 100644 index 4e1a338f..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0102.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0103.bin b/files/poketool/trainer/trpoke/narc_0103.bin deleted file mode 100644 index 85ef5856..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0103.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0104.bin b/files/poketool/trainer/trpoke/narc_0104.bin deleted file mode 100644 index 9565c74e..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0104.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0105.bin b/files/poketool/trainer/trpoke/narc_0105.bin deleted file mode 100644 index e22cc17a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0105.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0106.bin b/files/poketool/trainer/trpoke/narc_0106.bin deleted file mode 100644 index f6cae125..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0106.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0107.bin b/files/poketool/trainer/trpoke/narc_0107.bin deleted file mode 100644 index 8a563178..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0107.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0108.bin b/files/poketool/trainer/trpoke/narc_0108.bin deleted file mode 100644 index a932f54c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0108.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0109.bin b/files/poketool/trainer/trpoke/narc_0109.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0109.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0110.bin b/files/poketool/trainer/trpoke/narc_0110.bin deleted file mode 100644 index d91ff941..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0110.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0111.bin b/files/poketool/trainer/trpoke/narc_0111.bin deleted file mode 100644 index 62c56ef3..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0111.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0112.bin b/files/poketool/trainer/trpoke/narc_0112.bin deleted file mode 100644 index 1f22752b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0112.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0113.bin b/files/poketool/trainer/trpoke/narc_0113.bin deleted file mode 100644 index 71621a0b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0113.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0114.bin b/files/poketool/trainer/trpoke/narc_0114.bin deleted file mode 100644 index 05ca87ee..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0114.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0115.bin b/files/poketool/trainer/trpoke/narc_0115.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0115.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0116.bin b/files/poketool/trainer/trpoke/narc_0116.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0116.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0117.bin b/files/poketool/trainer/trpoke/narc_0117.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0117.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0118.bin b/files/poketool/trainer/trpoke/narc_0118.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0118.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0119.bin b/files/poketool/trainer/trpoke/narc_0119.bin deleted file mode 100644 index 328994ce..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0119.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0120.bin b/files/poketool/trainer/trpoke/narc_0120.bin deleted file mode 100644 index 086a0bf1..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0120.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0121.bin b/files/poketool/trainer/trpoke/narc_0121.bin deleted file mode 100644 index 383e5174..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0121.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0122.bin b/files/poketool/trainer/trpoke/narc_0122.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0122.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0123.bin b/files/poketool/trainer/trpoke/narc_0123.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0123.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0124.bin b/files/poketool/trainer/trpoke/narc_0124.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0124.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0125.bin b/files/poketool/trainer/trpoke/narc_0125.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0125.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0126.bin b/files/poketool/trainer/trpoke/narc_0126.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0126.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0127.bin b/files/poketool/trainer/trpoke/narc_0127.bin deleted file mode 100644 index 3cd413a0..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0127.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0128.bin b/files/poketool/trainer/trpoke/narc_0128.bin deleted file mode 100644 index b3a3c96b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0128.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0129.bin b/files/poketool/trainer/trpoke/narc_0129.bin deleted file mode 100644 index be159e9e..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0129.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0130.bin b/files/poketool/trainer/trpoke/narc_0130.bin deleted file mode 100644 index 5e5c1fc5..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0130.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0131.bin b/files/poketool/trainer/trpoke/narc_0131.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0131.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0132.bin b/files/poketool/trainer/trpoke/narc_0132.bin deleted file mode 100644 index cc0d6729..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0132.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0133.bin b/files/poketool/trainer/trpoke/narc_0133.bin deleted file mode 100644 index e55a7e8e..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0133.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0134.bin b/files/poketool/trainer/trpoke/narc_0134.bin deleted file mode 100644 index ce0ad7c6..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0134.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0135.bin b/files/poketool/trainer/trpoke/narc_0135.bin deleted file mode 100644 index af775466..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0135.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0136.bin b/files/poketool/trainer/trpoke/narc_0136.bin deleted file mode 100644 index 2a9a47fe..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0136.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0137.bin b/files/poketool/trainer/trpoke/narc_0137.bin deleted file mode 100644 index 2e8055fc..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0137.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0138.bin b/files/poketool/trainer/trpoke/narc_0138.bin deleted file mode 100644 index ce4f614e..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0138.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0139.bin b/files/poketool/trainer/trpoke/narc_0139.bin deleted file mode 100644 index 3951a055..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0139.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0140.bin b/files/poketool/trainer/trpoke/narc_0140.bin deleted file mode 100644 index 9cf702b8..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0140.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0141.bin b/files/poketool/trainer/trpoke/narc_0141.bin deleted file mode 100644 index dbb2285a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0141.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0142.bin b/files/poketool/trainer/trpoke/narc_0142.bin deleted file mode 100644 index 5c34e164..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0142.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0143.bin b/files/poketool/trainer/trpoke/narc_0143.bin deleted file mode 100644 index 7ce5b0a3..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0143.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0144.bin b/files/poketool/trainer/trpoke/narc_0144.bin deleted file mode 100644 index df91eab4..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0144.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0145.bin b/files/poketool/trainer/trpoke/narc_0145.bin deleted file mode 100644 index 275c6520..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0145.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0146.bin b/files/poketool/trainer/trpoke/narc_0146.bin deleted file mode 100644 index f413d6c5..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0146.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0147.bin b/files/poketool/trainer/trpoke/narc_0147.bin deleted file mode 100644 index 54568767..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0147.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0148.bin b/files/poketool/trainer/trpoke/narc_0148.bin deleted file mode 100644 index 4b119089..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0148.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0149.bin b/files/poketool/trainer/trpoke/narc_0149.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0149.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0150.bin b/files/poketool/trainer/trpoke/narc_0150.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0150.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0151.bin b/files/poketool/trainer/trpoke/narc_0151.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0151.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0152.bin b/files/poketool/trainer/trpoke/narc_0152.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0152.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0153.bin b/files/poketool/trainer/trpoke/narc_0153.bin deleted file mode 100644 index 87a57231..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0153.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0154.bin b/files/poketool/trainer/trpoke/narc_0154.bin deleted file mode 100644 index 8250e034..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0154.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0155.bin b/files/poketool/trainer/trpoke/narc_0155.bin deleted file mode 100644 index 1f22752b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0155.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0156.bin b/files/poketool/trainer/trpoke/narc_0156.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0156.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0157.bin b/files/poketool/trainer/trpoke/narc_0157.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0157.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0158.bin b/files/poketool/trainer/trpoke/narc_0158.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0158.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0159.bin b/files/poketool/trainer/trpoke/narc_0159.bin deleted file mode 100644 index 6d0b6dfb..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0159.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0160.bin b/files/poketool/trainer/trpoke/narc_0160.bin deleted file mode 100644 index ba01e5d5..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0160.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0161.bin b/files/poketool/trainer/trpoke/narc_0161.bin deleted file mode 100644 index 79ed30c8..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0161.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0162.bin b/files/poketool/trainer/trpoke/narc_0162.bin deleted file mode 100644 index b6abc936..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0162.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0163.bin b/files/poketool/trainer/trpoke/narc_0163.bin deleted file mode 100644 index 3cfaf03b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0163.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0164.bin b/files/poketool/trainer/trpoke/narc_0164.bin deleted file mode 100644 index 85c95f36..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0164.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0165.bin b/files/poketool/trainer/trpoke/narc_0165.bin deleted file mode 100644 index 1f22752b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0165.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0166.bin b/files/poketool/trainer/trpoke/narc_0166.bin deleted file mode 100644 index 5c051846..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0166.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0167.bin b/files/poketool/trainer/trpoke/narc_0167.bin deleted file mode 100644 index d9834188..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0167.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0168.bin b/files/poketool/trainer/trpoke/narc_0168.bin deleted file mode 100644 index 61aa2c84..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0168.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0169.bin b/files/poketool/trainer/trpoke/narc_0169.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0169.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0170.bin b/files/poketool/trainer/trpoke/narc_0170.bin deleted file mode 100644 index 6395744c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0170.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0171.bin b/files/poketool/trainer/trpoke/narc_0171.bin deleted file mode 100644 index 468b52c4..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0171.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0172.bin b/files/poketool/trainer/trpoke/narc_0172.bin deleted file mode 100644 index 059bb431..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0172.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0173.bin b/files/poketool/trainer/trpoke/narc_0173.bin deleted file mode 100644 index a11fe469..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0173.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0174.bin b/files/poketool/trainer/trpoke/narc_0174.bin deleted file mode 100644 index f9fcdc48..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0174.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0175.bin b/files/poketool/trainer/trpoke/narc_0175.bin deleted file mode 100644 index 8ad3b596..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0175.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0176.bin b/files/poketool/trainer/trpoke/narc_0176.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0176.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0177.bin b/files/poketool/trainer/trpoke/narc_0177.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0177.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0178.bin b/files/poketool/trainer/trpoke/narc_0178.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0178.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0179.bin b/files/poketool/trainer/trpoke/narc_0179.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0179.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0180.bin b/files/poketool/trainer/trpoke/narc_0180.bin deleted file mode 100644 index 96c06305..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0180.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0181.bin b/files/poketool/trainer/trpoke/narc_0181.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0181.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0182.bin b/files/poketool/trainer/trpoke/narc_0182.bin deleted file mode 100644 index 1f22752b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0182.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0183.bin b/files/poketool/trainer/trpoke/narc_0183.bin deleted file mode 100644 index 975343a4..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0183.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0184.bin b/files/poketool/trainer/trpoke/narc_0184.bin deleted file mode 100644 index fa62cffe..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0184.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0185.bin b/files/poketool/trainer/trpoke/narc_0185.bin deleted file mode 100644 index 68f44358..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0185.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0186.bin b/files/poketool/trainer/trpoke/narc_0186.bin deleted file mode 100644 index 79ad7b47..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0186.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0187.bin b/files/poketool/trainer/trpoke/narc_0187.bin deleted file mode 100644 index a0b7d7eb..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0187.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0188.bin b/files/poketool/trainer/trpoke/narc_0188.bin deleted file mode 100644 index 0d6a79ea..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0188.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0189.bin b/files/poketool/trainer/trpoke/narc_0189.bin deleted file mode 100644 index a9a39d70..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0189.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0190.bin b/files/poketool/trainer/trpoke/narc_0190.bin deleted file mode 100644 index d8292792..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0190.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0191.bin b/files/poketool/trainer/trpoke/narc_0191.bin deleted file mode 100644 index a03e617e..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0191.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0192.bin b/files/poketool/trainer/trpoke/narc_0192.bin deleted file mode 100644 index 7a31e70b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0192.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0193.bin b/files/poketool/trainer/trpoke/narc_0193.bin deleted file mode 100644 index 239eadba..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0193.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0194.bin b/files/poketool/trainer/trpoke/narc_0194.bin deleted file mode 100644 index 207845e6..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0194.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0195.bin b/files/poketool/trainer/trpoke/narc_0195.bin deleted file mode 100644 index ac2b65ec..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0195.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0196.bin b/files/poketool/trainer/trpoke/narc_0196.bin deleted file mode 100644 index 6cad203a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0196.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0197.bin b/files/poketool/trainer/trpoke/narc_0197.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0197.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0198.bin b/files/poketool/trainer/trpoke/narc_0198.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0198.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0199.bin b/files/poketool/trainer/trpoke/narc_0199.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0199.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0200.bin b/files/poketool/trainer/trpoke/narc_0200.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0200.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0201.bin b/files/poketool/trainer/trpoke/narc_0201.bin deleted file mode 100644 index 566188c9..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0201.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0202.bin b/files/poketool/trainer/trpoke/narc_0202.bin deleted file mode 100644 index e5a29b7b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0202.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0203.bin b/files/poketool/trainer/trpoke/narc_0203.bin deleted file mode 100644 index 7ac1a6de..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0203.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0204.bin b/files/poketool/trainer/trpoke/narc_0204.bin deleted file mode 100644 index 8b2c6878..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0204.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0205.bin b/files/poketool/trainer/trpoke/narc_0205.bin deleted file mode 100644 index 5c116114..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0205.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0206.bin b/files/poketool/trainer/trpoke/narc_0206.bin deleted file mode 100644 index 5c116114..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0206.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0207.bin b/files/poketool/trainer/trpoke/narc_0207.bin deleted file mode 100644 index 1f22752b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0207.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0208.bin b/files/poketool/trainer/trpoke/narc_0208.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0208.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0209.bin b/files/poketool/trainer/trpoke/narc_0209.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0209.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0210.bin b/files/poketool/trainer/trpoke/narc_0210.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0210.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0211.bin b/files/poketool/trainer/trpoke/narc_0211.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0211.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0212.bin b/files/poketool/trainer/trpoke/narc_0212.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0212.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0213.bin b/files/poketool/trainer/trpoke/narc_0213.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0213.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0214.bin b/files/poketool/trainer/trpoke/narc_0214.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0214.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0215.bin b/files/poketool/trainer/trpoke/narc_0215.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0215.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0216.bin b/files/poketool/trainer/trpoke/narc_0216.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0216.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0217.bin b/files/poketool/trainer/trpoke/narc_0217.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0217.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0218.bin b/files/poketool/trainer/trpoke/narc_0218.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0218.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0219.bin b/files/poketool/trainer/trpoke/narc_0219.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0219.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0220.bin b/files/poketool/trainer/trpoke/narc_0220.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0220.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0221.bin b/files/poketool/trainer/trpoke/narc_0221.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0221.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0222.bin b/files/poketool/trainer/trpoke/narc_0222.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0222.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0223.bin b/files/poketool/trainer/trpoke/narc_0223.bin deleted file mode 100644 index 1f22752b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0223.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0224.bin b/files/poketool/trainer/trpoke/narc_0224.bin deleted file mode 100644 index f148bf98..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0224.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0225.bin b/files/poketool/trainer/trpoke/narc_0225.bin deleted file mode 100644 index bd1a6911..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0225.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0226.bin b/files/poketool/trainer/trpoke/narc_0226.bin deleted file mode 100644 index f620303e..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0226.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0227.bin b/files/poketool/trainer/trpoke/narc_0227.bin deleted file mode 100644 index 9415a01d..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0227.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0228.bin b/files/poketool/trainer/trpoke/narc_0228.bin deleted file mode 100644 index be0f967c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0228.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0229.bin b/files/poketool/trainer/trpoke/narc_0229.bin deleted file mode 100644 index c7285213..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0229.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0230.bin b/files/poketool/trainer/trpoke/narc_0230.bin deleted file mode 100644 index dad54170..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0230.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0231.bin b/files/poketool/trainer/trpoke/narc_0231.bin deleted file mode 100644 index 90de6414..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0231.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0232.bin b/files/poketool/trainer/trpoke/narc_0232.bin deleted file mode 100644 index 1412bb22..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0232.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0233.bin b/files/poketool/trainer/trpoke/narc_0233.bin deleted file mode 100644 index 1df2d494..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0233.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0234.bin b/files/poketool/trainer/trpoke/narc_0234.bin deleted file mode 100644 index bbb9eee7..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0234.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0235.bin b/files/poketool/trainer/trpoke/narc_0235.bin deleted file mode 100644 index 5e7ac6c5..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0235.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0236.bin b/files/poketool/trainer/trpoke/narc_0236.bin deleted file mode 100644 index 371aa93d..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0236.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0237.bin b/files/poketool/trainer/trpoke/narc_0237.bin deleted file mode 100644 index 9a6af012..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0237.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0238.bin b/files/poketool/trainer/trpoke/narc_0238.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0238.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0239.bin b/files/poketool/trainer/trpoke/narc_0239.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0239.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0240.bin b/files/poketool/trainer/trpoke/narc_0240.bin deleted file mode 100644 index 5bcf9522..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0240.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0241.bin b/files/poketool/trainer/trpoke/narc_0241.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0241.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0242.bin b/files/poketool/trainer/trpoke/narc_0242.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0242.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0243.bin b/files/poketool/trainer/trpoke/narc_0243.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0243.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0244.bin b/files/poketool/trainer/trpoke/narc_0244.bin deleted file mode 100644 index 356d873b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0244.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0245.bin b/files/poketool/trainer/trpoke/narc_0245.bin deleted file mode 100644 index c99dca2b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0245.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0246.bin b/files/poketool/trainer/trpoke/narc_0246.bin deleted file mode 100644 index 686270af..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0246.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0247.bin b/files/poketool/trainer/trpoke/narc_0247.bin deleted file mode 100644 index 446a62fa..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0247.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0248.bin b/files/poketool/trainer/trpoke/narc_0248.bin deleted file mode 100644 index 8e125291..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0248.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0249.bin b/files/poketool/trainer/trpoke/narc_0249.bin deleted file mode 100644 index 7a9294bc..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0249.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0250.bin b/files/poketool/trainer/trpoke/narc_0250.bin deleted file mode 100644 index 3ed0bfc9..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0250.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0251.bin b/files/poketool/trainer/trpoke/narc_0251.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0251.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0252.bin b/files/poketool/trainer/trpoke/narc_0252.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0252.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0253.bin b/files/poketool/trainer/trpoke/narc_0253.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0253.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0254.bin b/files/poketool/trainer/trpoke/narc_0254.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0254.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0255.bin b/files/poketool/trainer/trpoke/narc_0255.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0255.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0256.bin b/files/poketool/trainer/trpoke/narc_0256.bin deleted file mode 100644 index 9fec2408..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0256.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0257.bin b/files/poketool/trainer/trpoke/narc_0257.bin deleted file mode 100644 index 75f65560..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0257.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0258.bin b/files/poketool/trainer/trpoke/narc_0258.bin deleted file mode 100644 index 14040d15..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0258.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0259.bin b/files/poketool/trainer/trpoke/narc_0259.bin deleted file mode 100644 index 9294a927..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0259.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0260.bin b/files/poketool/trainer/trpoke/narc_0260.bin deleted file mode 100644 index bdc31772..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0260.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0261.bin b/files/poketool/trainer/trpoke/narc_0261.bin deleted file mode 100644 index b1b4861f..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0261.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0262.bin b/files/poketool/trainer/trpoke/narc_0262.bin deleted file mode 100644 index a9af199a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0262.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0263.bin b/files/poketool/trainer/trpoke/narc_0263.bin deleted file mode 100644 index 5581dc0b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0263.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0264.bin b/files/poketool/trainer/trpoke/narc_0264.bin deleted file mode 100644 index 6626c9f3..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0264.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0265.bin b/files/poketool/trainer/trpoke/narc_0265.bin deleted file mode 100644 index de72b3eb..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0265.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0266.bin b/files/poketool/trainer/trpoke/narc_0266.bin deleted file mode 100644 index be37eb48..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0266.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0267.bin b/files/poketool/trainer/trpoke/narc_0267.bin deleted file mode 100644 index 533f78cd..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0267.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0268.bin b/files/poketool/trainer/trpoke/narc_0268.bin deleted file mode 100644 index 577967c1..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0268.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0269.bin b/files/poketool/trainer/trpoke/narc_0269.bin deleted file mode 100644 index 91c61437..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0269.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0270.bin b/files/poketool/trainer/trpoke/narc_0270.bin deleted file mode 100644 index a9afb2b2..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0270.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0271.bin b/files/poketool/trainer/trpoke/narc_0271.bin deleted file mode 100644 index b538ebcf..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0271.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0272.bin b/files/poketool/trainer/trpoke/narc_0272.bin deleted file mode 100644 index d0b481d4..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0272.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0273.bin b/files/poketool/trainer/trpoke/narc_0273.bin deleted file mode 100644 index 6fb067bb..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0273.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0274.bin b/files/poketool/trainer/trpoke/narc_0274.bin deleted file mode 100644 index 4fed4365..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0274.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0275.bin b/files/poketool/trainer/trpoke/narc_0275.bin deleted file mode 100644 index 60c54bb9..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0275.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0276.bin b/files/poketool/trainer/trpoke/narc_0276.bin deleted file mode 100644 index 4ad03280..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0276.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0277.bin b/files/poketool/trainer/trpoke/narc_0277.bin deleted file mode 100644 index ac372841..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0277.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0278.bin b/files/poketool/trainer/trpoke/narc_0278.bin deleted file mode 100644 index aff35644..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0278.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0279.bin b/files/poketool/trainer/trpoke/narc_0279.bin deleted file mode 100644 index 706bb066..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0279.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0280.bin b/files/poketool/trainer/trpoke/narc_0280.bin deleted file mode 100644 index 08077519..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0280.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0281.bin b/files/poketool/trainer/trpoke/narc_0281.bin deleted file mode 100644 index 4f742f74..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0281.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0282.bin b/files/poketool/trainer/trpoke/narc_0282.bin deleted file mode 100644 index 383bc05b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0282.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0283.bin b/files/poketool/trainer/trpoke/narc_0283.bin deleted file mode 100644 index 0212f1fb..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0283.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0284.bin b/files/poketool/trainer/trpoke/narc_0284.bin deleted file mode 100644 index c087267c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0284.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0285.bin b/files/poketool/trainer/trpoke/narc_0285.bin deleted file mode 100644 index 2a3a413e..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0285.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0286.bin b/files/poketool/trainer/trpoke/narc_0286.bin deleted file mode 100644 index 82b331f2..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0286.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0287.bin b/files/poketool/trainer/trpoke/narc_0287.bin deleted file mode 100644 index e831aefe..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0287.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0288.bin b/files/poketool/trainer/trpoke/narc_0288.bin deleted file mode 100644 index 70910a39..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0288.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0289.bin b/files/poketool/trainer/trpoke/narc_0289.bin deleted file mode 100644 index 6bb9f01b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0289.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0290.bin b/files/poketool/trainer/trpoke/narc_0290.bin deleted file mode 100644 index df2847c6..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0290.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0291.bin b/files/poketool/trainer/trpoke/narc_0291.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0291.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0292.bin b/files/poketool/trainer/trpoke/narc_0292.bin deleted file mode 100644 index 8b3428b5..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0292.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0293.bin b/files/poketool/trainer/trpoke/narc_0293.bin deleted file mode 100644 index d42677ce..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0293.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0294.bin b/files/poketool/trainer/trpoke/narc_0294.bin deleted file mode 100644 index 86542ab8..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0294.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0295.bin b/files/poketool/trainer/trpoke/narc_0295.bin deleted file mode 100644 index a3eb4b31..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0295.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0296.bin b/files/poketool/trainer/trpoke/narc_0296.bin deleted file mode 100644 index 8bb1c558..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0296.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0297.bin b/files/poketool/trainer/trpoke/narc_0297.bin deleted file mode 100644 index 2e85e6f1..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0297.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0298.bin b/files/poketool/trainer/trpoke/narc_0298.bin deleted file mode 100644 index 424b9653..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0298.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0299.bin b/files/poketool/trainer/trpoke/narc_0299.bin deleted file mode 100644 index 7612c43b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0299.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0300.bin b/files/poketool/trainer/trpoke/narc_0300.bin deleted file mode 100644 index d0a517d4..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0300.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0301.bin b/files/poketool/trainer/trpoke/narc_0301.bin deleted file mode 100644 index 3e42047a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0301.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0302.bin b/files/poketool/trainer/trpoke/narc_0302.bin deleted file mode 100644 index 24ed3701..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0302.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0303.bin b/files/poketool/trainer/trpoke/narc_0303.bin deleted file mode 100644 index 18b9422d..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0303.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0304.bin b/files/poketool/trainer/trpoke/narc_0304.bin deleted file mode 100644 index 1f2fb3e4..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0304.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0305.bin b/files/poketool/trainer/trpoke/narc_0305.bin deleted file mode 100644 index f9ad5301..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0305.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0306.bin b/files/poketool/trainer/trpoke/narc_0306.bin deleted file mode 100644 index edec42fe..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0306.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0307.bin b/files/poketool/trainer/trpoke/narc_0307.bin deleted file mode 100644 index a95da80c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0307.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0308.bin b/files/poketool/trainer/trpoke/narc_0308.bin deleted file mode 100644 index 32a37c9c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0308.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0309.bin b/files/poketool/trainer/trpoke/narc_0309.bin deleted file mode 100644 index 24572e49..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0309.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0310.bin b/files/poketool/trainer/trpoke/narc_0310.bin deleted file mode 100644 index 570f8931..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0310.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0311.bin b/files/poketool/trainer/trpoke/narc_0311.bin deleted file mode 100644 index 747b51d1..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0311.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0312.bin b/files/poketool/trainer/trpoke/narc_0312.bin deleted file mode 100644 index 278ea689..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0312.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0313.bin b/files/poketool/trainer/trpoke/narc_0313.bin deleted file mode 100644 index 0ff790c7..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0313.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0314.bin b/files/poketool/trainer/trpoke/narc_0314.bin deleted file mode 100644 index 20233005..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0314.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0315.bin b/files/poketool/trainer/trpoke/narc_0315.bin deleted file mode 100644 index dd777cf7..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0315.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0316.bin b/files/poketool/trainer/trpoke/narc_0316.bin deleted file mode 100644 index bd6d222a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0316.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0317.bin b/files/poketool/trainer/trpoke/narc_0317.bin deleted file mode 100644 index f53d26d9..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0317.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0318.bin b/files/poketool/trainer/trpoke/narc_0318.bin deleted file mode 100644 index 7a5a949a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0318.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0319.bin b/files/poketool/trainer/trpoke/narc_0319.bin deleted file mode 100644 index 2334f3a7..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0319.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0320.bin b/files/poketool/trainer/trpoke/narc_0320.bin deleted file mode 100644 index d53d3d89..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0320.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0321.bin b/files/poketool/trainer/trpoke/narc_0321.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0321.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0322.bin b/files/poketool/trainer/trpoke/narc_0322.bin deleted file mode 100644 index 53b333dc..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0322.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0323.bin b/files/poketool/trainer/trpoke/narc_0323.bin deleted file mode 100644 index 1e494b79..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0323.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0324.bin b/files/poketool/trainer/trpoke/narc_0324.bin deleted file mode 100644 index ef8e41db..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0324.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0325.bin b/files/poketool/trainer/trpoke/narc_0325.bin deleted file mode 100644 index 4865b9b3..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0325.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0326.bin b/files/poketool/trainer/trpoke/narc_0326.bin deleted file mode 100644 index 63cb6122..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0326.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0327.bin b/files/poketool/trainer/trpoke/narc_0327.bin deleted file mode 100644 index 8c29b81a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0327.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0328.bin b/files/poketool/trainer/trpoke/narc_0328.bin deleted file mode 100644 index d2a00314..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0328.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0329.bin b/files/poketool/trainer/trpoke/narc_0329.bin deleted file mode 100644 index d5fe9a68..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0329.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0330.bin b/files/poketool/trainer/trpoke/narc_0330.bin deleted file mode 100644 index d48beca1..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0330.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0331.bin b/files/poketool/trainer/trpoke/narc_0331.bin deleted file mode 100644 index c2ffb263..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0331.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0332.bin b/files/poketool/trainer/trpoke/narc_0332.bin deleted file mode 100644 index c9c11d34..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0332.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0333.bin b/files/poketool/trainer/trpoke/narc_0333.bin deleted file mode 100644 index 92c395c3..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0333.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0334.bin b/files/poketool/trainer/trpoke/narc_0334.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0334.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0335.bin b/files/poketool/trainer/trpoke/narc_0335.bin deleted file mode 100644 index 6e072826..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0335.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0336.bin b/files/poketool/trainer/trpoke/narc_0336.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0336.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0337.bin b/files/poketool/trainer/trpoke/narc_0337.bin deleted file mode 100644 index 883a7915..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0337.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0338.bin b/files/poketool/trainer/trpoke/narc_0338.bin deleted file mode 100644 index 9ad99c86..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0338.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0339.bin b/files/poketool/trainer/trpoke/narc_0339.bin deleted file mode 100644 index 75039461..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0339.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0340.bin b/files/poketool/trainer/trpoke/narc_0340.bin deleted file mode 100644 index 1f836178..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0340.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0341.bin b/files/poketool/trainer/trpoke/narc_0341.bin deleted file mode 100644 index a9574182..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0341.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0342.bin b/files/poketool/trainer/trpoke/narc_0342.bin deleted file mode 100644 index bd1a3a00..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0342.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0343.bin b/files/poketool/trainer/trpoke/narc_0343.bin deleted file mode 100644 index c23473be..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0343.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0344.bin b/files/poketool/trainer/trpoke/narc_0344.bin deleted file mode 100644 index 32ca4a11..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0344.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0345.bin b/files/poketool/trainer/trpoke/narc_0345.bin deleted file mode 100644 index bd1a3a00..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0345.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0346.bin b/files/poketool/trainer/trpoke/narc_0346.bin deleted file mode 100644 index 5dbb0048..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0346.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0347.bin b/files/poketool/trainer/trpoke/narc_0347.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0347.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0348.bin b/files/poketool/trainer/trpoke/narc_0348.bin deleted file mode 100644 index c62e48fe..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0348.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0349.bin b/files/poketool/trainer/trpoke/narc_0349.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0349.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0350.bin b/files/poketool/trainer/trpoke/narc_0350.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0350.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0351.bin b/files/poketool/trainer/trpoke/narc_0351.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0351.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0352.bin b/files/poketool/trainer/trpoke/narc_0352.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0352.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0353.bin b/files/poketool/trainer/trpoke/narc_0353.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0353.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0354.bin b/files/poketool/trainer/trpoke/narc_0354.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0354.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0355.bin b/files/poketool/trainer/trpoke/narc_0355.bin deleted file mode 100644 index da8d8587..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0355.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0356.bin b/files/poketool/trainer/trpoke/narc_0356.bin deleted file mode 100644 index 5e1b7612..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0356.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0357.bin b/files/poketool/trainer/trpoke/narc_0357.bin deleted file mode 100644 index 9046fc50..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0357.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0358.bin b/files/poketool/trainer/trpoke/narc_0358.bin deleted file mode 100644 index 0bba190b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0358.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0359.bin b/files/poketool/trainer/trpoke/narc_0359.bin deleted file mode 100644 index e3bb3cdc..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0359.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0360.bin b/files/poketool/trainer/trpoke/narc_0360.bin deleted file mode 100644 index 04bd42b2..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0360.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0361.bin b/files/poketool/trainer/trpoke/narc_0361.bin deleted file mode 100644 index e3bb3cdc..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0361.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0362.bin b/files/poketool/trainer/trpoke/narc_0362.bin deleted file mode 100644 index fdbe922a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0362.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0363.bin b/files/poketool/trainer/trpoke/narc_0363.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0363.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0364.bin b/files/poketool/trainer/trpoke/narc_0364.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0364.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0365.bin b/files/poketool/trainer/trpoke/narc_0365.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0365.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0366.bin b/files/poketool/trainer/trpoke/narc_0366.bin deleted file mode 100644 index 709741fb..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0366.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0367.bin b/files/poketool/trainer/trpoke/narc_0367.bin deleted file mode 100644 index 70f3bc41..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0367.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0368.bin b/files/poketool/trainer/trpoke/narc_0368.bin deleted file mode 100644 index fa76c897..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0368.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0369.bin b/files/poketool/trainer/trpoke/narc_0369.bin deleted file mode 100644 index 6278de98..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0369.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0370.bin b/files/poketool/trainer/trpoke/narc_0370.bin deleted file mode 100644 index 40761994..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0370.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0371.bin b/files/poketool/trainer/trpoke/narc_0371.bin deleted file mode 100644 index 0e165865..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0371.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0372.bin b/files/poketool/trainer/trpoke/narc_0372.bin deleted file mode 100644 index a54fb52a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0372.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0373.bin b/files/poketool/trainer/trpoke/narc_0373.bin deleted file mode 100644 index 14d8f1b4..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0373.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0374.bin b/files/poketool/trainer/trpoke/narc_0374.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0374.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0375.bin b/files/poketool/trainer/trpoke/narc_0375.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0375.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0376.bin b/files/poketool/trainer/trpoke/narc_0376.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0376.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0377.bin b/files/poketool/trainer/trpoke/narc_0377.bin deleted file mode 100644 index 50c40993..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0377.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0378.bin b/files/poketool/trainer/trpoke/narc_0378.bin deleted file mode 100644 index 0502e968..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0378.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0379.bin b/files/poketool/trainer/trpoke/narc_0379.bin deleted file mode 100644 index 7593e320..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0379.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0380.bin b/files/poketool/trainer/trpoke/narc_0380.bin deleted file mode 100644 index a4846fd1..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0380.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0381.bin b/files/poketool/trainer/trpoke/narc_0381.bin deleted file mode 100644 index bd82de5a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0381.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0382.bin b/files/poketool/trainer/trpoke/narc_0382.bin deleted file mode 100644 index 92498594..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0382.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0383.bin b/files/poketool/trainer/trpoke/narc_0383.bin deleted file mode 100644 index 51004f3d..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0383.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0384.bin b/files/poketool/trainer/trpoke/narc_0384.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0384.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0385.bin b/files/poketool/trainer/trpoke/narc_0385.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0385.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0386.bin b/files/poketool/trainer/trpoke/narc_0386.bin deleted file mode 100644 index 720427a7..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0386.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0387.bin b/files/poketool/trainer/trpoke/narc_0387.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0387.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0388.bin b/files/poketool/trainer/trpoke/narc_0388.bin deleted file mode 100644 index 78fb8797..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0388.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0389.bin b/files/poketool/trainer/trpoke/narc_0389.bin deleted file mode 100644 index be4aed5d..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0389.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0390.bin b/files/poketool/trainer/trpoke/narc_0390.bin deleted file mode 100644 index 6ae8b4fb..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0390.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0391.bin b/files/poketool/trainer/trpoke/narc_0391.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0391.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0392.bin b/files/poketool/trainer/trpoke/narc_0392.bin deleted file mode 100644 index ea1586fe..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0392.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0393.bin b/files/poketool/trainer/trpoke/narc_0393.bin deleted file mode 100644 index 859c2230..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0393.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0394.bin b/files/poketool/trainer/trpoke/narc_0394.bin deleted file mode 100644 index c93f70b3..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0394.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0395.bin b/files/poketool/trainer/trpoke/narc_0395.bin deleted file mode 100644 index 3b0f3f74..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0395.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0396.bin b/files/poketool/trainer/trpoke/narc_0396.bin deleted file mode 100644 index 052be167..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0396.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0397.bin b/files/poketool/trainer/trpoke/narc_0397.bin deleted file mode 100644 index b7254a78..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0397.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0398.bin b/files/poketool/trainer/trpoke/narc_0398.bin deleted file mode 100644 index fdff36b1..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0398.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0399.bin b/files/poketool/trainer/trpoke/narc_0399.bin deleted file mode 100644 index 97b070f8..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0399.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0400.bin b/files/poketool/trainer/trpoke/narc_0400.bin deleted file mode 100644 index 68cf3512..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0400.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0401.bin b/files/poketool/trainer/trpoke/narc_0401.bin deleted file mode 100644 index 46f2ae05..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0401.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0402.bin b/files/poketool/trainer/trpoke/narc_0402.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0402.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0403.bin b/files/poketool/trainer/trpoke/narc_0403.bin deleted file mode 100644 index 1b8cfbdc..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0403.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0404.bin b/files/poketool/trainer/trpoke/narc_0404.bin deleted file mode 100644 index 8280fe4f..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0404.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0405.bin b/files/poketool/trainer/trpoke/narc_0405.bin deleted file mode 100644 index 3521ce95..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0405.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0406.bin b/files/poketool/trainer/trpoke/narc_0406.bin deleted file mode 100644 index 58c1c9f1..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0406.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0407.bin b/files/poketool/trainer/trpoke/narc_0407.bin deleted file mode 100644 index 514457f9..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0407.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0408.bin b/files/poketool/trainer/trpoke/narc_0408.bin deleted file mode 100644 index bd62c6b0..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0408.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0409.bin b/files/poketool/trainer/trpoke/narc_0409.bin deleted file mode 100644 index 012123b6..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0409.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0410.bin b/files/poketool/trainer/trpoke/narc_0410.bin deleted file mode 100644 index 48d04a4f..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0410.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0411.bin b/files/poketool/trainer/trpoke/narc_0411.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0411.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0412.bin b/files/poketool/trainer/trpoke/narc_0412.bin deleted file mode 100644 index b4355b75..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0412.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0413.bin b/files/poketool/trainer/trpoke/narc_0413.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0413.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0414.bin b/files/poketool/trainer/trpoke/narc_0414.bin deleted file mode 100644 index 611933c2..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0414.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0415.bin b/files/poketool/trainer/trpoke/narc_0415.bin deleted file mode 100644 index 5eb3e193..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0415.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0416.bin b/files/poketool/trainer/trpoke/narc_0416.bin deleted file mode 100644 index 3b29de3b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0416.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0417.bin b/files/poketool/trainer/trpoke/narc_0417.bin deleted file mode 100644 index 72406ca8..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0417.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0418.bin b/files/poketool/trainer/trpoke/narc_0418.bin deleted file mode 100644 index ce4329d6..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0418.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0419.bin b/files/poketool/trainer/trpoke/narc_0419.bin deleted file mode 100644 index 6c2a74a3..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0419.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0420.bin b/files/poketool/trainer/trpoke/narc_0420.bin deleted file mode 100644 index 11b69564..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0420.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0421.bin b/files/poketool/trainer/trpoke/narc_0421.bin deleted file mode 100644 index 4d14643f..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0421.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0422.bin b/files/poketool/trainer/trpoke/narc_0422.bin deleted file mode 100644 index 506871a9..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0422.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0423.bin b/files/poketool/trainer/trpoke/narc_0423.bin deleted file mode 100644 index 980194e0..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0423.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0424.bin b/files/poketool/trainer/trpoke/narc_0424.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0424.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0425.bin b/files/poketool/trainer/trpoke/narc_0425.bin deleted file mode 100644 index 2e378b28..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0425.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0426.bin b/files/poketool/trainer/trpoke/narc_0426.bin deleted file mode 100644 index 4ea0add4..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0426.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0427.bin b/files/poketool/trainer/trpoke/narc_0427.bin deleted file mode 100644 index 9d322bc8..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0427.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0428.bin b/files/poketool/trainer/trpoke/narc_0428.bin deleted file mode 100644 index f602934d..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0428.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0429.bin b/files/poketool/trainer/trpoke/narc_0429.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0429.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0430.bin b/files/poketool/trainer/trpoke/narc_0430.bin deleted file mode 100644 index dcf5f2a7..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0430.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0431.bin b/files/poketool/trainer/trpoke/narc_0431.bin deleted file mode 100644 index 79f6d603..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0431.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0432.bin b/files/poketool/trainer/trpoke/narc_0432.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0432.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0433.bin b/files/poketool/trainer/trpoke/narc_0433.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0433.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0434.bin b/files/poketool/trainer/trpoke/narc_0434.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0434.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0435.bin b/files/poketool/trainer/trpoke/narc_0435.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0435.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0436.bin b/files/poketool/trainer/trpoke/narc_0436.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0436.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0437.bin b/files/poketool/trainer/trpoke/narc_0437.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0437.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0438.bin b/files/poketool/trainer/trpoke/narc_0438.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0438.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0439.bin b/files/poketool/trainer/trpoke/narc_0439.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0439.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0440.bin b/files/poketool/trainer/trpoke/narc_0440.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0440.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0441.bin b/files/poketool/trainer/trpoke/narc_0441.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0441.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0442.bin b/files/poketool/trainer/trpoke/narc_0442.bin deleted file mode 100644 index 855b609e..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0442.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0443.bin b/files/poketool/trainer/trpoke/narc_0443.bin deleted file mode 100644 index 802bf124..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0443.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0444.bin b/files/poketool/trainer/trpoke/narc_0444.bin deleted file mode 100644 index d5218b5c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0444.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0445.bin b/files/poketool/trainer/trpoke/narc_0445.bin deleted file mode 100644 index 68bbcb0b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0445.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0446.bin b/files/poketool/trainer/trpoke/narc_0446.bin deleted file mode 100644 index 7701c9b1..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0446.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0447.bin b/files/poketool/trainer/trpoke/narc_0447.bin deleted file mode 100644 index 5f8f8dce..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0447.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0448.bin b/files/poketool/trainer/trpoke/narc_0448.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0448.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0449.bin b/files/poketool/trainer/trpoke/narc_0449.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0449.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0450.bin b/files/poketool/trainer/trpoke/narc_0450.bin deleted file mode 100644 index 134dec23..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0450.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0451.bin b/files/poketool/trainer/trpoke/narc_0451.bin deleted file mode 100644 index fd9ce376..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0451.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0452.bin b/files/poketool/trainer/trpoke/narc_0452.bin deleted file mode 100644 index 3d2bd7da..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0452.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0453.bin b/files/poketool/trainer/trpoke/narc_0453.bin deleted file mode 100644 index a4661347..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0453.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0454.bin b/files/poketool/trainer/trpoke/narc_0454.bin deleted file mode 100644 index d1f81d45..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0454.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0455.bin b/files/poketool/trainer/trpoke/narc_0455.bin deleted file mode 100644 index c0c485ab..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0455.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0456.bin b/files/poketool/trainer/trpoke/narc_0456.bin deleted file mode 100644 index af5dc133..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0456.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0457.bin b/files/poketool/trainer/trpoke/narc_0457.bin deleted file mode 100644 index b6bf5440..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0457.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0458.bin b/files/poketool/trainer/trpoke/narc_0458.bin deleted file mode 100644 index ac9bdda6..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0458.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0459.bin b/files/poketool/trainer/trpoke/narc_0459.bin deleted file mode 100644 index e9593343..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0459.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0460.bin b/files/poketool/trainer/trpoke/narc_0460.bin deleted file mode 100644 index 0cacb61d..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0460.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0461.bin b/files/poketool/trainer/trpoke/narc_0461.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0461.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0462.bin b/files/poketool/trainer/trpoke/narc_0462.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0462.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0463.bin b/files/poketool/trainer/trpoke/narc_0463.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0463.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0464.bin b/files/poketool/trainer/trpoke/narc_0464.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0464.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0465.bin b/files/poketool/trainer/trpoke/narc_0465.bin deleted file mode 100644 index 39f13891..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0465.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0466.bin b/files/poketool/trainer/trpoke/narc_0466.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0466.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0467.bin b/files/poketool/trainer/trpoke/narc_0467.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0467.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0468.bin b/files/poketool/trainer/trpoke/narc_0468.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0468.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0469.bin b/files/poketool/trainer/trpoke/narc_0469.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0469.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0470.bin b/files/poketool/trainer/trpoke/narc_0470.bin deleted file mode 100644 index 44bdcbd6..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0470.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0471.bin b/files/poketool/trainer/trpoke/narc_0471.bin deleted file mode 100644 index 960fb43d..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0471.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0472.bin b/files/poketool/trainer/trpoke/narc_0472.bin deleted file mode 100644 index 36a65e6d..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0472.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0473.bin b/files/poketool/trainer/trpoke/narc_0473.bin deleted file mode 100644 index 16587a11..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0473.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0474.bin b/files/poketool/trainer/trpoke/narc_0474.bin deleted file mode 100644 index 74e3fdd6..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0474.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0475.bin b/files/poketool/trainer/trpoke/narc_0475.bin deleted file mode 100644 index 4ca3047d..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0475.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0476.bin b/files/poketool/trainer/trpoke/narc_0476.bin deleted file mode 100644 index 09675a7b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0476.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0477.bin b/files/poketool/trainer/trpoke/narc_0477.bin deleted file mode 100644 index 28e1bc01..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0477.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0478.bin b/files/poketool/trainer/trpoke/narc_0478.bin deleted file mode 100644 index 467d03b3..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0478.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0479.bin b/files/poketool/trainer/trpoke/narc_0479.bin deleted file mode 100644 index bf00933f..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0479.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0480.bin b/files/poketool/trainer/trpoke/narc_0480.bin deleted file mode 100644 index bd3a169a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0480.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0481.bin b/files/poketool/trainer/trpoke/narc_0481.bin deleted file mode 100644 index 9eca7919..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0481.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0482.bin b/files/poketool/trainer/trpoke/narc_0482.bin deleted file mode 100644 index c9503907..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0482.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0483.bin b/files/poketool/trainer/trpoke/narc_0483.bin deleted file mode 100644 index 0aaa21eb..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0483.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0484.bin b/files/poketool/trainer/trpoke/narc_0484.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0484.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0485.bin b/files/poketool/trainer/trpoke/narc_0485.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0485.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0486.bin b/files/poketool/trainer/trpoke/narc_0486.bin deleted file mode 100644 index 4c1caf40..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0486.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0487.bin b/files/poketool/trainer/trpoke/narc_0487.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0487.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0488.bin b/files/poketool/trainer/trpoke/narc_0488.bin deleted file mode 100644 index a4713982..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0488.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0489.bin b/files/poketool/trainer/trpoke/narc_0489.bin deleted file mode 100644 index 78ebe7c0..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0489.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0490.bin b/files/poketool/trainer/trpoke/narc_0490.bin deleted file mode 100644 index 76ab47cc..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0490.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0491.bin b/files/poketool/trainer/trpoke/narc_0491.bin deleted file mode 100644 index 93ef49ce..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0491.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0492.bin b/files/poketool/trainer/trpoke/narc_0492.bin deleted file mode 100644 index f2118689..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0492.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0493.bin b/files/poketool/trainer/trpoke/narc_0493.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0493.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0494.bin b/files/poketool/trainer/trpoke/narc_0494.bin deleted file mode 100644 index 92bdd753..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0494.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0495.bin b/files/poketool/trainer/trpoke/narc_0495.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0495.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0496.bin b/files/poketool/trainer/trpoke/narc_0496.bin deleted file mode 100644 index 945f637b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0496.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0497.bin b/files/poketool/trainer/trpoke/narc_0497.bin deleted file mode 100644 index 90aaebd9..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0497.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0498.bin b/files/poketool/trainer/trpoke/narc_0498.bin deleted file mode 100644 index 47a8cb31..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0498.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0499.bin b/files/poketool/trainer/trpoke/narc_0499.bin deleted file mode 100644 index 4d7b647f..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0499.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0500.bin b/files/poketool/trainer/trpoke/narc_0500.bin deleted file mode 100644 index da30a037..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0500.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0501.bin b/files/poketool/trainer/trpoke/narc_0501.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0501.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0502.bin b/files/poketool/trainer/trpoke/narc_0502.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0502.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0503.bin b/files/poketool/trainer/trpoke/narc_0503.bin deleted file mode 100644 index 1c941898..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0503.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0504.bin b/files/poketool/trainer/trpoke/narc_0504.bin deleted file mode 100644 index 92acb8d5..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0504.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0505.bin b/files/poketool/trainer/trpoke/narc_0505.bin deleted file mode 100644 index 621ae8b3..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0505.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0506.bin b/files/poketool/trainer/trpoke/narc_0506.bin deleted file mode 100644 index 84f2c9ac..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0506.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0507.bin b/files/poketool/trainer/trpoke/narc_0507.bin deleted file mode 100644 index 1260c564..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0507.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0508.bin b/files/poketool/trainer/trpoke/narc_0508.bin deleted file mode 100644 index f2148013..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0508.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0509.bin b/files/poketool/trainer/trpoke/narc_0509.bin deleted file mode 100644 index 7482b5e2..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0509.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0510.bin b/files/poketool/trainer/trpoke/narc_0510.bin deleted file mode 100644 index 8af3d6e8..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0510.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0511.bin b/files/poketool/trainer/trpoke/narc_0511.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0511.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0512.bin b/files/poketool/trainer/trpoke/narc_0512.bin deleted file mode 100644 index 224c13bb..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0512.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0513.bin b/files/poketool/trainer/trpoke/narc_0513.bin deleted file mode 100644 index e1c24d0e..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0513.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0514.bin b/files/poketool/trainer/trpoke/narc_0514.bin deleted file mode 100644 index d171d8bb..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0514.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0515.bin b/files/poketool/trainer/trpoke/narc_0515.bin deleted file mode 100644 index 11f3dd27..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0515.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0516.bin b/files/poketool/trainer/trpoke/narc_0516.bin deleted file mode 100644 index 02269a8c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0516.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0517.bin b/files/poketool/trainer/trpoke/narc_0517.bin deleted file mode 100644 index 156b4d0d..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0517.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0518.bin b/files/poketool/trainer/trpoke/narc_0518.bin deleted file mode 100644 index 18c970b9..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0518.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0519.bin b/files/poketool/trainer/trpoke/narc_0519.bin deleted file mode 100644 index cf384c83..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0519.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0520.bin b/files/poketool/trainer/trpoke/narc_0520.bin deleted file mode 100644 index c2020c08..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0520.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0521.bin b/files/poketool/trainer/trpoke/narc_0521.bin deleted file mode 100644 index 2112a712..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0521.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0522.bin b/files/poketool/trainer/trpoke/narc_0522.bin deleted file mode 100644 index b56d314b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0522.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0523.bin b/files/poketool/trainer/trpoke/narc_0523.bin deleted file mode 100644 index 503d5943..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0523.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0524.bin b/files/poketool/trainer/trpoke/narc_0524.bin deleted file mode 100644 index 12c96fd4..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0524.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0525.bin b/files/poketool/trainer/trpoke/narc_0525.bin deleted file mode 100644 index fe70c959..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0525.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0526.bin b/files/poketool/trainer/trpoke/narc_0526.bin deleted file mode 100644 index 1bb0ee60..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0526.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0527.bin b/files/poketool/trainer/trpoke/narc_0527.bin deleted file mode 100644 index a6dcdedb..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0527.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0528.bin b/files/poketool/trainer/trpoke/narc_0528.bin deleted file mode 100644 index cc5ef778..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0528.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0529.bin b/files/poketool/trainer/trpoke/narc_0529.bin deleted file mode 100644 index 8dff3fbf..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0529.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0530.bin b/files/poketool/trainer/trpoke/narc_0530.bin deleted file mode 100644 index 8c67516b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0530.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0531.bin b/files/poketool/trainer/trpoke/narc_0531.bin deleted file mode 100644 index 6388a6f5..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0531.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0532.bin b/files/poketool/trainer/trpoke/narc_0532.bin deleted file mode 100644 index 16cfa607..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0532.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0533.bin b/files/poketool/trainer/trpoke/narc_0533.bin deleted file mode 100644 index bed372d5..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0533.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0534.bin b/files/poketool/trainer/trpoke/narc_0534.bin deleted file mode 100644 index 3567a45f..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0534.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0535.bin b/files/poketool/trainer/trpoke/narc_0535.bin deleted file mode 100644 index 9057c00a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0535.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0536.bin b/files/poketool/trainer/trpoke/narc_0536.bin deleted file mode 100644 index 8dd7bc96..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0536.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0537.bin b/files/poketool/trainer/trpoke/narc_0537.bin deleted file mode 100644 index 353e589e..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0537.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0538.bin b/files/poketool/trainer/trpoke/narc_0538.bin deleted file mode 100644 index 6de3f8ca..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0538.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0539.bin b/files/poketool/trainer/trpoke/narc_0539.bin deleted file mode 100644 index 6f21ee7b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0539.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0540.bin b/files/poketool/trainer/trpoke/narc_0540.bin deleted file mode 100644 index 3345b318..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0540.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0541.bin b/files/poketool/trainer/trpoke/narc_0541.bin deleted file mode 100644 index 0f7eceb7..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0541.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0542.bin b/files/poketool/trainer/trpoke/narc_0542.bin deleted file mode 100644 index 1234d75f..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0542.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0543.bin b/files/poketool/trainer/trpoke/narc_0543.bin deleted file mode 100644 index 87577a77..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0543.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0544.bin b/files/poketool/trainer/trpoke/narc_0544.bin deleted file mode 100644 index c3f25db1..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0544.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0545.bin b/files/poketool/trainer/trpoke/narc_0545.bin deleted file mode 100644 index 4c188c1b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0545.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0546.bin b/files/poketool/trainer/trpoke/narc_0546.bin deleted file mode 100644 index 614083b5..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0546.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0547.bin b/files/poketool/trainer/trpoke/narc_0547.bin deleted file mode 100644 index f359beb4..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0547.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0548.bin b/files/poketool/trainer/trpoke/narc_0548.bin deleted file mode 100644 index 5eec2139..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0548.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0549.bin b/files/poketool/trainer/trpoke/narc_0549.bin deleted file mode 100644 index f98aaf3a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0549.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0550.bin b/files/poketool/trainer/trpoke/narc_0550.bin deleted file mode 100644 index dd1ca4e0..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0550.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0551.bin b/files/poketool/trainer/trpoke/narc_0551.bin deleted file mode 100644 index c6613f1d..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0551.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0552.bin b/files/poketool/trainer/trpoke/narc_0552.bin deleted file mode 100644 index faeb3988..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0552.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0553.bin b/files/poketool/trainer/trpoke/narc_0553.bin deleted file mode 100644 index efc8d073..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0553.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0554.bin b/files/poketool/trainer/trpoke/narc_0554.bin deleted file mode 100644 index 7d4c10e8..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0554.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0555.bin b/files/poketool/trainer/trpoke/narc_0555.bin deleted file mode 100644 index 786a5c6e..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0555.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0556.bin b/files/poketool/trainer/trpoke/narc_0556.bin deleted file mode 100644 index 4aba3d76..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0556.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0557.bin b/files/poketool/trainer/trpoke/narc_0557.bin deleted file mode 100644 index 8e83ab09..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0557.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0558.bin b/files/poketool/trainer/trpoke/narc_0558.bin deleted file mode 100644 index 6b47098d..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0558.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0559.bin b/files/poketool/trainer/trpoke/narc_0559.bin deleted file mode 100644 index a2b20fa1..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0559.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0560.bin b/files/poketool/trainer/trpoke/narc_0560.bin deleted file mode 100644 index 5e43350c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0560.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0561.bin b/files/poketool/trainer/trpoke/narc_0561.bin deleted file mode 100644 index f38b05d9..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0561.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0562.bin b/files/poketool/trainer/trpoke/narc_0562.bin deleted file mode 100644 index 8e4b8cc8..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0562.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0563.bin b/files/poketool/trainer/trpoke/narc_0563.bin deleted file mode 100644 index e1d99c3a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0563.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0564.bin b/files/poketool/trainer/trpoke/narc_0564.bin deleted file mode 100644 index ea2477a9..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0564.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0565.bin b/files/poketool/trainer/trpoke/narc_0565.bin deleted file mode 100644 index 18d46720..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0565.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0566.bin b/files/poketool/trainer/trpoke/narc_0566.bin deleted file mode 100644 index 55a3aac0..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0566.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0567.bin b/files/poketool/trainer/trpoke/narc_0567.bin deleted file mode 100644 index c5b0cb43..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0567.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0568.bin b/files/poketool/trainer/trpoke/narc_0568.bin deleted file mode 100644 index 680f98ae..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0568.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0569.bin b/files/poketool/trainer/trpoke/narc_0569.bin deleted file mode 100644 index fbd94893..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0569.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0570.bin b/files/poketool/trainer/trpoke/narc_0570.bin deleted file mode 100644 index e087a3c9..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0570.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0571.bin b/files/poketool/trainer/trpoke/narc_0571.bin deleted file mode 100644 index 6ef12e09..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0571.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0572.bin b/files/poketool/trainer/trpoke/narc_0572.bin deleted file mode 100644 index f49a38e0..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0572.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0573.bin b/files/poketool/trainer/trpoke/narc_0573.bin deleted file mode 100644 index 6d0415c0..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0573.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0574.bin b/files/poketool/trainer/trpoke/narc_0574.bin deleted file mode 100644 index 421f0f02..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0574.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0575.bin b/files/poketool/trainer/trpoke/narc_0575.bin deleted file mode 100644 index ece394a0..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0575.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0576.bin b/files/poketool/trainer/trpoke/narc_0576.bin deleted file mode 100644 index d6b98c2a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0576.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0577.bin b/files/poketool/trainer/trpoke/narc_0577.bin deleted file mode 100644 index 0afe6f5c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0577.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0578.bin b/files/poketool/trainer/trpoke/narc_0578.bin deleted file mode 100644 index 615b6ca6..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0578.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0579.bin b/files/poketool/trainer/trpoke/narc_0579.bin deleted file mode 100644 index d4fabe74..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0579.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0580.bin b/files/poketool/trainer/trpoke/narc_0580.bin deleted file mode 100644 index 27ecf031..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0580.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0581.bin b/files/poketool/trainer/trpoke/narc_0581.bin deleted file mode 100644 index f3d24ec0..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0581.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0582.bin b/files/poketool/trainer/trpoke/narc_0582.bin deleted file mode 100644 index 888cc078..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0582.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0583.bin b/files/poketool/trainer/trpoke/narc_0583.bin deleted file mode 100644 index cae75003..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0583.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0584.bin b/files/poketool/trainer/trpoke/narc_0584.bin deleted file mode 100644 index 9dbe752d..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0584.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0585.bin b/files/poketool/trainer/trpoke/narc_0585.bin deleted file mode 100644 index 6c390090..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0585.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0586.bin b/files/poketool/trainer/trpoke/narc_0586.bin deleted file mode 100644 index 6914d8b9..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0586.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0587.bin b/files/poketool/trainer/trpoke/narc_0587.bin deleted file mode 100644 index bf755385..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0587.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0588.bin b/files/poketool/trainer/trpoke/narc_0588.bin deleted file mode 100644 index 0a27f160..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0588.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0589.bin b/files/poketool/trainer/trpoke/narc_0589.bin deleted file mode 100644 index 319437cb..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0589.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0590.bin b/files/poketool/trainer/trpoke/narc_0590.bin deleted file mode 100644 index 0de57f12..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0590.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0591.bin b/files/poketool/trainer/trpoke/narc_0591.bin deleted file mode 100644 index 4b729163..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0591.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0592.bin b/files/poketool/trainer/trpoke/narc_0592.bin deleted file mode 100644 index f5385fc7..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0592.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0593.bin b/files/poketool/trainer/trpoke/narc_0593.bin deleted file mode 100644 index 545ec9ed..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0593.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0594.bin b/files/poketool/trainer/trpoke/narc_0594.bin deleted file mode 100644 index 2827db79..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0594.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0595.bin b/files/poketool/trainer/trpoke/narc_0595.bin deleted file mode 100644 index cae16396..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0595.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0596.bin b/files/poketool/trainer/trpoke/narc_0596.bin deleted file mode 100644 index 185a297c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0596.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0597.bin b/files/poketool/trainer/trpoke/narc_0597.bin deleted file mode 100644 index 870ef5ed..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0597.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0598.bin b/files/poketool/trainer/trpoke/narc_0598.bin deleted file mode 100644 index 46414949..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0598.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0599.bin b/files/poketool/trainer/trpoke/narc_0599.bin deleted file mode 100644 index 617da377..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0599.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0600.bin b/files/poketool/trainer/trpoke/narc_0600.bin deleted file mode 100644 index 40900697..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0600.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0601.bin b/files/poketool/trainer/trpoke/narc_0601.bin deleted file mode 100644 index 377228fd..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0601.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0602.bin b/files/poketool/trainer/trpoke/narc_0602.bin deleted file mode 100644 index 2dadb03e..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0602.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0603.bin b/files/poketool/trainer/trpoke/narc_0603.bin deleted file mode 100644 index 4b2e7588..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0603.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0604.bin b/files/poketool/trainer/trpoke/narc_0604.bin deleted file mode 100644 index cb4a445c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0604.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0605.bin b/files/poketool/trainer/trpoke/narc_0605.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0605.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0606.bin b/files/poketool/trainer/trpoke/narc_0606.bin deleted file mode 100644 index 00ab7bbf..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0606.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0607.bin b/files/poketool/trainer/trpoke/narc_0607.bin deleted file mode 100644 index 46e8c619..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0607.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0608.bin b/files/poketool/trainer/trpoke/narc_0608.bin deleted file mode 100644 index 13c451e1..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0608.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0609.bin b/files/poketool/trainer/trpoke/narc_0609.bin deleted file mode 100644 index 4476505a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0609.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0610.bin b/files/poketool/trainer/trpoke/narc_0610.bin deleted file mode 100644 index 6c423e78..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0610.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0611.bin b/files/poketool/trainer/trpoke/narc_0611.bin deleted file mode 100644 index f93dff09..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0611.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0612.bin b/files/poketool/trainer/trpoke/narc_0612.bin deleted file mode 100644 index f745362c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0612.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0613.bin b/files/poketool/trainer/trpoke/narc_0613.bin deleted file mode 100644 index 71655ed6..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0613.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0614.bin b/files/poketool/trainer/trpoke/narc_0614.bin deleted file mode 100644 index 2be0d425..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0614.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0615.bin b/files/poketool/trainer/trpoke/narc_0615.bin deleted file mode 100644 index dcd10d8f..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0615.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0616.bin b/files/poketool/trainer/trpoke/narc_0616.bin deleted file mode 100644 index 71655ed6..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0616.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0617.bin b/files/poketool/trainer/trpoke/narc_0617.bin deleted file mode 100644 index 2be0d425..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0617.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0618.bin b/files/poketool/trainer/trpoke/narc_0618.bin deleted file mode 100644 index dcd10d8f..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0618.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0619.bin b/files/poketool/trainer/trpoke/narc_0619.bin deleted file mode 100644 index 2872ebf4..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0619.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0620.bin b/files/poketool/trainer/trpoke/narc_0620.bin deleted file mode 100644 index d1b5eef4..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0620.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0621.bin b/files/poketool/trainer/trpoke/narc_0621.bin deleted file mode 100644 index e7c74396..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0621.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0622.bin b/files/poketool/trainer/trpoke/narc_0622.bin deleted file mode 100644 index 1b483c62..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0622.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0623.bin b/files/poketool/trainer/trpoke/narc_0623.bin deleted file mode 100644 index 3e834a56..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0623.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0624.bin b/files/poketool/trainer/trpoke/narc_0624.bin deleted file mode 100644 index e7c74396..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0624.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0625.bin b/files/poketool/trainer/trpoke/narc_0625.bin deleted file mode 100644 index 1b483c62..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0625.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0626.bin b/files/poketool/trainer/trpoke/narc_0626.bin deleted file mode 100644 index 3e834a56..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0626.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0627.bin b/files/poketool/trainer/trpoke/narc_0627.bin deleted file mode 100644 index 9debb329..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0627.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0628.bin b/files/poketool/trainer/trpoke/narc_0628.bin deleted file mode 100644 index 5cc5edc4..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0628.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0629.bin b/files/poketool/trainer/trpoke/narc_0629.bin deleted file mode 100644 index c05e7e05..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0629.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0630.bin b/files/poketool/trainer/trpoke/narc_0630.bin deleted file mode 100644 index d910a785..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0630.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0631.bin b/files/poketool/trainer/trpoke/narc_0631.bin deleted file mode 100644 index fbb33350..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0631.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0632.bin b/files/poketool/trainer/trpoke/narc_0632.bin deleted file mode 100644 index 31b220ca..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0632.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0633.bin b/files/poketool/trainer/trpoke/narc_0633.bin deleted file mode 100644 index 1112b59c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0633.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0634.bin b/files/poketool/trainer/trpoke/narc_0634.bin deleted file mode 100644 index d1770dc6..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0634.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0635.bin b/files/poketool/trainer/trpoke/narc_0635.bin deleted file mode 100644 index 576eea14..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0635.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0636.bin b/files/poketool/trainer/trpoke/narc_0636.bin deleted file mode 100644 index 5a21612a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0636.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0637.bin b/files/poketool/trainer/trpoke/narc_0637.bin deleted file mode 100644 index 82ff359c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0637.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0638.bin b/files/poketool/trainer/trpoke/narc_0638.bin deleted file mode 100644 index 75a63a28..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0638.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0639.bin b/files/poketool/trainer/trpoke/narc_0639.bin deleted file mode 100644 index 9098d9e6..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0639.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0640.bin b/files/poketool/trainer/trpoke/narc_0640.bin deleted file mode 100644 index ddc22def..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0640.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0641.bin b/files/poketool/trainer/trpoke/narc_0641.bin deleted file mode 100644 index 7416cf3f..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0641.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0642.bin b/files/poketool/trainer/trpoke/narc_0642.bin deleted file mode 100644 index b50a338c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0642.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0643.bin b/files/poketool/trainer/trpoke/narc_0643.bin deleted file mode 100644 index 06de1111..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0643.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0644.bin b/files/poketool/trainer/trpoke/narc_0644.bin deleted file mode 100644 index d49b7b7b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0644.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0645.bin b/files/poketool/trainer/trpoke/narc_0645.bin deleted file mode 100644 index a75d12bb..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0645.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0646.bin b/files/poketool/trainer/trpoke/narc_0646.bin deleted file mode 100644 index 4ebe6411..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0646.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0647.bin b/files/poketool/trainer/trpoke/narc_0647.bin deleted file mode 100644 index 81721beb..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0647.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0648.bin b/files/poketool/trainer/trpoke/narc_0648.bin deleted file mode 100644 index f26c5f03..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0648.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0649.bin b/files/poketool/trainer/trpoke/narc_0649.bin deleted file mode 100644 index 99273f35..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0649.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0650.bin b/files/poketool/trainer/trpoke/narc_0650.bin deleted file mode 100644 index 3960cfbe..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0650.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0651.bin b/files/poketool/trainer/trpoke/narc_0651.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0651.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0652.bin b/files/poketool/trainer/trpoke/narc_0652.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0652.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0653.bin b/files/poketool/trainer/trpoke/narc_0653.bin deleted file mode 100644 index a9ff1761..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0653.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0654.bin b/files/poketool/trainer/trpoke/narc_0654.bin deleted file mode 100644 index 7a7c81cb..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0654.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0655.bin b/files/poketool/trainer/trpoke/narc_0655.bin deleted file mode 100644 index d1995979..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0655.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0656.bin b/files/poketool/trainer/trpoke/narc_0656.bin deleted file mode 100644 index 554b55ae..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0656.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0657.bin b/files/poketool/trainer/trpoke/narc_0657.bin deleted file mode 100644 index ccc02933..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0657.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0658.bin b/files/poketool/trainer/trpoke/narc_0658.bin deleted file mode 100644 index 3a5828fc..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0658.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0659.bin b/files/poketool/trainer/trpoke/narc_0659.bin deleted file mode 100644 index 93977e17..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0659.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0660.bin b/files/poketool/trainer/trpoke/narc_0660.bin deleted file mode 100644 index c452f234..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0660.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0661.bin b/files/poketool/trainer/trpoke/narc_0661.bin deleted file mode 100644 index 25018de6..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0661.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0662.bin b/files/poketool/trainer/trpoke/narc_0662.bin deleted file mode 100644 index 6ef8a6b7..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0662.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0663.bin b/files/poketool/trainer/trpoke/narc_0663.bin deleted file mode 100644 index c5400cab..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0663.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0664.bin b/files/poketool/trainer/trpoke/narc_0664.bin deleted file mode 100644 index e37afe6f..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0664.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0665.bin b/files/poketool/trainer/trpoke/narc_0665.bin deleted file mode 100644 index 60299e22..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0665.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0666.bin b/files/poketool/trainer/trpoke/narc_0666.bin deleted file mode 100644 index a3fc9cc8..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0666.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0667.bin b/files/poketool/trainer/trpoke/narc_0667.bin deleted file mode 100644 index 253f79f1..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0667.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0668.bin b/files/poketool/trainer/trpoke/narc_0668.bin deleted file mode 100644 index 0b84097b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0668.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0669.bin b/files/poketool/trainer/trpoke/narc_0669.bin deleted file mode 100644 index 0dd968c4..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0669.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0670.bin b/files/poketool/trainer/trpoke/narc_0670.bin deleted file mode 100644 index 3161fc1c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0670.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0671.bin b/files/poketool/trainer/trpoke/narc_0671.bin deleted file mode 100644 index e8b40197..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0671.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0672.bin b/files/poketool/trainer/trpoke/narc_0672.bin deleted file mode 100644 index 5f537278..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0672.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0673.bin b/files/poketool/trainer/trpoke/narc_0673.bin deleted file mode 100644 index 2c90a503..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0673.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0674.bin b/files/poketool/trainer/trpoke/narc_0674.bin deleted file mode 100644 index 64231443..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0674.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0675.bin b/files/poketool/trainer/trpoke/narc_0675.bin deleted file mode 100644 index f246eb6c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0675.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0676.bin b/files/poketool/trainer/trpoke/narc_0676.bin deleted file mode 100644 index f39acaf1..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0676.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0677.bin b/files/poketool/trainer/trpoke/narc_0677.bin deleted file mode 100644 index d8aba36a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0677.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0678.bin b/files/poketool/trainer/trpoke/narc_0678.bin deleted file mode 100644 index 56fb0e1c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0678.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0679.bin b/files/poketool/trainer/trpoke/narc_0679.bin deleted file mode 100644 index 70ffdec6..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0679.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0680.bin b/files/poketool/trainer/trpoke/narc_0680.bin deleted file mode 100644 index 6e476238..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0680.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0681.bin b/files/poketool/trainer/trpoke/narc_0681.bin deleted file mode 100644 index 7e12a46e..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0681.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0682.bin b/files/poketool/trainer/trpoke/narc_0682.bin deleted file mode 100644 index c2a1145c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0682.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0683.bin b/files/poketool/trainer/trpoke/narc_0683.bin deleted file mode 100644 index 451db44e..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0683.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0684.bin b/files/poketool/trainer/trpoke/narc_0684.bin deleted file mode 100644 index e5a5925b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0684.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0685.bin b/files/poketool/trainer/trpoke/narc_0685.bin deleted file mode 100644 index dae6ed63..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0685.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0686.bin b/files/poketool/trainer/trpoke/narc_0686.bin deleted file mode 100644 index dae6ed63..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0686.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0687.bin b/files/poketool/trainer/trpoke/narc_0687.bin deleted file mode 100644 index a759b13c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0687.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0688.bin b/files/poketool/trainer/trpoke/narc_0688.bin deleted file mode 100644 index bb27b1a3..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0688.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0689.bin b/files/poketool/trainer/trpoke/narc_0689.bin deleted file mode 100644 index df26cf1a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0689.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0690.bin b/files/poketool/trainer/trpoke/narc_0690.bin deleted file mode 100644 index bbfd54df..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0690.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0691.bin b/files/poketool/trainer/trpoke/narc_0691.bin deleted file mode 100644 index 0e9ce9b7..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0691.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0692.bin b/files/poketool/trainer/trpoke/narc_0692.bin deleted file mode 100644 index 07a0999a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0692.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0693.bin b/files/poketool/trainer/trpoke/narc_0693.bin deleted file mode 100644 index b7320eae..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0693.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0694.bin b/files/poketool/trainer/trpoke/narc_0694.bin deleted file mode 100644 index 019eb1c9..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0694.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0695.bin b/files/poketool/trainer/trpoke/narc_0695.bin deleted file mode 100644 index bb6d6462..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0695.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0696.bin b/files/poketool/trainer/trpoke/narc_0696.bin deleted file mode 100644 index 685a16f4..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0696.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0697.bin b/files/poketool/trainer/trpoke/narc_0697.bin deleted file mode 100644 index b503e7ab..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0697.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0698.bin b/files/poketool/trainer/trpoke/narc_0698.bin deleted file mode 100644 index 24d7b326..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0698.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0699.bin b/files/poketool/trainer/trpoke/narc_0699.bin deleted file mode 100644 index 7e06c12b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0699.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0700.bin b/files/poketool/trainer/trpoke/narc_0700.bin deleted file mode 100644 index cc91db11..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0700.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0701.bin b/files/poketool/trainer/trpoke/narc_0701.bin deleted file mode 100644 index 00ffe4be..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0701.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0702.bin b/files/poketool/trainer/trpoke/narc_0702.bin deleted file mode 100644 index 7a6d34dc..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0702.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0703.bin b/files/poketool/trainer/trpoke/narc_0703.bin deleted file mode 100644 index 9debb329..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0703.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0704.bin b/files/poketool/trainer/trpoke/narc_0704.bin deleted file mode 100644 index 5cc5edc4..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0704.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0705.bin b/files/poketool/trainer/trpoke/narc_0705.bin deleted file mode 100644 index c05e7e05..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0705.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0706.bin b/files/poketool/trainer/trpoke/narc_0706.bin deleted file mode 100644 index ec0c811d..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0706.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0707.bin b/files/poketool/trainer/trpoke/narc_0707.bin deleted file mode 100644 index b7659e4f..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0707.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0708.bin b/files/poketool/trainer/trpoke/narc_0708.bin deleted file mode 100644 index 2d6764f2..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0708.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0709.bin b/files/poketool/trainer/trpoke/narc_0709.bin deleted file mode 100644 index 2b55d875..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0709.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0710.bin b/files/poketool/trainer/trpoke/narc_0710.bin deleted file mode 100644 index fb2c9b68..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0710.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0711.bin b/files/poketool/trainer/trpoke/narc_0711.bin deleted file mode 100644 index b43b42af..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0711.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0712.bin b/files/poketool/trainer/trpoke/narc_0712.bin deleted file mode 100644 index 96fb869b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0712.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0713.bin b/files/poketool/trainer/trpoke/narc_0713.bin deleted file mode 100644 index 3681e67a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0713.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0714.bin b/files/poketool/trainer/trpoke/narc_0714.bin deleted file mode 100644 index 123b4132..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0714.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0715.bin b/files/poketool/trainer/trpoke/narc_0715.bin deleted file mode 100644 index d7f630ee..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0715.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0716.bin b/files/poketool/trainer/trpoke/narc_0716.bin deleted file mode 100644 index 939a6945..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0716.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0717.bin b/files/poketool/trainer/trpoke/narc_0717.bin deleted file mode 100644 index 72cccf05..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0717.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0718.bin b/files/poketool/trainer/trpoke/narc_0718.bin deleted file mode 100644 index 67942159..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0718.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0719.bin b/files/poketool/trainer/trpoke/narc_0719.bin deleted file mode 100644 index 966becdd..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0719.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0720.bin b/files/poketool/trainer/trpoke/narc_0720.bin deleted file mode 100644 index 5f347443..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0720.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0721.bin b/files/poketool/trainer/trpoke/narc_0721.bin deleted file mode 100644 index 554b55ae..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0721.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0722.bin b/files/poketool/trainer/trpoke/narc_0722.bin deleted file mode 100644 index ccc02933..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0722.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0723.bin b/files/poketool/trainer/trpoke/narc_0723.bin deleted file mode 100644 index ff385a42..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0723.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0724.bin b/files/poketool/trainer/trpoke/narc_0724.bin deleted file mode 100644 index 54ec4466..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0724.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0725.bin b/files/poketool/trainer/trpoke/narc_0725.bin deleted file mode 100644 index 3bf3024b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0725.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0726.bin b/files/poketool/trainer/trpoke/narc_0726.bin deleted file mode 100644 index ab645a7f..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0726.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0727.bin b/files/poketool/trainer/trpoke/narc_0727.bin deleted file mode 100644 index 019eb1c9..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0727.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0728.bin b/files/poketool/trainer/trpoke/narc_0728.bin deleted file mode 100644 index c1beab5f..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0728.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0729.bin b/files/poketool/trainer/trpoke/narc_0729.bin deleted file mode 100644 index f7ad4896..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0729.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0730.bin b/files/poketool/trainer/trpoke/narc_0730.bin deleted file mode 100644 index b8bb37b4..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0730.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0731.bin b/files/poketool/trainer/trpoke/narc_0731.bin deleted file mode 100644 index 61e80429..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0731.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0732.bin b/files/poketool/trainer/trpoke/narc_0732.bin deleted file mode 100644 index d72097aa..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0732.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0733.bin b/files/poketool/trainer/trpoke/narc_0733.bin deleted file mode 100644 index 6c3f1a2b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0733.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0734.bin b/files/poketool/trainer/trpoke/narc_0734.bin deleted file mode 100644 index ba42f08c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0734.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0735.bin b/files/poketool/trainer/trpoke/narc_0735.bin deleted file mode 100644 index 04c1d5e6..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0735.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0736.bin b/files/poketool/trainer/trpoke/narc_0736.bin deleted file mode 100644 index 8e75221a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0736.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0737.bin b/files/poketool/trainer/trpoke/narc_0737.bin deleted file mode 100644 index 3eb5fcac..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0737.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0738.bin b/files/poketool/trainer/trpoke/narc_0738.bin deleted file mode 100644 index b46857f9..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0738.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0739.bin b/files/poketool/trainer/trpoke/narc_0739.bin deleted file mode 100644 index a1a12edc..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0739.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0740.bin b/files/poketool/trainer/trpoke/narc_0740.bin deleted file mode 100644 index fe2217f5..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0740.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0741.bin b/files/poketool/trainer/trpoke/narc_0741.bin deleted file mode 100644 index c1c103a9..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0741.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0742.bin b/files/poketool/trainer/trpoke/narc_0742.bin deleted file mode 100644 index 572fb6b1..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0742.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0743.bin b/files/poketool/trainer/trpoke/narc_0743.bin deleted file mode 100644 index 4b0ba68a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0743.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0744.bin b/files/poketool/trainer/trpoke/narc_0744.bin deleted file mode 100644 index cecb5234..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0744.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0745.bin b/files/poketool/trainer/trpoke/narc_0745.bin deleted file mode 100644 index fd450311..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0745.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0746.bin b/files/poketool/trainer/trpoke/narc_0746.bin deleted file mode 100644 index 1fb351ee..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0746.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0747.bin b/files/poketool/trainer/trpoke/narc_0747.bin deleted file mode 100644 index c8ef8f0e..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0747.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0748.bin b/files/poketool/trainer/trpoke/narc_0748.bin deleted file mode 100644 index a1adbca8..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0748.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0749.bin b/files/poketool/trainer/trpoke/narc_0749.bin deleted file mode 100644 index ddc55889..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0749.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0750.bin b/files/poketool/trainer/trpoke/narc_0750.bin deleted file mode 100644 index 2ef0e853..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0750.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0751.bin b/files/poketool/trainer/trpoke/narc_0751.bin deleted file mode 100644 index 248a35c3..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0751.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0752.bin b/files/poketool/trainer/trpoke/narc_0752.bin deleted file mode 100644 index 5dd4de6b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0752.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0753.bin b/files/poketool/trainer/trpoke/narc_0753.bin deleted file mode 100644 index fc72c18d..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0753.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0754.bin b/files/poketool/trainer/trpoke/narc_0754.bin deleted file mode 100644 index 9f4be4db..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0754.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0755.bin b/files/poketool/trainer/trpoke/narc_0755.bin deleted file mode 100644 index 8d29b762..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0755.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0756.bin b/files/poketool/trainer/trpoke/narc_0756.bin deleted file mode 100644 index ec082d01..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0756.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0757.bin b/files/poketool/trainer/trpoke/narc_0757.bin deleted file mode 100644 index f56e6f49..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0757.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0758.bin b/files/poketool/trainer/trpoke/narc_0758.bin deleted file mode 100644 index c202f19f..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0758.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0759.bin b/files/poketool/trainer/trpoke/narc_0759.bin deleted file mode 100644 index a6fbac5c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0759.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0760.bin b/files/poketool/trainer/trpoke/narc_0760.bin deleted file mode 100644 index 2878655e..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0760.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0761.bin b/files/poketool/trainer/trpoke/narc_0761.bin deleted file mode 100644 index 462ec392..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0761.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0762.bin b/files/poketool/trainer/trpoke/narc_0762.bin deleted file mode 100644 index 9d8b3a17..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0762.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0763.bin b/files/poketool/trainer/trpoke/narc_0763.bin deleted file mode 100644 index 297362cc..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0763.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0764.bin b/files/poketool/trainer/trpoke/narc_0764.bin deleted file mode 100644 index 8a723635..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0764.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0765.bin b/files/poketool/trainer/trpoke/narc_0765.bin deleted file mode 100644 index 2fb434c9..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0765.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0766.bin b/files/poketool/trainer/trpoke/narc_0766.bin deleted file mode 100644 index 6db62392..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0766.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0767.bin b/files/poketool/trainer/trpoke/narc_0767.bin deleted file mode 100644 index 8d29b762..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0767.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0768.bin b/files/poketool/trainer/trpoke/narc_0768.bin deleted file mode 100644 index 99646dc4..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0768.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0769.bin b/files/poketool/trainer/trpoke/narc_0769.bin deleted file mode 100644 index cdb5b644..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0769.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0770.bin b/files/poketool/trainer/trpoke/narc_0770.bin deleted file mode 100644 index 56d53027..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0770.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0771.bin b/files/poketool/trainer/trpoke/narc_0771.bin deleted file mode 100644 index f93cfcae..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0771.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0772.bin b/files/poketool/trainer/trpoke/narc_0772.bin deleted file mode 100644 index 5f8048a0..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0772.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0773.bin b/files/poketool/trainer/trpoke/narc_0773.bin deleted file mode 100644 index 3752add3..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0773.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0774.bin b/files/poketool/trainer/trpoke/narc_0774.bin deleted file mode 100644 index cb0befef..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0774.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0775.bin b/files/poketool/trainer/trpoke/narc_0775.bin deleted file mode 100644 index ed71a62e..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0775.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0776.bin b/files/poketool/trainer/trpoke/narc_0776.bin deleted file mode 100644 index 43a1fadc..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0776.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0777.bin b/files/poketool/trainer/trpoke/narc_0777.bin deleted file mode 100644 index 13ed5295..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0777.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0778.bin b/files/poketool/trainer/trpoke/narc_0778.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0778.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0779.bin b/files/poketool/trainer/trpoke/narc_0779.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0779.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0780.bin b/files/poketool/trainer/trpoke/narc_0780.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0780.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0781.bin b/files/poketool/trainer/trpoke/narc_0781.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0781.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0782.bin b/files/poketool/trainer/trpoke/narc_0782.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0782.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0783.bin b/files/poketool/trainer/trpoke/narc_0783.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0783.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0784.bin b/files/poketool/trainer/trpoke/narc_0784.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0784.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0785.bin b/files/poketool/trainer/trpoke/narc_0785.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0785.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0786.bin b/files/poketool/trainer/trpoke/narc_0786.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0786.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0787.bin b/files/poketool/trainer/trpoke/narc_0787.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0787.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0788.bin b/files/poketool/trainer/trpoke/narc_0788.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0788.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0789.bin b/files/poketool/trainer/trpoke/narc_0789.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0789.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0790.bin b/files/poketool/trainer/trpoke/narc_0790.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0790.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0791.bin b/files/poketool/trainer/trpoke/narc_0791.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0791.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0792.bin b/files/poketool/trainer/trpoke/narc_0792.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0792.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0793.bin b/files/poketool/trainer/trpoke/narc_0793.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0793.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0794.bin b/files/poketool/trainer/trpoke/narc_0794.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0794.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0795.bin b/files/poketool/trainer/trpoke/narc_0795.bin deleted file mode 100644 index 1f22752b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0795.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0796.bin b/files/poketool/trainer/trpoke/narc_0796.bin deleted file mode 100644 index 1f22752b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0796.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0797.bin b/files/poketool/trainer/trpoke/narc_0797.bin deleted file mode 100644 index 1f22752b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0797.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0798.bin b/files/poketool/trainer/trpoke/narc_0798.bin deleted file mode 100644 index 1f22752b..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0798.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0799.bin b/files/poketool/trainer/trpoke/narc_0799.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0799.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0800.bin b/files/poketool/trainer/trpoke/narc_0800.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0800.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0801.bin b/files/poketool/trainer/trpoke/narc_0801.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0801.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0802.bin b/files/poketool/trainer/trpoke/narc_0802.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0802.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0803.bin b/files/poketool/trainer/trpoke/narc_0803.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0803.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0804.bin b/files/poketool/trainer/trpoke/narc_0804.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0804.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0805.bin b/files/poketool/trainer/trpoke/narc_0805.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0805.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0806.bin b/files/poketool/trainer/trpoke/narc_0806.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0806.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0807.bin b/files/poketool/trainer/trpoke/narc_0807.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0807.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0808.bin b/files/poketool/trainer/trpoke/narc_0808.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0808.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0809.bin b/files/poketool/trainer/trpoke/narc_0809.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0809.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0810.bin b/files/poketool/trainer/trpoke/narc_0810.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0810.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0811.bin b/files/poketool/trainer/trpoke/narc_0811.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0811.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0812.bin b/files/poketool/trainer/trpoke/narc_0812.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0812.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0813.bin b/files/poketool/trainer/trpoke/narc_0813.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0813.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0814.bin b/files/poketool/trainer/trpoke/narc_0814.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0814.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0815.bin b/files/poketool/trainer/trpoke/narc_0815.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0815.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0816.bin b/files/poketool/trainer/trpoke/narc_0816.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0816.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0817.bin b/files/poketool/trainer/trpoke/narc_0817.bin deleted file mode 100644 index 96b135e7..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0817.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0818.bin b/files/poketool/trainer/trpoke/narc_0818.bin deleted file mode 100644 index 5cbe82cf..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0818.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0819.bin b/files/poketool/trainer/trpoke/narc_0819.bin deleted file mode 100644 index 88a0b472..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0819.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0820.bin b/files/poketool/trainer/trpoke/narc_0820.bin deleted file mode 100644 index 7c01546e..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0820.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0821.bin b/files/poketool/trainer/trpoke/narc_0821.bin deleted file mode 100644 index cc5826cb..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0821.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0822.bin b/files/poketool/trainer/trpoke/narc_0822.bin deleted file mode 100644 index 34426ae6..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0822.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0823.bin b/files/poketool/trainer/trpoke/narc_0823.bin deleted file mode 100644 index 0ae501c4..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0823.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0824.bin b/files/poketool/trainer/trpoke/narc_0824.bin deleted file mode 100644 index b019b0ef..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0824.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0825.bin b/files/poketool/trainer/trpoke/narc_0825.bin deleted file mode 100644 index 3510d52c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0825.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0826.bin b/files/poketool/trainer/trpoke/narc_0826.bin deleted file mode 100644 index 67a45289..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0826.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0827.bin b/files/poketool/trainer/trpoke/narc_0827.bin deleted file mode 100644 index b9966e3c..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0827.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0828.bin b/files/poketool/trainer/trpoke/narc_0828.bin deleted file mode 100644 index d053e146..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0828.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0829.bin b/files/poketool/trainer/trpoke/narc_0829.bin deleted file mode 100644 index 9324fef5..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0829.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0830.bin b/files/poketool/trainer/trpoke/narc_0830.bin deleted file mode 100644 index 4a7827a2..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0830.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0831.bin b/files/poketool/trainer/trpoke/narc_0831.bin deleted file mode 100644 index 912ef1cd..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0831.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0832.bin b/files/poketool/trainer/trpoke/narc_0832.bin deleted file mode 100644 index 2f41a84f..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0832.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0833.bin b/files/poketool/trainer/trpoke/narc_0833.bin deleted file mode 100644 index 4c7e61f9..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0833.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0834.bin b/files/poketool/trainer/trpoke/narc_0834.bin deleted file mode 100644 index 6285c622..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0834.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0835.bin b/files/poketool/trainer/trpoke/narc_0835.bin deleted file mode 100644 index 07b67525..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0835.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0836.bin b/files/poketool/trainer/trpoke/narc_0836.bin deleted file mode 100644 index fd6d3b87..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0836.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0837.bin b/files/poketool/trainer/trpoke/narc_0837.bin deleted file mode 100644 index 84cfd713..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0837.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0838.bin b/files/poketool/trainer/trpoke/narc_0838.bin deleted file mode 100644 index f679f39d..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0838.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0839.bin b/files/poketool/trainer/trpoke/narc_0839.bin deleted file mode 100644 index 6cef6043..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0839.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0840.bin b/files/poketool/trainer/trpoke/narc_0840.bin deleted file mode 100644 index 11a084ae..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0840.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0841.bin b/files/poketool/trainer/trpoke/narc_0841.bin deleted file mode 100644 index 0a10ae87..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0841.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0842.bin b/files/poketool/trainer/trpoke/narc_0842.bin deleted file mode 100644 index c5ce5078..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0842.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0843.bin b/files/poketool/trainer/trpoke/narc_0843.bin deleted file mode 100644 index fc2e717a..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0843.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0844.bin b/files/poketool/trainer/trpoke/narc_0844.bin deleted file mode 100644 index 17ac8a10..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0844.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0845.bin b/files/poketool/trainer/trpoke/narc_0845.bin deleted file mode 100644 index 3b3e6f81..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0845.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0846.bin b/files/poketool/trainer/trpoke/narc_0846.bin deleted file mode 100644 index 65079747..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0846.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0847.bin b/files/poketool/trainer/trpoke/narc_0847.bin deleted file mode 100644 index 85c80779..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0847.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0848.bin b/files/poketool/trainer/trpoke/narc_0848.bin deleted file mode 100644 index b63dd523..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0848.bin and /dev/null differ diff --git a/files/poketool/trainer/trpoke/narc_0849.bin b/files/poketool/trainer/trpoke/narc_0849.bin deleted file mode 100644 index c7e1ac95..00000000 Binary files a/files/poketool/trainer/trpoke/narc_0849.bin and /dev/null differ diff --git a/filesystem.mk b/filesystem.mk index 7471d644..33d82c23 100644 --- a/filesystem.mk +++ b/filesystem.mk @@ -290,16 +290,27 @@ O2NARC_TARGETS := \ files/poketool/waza/waza_tbl.narc \ files/itemtool/itemdata/item_data.narc \ files/itemtool/itemdata/nuts_data.narc \ + files/poketool/trainer/trdata.narc \ + +ALL_O2NARC_TARGETS := $(O2NARC_TARGETS) \ + files/poketool/trainer/trpoke.narc files/poketool/personal/pms.narc: O2NARCFLAGS = -f files/itemtool/itemdata/item_data.narc: O2NARCFLAGS = -p 0xFF ifeq (,$(NODEP)) -$(O2NARC_TARGETS): dep = $(shell $(SCANINC) -I include -I include-mw -I arm9/lib/include $(patsubst %.narc,%.json.txt,$@)) +$(ALL_O2NARC_TARGETS): dep = $(shell $(SCANINC) -I include -I include-mw -I arm9/lib/include $(patsubst %.narc,%.json.txt,$@)) else -$(O2NARC_TARGETS): dep := +$(ALL_O2NARC_TARGETS): dep := endif +## This specific target shares its source JSON with trdata.narc +files/poketool/trainer/trpoke.narc: %/trpoke.narc: %/trdata.json %/trpoke.json.txt $$(dep) + $(JSONPROC) $< $(word 2,$^) $*/trpoke.c + $(CC) $(CFLAGS) -c -o $*/trpoke.o $*/trpoke.c + $(O2NARC) $(O2NARCFLAGS) $*/trpoke.o $@ + @$(RM) $*/trpoke.o $*/trpoke.c + $(O2NARC_TARGETS): %.narc: %.json %.json.txt $$(dep) $(JSONPROC) $*.json $*.json.txt $*.c $(CC) $(CFLAGS) -c -o $*.o $*.c diff --git a/include/trainer_data.h b/include/trainer_data.h new file mode 100644 index 00000000..3abf9a9f --- /dev/null +++ b/include/trainer_data.h @@ -0,0 +1,70 @@ +#ifndef POKEDIAMOND_TRAINER_DATA_H +#define POKEDIAMOND_TRAINER_DATA_H + +#include "global.h" +#include "constants/pokemon.h" + +struct TrainerMonSpecies +{ + u16 difficulty; + u16 level; + u16 species; +}; + +struct TrainerMonSpeciesMoves +{ + u16 difficulty; + u16 level; + u16 moves[MON_MOVES]; +}; + +struct TrainerMonSpeciesItem +{ + u16 difficulty; + u16 level; + u16 species; + u16 item; +}; + +struct TrainerMonSpeciesItemMoves +{ + u16 difficulty; + u16 level; + u16 item; + u16 moves[MON_MOVES]; +}; + +union TrainerMon +{ + struct TrainerMonSpecies species; + struct TrainerMonSpeciesMoves species_moves; + struct TrainerMonSpeciesItem species_item; + struct TrainerMonSpeciesItemMoves species_item_moves; +}; + +#define TRTYPE_MON 0 +#define TRTYPE_MON_MOVES 1 +#define TRTYPE_MON_ITEM 2 +#define TRTYPE_MON_ITEM_MOVES 3 + +struct TrainerData +{ + u8 trainerType; + u8 trainerClass; + u8 unk_2; + u8 npoke; + u16 items[4]; + u32 unk_C; + u32 unk_10; +}; + +struct EnemyTrainerSet +{ + u32 flags; + struct PlayerParty * parties[4]; + u16 field_14[4]; + u32 trainer_idxs[4]; + struct TrainerData datas[4]; +}; + +#endif //POKEDIAMOND_TRAINER_DATA_H diff --git a/tools/jsonproc/inja.hpp b/tools/jsonproc/inja.hpp index d5bf5bcb..26a63737 100644 --- a/tools/jsonproc/inja.hpp +++ b/tools/jsonproc/inja.hpp @@ -1,81 +1,29 @@ -// MIT License - -// Copyright (c) 2018 lbersch - -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: - -// The above copyright notice and this permission notice shall be included in all -// copies or substantial portions of the Software. - -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -// SOFTWARE. - - -// --- - - -// Copyright (c) 2009-2018 FIRST -// All rights reserved. - -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// * Neither the name of the FIRST nor the -// names of its contributors may be used to endorse or promote products -// derived from this software without specific prior written permission. - -// THIS SOFTWARE IS PROVIDED BY FIRST AND CONTRIBUTORS``AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY NONINFRINGEMENT AND FITNESS FOR A PARTICULAR -// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL FIRST OR CONTRIBUTORS BE LIABLE FOR -// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef PANTOR_INJA_HPP -#define PANTOR_INJA_HPP +// Copyright (c) 2020 Pantor. All rights reserved. -#include -#include -#include -#include -#include -#include -#include +#ifndef INCLUDE_INJA_INJA_HPP_ +#define INCLUDE_INJA_INJA_HPP_ #include // #include "environment.hpp" -#ifndef PANTOR_INJA_ENVIRONMENT_HPP -#define PANTOR_INJA_ENVIRONMENT_HPP +// Copyright (c) 2019 Pantor. All rights reserved. + +#ifndef INCLUDE_INJA_ENVIRONMENT_HPP_ +#define INCLUDE_INJA_ENVIRONMENT_HPP_ -#include #include +#include +#include #include #include #include // #include "config.hpp" -#ifndef PANTOR_INJA_CONFIG_HPP -#define PANTOR_INJA_CONFIG_HPP +// Copyright (c) 2019 Pantor. All rights reserved. + +#ifndef INCLUDE_INJA_CONFIG_HPP_ +#define INCLUDE_INJA_CONFIG_HPP_ #include #include @@ -94,94 +42,98 @@ #ifndef NONSTD_SV_LITE_H_INCLUDED #define NONSTD_SV_LITE_H_INCLUDED -#define string_view_lite_MAJOR 1 -#define string_view_lite_MINOR 1 -#define string_view_lite_PATCH 0 +#define string_view_lite_MAJOR 1 +#define string_view_lite_MINOR 4 +#define string_view_lite_PATCH 0 -#define string_view_lite_VERSION nssv_STRINGIFY(string_view_lite_MAJOR) "." nssv_STRINGIFY(string_view_lite_MINOR) "." nssv_STRINGIFY(string_view_lite_PATCH) +#define string_view_lite_VERSION \ + nssv_STRINGIFY(string_view_lite_MAJOR) "." nssv_STRINGIFY(string_view_lite_MINOR) "." nssv_STRINGIFY( \ + string_view_lite_PATCH) -#define nssv_STRINGIFY( x ) nssv_STRINGIFY_( x ) -#define nssv_STRINGIFY_( x ) #x +#define nssv_STRINGIFY(x) nssv_STRINGIFY_(x) +#define nssv_STRINGIFY_(x) #x // string-view lite configuration: -#define nssv_STRING_VIEW_DEFAULT 0 -#define nssv_STRING_VIEW_NONSTD 1 -#define nssv_STRING_VIEW_STD 2 +#define nssv_STRING_VIEW_DEFAULT 0 +#define nssv_STRING_VIEW_NONSTD 1 +#define nssv_STRING_VIEW_STD 2 -#if !defined( nssv_CONFIG_SELECT_STRING_VIEW ) -# define nssv_CONFIG_SELECT_STRING_VIEW ( nssv_HAVE_STD_STRING_VIEW ? nssv_STRING_VIEW_STD : nssv_STRING_VIEW_NONSTD ) +#if !defined(nssv_CONFIG_SELECT_STRING_VIEW) +#define nssv_CONFIG_SELECT_STRING_VIEW (nssv_HAVE_STD_STRING_VIEW ? nssv_STRING_VIEW_STD : nssv_STRING_VIEW_NONSTD) #endif -#if defined( nssv_CONFIG_SELECT_STD_STRING_VIEW ) || defined( nssv_CONFIG_SELECT_NONSTD_STRING_VIEW ) -# error nssv_CONFIG_SELECT_STD_STRING_VIEW and nssv_CONFIG_SELECT_NONSTD_STRING_VIEW are deprecated and removed, please use nssv_CONFIG_SELECT_STRING_VIEW=nssv_STRING_VIEW_... +#if defined(nssv_CONFIG_SELECT_STD_STRING_VIEW) || defined(nssv_CONFIG_SELECT_NONSTD_STRING_VIEW) +#error nssv_CONFIG_SELECT_STD_STRING_VIEW and nssv_CONFIG_SELECT_NONSTD_STRING_VIEW are deprecated and removed, please use nssv_CONFIG_SELECT_STRING_VIEW=nssv_STRING_VIEW_... #endif -#ifndef nssv_CONFIG_STD_SV_OPERATOR -# define nssv_CONFIG_STD_SV_OPERATOR 0 +#ifndef nssv_CONFIG_STD_SV_OPERATOR +#define nssv_CONFIG_STD_SV_OPERATOR 0 #endif -#ifndef nssv_CONFIG_USR_SV_OPERATOR -# define nssv_CONFIG_USR_SV_OPERATOR 1 +#ifndef nssv_CONFIG_USR_SV_OPERATOR +#define nssv_CONFIG_USR_SV_OPERATOR 1 #endif -#ifdef nssv_CONFIG_CONVERSION_STD_STRING -# define nssv_CONFIG_CONVERSION_STD_STRING_CLASS_METHODS nssv_CONFIG_CONVERSION_STD_STRING -# define nssv_CONFIG_CONVERSION_STD_STRING_FREE_FUNCTIONS nssv_CONFIG_CONVERSION_STD_STRING +#ifdef nssv_CONFIG_CONVERSION_STD_STRING +#define nssv_CONFIG_CONVERSION_STD_STRING_CLASS_METHODS nssv_CONFIG_CONVERSION_STD_STRING +#define nssv_CONFIG_CONVERSION_STD_STRING_FREE_FUNCTIONS nssv_CONFIG_CONVERSION_STD_STRING #endif -#ifndef nssv_CONFIG_CONVERSION_STD_STRING_CLASS_METHODS -# define nssv_CONFIG_CONVERSION_STD_STRING_CLASS_METHODS 1 +#ifndef nssv_CONFIG_CONVERSION_STD_STRING_CLASS_METHODS +#define nssv_CONFIG_CONVERSION_STD_STRING_CLASS_METHODS 1 #endif -#ifndef nssv_CONFIG_CONVERSION_STD_STRING_FREE_FUNCTIONS -# define nssv_CONFIG_CONVERSION_STD_STRING_FREE_FUNCTIONS 1 +#ifndef nssv_CONFIG_CONVERSION_STD_STRING_FREE_FUNCTIONS +#define nssv_CONFIG_CONVERSION_STD_STRING_FREE_FUNCTIONS 1 #endif // Control presence of exception handling (try and auto discover): #ifndef nssv_CONFIG_NO_EXCEPTIONS -# if defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND) -# define nssv_CONFIG_NO_EXCEPTIONS 0 -# else -# define nssv_CONFIG_NO_EXCEPTIONS 1 -# endif +#if defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND) +#define nssv_CONFIG_NO_EXCEPTIONS 0 +#else +#define nssv_CONFIG_NO_EXCEPTIONS 1 +#endif #endif // C++ language version detection (C++20 is speculative): // Note: VC14.0/1900 (VS2015) lacks too much from C++14. -#ifndef nssv_CPLUSPLUS -# if defined(_MSVC_LANG ) && !defined(__clang__) -# define nssv_CPLUSPLUS (_MSC_VER == 1900 ? 201103L : _MSVC_LANG ) -# else -# define nssv_CPLUSPLUS __cplusplus -# endif +#ifndef nssv_CPLUSPLUS +#if defined(_MSVC_LANG) && !defined(__clang__) +#define nssv_CPLUSPLUS (_MSC_VER == 1900 ? 201103L : _MSVC_LANG) +#else +#define nssv_CPLUSPLUS __cplusplus +#endif #endif -#define nssv_CPP98_OR_GREATER ( nssv_CPLUSPLUS >= 199711L ) -#define nssv_CPP11_OR_GREATER ( nssv_CPLUSPLUS >= 201103L ) -#define nssv_CPP11_OR_GREATER_ ( nssv_CPLUSPLUS >= 201103L ) -#define nssv_CPP14_OR_GREATER ( nssv_CPLUSPLUS >= 201402L ) -#define nssv_CPP17_OR_GREATER ( nssv_CPLUSPLUS >= 201703L ) -#define nssv_CPP20_OR_GREATER ( nssv_CPLUSPLUS >= 202000L ) +#define nssv_CPP98_OR_GREATER (nssv_CPLUSPLUS >= 199711L) +#define nssv_CPP11_OR_GREATER (nssv_CPLUSPLUS >= 201103L) +#define nssv_CPP11_OR_GREATER_ (nssv_CPLUSPLUS >= 201103L) +#define nssv_CPP14_OR_GREATER (nssv_CPLUSPLUS >= 201402L) +#define nssv_CPP17_OR_GREATER (nssv_CPLUSPLUS >= 201703L) +#define nssv_CPP20_OR_GREATER (nssv_CPLUSPLUS >= 202000L) // use C++17 std::string_view if available and requested: -#if nssv_CPP17_OR_GREATER && defined(__has_include ) -# if __has_include( ) -# define nssv_HAVE_STD_STRING_VIEW 1 -# else -# define nssv_HAVE_STD_STRING_VIEW 0 -# endif +#if nssv_CPP17_OR_GREATER && defined(__has_include) +#if __has_include( ) +#define nssv_HAVE_STD_STRING_VIEW 1 #else -# define nssv_HAVE_STD_STRING_VIEW 0 +#define nssv_HAVE_STD_STRING_VIEW 0 +#endif +#else +#define nssv_HAVE_STD_STRING_VIEW 0 #endif -#define nssv_USES_STD_STRING_VIEW ( (nssv_CONFIG_SELECT_STRING_VIEW == nssv_STRING_VIEW_STD) || ((nssv_CONFIG_SELECT_STRING_VIEW == nssv_STRING_VIEW_DEFAULT) && nssv_HAVE_STD_STRING_VIEW) ) +#define nssv_USES_STD_STRING_VIEW \ + ((nssv_CONFIG_SELECT_STRING_VIEW == nssv_STRING_VIEW_STD) || \ + ((nssv_CONFIG_SELECT_STRING_VIEW == nssv_STRING_VIEW_DEFAULT) && nssv_HAVE_STD_STRING_VIEW)) -#define nssv_HAVE_STARTS_WITH ( nssv_CPP20_OR_GREATER || !nssv_USES_STD_STRING_VIEW ) -#define nssv_HAVE_ENDS_WITH nssv_HAVE_STARTS_WITH +#define nssv_HAVE_STARTS_WITH (nssv_CPP20_OR_GREATER || !nssv_USES_STD_STRING_VIEW) +#define nssv_HAVE_ENDS_WITH nssv_HAVE_STARTS_WITH // // Use C++17 std::string_view: @@ -197,18 +149,15 @@ namespace nonstd { -template< class CharT, class Traits, class Allocator = std::allocator > -std::basic_string -to_string( std::basic_string_view v, Allocator const & a = Allocator() ) -{ - return std::basic_string( v.begin(), v.end(), a ); +template > +std::basic_string to_string(std::basic_string_view v, + Allocator const &a = Allocator()) { + return std::basic_string(v.begin(), v.end(), a); } -template< class CharT, class Traits, class Allocator > -std::basic_string_view -to_string_view( std::basic_string const & s ) -{ - return std::basic_string_view( s.data(), s.size() ); +template +std::basic_string_view to_string_view(std::basic_string const &s) { + return std::basic_string_view(s.data(), s.size()); } // Literal operators sv and _sv: @@ -224,28 +173,28 @@ using namespace std::literals::string_view_literals; inline namespace literals { inline namespace string_view_literals { - -constexpr std::string_view operator "" _sv( const char* str, size_t len ) noexcept // (1) +constexpr std::string_view operator"" _sv(const char *str, size_t len) noexcept // (1) { - return std::string_view{ str, len }; + return std::string_view {str, len}; } -constexpr std::u16string_view operator "" _sv( const char16_t* str, size_t len ) noexcept // (2) +constexpr std::u16string_view operator"" _sv(const char16_t *str, size_t len) noexcept // (2) { - return std::u16string_view{ str, len }; + return std::u16string_view {str, len}; } -constexpr std::u32string_view operator "" _sv( const char32_t* str, size_t len ) noexcept // (3) +constexpr std::u32string_view operator"" _sv(const char32_t *str, size_t len) noexcept // (3) { - return std::u32string_view{ str, len }; + return std::u32string_view {str, len}; } -constexpr std::wstring_view operator "" _sv( const wchar_t* str, size_t len ) noexcept // (4) +constexpr std::wstring_view operator"" _sv(const wchar_t *str, size_t len) noexcept // (4) { - return std::wstring_view{ str, len }; + return std::wstring_view {str, len}; } -}} // namespace literals::string_view_literals +} // namespace string_view_literals +} // namespace literals #endif // nssv_CONFIG_USR_SV_OPERATOR @@ -255,11 +204,11 @@ constexpr std::wstring_view operator "" _sv( const wchar_t* str, size_t len ) no namespace nonstd { +using std::basic_string_view; using std::string_view; -using std::wstring_view; using std::u16string_view; using std::u32string_view; -using std::basic_string_view; +using std::wstring_view; // literal "sv" and "_sv", see above @@ -293,115 +242,117 @@ using std::operator<<; // MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015) // MSVC++ 14.1 _MSC_VER >= 1910 (Visual Studio 2017) -#if defined(_MSC_VER ) && !defined(__clang__) -# define nssv_COMPILER_MSVC_VER (_MSC_VER ) -# define nssv_COMPILER_MSVC_VERSION (_MSC_VER / 10 - 10 * ( 5 + (_MSC_VER < 1900 ) ) ) +#if defined(_MSC_VER) && !defined(__clang__) +#define nssv_COMPILER_MSVC_VER (_MSC_VER) +#define nssv_COMPILER_MSVC_VERSION (_MSC_VER / 10 - 10 * (5 + (_MSC_VER < 1900))) #else -# define nssv_COMPILER_MSVC_VER 0 -# define nssv_COMPILER_MSVC_VERSION 0 +#define nssv_COMPILER_MSVC_VER 0 +#define nssv_COMPILER_MSVC_VERSION 0 #endif -#define nssv_COMPILER_VERSION( major, minor, patch ) (10 * ( 10 * major + minor) + patch) +#define nssv_COMPILER_VERSION(major, minor, patch) (10 * (10 * (major) + (minor)) + (patch)) #if defined(__clang__) -# define nssv_COMPILER_CLANG_VERSION nssv_COMPILER_VERSION(__clang_major__, __clang_minor__, __clang_patchlevel__) +#define nssv_COMPILER_CLANG_VERSION nssv_COMPILER_VERSION(__clang_major__, __clang_minor__, __clang_patchlevel__) #else -# define nssv_COMPILER_CLANG_VERSION 0 +#define nssv_COMPILER_CLANG_VERSION 0 #endif #if defined(__GNUC__) && !defined(__clang__) -# define nssv_COMPILER_GNUC_VERSION nssv_COMPILER_VERSION(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) +#define nssv_COMPILER_GNUC_VERSION nssv_COMPILER_VERSION(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) #else -# define nssv_COMPILER_GNUC_VERSION 0 +#define nssv_COMPILER_GNUC_VERSION 0 #endif // half-open range [lo..hi): -#define nssv_BETWEEN( v, lo, hi ) ( (lo) <= (v) && (v) < (hi) ) +#define nssv_BETWEEN(v, lo, hi) ((lo) <= (v) && (v) < (hi)) // Presence of language and library features: #ifdef _HAS_CPP0X -# define nssv_HAS_CPP0X _HAS_CPP0X +#define nssv_HAS_CPP0X _HAS_CPP0X #else -# define nssv_HAS_CPP0X 0 +#define nssv_HAS_CPP0X 0 #endif // Unless defined otherwise below, consider VC14 as C++11 for variant-lite: #if nssv_COMPILER_MSVC_VER >= 1900 -# undef nssv_CPP11_OR_GREATER -# define nssv_CPP11_OR_GREATER 1 +#undef nssv_CPP11_OR_GREATER +#define nssv_CPP11_OR_GREATER 1 #endif -#define nssv_CPP11_90 (nssv_CPP11_OR_GREATER_ || nssv_COMPILER_MSVC_VER >= 1500) -#define nssv_CPP11_100 (nssv_CPP11_OR_GREATER_ || nssv_COMPILER_MSVC_VER >= 1600) -#define nssv_CPP11_110 (nssv_CPP11_OR_GREATER_ || nssv_COMPILER_MSVC_VER >= 1700) -#define nssv_CPP11_120 (nssv_CPP11_OR_GREATER_ || nssv_COMPILER_MSVC_VER >= 1800) -#define nssv_CPP11_140 (nssv_CPP11_OR_GREATER_ || nssv_COMPILER_MSVC_VER >= 1900) -#define nssv_CPP11_141 (nssv_CPP11_OR_GREATER_ || nssv_COMPILER_MSVC_VER >= 1910) +#define nssv_CPP11_90 (nssv_CPP11_OR_GREATER_ || nssv_COMPILER_MSVC_VER >= 1500) +#define nssv_CPP11_100 (nssv_CPP11_OR_GREATER_ || nssv_COMPILER_MSVC_VER >= 1600) +#define nssv_CPP11_110 (nssv_CPP11_OR_GREATER_ || nssv_COMPILER_MSVC_VER >= 1700) +#define nssv_CPP11_120 (nssv_CPP11_OR_GREATER_ || nssv_COMPILER_MSVC_VER >= 1800) +#define nssv_CPP11_140 (nssv_CPP11_OR_GREATER_ || nssv_COMPILER_MSVC_VER >= 1900) +#define nssv_CPP11_141 (nssv_CPP11_OR_GREATER_ || nssv_COMPILER_MSVC_VER >= 1910) -#define nssv_CPP14_000 (nssv_CPP14_OR_GREATER) -#define nssv_CPP17_000 (nssv_CPP17_OR_GREATER) +#define nssv_CPP14_000 (nssv_CPP14_OR_GREATER) +#define nssv_CPP17_000 (nssv_CPP17_OR_GREATER) // Presence of C++11 language features: -#define nssv_HAVE_CONSTEXPR_11 nssv_CPP11_140 -#define nssv_HAVE_EXPLICIT_CONVERSION nssv_CPP11_140 -#define nssv_HAVE_INLINE_NAMESPACE nssv_CPP11_140 -#define nssv_HAVE_NOEXCEPT nssv_CPP11_140 -#define nssv_HAVE_NULLPTR nssv_CPP11_100 -#define nssv_HAVE_REF_QUALIFIER nssv_CPP11_140 -#define nssv_HAVE_UNICODE_LITERALS nssv_CPP11_140 +#define nssv_HAVE_CONSTEXPR_11 nssv_CPP11_140 +#define nssv_HAVE_EXPLICIT_CONVERSION nssv_CPP11_140 +#define nssv_HAVE_INLINE_NAMESPACE nssv_CPP11_140 +#define nssv_HAVE_NOEXCEPT nssv_CPP11_140 +#define nssv_HAVE_NULLPTR nssv_CPP11_100 +#define nssv_HAVE_REF_QUALIFIER nssv_CPP11_140 +#define nssv_HAVE_UNICODE_LITERALS nssv_CPP11_140 #define nssv_HAVE_USER_DEFINED_LITERALS nssv_CPP11_140 -#define nssv_HAVE_WCHAR16_T nssv_CPP11_100 -#define nssv_HAVE_WCHAR32_T nssv_CPP11_100 +#define nssv_HAVE_WCHAR16_T nssv_CPP11_100 +#define nssv_HAVE_WCHAR32_T nssv_CPP11_100 -#if ! ( ( nssv_CPP11 && nssv_COMPILER_CLANG_VERSION ) || nssv_BETWEEN( nssv_COMPILER_CLANG_VERSION, 300, 400 ) ) -# define nssv_HAVE_STD_DEFINED_LITERALS nssv_CPP11_140 +#if !((nssv_CPP11_OR_GREATER && nssv_COMPILER_CLANG_VERSION) || nssv_BETWEEN(nssv_COMPILER_CLANG_VERSION, 300, 400)) +#define nssv_HAVE_STD_DEFINED_LITERALS nssv_CPP11_140 +#else +#define nssv_HAVE_STD_DEFINED_LITERALS 0 #endif // Presence of C++14 language features: -#define nssv_HAVE_CONSTEXPR_14 nssv_CPP14_000 +#define nssv_HAVE_CONSTEXPR_14 nssv_CPP14_000 // Presence of C++17 language features: -#define nssv_HAVE_NODISCARD nssv_CPP17_000 +#define nssv_HAVE_NODISCARD nssv_CPP17_000 // Presence of C++ library features: -#define nssv_HAVE_STD_HASH nssv_CPP11_120 +#define nssv_HAVE_STD_HASH nssv_CPP11_120 // C++ feature usage: #if nssv_HAVE_CONSTEXPR_11 -# define nssv_constexpr constexpr +#define nssv_constexpr constexpr #else -# define nssv_constexpr /*constexpr*/ +#define nssv_constexpr /*constexpr*/ #endif -#if nssv_HAVE_CONSTEXPR_14 -# define nssv_constexpr14 constexpr +#if nssv_HAVE_CONSTEXPR_14 +#define nssv_constexpr14 constexpr #else -# define nssv_constexpr14 /*constexpr*/ +#define nssv_constexpr14 /*constexpr*/ #endif #if nssv_HAVE_EXPLICIT_CONVERSION -# define nssv_explicit explicit +#define nssv_explicit explicit #else -# define nssv_explicit /*explicit*/ +#define nssv_explicit /*explicit*/ #endif #if nssv_HAVE_INLINE_NAMESPACE -# define nssv_inline_ns inline +#define nssv_inline_ns inline #else -# define nssv_inline_ns /*inline*/ +#define nssv_inline_ns /*inline*/ #endif #if nssv_HAVE_NOEXCEPT -# define nssv_noexcept noexcept +#define nssv_noexcept noexcept #else -# define nssv_noexcept /*noexcept*/ +#define nssv_noexcept /*noexcept*/ #endif //#if nssv_HAVE_REF_QUALIFIER @@ -413,15 +364,15 @@ using std::operator<<; //#endif #if nssv_HAVE_NULLPTR -# define nssv_nullptr nullptr +#define nssv_nullptr nullptr #else -# define nssv_nullptr NULL +#define nssv_nullptr NULL #endif #if nssv_HAVE_NODISCARD -# define nssv_nodiscard [[nodiscard]] +#define nssv_nodiscard [[nodiscard]] #else -# define nssv_nodiscard /*[[nodiscard]]*/ +#define nssv_nodiscard /*[[nodiscard]]*/ #endif // Additional includes: @@ -431,45 +382,45 @@ using std::operator<<; #include #include #include -#include // std::char_traits<> +#include // std::char_traits<> -#if ! nssv_CONFIG_NO_EXCEPTIONS -# include +#if !nssv_CONFIG_NO_EXCEPTIONS +#include #endif #if nssv_CPP11_OR_GREATER -# include +#include #endif // Clang, GNUC, MSVC warning suppression macros: #if defined(__clang__) -# pragma clang diagnostic ignored "-Wreserved-user-defined-literal" -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wuser-defined-literals" +#pragma clang diagnostic ignored "-Wreserved-user-defined-literal" +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wuser-defined-literals" #elif defined(__GNUC__) -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wliteral-suffix" +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wliteral-suffix" #endif // __clang__ #if nssv_COMPILER_MSVC_VERSION >= 140 -# define nssv_SUPPRESS_MSGSL_WARNING(expr) [[gsl::suppress(expr)]] -# define nssv_SUPPRESS_MSVC_WARNING(code, descr) __pragma(warning(suppress: code) ) -# define nssv_DISABLE_MSVC_WARNINGS(codes) __pragma(warning(push)) __pragma(warning(disable: codes)) +#define nssv_SUPPRESS_MSGSL_WARNING(expr) [[gsl::suppress(expr)]] +#define nssv_SUPPRESS_MSVC_WARNING(code, descr) __pragma(warning(suppress : code)) +#define nssv_DISABLE_MSVC_WARNINGS(codes) __pragma(warning(push)) __pragma(warning(disable : codes)) #else -# define nssv_SUPPRESS_MSGSL_WARNING(expr) -# define nssv_SUPPRESS_MSVC_WARNING(code, descr) -# define nssv_DISABLE_MSVC_WARNINGS(codes) +#define nssv_SUPPRESS_MSGSL_WARNING(expr) +#define nssv_SUPPRESS_MSVC_WARNING(code, descr) +#define nssv_DISABLE_MSVC_WARNINGS(codes) #endif #if defined(__clang__) -# define nssv_RESTORE_WARNINGS() _Pragma("clang diagnostic pop") +#define nssv_RESTORE_WARNINGS() _Pragma("clang diagnostic pop") #elif defined(__GNUC__) -# define nssv_RESTORE_WARNINGS() _Pragma("GCC diagnostic pop") +#define nssv_RESTORE_WARNINGS() _Pragma("GCC diagnostic pop") #elif nssv_COMPILER_MSVC_VERSION >= 140 -# define nssv_RESTORE_WARNINGS() __pragma(warning(pop )) +#define nssv_RESTORE_WARNINGS() __pragma(warning(pop)) #else -# define nssv_RESTORE_WARNINGS() +#define nssv_RESTORE_WARNINGS() #endif // Suppress the following MSVC (GSL) warnings: @@ -479,418 +430,409 @@ using std::operator<<; // use brace initialization, gsl::narrow_cast or gsl::narow // - C26481: gsl::b.1 : don't use pointer arithmetic. Use span instead -nssv_DISABLE_MSVC_WARNINGS( 4455 26481 26472 ) -//nssv_DISABLE_CLANG_WARNINGS( "-Wuser-defined-literals" ) -//nssv_DISABLE_GNUC_WARNINGS( -Wliteral-suffix ) +nssv_DISABLE_MSVC_WARNINGS(4455 26481 26472) + // nssv_DISABLE_CLANG_WARNINGS( "-Wuser-defined-literals" ) + // nssv_DISABLE_GNUC_WARNINGS( -Wliteral-suffix ) -namespace nonstd { namespace sv_lite { + namespace nonstd { + namespace sv_lite { -template -< - class CharT, - class Traits = std::char_traits -> -class basic_string_view; +#if nssv_CPP11_OR_GREATER -// -// basic_string_view: -// + namespace detail { -template -< - class CharT, - class Traits /* = std::char_traits */ -> -class basic_string_view -{ -public: + // Expect tail call optimization to make length() non-recursive: + + template inline constexpr std::size_t length(CharT *s, std::size_t result = 0) { + return *s == '\0' ? result : length(s + 1, result + 1); + } + + } // namespace detail + +#endif // nssv_CPP11_OR_GREATER + + template > class basic_string_view; + + // + // basic_string_view: + // + + template */ + > + class basic_string_view { + public: // Member types: typedef Traits traits_type; - typedef CharT value_type; + typedef CharT value_type; - typedef CharT * pointer; - typedef CharT const * const_pointer; - typedef CharT & reference; - typedef CharT const & const_reference; + typedef CharT *pointer; + typedef CharT const *const_pointer; + typedef CharT &reference; + typedef CharT const &const_reference; typedef const_pointer iterator; typedef const_pointer const_iterator; - typedef std::reverse_iterator< const_iterator > reverse_iterator; - typedef std::reverse_iterator< const_iterator > const_reverse_iterator; + typedef std::reverse_iterator reverse_iterator; + typedef std::reverse_iterator const_reverse_iterator; - typedef std::size_t size_type; - typedef std::ptrdiff_t difference_type; + typedef std::size_t size_type; + typedef std::ptrdiff_t difference_type; // 24.4.2.1 Construction and assignment: - nssv_constexpr basic_string_view() nssv_noexcept - : data_( nssv_nullptr ) - , size_( 0 ) - {} + nssv_constexpr basic_string_view() nssv_noexcept : data_(nssv_nullptr), size_(0) {} #if nssv_CPP11_OR_GREATER - nssv_constexpr basic_string_view( basic_string_view const & other ) nssv_noexcept = default; + nssv_constexpr basic_string_view(basic_string_view const &other) nssv_noexcept = default; #else - nssv_constexpr basic_string_view( basic_string_view const & other ) nssv_noexcept - : data_( other.data_) - , size_( other.size_) - {} + nssv_constexpr basic_string_view(basic_string_view const &other) nssv_noexcept : data_(other.data_), + size_(other.size_) {} #endif - nssv_constexpr basic_string_view( CharT const * s, size_type count ) - : data_( s ) - , size_( count ) - {} + nssv_constexpr basic_string_view(CharT const *s, size_type count) nssv_noexcept // non-standard noexcept + : data_(s), + size_(count) {} - nssv_constexpr basic_string_view( CharT const * s) - : data_( s ) - , size_( Traits::length(s) ) - {} + nssv_constexpr basic_string_view(CharT const *s) nssv_noexcept // non-standard noexcept + : data_(s) +#if nssv_CPP17_OR_GREATER + , + size_(Traits::length(s)) +#elif nssv_CPP11_OR_GREATER + , + size_(detail::length(s)) +#else + , + size_(Traits::length(s)) +#endif + { + } // Assignment: #if nssv_CPP11_OR_GREATER - nssv_constexpr14 basic_string_view & operator=( basic_string_view const & other ) nssv_noexcept = default; + nssv_constexpr14 basic_string_view &operator=(basic_string_view const &other) nssv_noexcept = default; #else - nssv_constexpr14 basic_string_view & operator=( basic_string_view const & other ) nssv_noexcept - { - data_ = other.data_; - size_ = other.size_; - return *this; + nssv_constexpr14 basic_string_view &operator=(basic_string_view const &other) nssv_noexcept { + data_ = other.data_; + size_ = other.size_; + return *this; } #endif // 24.4.2.2 Iterator support: - nssv_constexpr const_iterator begin() const nssv_noexcept { return data_; } - nssv_constexpr const_iterator end() const nssv_noexcept { return data_ + size_; } + nssv_constexpr const_iterator begin() const nssv_noexcept { return data_; } + nssv_constexpr const_iterator end() const nssv_noexcept { return data_ + size_; } nssv_constexpr const_iterator cbegin() const nssv_noexcept { return begin(); } - nssv_constexpr const_iterator cend() const nssv_noexcept { return end(); } + nssv_constexpr const_iterator cend() const nssv_noexcept { return end(); } - nssv_constexpr const_reverse_iterator rbegin() const nssv_noexcept { return const_reverse_iterator( end() ); } - nssv_constexpr const_reverse_iterator rend() const nssv_noexcept { return const_reverse_iterator( begin() ); } + nssv_constexpr const_reverse_iterator rbegin() const nssv_noexcept { return const_reverse_iterator(end()); } + nssv_constexpr const_reverse_iterator rend() const nssv_noexcept { return const_reverse_iterator(begin()); } nssv_constexpr const_reverse_iterator crbegin() const nssv_noexcept { return rbegin(); } - nssv_constexpr const_reverse_iterator crend() const nssv_noexcept { return rend(); } + nssv_constexpr const_reverse_iterator crend() const nssv_noexcept { return rend(); } // 24.4.2.3 Capacity: - nssv_constexpr size_type size() const nssv_noexcept { return size_; } - nssv_constexpr size_type length() const nssv_noexcept { return size_; } - nssv_constexpr size_type max_size() const nssv_noexcept { return (std::numeric_limits< size_type >::max)(); } + nssv_constexpr size_type size() const nssv_noexcept { return size_; } + nssv_constexpr size_type length() const nssv_noexcept { return size_; } + nssv_constexpr size_type max_size() const nssv_noexcept { return (std::numeric_limits::max)(); } // since C++20 - nssv_nodiscard nssv_constexpr bool empty() const nssv_noexcept - { - return 0 == size_; - } + nssv_nodiscard nssv_constexpr bool empty() const nssv_noexcept { return 0 == size_; } // 24.4.2.4 Element access: - nssv_constexpr const_reference operator[]( size_type pos ) const - { - return data_at( pos ); - } + nssv_constexpr const_reference operator[](size_type pos) const { return data_at(pos); } - nssv_constexpr14 const_reference at( size_type pos ) const - { + nssv_constexpr14 const_reference at(size_type pos) const { #if nssv_CONFIG_NO_EXCEPTIONS - assert( pos < size() ); + assert(pos < size()); #else - if ( pos >= size() ) - { - throw std::out_of_range("nonst::string_view::at()"); - } + if (pos >= size()) { + throw std::out_of_range("nonstd::string_view::at()"); + } #endif - return data_at( pos ); + return data_at(pos); } - nssv_constexpr const_reference front() const { return data_at( 0 ); } - nssv_constexpr const_reference back() const { return data_at( size() - 1 ); } + nssv_constexpr const_reference front() const { return data_at(0); } + nssv_constexpr const_reference back() const { return data_at(size() - 1); } - nssv_constexpr const_pointer data() const nssv_noexcept { return data_; } + nssv_constexpr const_pointer data() const nssv_noexcept { return data_; } // 24.4.2.5 Modifiers: - nssv_constexpr14 void remove_prefix( size_type n ) - { - assert( n <= size() ); - data_ += n; - size_ -= n; + nssv_constexpr14 void remove_prefix(size_type n) { + assert(n <= size()); + data_ += n; + size_ -= n; } - nssv_constexpr14 void remove_suffix( size_type n ) - { - assert( n <= size() ); - size_ -= n; + nssv_constexpr14 void remove_suffix(size_type n) { + assert(n <= size()); + size_ -= n; } - nssv_constexpr14 void swap( basic_string_view & other ) nssv_noexcept - { - using std::swap; - swap( data_, other.data_ ); - swap( size_, other.size_ ); + nssv_constexpr14 void swap(basic_string_view &other) nssv_noexcept { + using std::swap; + swap(data_, other.data_); + swap(size_, other.size_); } // 24.4.2.6 String operations: - size_type copy( CharT * dest, size_type n, size_type pos = 0 ) const - { + size_type copy(CharT *dest, size_type n, size_type pos = 0) const { #if nssv_CONFIG_NO_EXCEPTIONS - assert( pos <= size() ); + assert(pos <= size()); #else - if ( pos > size() ) - { - throw std::out_of_range("nonst::string_view::copy()"); - } + if (pos > size()) { + throw std::out_of_range("nonstd::string_view::copy()"); + } #endif - const size_type rlen = (std::min)( n, size() - pos ); + const size_type rlen = (std::min)(n, size() - pos); - (void) Traits::copy( dest, data() + pos, rlen ); + (void)Traits::copy(dest, data() + pos, rlen); - return rlen; + return rlen; } - nssv_constexpr14 basic_string_view substr( size_type pos = 0, size_type n = npos ) const - { + nssv_constexpr14 basic_string_view substr(size_type pos = 0, size_type n = npos) const { #if nssv_CONFIG_NO_EXCEPTIONS - assert( pos <= size() ); + assert(pos <= size()); #else - if ( pos > size() ) - { - throw std::out_of_range("nonst::string_view::substr()"); - } + if (pos > size()) { + throw std::out_of_range("nonstd::string_view::substr()"); + } #endif - return basic_string_view( data() + pos, (std::min)( n, size() - pos ) ); + return basic_string_view(data() + pos, (std::min)(n, size() - pos)); } // compare(), 6x: - nssv_constexpr14 int compare( basic_string_view other ) const nssv_noexcept // (1) + nssv_constexpr14 int compare(basic_string_view other) const nssv_noexcept // (1) { - if ( const int result = Traits::compare( data(), other.data(), (std::min)( size(), other.size() ) ) ) - return result; + if (const int result = Traits::compare(data(), other.data(), (std::min)(size(), other.size()))) { + return result; + } - return size() == other.size() ? 0 : size() < other.size() ? -1 : 1; + return size() == other.size() ? 0 : size() < other.size() ? -1 : 1; } - nssv_constexpr int compare( size_type pos1, size_type n1, basic_string_view other ) const // (2) + nssv_constexpr int compare(size_type pos1, size_type n1, basic_string_view other) const // (2) { - return substr( pos1, n1 ).compare( other ); + return substr(pos1, n1).compare(other); } - nssv_constexpr int compare( size_type pos1, size_type n1, basic_string_view other, size_type pos2, size_type n2 ) const // (3) + nssv_constexpr int compare(size_type pos1, size_type n1, basic_string_view other, size_type pos2, + size_type n2) const // (3) { - return substr( pos1, n1 ).compare( other.substr( pos2, n2 ) ); + return substr(pos1, n1).compare(other.substr(pos2, n2)); } - nssv_constexpr int compare( CharT const * s ) const // (4) + nssv_constexpr int compare(CharT const *s) const // (4) { - return compare( basic_string_view( s ) ); + return compare(basic_string_view(s)); } - nssv_constexpr int compare( size_type pos1, size_type n1, CharT const * s ) const // (5) + nssv_constexpr int compare(size_type pos1, size_type n1, CharT const *s) const // (5) { - return substr( pos1, n1 ).compare( basic_string_view( s ) ); + return substr(pos1, n1).compare(basic_string_view(s)); } - nssv_constexpr int compare( size_type pos1, size_type n1, CharT const * s, size_type n2 ) const // (6) + nssv_constexpr int compare(size_type pos1, size_type n1, CharT const *s, size_type n2) const // (6) { - return substr( pos1, n1 ).compare( basic_string_view( s, n2 ) ); + return substr(pos1, n1).compare(basic_string_view(s, n2)); } // 24.4.2.7 Searching: // starts_with(), 3x, since C++20: - nssv_constexpr bool starts_with( basic_string_view v ) const nssv_noexcept // (1) + nssv_constexpr bool starts_with(basic_string_view v) const nssv_noexcept // (1) { - return size() >= v.size() && compare( 0, v.size(), v ) == 0; + return size() >= v.size() && compare(0, v.size(), v) == 0; } - nssv_constexpr bool starts_with( CharT c ) const nssv_noexcept // (2) + nssv_constexpr bool starts_with(CharT c) const nssv_noexcept // (2) { - return starts_with( basic_string_view( &c, 1 ) ); + return starts_with(basic_string_view(&c, 1)); } - nssv_constexpr bool starts_with( CharT const * s ) const // (3) + nssv_constexpr bool starts_with(CharT const *s) const // (3) { - return starts_with( basic_string_view( s ) ); + return starts_with(basic_string_view(s)); } // ends_with(), 3x, since C++20: - nssv_constexpr bool ends_with( basic_string_view v ) const nssv_noexcept // (1) + nssv_constexpr bool ends_with(basic_string_view v) const nssv_noexcept // (1) { - return size() >= v.size() && compare( size() - v.size(), npos, v ) == 0; + return size() >= v.size() && compare(size() - v.size(), npos, v) == 0; } - nssv_constexpr bool ends_with( CharT c ) const nssv_noexcept // (2) + nssv_constexpr bool ends_with(CharT c) const nssv_noexcept // (2) { - return ends_with( basic_string_view( &c, 1 ) ); + return ends_with(basic_string_view(&c, 1)); } - nssv_constexpr bool ends_with( CharT const * s ) const // (3) + nssv_constexpr bool ends_with(CharT const *s) const // (3) { - return ends_with( basic_string_view( s ) ); + return ends_with(basic_string_view(s)); } // find(), 4x: - nssv_constexpr14 size_type find( basic_string_view v, size_type pos = 0 ) const nssv_noexcept // (1) + nssv_constexpr14 size_type find(basic_string_view v, size_type pos = 0) const nssv_noexcept // (1) { - return assert( v.size() == 0 || v.data() != nssv_nullptr ) - , pos >= size() - ? npos - : to_pos( std::search( cbegin() + pos, cend(), v.cbegin(), v.cend(), Traits::eq ) ); + return assert(v.size() == 0 || v.data() != nssv_nullptr), + pos >= size() ? npos : to_pos(std::search(cbegin() + pos, cend(), v.cbegin(), v.cend(), Traits::eq)); } - nssv_constexpr14 size_type find( CharT c, size_type pos = 0 ) const nssv_noexcept // (2) + nssv_constexpr14 size_type find(CharT c, size_type pos = 0) const nssv_noexcept // (2) { - return find( basic_string_view( &c, 1 ), pos ); + return find(basic_string_view(&c, 1), pos); } - nssv_constexpr14 size_type find( CharT const * s, size_type pos, size_type n ) const // (3) + nssv_constexpr14 size_type find(CharT const *s, size_type pos, size_type n) const // (3) { - return find( basic_string_view( s, n ), pos ); + return find(basic_string_view(s, n), pos); } - nssv_constexpr14 size_type find( CharT const * s, size_type pos = 0 ) const // (4) + nssv_constexpr14 size_type find(CharT const *s, size_type pos = 0) const // (4) { - return find( basic_string_view( s ), pos ); + return find(basic_string_view(s), pos); } // rfind(), 4x: - nssv_constexpr14 size_type rfind( basic_string_view v, size_type pos = npos ) const nssv_noexcept // (1) + nssv_constexpr14 size_type rfind(basic_string_view v, size_type pos = npos) const nssv_noexcept // (1) { - if ( size() < v.size() ) - return npos; + if (size() < v.size()) { + return npos; + } - if ( v.empty() ) - return (std::min)( size(), pos ); + if (v.empty()) { + return (std::min)(size(), pos); + } - const_iterator last = cbegin() + (std::min)( size() - v.size(), pos ) + v.size(); - const_iterator result = std::find_end( cbegin(), last, v.cbegin(), v.cend(), Traits::eq ); + const_iterator last = cbegin() + (std::min)(size() - v.size(), pos) + v.size(); + const_iterator result = std::find_end(cbegin(), last, v.cbegin(), v.cend(), Traits::eq); - return result != last ? size_type( result - cbegin() ) : npos; + return result != last ? size_type(result - cbegin()) : npos; } - nssv_constexpr14 size_type rfind( CharT c, size_type pos = npos ) const nssv_noexcept // (2) + nssv_constexpr14 size_type rfind(CharT c, size_type pos = npos) const nssv_noexcept // (2) { - return rfind( basic_string_view( &c, 1 ), pos ); + return rfind(basic_string_view(&c, 1), pos); } - nssv_constexpr14 size_type rfind( CharT const * s, size_type pos, size_type n ) const // (3) + nssv_constexpr14 size_type rfind(CharT const *s, size_type pos, size_type n) const // (3) { - return rfind( basic_string_view( s, n ), pos ); + return rfind(basic_string_view(s, n), pos); } - nssv_constexpr14 size_type rfind( CharT const * s, size_type pos = npos ) const // (4) + nssv_constexpr14 size_type rfind(CharT const *s, size_type pos = npos) const // (4) { - return rfind( basic_string_view( s ), pos ); + return rfind(basic_string_view(s), pos); } // find_first_of(), 4x: - nssv_constexpr size_type find_first_of( basic_string_view v, size_type pos = 0 ) const nssv_noexcept // (1) + nssv_constexpr size_type find_first_of(basic_string_view v, size_type pos = 0) const nssv_noexcept // (1) { - return pos >= size() - ? npos - : to_pos( std::find_first_of( cbegin() + pos, cend(), v.cbegin(), v.cend(), Traits::eq ) ); + return pos >= size() ? npos + : to_pos(std::find_first_of(cbegin() + pos, cend(), v.cbegin(), v.cend(), Traits::eq)); } - nssv_constexpr size_type find_first_of( CharT c, size_type pos = 0 ) const nssv_noexcept // (2) + nssv_constexpr size_type find_first_of(CharT c, size_type pos = 0) const nssv_noexcept // (2) { - return find_first_of( basic_string_view( &c, 1 ), pos ); + return find_first_of(basic_string_view(&c, 1), pos); } - nssv_constexpr size_type find_first_of( CharT const * s, size_type pos, size_type n ) const // (3) + nssv_constexpr size_type find_first_of(CharT const *s, size_type pos, size_type n) const // (3) { - return find_first_of( basic_string_view( s, n ), pos ); + return find_first_of(basic_string_view(s, n), pos); } - nssv_constexpr size_type find_first_of( CharT const * s, size_type pos = 0 ) const // (4) + nssv_constexpr size_type find_first_of(CharT const *s, size_type pos = 0) const // (4) { - return find_first_of( basic_string_view( s ), pos ); + return find_first_of(basic_string_view(s), pos); } // find_last_of(), 4x: - nssv_constexpr size_type find_last_of( basic_string_view v, size_type pos = npos ) const nssv_noexcept // (1) + nssv_constexpr size_type find_last_of(basic_string_view v, size_type pos = npos) const nssv_noexcept // (1) { - return empty() - ? npos - : pos >= size() - ? find_last_of( v, size() - 1 ) - : to_pos( std::find_first_of( const_reverse_iterator( cbegin() + pos + 1 ), crend(), v.cbegin(), v.cend(), Traits::eq ) ); + return empty() ? npos + : pos >= size() ? find_last_of(v, size() - 1) + : to_pos(std::find_first_of(const_reverse_iterator(cbegin() + pos + 1), crend(), + v.cbegin(), v.cend(), Traits::eq)); } - nssv_constexpr size_type find_last_of( CharT c, size_type pos = npos ) const nssv_noexcept // (2) + nssv_constexpr size_type find_last_of(CharT c, size_type pos = npos) const nssv_noexcept // (2) { - return find_last_of( basic_string_view( &c, 1 ), pos ); + return find_last_of(basic_string_view(&c, 1), pos); } - nssv_constexpr size_type find_last_of( CharT const * s, size_type pos, size_type count ) const // (3) + nssv_constexpr size_type find_last_of(CharT const *s, size_type pos, size_type count) const // (3) { - return find_last_of( basic_string_view( s, count ), pos ); + return find_last_of(basic_string_view(s, count), pos); } - nssv_constexpr size_type find_last_of( CharT const * s, size_type pos = npos ) const // (4) + nssv_constexpr size_type find_last_of(CharT const *s, size_type pos = npos) const // (4) { - return find_last_of( basic_string_view( s ), pos ); + return find_last_of(basic_string_view(s), pos); } // find_first_not_of(), 4x: - nssv_constexpr size_type find_first_not_of( basic_string_view v, size_type pos = 0 ) const nssv_noexcept // (1) + nssv_constexpr size_type find_first_not_of(basic_string_view v, size_type pos = 0) const nssv_noexcept // (1) { - return pos >= size() - ? npos - : to_pos( std::find_if( cbegin() + pos, cend(), not_in_view( v ) ) ); + return pos >= size() ? npos : to_pos(std::find_if(cbegin() + pos, cend(), not_in_view(v))); } - nssv_constexpr size_type find_first_not_of( CharT c, size_type pos = 0 ) const nssv_noexcept // (2) + nssv_constexpr size_type find_first_not_of(CharT c, size_type pos = 0) const nssv_noexcept // (2) { - return find_first_not_of( basic_string_view( &c, 1 ), pos ); + return find_first_not_of(basic_string_view(&c, 1), pos); } - nssv_constexpr size_type find_first_not_of( CharT const * s, size_type pos, size_type count ) const // (3) + nssv_constexpr size_type find_first_not_of(CharT const *s, size_type pos, size_type count) const // (3) { - return find_first_not_of( basic_string_view( s, count ), pos ); + return find_first_not_of(basic_string_view(s, count), pos); } - nssv_constexpr size_type find_first_not_of( CharT const * s, size_type pos = 0 ) const // (4) + nssv_constexpr size_type find_first_not_of(CharT const *s, size_type pos = 0) const // (4) { - return find_first_not_of( basic_string_view( s ), pos ); + return find_first_not_of(basic_string_view(s), pos); } // find_last_not_of(), 4x: - nssv_constexpr size_type find_last_not_of( basic_string_view v, size_type pos = npos ) const nssv_noexcept // (1) + nssv_constexpr size_type find_last_not_of(basic_string_view v, size_type pos = npos) const nssv_noexcept // (1) { - return empty() - ? npos - : pos >= size() - ? find_last_not_of( v, size() - 1 ) - : to_pos( std::find_if( const_reverse_iterator( cbegin() + pos + 1 ), crend(), not_in_view( v ) ) ); + return empty() ? npos + : pos >= size() + ? find_last_not_of(v, size() - 1) + : to_pos(std::find_if(const_reverse_iterator(cbegin() + pos + 1), crend(), not_in_view(v))); } - nssv_constexpr size_type find_last_not_of( CharT c, size_type pos = npos ) const nssv_noexcept // (2) + nssv_constexpr size_type find_last_not_of(CharT c, size_type pos = npos) const nssv_noexcept // (2) { - return find_last_not_of( basic_string_view( &c, 1 ), pos ); + return find_last_not_of(basic_string_view(&c, 1), pos); } - nssv_constexpr size_type find_last_not_of( CharT const * s, size_type pos, size_type count ) const // (3) + nssv_constexpr size_type find_last_not_of(CharT const *s, size_type pos, size_type count) const // (3) { - return find_last_not_of( basic_string_view( s, count ), pos ); + return find_last_not_of(basic_string_view(s, count), pos); } - nssv_constexpr size_type find_last_not_of( CharT const * s, size_type pos = npos ) const // (4) + nssv_constexpr size_type find_last_not_of(CharT const *s, size_type pos = npos) const // (4) { - return find_last_not_of( basic_string_view( s ), pos ); + return find_last_not_of(basic_string_view(s), pos); } // Constants: @@ -903,298 +845,418 @@ public: enum { npos = size_type(-1) }; #endif -private: - struct not_in_view - { - const basic_string_view v; + private: + struct not_in_view { + const basic_string_view v; - nssv_constexpr not_in_view( basic_string_view v ) : v( v ) {} + nssv_constexpr explicit not_in_view(basic_string_view v) : v(v) {} - nssv_constexpr bool operator()( CharT c ) const - { - return npos == v.find_first_of( c ); - } + nssv_constexpr bool operator()(CharT c) const { return npos == v.find_first_of(c); } }; - nssv_constexpr size_type to_pos( const_iterator it ) const - { - return it == cend() ? npos : size_type( it - cbegin() ); - } + nssv_constexpr size_type to_pos(const_iterator it) const { return it == cend() ? npos : size_type(it - cbegin()); } - nssv_constexpr size_type to_pos( const_reverse_iterator it ) const - { - return it == crend() ? npos : size_type( crend() - it - 1 ); + nssv_constexpr size_type to_pos(const_reverse_iterator it) const { + return it == crend() ? npos : size_type(crend() - it - 1); } - nssv_constexpr const_reference data_at( size_type pos ) const - { -#if nssv_BETWEEN( nssv_COMPILER_GNUC_VERSION, 1, 500 ) - return data_[pos]; + nssv_constexpr const_reference data_at(size_type pos) const { +#if nssv_BETWEEN(nssv_COMPILER_GNUC_VERSION, 1, 500) + return data_[pos]; #else - return assert( pos < size() ), data_[pos]; + return assert(pos < size()), data_[pos]; #endif } -private: + private: const_pointer data_; - size_type size_; + size_type size_; -public: + public: #if nssv_CONFIG_CONVERSION_STD_STRING_CLASS_METHODS - template< class Allocator > - basic_string_view( std::basic_string const & s ) nssv_noexcept - : data_( s.data() ) - , size_( s.size() ) - {} + template + basic_string_view(std::basic_string const &s) nssv_noexcept : data_(s.data()), + size_(s.size()) {} #if nssv_HAVE_EXPLICIT_CONVERSION - template< class Allocator > - explicit operator std::basic_string() const - { - return to_string( Allocator() ); + template explicit operator std::basic_string() const { + return to_string(Allocator()); } #endif // nssv_HAVE_EXPLICIT_CONVERSION #if nssv_CPP11_OR_GREATER - template< class Allocator = std::allocator > - std::basic_string - to_string( Allocator const & a = Allocator() ) const - { - return std::basic_string( begin(), end(), a ); + template > + std::basic_string to_string(Allocator const &a = Allocator()) const { + return std::basic_string(begin(), end(), a); } #else - std::basic_string - to_string() const - { - return std::basic_string( begin(), end() ); - } + std::basic_string to_string() const { return std::basic_string(begin(), end()); } - template< class Allocator > - std::basic_string - to_string( Allocator const & a ) const - { - return std::basic_string( begin(), end(), a ); + template std::basic_string to_string(Allocator const &a) const { + return std::basic_string(begin(), end(), a); } #endif // nssv_CPP11_OR_GREATER #endif // nssv_CONFIG_CONVERSION_STD_STRING_CLASS_METHODS -}; + }; -// -// Non-member functions: -// + // + // Non-member functions: + // + + // 24.4.3 Non-member comparison functions: + // lexicographically compare two string views (function template): + + template + nssv_constexpr bool operator==(basic_string_view lhs, + basic_string_view rhs) nssv_noexcept { + return lhs.compare(rhs) == 0; + } + + template + nssv_constexpr bool operator!=(basic_string_view lhs, + basic_string_view rhs) nssv_noexcept { + return lhs.compare(rhs) != 0; + } + + template + nssv_constexpr bool operator<(basic_string_view lhs, + basic_string_view rhs) nssv_noexcept { + return lhs.compare(rhs) < 0; + } + + template + nssv_constexpr bool operator<=(basic_string_view lhs, + basic_string_view rhs) nssv_noexcept { + return lhs.compare(rhs) <= 0; + } + + template + nssv_constexpr bool operator>(basic_string_view lhs, + basic_string_view rhs) nssv_noexcept { + return lhs.compare(rhs) > 0; + } + + template + nssv_constexpr bool operator>=(basic_string_view lhs, + basic_string_view rhs) nssv_noexcept { + return lhs.compare(rhs) >= 0; + } + + // Let S be basic_string_view, and sv be an instance of S. + // Implementations shall provide sufficient additional overloads marked + // constexpr and noexcept so that an object t with an implicit conversion + // to S can be compared according to Table 67. + +#if !nssv_CPP11_OR_GREATER || nssv_BETWEEN(nssv_COMPILER_MSVC_VERSION, 100, 141) + + // accomodate for older compilers: + + // == + + template + nssv_constexpr bool operator==(basic_string_view lhs, char const *rhs) nssv_noexcept { + return lhs.compare(rhs) == 0; + } + + template + nssv_constexpr bool operator==(char const *lhs, basic_string_view rhs) nssv_noexcept { + return rhs.compare(lhs) == 0; + } + + template + nssv_constexpr bool operator==(basic_string_view lhs, + std::basic_string rhs) nssv_noexcept { + return lhs.size() == rhs.size() && lhs.compare(rhs) == 0; + } + + template + nssv_constexpr bool operator==(std::basic_string rhs, + basic_string_view lhs) nssv_noexcept { + return lhs.size() == rhs.size() && lhs.compare(rhs) == 0; + } + + // != + + template + nssv_constexpr bool operator!=(basic_string_view lhs, char const *rhs) nssv_noexcept { + return lhs.compare(rhs) != 0; + } + + template + nssv_constexpr bool operator!=(char const *lhs, basic_string_view rhs) nssv_noexcept { + return rhs.compare(lhs) != 0; + } + + template + nssv_constexpr bool operator!=(basic_string_view lhs, + std::basic_string rhs) nssv_noexcept { + return lhs.size() != rhs.size() && lhs.compare(rhs) != 0; + } + + template + nssv_constexpr bool operator!=(std::basic_string rhs, + basic_string_view lhs) nssv_noexcept { + return lhs.size() != rhs.size() || rhs.compare(lhs) != 0; + } + + // < + + template + nssv_constexpr bool operator<(basic_string_view lhs, char const *rhs) nssv_noexcept { + return lhs.compare(rhs) < 0; + } + + template + nssv_constexpr bool operator<(char const *lhs, basic_string_view rhs) nssv_noexcept { + return rhs.compare(lhs) > 0; + } + + template + nssv_constexpr bool operator<(basic_string_view lhs, + std::basic_string rhs) nssv_noexcept { + return lhs.compare(rhs) < 0; + } + + template + nssv_constexpr bool operator<(std::basic_string rhs, + basic_string_view lhs) nssv_noexcept { + return rhs.compare(lhs) > 0; + } -// 24.4.3 Non-member comparison functions: -// lexicographically compare two string views (function template): - -template< class CharT, class Traits > -nssv_constexpr bool operator== ( - basic_string_view lhs, - basic_string_view rhs ) nssv_noexcept -{ return lhs.compare( rhs ) == 0 ; } - -template< class CharT, class Traits > -nssv_constexpr bool operator!= ( - basic_string_view lhs, - basic_string_view rhs ) nssv_noexcept -{ return lhs.compare( rhs ) != 0 ; } - -template< class CharT, class Traits > -nssv_constexpr bool operator< ( - basic_string_view lhs, - basic_string_view rhs ) nssv_noexcept -{ return lhs.compare( rhs ) < 0 ; } - -template< class CharT, class Traits > -nssv_constexpr bool operator<= ( - basic_string_view lhs, - basic_string_view rhs ) nssv_noexcept -{ return lhs.compare( rhs ) <= 0 ; } - -template< class CharT, class Traits > -nssv_constexpr bool operator> ( - basic_string_view lhs, - basic_string_view rhs ) nssv_noexcept -{ return lhs.compare( rhs ) > 0 ; } - -template< class CharT, class Traits > -nssv_constexpr bool operator>= ( - basic_string_view lhs, - basic_string_view rhs ) nssv_noexcept -{ return lhs.compare( rhs ) >= 0 ; } - -// Let S be basic_string_view, and sv be an instance of S. -// Implementations shall provide sufficient additional overloads marked -// constexpr and noexcept so that an object t with an implicit conversion -// to S can be compared according to Table 67. - -#if nssv_CPP11_OR_GREATER && ! nssv_BETWEEN( nssv_COMPILER_MSVC_VERSION, 100, 141 ) - -#define nssv_BASIC_STRING_VIEW_I(T,U) typename std::decay< basic_string_view >::type - -#if nssv_BETWEEN( nssv_COMPILER_MSVC_VERSION, 140, 150 ) -# define nssv_MSVC_ORDER(x) , int=x + // <= + + template + nssv_constexpr bool operator<=(basic_string_view lhs, char const *rhs) nssv_noexcept { + return lhs.compare(rhs) <= 0; + } + + template + nssv_constexpr bool operator<=(char const *lhs, basic_string_view rhs) nssv_noexcept { + return rhs.compare(lhs) >= 0; + } + + template + nssv_constexpr bool operator<=(basic_string_view lhs, + std::basic_string rhs) nssv_noexcept { + return lhs.compare(rhs) <= 0; + } + + template + nssv_constexpr bool operator<=(std::basic_string rhs, + basic_string_view lhs) nssv_noexcept { + return rhs.compare(lhs) >= 0; + } + + // > + + template + nssv_constexpr bool operator>(basic_string_view lhs, char const *rhs) nssv_noexcept { + return lhs.compare(rhs) > 0; + } + + template + nssv_constexpr bool operator>(char const *lhs, basic_string_view rhs) nssv_noexcept { + return rhs.compare(lhs) < 0; + } + + template + nssv_constexpr bool operator>(basic_string_view lhs, + std::basic_string rhs) nssv_noexcept { + return lhs.compare(rhs) > 0; + } + + template + nssv_constexpr bool operator>(std::basic_string rhs, + basic_string_view lhs) nssv_noexcept { + return rhs.compare(lhs) < 0; + } + + // >= + + template + nssv_constexpr bool operator>=(basic_string_view lhs, char const *rhs) nssv_noexcept { + return lhs.compare(rhs) >= 0; + } + + template + nssv_constexpr bool operator>=(char const *lhs, basic_string_view rhs) nssv_noexcept { + return rhs.compare(lhs) <= 0; + } + + template + nssv_constexpr bool operator>=(basic_string_view lhs, + std::basic_string rhs) nssv_noexcept { + return lhs.compare(rhs) >= 0; + } + + template + nssv_constexpr bool operator>=(std::basic_string rhs, + basic_string_view lhs) nssv_noexcept { + return rhs.compare(lhs) <= 0; + } + +#else // newer compilers: + +#define nssv_BASIC_STRING_VIEW_I(T, U) typename std::decay>::type + +#if nssv_BETWEEN(nssv_COMPILER_MSVC_VERSION, 140, 150) +#define nssv_MSVC_ORDER(x) , int = x #else -# define nssv_MSVC_ORDER(x) /*, int=x*/ +#define nssv_MSVC_ORDER(x) /*, int=x*/ #endif -// == - -template< class CharT, class Traits nssv_MSVC_ORDER(1) > -nssv_constexpr bool operator==( - basic_string_view lhs, - nssv_BASIC_STRING_VIEW_I(CharT, Traits) rhs ) nssv_noexcept -{ return lhs.compare( rhs ) == 0; } - -template< class CharT, class Traits nssv_MSVC_ORDER(2) > -nssv_constexpr bool operator==( - nssv_BASIC_STRING_VIEW_I(CharT, Traits) lhs, - basic_string_view rhs ) nssv_noexcept -{ return lhs.size() == rhs.size() && lhs.compare( rhs ) == 0; } - -// != - -template< class CharT, class Traits nssv_MSVC_ORDER(1) > -nssv_constexpr bool operator!= ( - basic_string_view < CharT, Traits > lhs, - nssv_BASIC_STRING_VIEW_I( CharT, Traits ) rhs ) nssv_noexcept -{ return lhs.size() != rhs.size() || lhs.compare( rhs ) != 0 ; } - -template< class CharT, class Traits nssv_MSVC_ORDER(2) > -nssv_constexpr bool operator!= ( - nssv_BASIC_STRING_VIEW_I( CharT, Traits ) lhs, - basic_string_view < CharT, Traits > rhs ) nssv_noexcept -{ return lhs.compare( rhs ) != 0 ; } - -// < - -template< class CharT, class Traits nssv_MSVC_ORDER(1) > -nssv_constexpr bool operator< ( - basic_string_view < CharT, Traits > lhs, - nssv_BASIC_STRING_VIEW_I( CharT, Traits ) rhs ) nssv_noexcept -{ return lhs.compare( rhs ) < 0 ; } - -template< class CharT, class Traits nssv_MSVC_ORDER(2) > -nssv_constexpr bool operator< ( - nssv_BASIC_STRING_VIEW_I( CharT, Traits ) lhs, - basic_string_view < CharT, Traits > rhs ) nssv_noexcept -{ return lhs.compare( rhs ) < 0 ; } - -// <= - -template< class CharT, class Traits nssv_MSVC_ORDER(1) > -nssv_constexpr bool operator<= ( - basic_string_view < CharT, Traits > lhs, - nssv_BASIC_STRING_VIEW_I( CharT, Traits ) rhs ) nssv_noexcept -{ return lhs.compare( rhs ) <= 0 ; } - -template< class CharT, class Traits nssv_MSVC_ORDER(2) > -nssv_constexpr bool operator<= ( - nssv_BASIC_STRING_VIEW_I( CharT, Traits ) lhs, - basic_string_view < CharT, Traits > rhs ) nssv_noexcept -{ return lhs.compare( rhs ) <= 0 ; } - -// > - -template< class CharT, class Traits nssv_MSVC_ORDER(1) > -nssv_constexpr bool operator> ( - basic_string_view < CharT, Traits > lhs, - nssv_BASIC_STRING_VIEW_I( CharT, Traits ) rhs ) nssv_noexcept -{ return lhs.compare( rhs ) > 0 ; } - -template< class CharT, class Traits nssv_MSVC_ORDER(2) > -nssv_constexpr bool operator> ( - nssv_BASIC_STRING_VIEW_I( CharT, Traits ) lhs, - basic_string_view < CharT, Traits > rhs ) nssv_noexcept -{ return lhs.compare( rhs ) > 0 ; } - -// >= - -template< class CharT, class Traits nssv_MSVC_ORDER(1) > -nssv_constexpr bool operator>= ( - basic_string_view < CharT, Traits > lhs, - nssv_BASIC_STRING_VIEW_I( CharT, Traits ) rhs ) nssv_noexcept -{ return lhs.compare( rhs ) >= 0 ; } - -template< class CharT, class Traits nssv_MSVC_ORDER(2) > -nssv_constexpr bool operator>= ( - nssv_BASIC_STRING_VIEW_I( CharT, Traits ) lhs, - basic_string_view < CharT, Traits > rhs ) nssv_noexcept -{ return lhs.compare( rhs ) >= 0 ; } + // == + + template + nssv_constexpr bool operator==(basic_string_view lhs, + nssv_BASIC_STRING_VIEW_I(CharT, Traits) rhs) nssv_noexcept { + return lhs.compare(rhs) == 0; + } + + template + nssv_constexpr bool operator==(nssv_BASIC_STRING_VIEW_I(CharT, Traits) lhs, + basic_string_view rhs) nssv_noexcept { + return lhs.size() == rhs.size() && lhs.compare(rhs) == 0; + } + + // != + + template + nssv_constexpr bool operator!=(basic_string_view lhs, + nssv_BASIC_STRING_VIEW_I(CharT, Traits) rhs) nssv_noexcept { + return lhs.size() != rhs.size() || lhs.compare(rhs) != 0; + } + + template + nssv_constexpr bool operator!=(nssv_BASIC_STRING_VIEW_I(CharT, Traits) lhs, + basic_string_view rhs) nssv_noexcept { + return lhs.compare(rhs) != 0; + } + + // < + + template + nssv_constexpr bool operator<(basic_string_view lhs, + nssv_BASIC_STRING_VIEW_I(CharT, Traits) rhs) nssv_noexcept { + return lhs.compare(rhs) < 0; + } + + template + nssv_constexpr bool operator<(nssv_BASIC_STRING_VIEW_I(CharT, Traits) lhs, + basic_string_view rhs) nssv_noexcept { + return lhs.compare(rhs) < 0; + } + + // <= + + template + nssv_constexpr bool operator<=(basic_string_view lhs, + nssv_BASIC_STRING_VIEW_I(CharT, Traits) rhs) nssv_noexcept { + return lhs.compare(rhs) <= 0; + } + + template + nssv_constexpr bool operator<=(nssv_BASIC_STRING_VIEW_I(CharT, Traits) lhs, + basic_string_view rhs) nssv_noexcept { + return lhs.compare(rhs) <= 0; + } + + // > + + template + nssv_constexpr bool operator>(basic_string_view lhs, + nssv_BASIC_STRING_VIEW_I(CharT, Traits) rhs) nssv_noexcept { + return lhs.compare(rhs) > 0; + } + + template + nssv_constexpr bool operator>(nssv_BASIC_STRING_VIEW_I(CharT, Traits) lhs, + basic_string_view rhs) nssv_noexcept { + return lhs.compare(rhs) > 0; + } + + // >= + + template + nssv_constexpr bool operator>=(basic_string_view lhs, + nssv_BASIC_STRING_VIEW_I(CharT, Traits) rhs) nssv_noexcept { + return lhs.compare(rhs) >= 0; + } + + template + nssv_constexpr bool operator>=(nssv_BASIC_STRING_VIEW_I(CharT, Traits) lhs, + basic_string_view rhs) nssv_noexcept { + return lhs.compare(rhs) >= 0; + } #undef nssv_MSVC_ORDER #undef nssv_BASIC_STRING_VIEW_I -#endif // nssv_CPP11_OR_GREATER +#endif // compiler-dependent approach to comparisons -// 24.4.4 Inserters and extractors: + // 24.4.4 Inserters and extractors: -namespace detail { + namespace detail { -template< class Stream > -void write_padding( Stream & os, std::streamsize n ) -{ - for ( std::streamsize i = 0; i < n; ++i ) - os.rdbuf()->sputc( os.fill() ); -} + template void write_padding(Stream &os, std::streamsize n) { + for (std::streamsize i = 0; i < n; ++i) + os.rdbuf()->sputc(os.fill()); + } -template< class Stream, class View > -Stream & write_to_stream( Stream & os, View const & sv ) -{ - typename Stream::sentry sentry( os ); + template Stream &write_to_stream(Stream &os, View const &sv) { + typename Stream::sentry sentry(os); - if ( !os ) - return os; + if (!os) + return os; - const std::streamsize length = static_cast( sv.length() ); + const std::streamsize length = static_cast(sv.length()); // Whether, and how, to pad: - const bool pad = ( length < os.width() ); - const bool left_pad = pad && ( os.flags() & std::ios_base::adjustfield ) == std::ios_base::right; + const bool pad = (length < os.width()); + const bool left_pad = pad && (os.flags() & std::ios_base::adjustfield) == std::ios_base::right; - if ( left_pad ) - write_padding( os, os.width() - length ); + if (left_pad) + write_padding(os, os.width() - length); // Write span characters: - os.rdbuf()->sputn( sv.begin(), length ); + os.rdbuf()->sputn(sv.begin(), length); - if ( pad && !left_pad ) - write_padding( os, os.width() - length ); + if (pad && !left_pad) + write_padding(os, os.width() - length); // Reset output stream width: - os.width( 0 ); + os.width(0); return os; -} + } -} // namespace detail + } // namespace detail -template< class CharT, class Traits > -std::basic_ostream & -operator<<( - std::basic_ostream& os, - basic_string_view sv ) -{ - return detail::write_to_stream( os, sv ); -} + template + std::basic_ostream &operator<<(std::basic_ostream &os, + basic_string_view sv) { + return detail::write_to_stream(os, sv); + } -// Several typedefs for common character types are provided: + // Several typedefs for common character types are provided: -typedef basic_string_view string_view; -typedef basic_string_view wstring_view; + typedef basic_string_view string_view; + typedef basic_string_view wstring_view; #if nssv_HAVE_WCHAR16_T -typedef basic_string_view u16string_view; -typedef basic_string_view u32string_view; + typedef basic_string_view u16string_view; + typedef basic_string_view u32string_view; #endif -}} // namespace nonstd::sv_lite + } // namespace sv_lite +} // namespace nonstd::sv_lite // // 24.4.6 Suffix for basic_string_view literals: @@ -1204,57 +1266,58 @@ typedef basic_string_view u32string_view; namespace nonstd { nssv_inline_ns namespace literals { -nssv_inline_ns namespace string_view_literals { + nssv_inline_ns namespace string_view_literals { #if nssv_CONFIG_STD_SV_OPERATOR && nssv_HAVE_STD_DEFINED_LITERALS -nssv_constexpr nonstd::sv_lite::string_view operator "" sv( const char* str, size_t len ) nssv_noexcept // (1) -{ - return nonstd::sv_lite::string_view{ str, len }; -} + nssv_constexpr nonstd::sv_lite::string_view operator"" sv(const char *str, size_t len) nssv_noexcept // (1) + { + return nonstd::sv_lite::string_view {str, len}; + } -nssv_constexpr nonstd::sv_lite::u16string_view operator "" sv( const char16_t* str, size_t len ) nssv_noexcept // (2) -{ - return nonstd::sv_lite::u16string_view{ str, len }; -} + nssv_constexpr nonstd::sv_lite::u16string_view operator"" sv(const char16_t *str, size_t len) nssv_noexcept // (2) + { + return nonstd::sv_lite::u16string_view {str, len}; + } -nssv_constexpr nonstd::sv_lite::u32string_view operator "" sv( const char32_t* str, size_t len ) nssv_noexcept // (3) -{ - return nonstd::sv_lite::u32string_view{ str, len }; -} + nssv_constexpr nonstd::sv_lite::u32string_view operator"" sv(const char32_t *str, size_t len) nssv_noexcept // (3) + { + return nonstd::sv_lite::u32string_view {str, len}; + } -nssv_constexpr nonstd::sv_lite::wstring_view operator "" sv( const wchar_t* str, size_t len ) nssv_noexcept // (4) -{ - return nonstd::sv_lite::wstring_view{ str, len }; -} + nssv_constexpr nonstd::sv_lite::wstring_view operator"" sv(const wchar_t *str, size_t len) nssv_noexcept // (4) + { + return nonstd::sv_lite::wstring_view {str, len}; + } #endif // nssv_CONFIG_STD_SV_OPERATOR && nssv_HAVE_STD_DEFINED_LITERALS #if nssv_CONFIG_USR_SV_OPERATOR -nssv_constexpr nonstd::sv_lite::string_view operator "" _sv( const char* str, size_t len ) nssv_noexcept // (1) -{ - return nonstd::sv_lite::string_view{ str, len }; -} + nssv_constexpr nonstd::sv_lite::string_view operator"" _sv(const char *str, size_t len) nssv_noexcept // (1) + { + return nonstd::sv_lite::string_view {str, len}; + } -nssv_constexpr nonstd::sv_lite::u16string_view operator "" _sv( const char16_t* str, size_t len ) nssv_noexcept // (2) -{ - return nonstd::sv_lite::u16string_view{ str, len }; -} + nssv_constexpr nonstd::sv_lite::u16string_view operator"" _sv(const char16_t *str, size_t len) nssv_noexcept // (2) + { + return nonstd::sv_lite::u16string_view {str, len}; + } -nssv_constexpr nonstd::sv_lite::u32string_view operator "" _sv( const char32_t* str, size_t len ) nssv_noexcept // (3) -{ - return nonstd::sv_lite::u32string_view{ str, len }; -} + nssv_constexpr nonstd::sv_lite::u32string_view operator"" _sv(const char32_t *str, size_t len) nssv_noexcept // (3) + { + return nonstd::sv_lite::u32string_view {str, len}; + } -nssv_constexpr nonstd::sv_lite::wstring_view operator "" _sv( const wchar_t* str, size_t len ) nssv_noexcept // (4) -{ - return nonstd::sv_lite::wstring_view{ str, len }; -} + nssv_constexpr nonstd::sv_lite::wstring_view operator"" _sv(const wchar_t *str, size_t len) nssv_noexcept // (4) + { + return nonstd::sv_lite::wstring_view {str, len}; + } #endif // nssv_CONFIG_USR_SV_OPERATOR - -}}} // namespace nonstd::literals::string_view_literals + } +} +} // namespace nonstd #endif @@ -1271,39 +1334,32 @@ namespace sv_lite { #if nssv_CPP11_OR_GREATER && nssv_COMPILER_MSVC_VERSION != 140 -template< class CharT, class Traits, class Allocator = std::allocator > -std::basic_string -to_string( basic_string_view v, Allocator const & a = Allocator() ) -{ - return std::basic_string( v.begin(), v.end(), a ); +template > +std::basic_string to_string(basic_string_view v, + Allocator const &a = Allocator()) { + return std::basic_string(v.begin(), v.end(), a); } #else -template< class CharT, class Traits > -std::basic_string -to_string( basic_string_view v ) -{ - return std::basic_string( v.begin(), v.end() ); +template std::basic_string to_string(basic_string_view v) { + return std::basic_string(v.begin(), v.end()); } -template< class CharT, class Traits, class Allocator > -std::basic_string -to_string( basic_string_view v, Allocator const & a ) -{ - return std::basic_string( v.begin(), v.end(), a ); +template +std::basic_string to_string(basic_string_view v, Allocator const &a) { + return std::basic_string(v.begin(), v.end(), a); } #endif // nssv_CPP11_OR_GREATER -template< class CharT, class Traits, class Allocator > -basic_string_view -to_string_view( std::basic_string const & s ) -{ - return basic_string_view( s.data(), s.size() ); +template +basic_string_view to_string_view(std::basic_string const &s) { + return basic_string_view(s.data(), s.size()); } -}} // namespace nonstd::sv_lite +} // namespace sv_lite +} // namespace nonstd #endif // nssv_CONFIG_CONVERSION_STD_STRING_FREE_FUNCTIONS @@ -1353,44 +1409,32 @@ using sv_lite::to_string_view; namespace std { -template<> -struct hash< nonstd::string_view > -{ +template <> struct hash { public: - std::size_t operator()( nonstd::string_view v ) const nssv_noexcept - { - return std::hash()( std::string( v.data(), v.size() ) ); - } + std::size_t operator()(nonstd::string_view v) const nssv_noexcept { + return std::hash()(std::string(v.data(), v.size())); + } }; -template<> -struct hash< nonstd::wstring_view > -{ +template <> struct hash { public: - std::size_t operator()( nonstd::wstring_view v ) const nssv_noexcept - { - return std::hash()( std::wstring( v.data(), v.size() ) ); - } + std::size_t operator()(nonstd::wstring_view v) const nssv_noexcept { + return std::hash()(std::wstring(v.data(), v.size())); + } }; -template<> -struct hash< nonstd::u16string_view > -{ +template <> struct hash { public: - std::size_t operator()( nonstd::u16string_view v ) const nssv_noexcept - { - return std::hash()( std::u16string( v.data(), v.size() ) ); - } + std::size_t operator()(nonstd::u16string_view v) const nssv_noexcept { + return std::hash()(std::u16string(v.data(), v.size())); + } }; -template<> -struct hash< nonstd::u32string_view > -{ +template <> struct hash { public: - std::size_t operator()( nonstd::u32string_view v ) const nssv_noexcept - { - return std::hash()( std::u32string( v.data(), v.size() ) ); - } + std::size_t operator()(nonstd::u32string_view v) const nssv_noexcept { + return std::hash()(std::u32string(v.data(), v.size())); + } }; } // namespace std @@ -1403,23 +1447,22 @@ nssv_RESTORE_WARNINGS() #endif // NONSTD_SV_LITE_H_INCLUDED - namespace inja { -enum class ElementNotation { - Dot, - Pointer -}; - /*! * \brief Class for lexer configuration. */ struct LexerConfig { std::string statement_open {"{%"}; + std::string statement_open_no_lstrip {"{%+"}; + std::string statement_open_force_lstrip {"{%-"}; std::string statement_close {"%}"}; + std::string statement_close_force_rstrip {"-%}"}; std::string line_statement {"##"}; std::string expression_open {"{{"}; + std::string expression_open_force_lstrip {"{{-"}; std::string expression_close {"}}"}; + std::string expression_close_force_rstrip {"-}}"}; std::string comment_open {"{#"}; std::string comment_close {"#}"}; std::string open_chars {"#{"}; @@ -1435,9 +1478,18 @@ struct LexerConfig { if (open_chars.find(statement_open[0]) == std::string::npos) { open_chars += statement_open[0]; } + if (open_chars.find(statement_open_no_lstrip[0]) == std::string::npos) { + open_chars += statement_open_no_lstrip[0]; + } + if (open_chars.find(statement_open_force_lstrip[0]) == std::string::npos) { + open_chars += statement_open_force_lstrip[0]; + } if (open_chars.find(expression_open[0]) == std::string::npos) { open_chars += expression_open[0]; } + if (open_chars.find(expression_open_force_lstrip[0]) == std::string::npos) { + open_chars += expression_open_force_lstrip[0]; + } if (open_chars.find(comment_open[0]) == std::string::npos) { open_chars += comment_open[0]; } @@ -1448,69 +1500,78 @@ struct LexerConfig { * \brief Class for parser configuration. */ struct ParserConfig { - ElementNotation notation {ElementNotation::Dot}; + bool search_included_templates_in_files {true}; }; -} - -#endif // PANTOR_INJA_CONFIG_HPP +/*! + * \brief Class for render configuration. + */ +struct RenderConfig { + bool throw_at_missing_includes {true}; +}; -// #include "function_storage.hpp" -#ifndef PANTOR_INJA_FUNCTION_STORAGE_HPP -#define PANTOR_INJA_FUNCTION_STORAGE_HPP +} // namespace inja -#include +#endif // INCLUDE_INJA_CONFIG_HPP_ -// #include "bytecode.hpp" -#ifndef PANTOR_INJA_BYTECODE_HPP -#define PANTOR_INJA_BYTECODE_HPP +// #include "function_storage.hpp" +// Copyright (c) 2020 Pantor. All rights reserved. -#include -#include +#ifndef INCLUDE_INJA_FUNCTION_STORAGE_HPP_ +#define INCLUDE_INJA_FUNCTION_STORAGE_HPP_ -#include +#include // #include "string_view.hpp" - namespace inja { using json = nlohmann::json; +using Arguments = std::vector; +using CallbackFunction = std::function; +using VoidCallbackFunction = std::function; -struct Bytecode { - enum class Op : uint8_t { - Nop, - // print StringRef (always immediate) - PrintText, - // print value - PrintValue, - // push value onto stack (always immediate) - Push, - - // builtin functions - // result is pushed to stack - // args specify number of arguments - // all functions can take their "last" argument either immediate - // or popped off stack (e.g. if immediate, it's like the immediate was - // just pushed to the stack) +/*! + * \brief Class for builtin functions and user-defined callbacks. + */ +class FunctionStorage { +public: + enum class Operation { Not, And, Or, In, Equal, + NotEqual, Greater, GreaterEqual, Less, LessEqual, + Add, + Subtract, + Multiplication, + Division, + Power, + Modulo, + AtId, At, - Different, + Default, DivisibleBy, Even, + Exists, + ExistsInObject, First, Float, Int, + IsArray, + IsBoolean, + IsFloat, + IsInteger, + IsNumber, + IsObject, + IsString, Last, Length, Lower, @@ -1518,175 +1579,157 @@ struct Bytecode { Min, Odd, Range, - Result, Round, Sort, Upper, - Exists, - ExistsInObject, - IsBoolean, - IsNumber, - IsInteger, - IsFloat, - IsObject, - IsArray, - IsString, - Default, - - // include another template - // value is the template name - Include, - - // callback function - // str is the function name (this means it cannot be a lookup) - // args specify number of arguments - // as with builtin functions, "last" argument can be immediate Callback, + ParenLeft, + ParenRight, + None, + }; - // unconditional jump - // args is the index of the bytecode to jump to. - Jump, - - // conditional jump - // value popped off stack is checked for truthyness - // if false, args is the index of the bytecode to jump to. - // if true, no action is taken (falls through) - ConditionalJump, - - // start loop - // value popped off stack is what is iterated over - // args is index of bytecode after end loop (jumped to if iterable is - // empty) - // immediate value is key name (for maps) - // str is value name - StartLoop, - - // end a loop - // args is index of the first bytecode in the loop body - EndLoop, + struct FunctionData { + explicit FunctionData(const Operation &op, const CallbackFunction &cb = CallbackFunction{}) : operation(op), callback(cb) {} + const Operation operation; + const CallbackFunction callback; }; - enum Flag { - // location of value for value-taking ops (mask) - ValueMask = 0x03, - // pop value off stack - ValuePop = 0x00, - // value is immediate rather than on stack - ValueImmediate = 0x01, - // lookup immediate str (dot notation) - ValueLookupDot = 0x02, - // lookup immediate str (json pointer notation) - ValueLookupPointer = 0x03, +private: + const int VARIADIC {-1}; + + std::map, FunctionData> function_storage = { + {std::make_pair("at", 2), FunctionData { Operation::At }}, + {std::make_pair("default", 2), FunctionData { Operation::Default }}, + {std::make_pair("divisibleBy", 2), FunctionData { Operation::DivisibleBy }}, + {std::make_pair("even", 1), FunctionData { Operation::Even }}, + {std::make_pair("exists", 1), FunctionData { Operation::Exists }}, + {std::make_pair("existsIn", 2), FunctionData { Operation::ExistsInObject }}, + {std::make_pair("first", 1), FunctionData { Operation::First }}, + {std::make_pair("float", 1), FunctionData { Operation::Float }}, + {std::make_pair("int", 1), FunctionData { Operation::Int }}, + {std::make_pair("isArray", 1), FunctionData { Operation::IsArray }}, + {std::make_pair("isBoolean", 1), FunctionData { Operation::IsBoolean }}, + {std::make_pair("isFloat", 1), FunctionData { Operation::IsFloat }}, + {std::make_pair("isInteger", 1), FunctionData { Operation::IsInteger }}, + {std::make_pair("isNumber", 1), FunctionData { Operation::IsNumber }}, + {std::make_pair("isObject", 1), FunctionData { Operation::IsObject }}, + {std::make_pair("isString", 1), FunctionData { Operation::IsString }}, + {std::make_pair("last", 1), FunctionData { Operation::Last }}, + {std::make_pair("length", 1), FunctionData { Operation::Length }}, + {std::make_pair("lower", 1), FunctionData { Operation::Lower }}, + {std::make_pair("max", 1), FunctionData { Operation::Max }}, + {std::make_pair("min", 1), FunctionData { Operation::Min }}, + {std::make_pair("odd", 1), FunctionData { Operation::Odd }}, + {std::make_pair("range", 1), FunctionData { Operation::Range }}, + {std::make_pair("round", 2), FunctionData { Operation::Round }}, + {std::make_pair("sort", 1), FunctionData { Operation::Sort }}, + {std::make_pair("upper", 1), FunctionData { Operation::Upper }}, }; - Op op {Op::Nop}; - uint32_t args: 30; - uint32_t flags: 2; +public: + void add_builtin(nonstd::string_view name, int num_args, Operation op) { + function_storage.emplace(std::make_pair(static_cast(name), num_args), FunctionData { op }); + } - json value; - std::string str; + void add_callback(nonstd::string_view name, int num_args, const CallbackFunction &callback) { + function_storage.emplace(std::make_pair(static_cast(name), num_args), FunctionData { Operation::Callback, callback }); + } - Bytecode(): args(0), flags(0) {} - explicit Bytecode(Op op, unsigned int args = 0): op(op), args(args), flags(0) {} - explicit Bytecode(Op op, nonstd::string_view str, unsigned int flags): op(op), args(0), flags(flags), str(str) {} - explicit Bytecode(Op op, json&& value, unsigned int flags): op(op), args(0), flags(flags), value(std::move(value)) {} -}; + FunctionData find_function(nonstd::string_view name, int num_args) const { + auto it = function_storage.find(std::make_pair(static_cast(name), num_args)); + if (it != function_storage.end()) { + return it->second; -} // namespace inja + // Find variadic function + } else if (num_args > 0) { + it = function_storage.find(std::make_pair(static_cast(name), VARIADIC)); + if (it != function_storage.end()) { + return it->second; + } + } -#endif // PANTOR_INJA_BYTECODE_HPP + return FunctionData { Operation::None }; + } +}; -// #include "string_view.hpp" +} // namespace inja +#endif // INCLUDE_INJA_FUNCTION_STORAGE_HPP_ +// #include "parser.hpp" +// Copyright (c) 2020 Pantor. All rights reserved. -namespace inja { +#ifndef INCLUDE_INJA_PARSER_HPP_ +#define INCLUDE_INJA_PARSER_HPP_ -using namespace nlohmann; +#include +#include +#include +#include +#include +#include -using Arguments = std::vector; -using CallbackFunction = std::function; +// #include "config.hpp" -/*! - * \brief Class for builtin functions and user-defined callbacks. - */ -class FunctionStorage { - public: - void add_builtin(nonstd::string_view name, unsigned int num_args, Bytecode::Op op) { - auto& data = get_or_new(name, num_args); - data.op = op; - } +// #include "exceptions.hpp" +// Copyright (c) 2020 Pantor. All rights reserved. - void add_callback(nonstd::string_view name, unsigned int num_args, const CallbackFunction& function) { - auto& data = get_or_new(name, num_args); - data.function = function; - } +#ifndef INCLUDE_INJA_EXCEPTIONS_HPP_ +#define INCLUDE_INJA_EXCEPTIONS_HPP_ - Bytecode::Op find_builtin(nonstd::string_view name, unsigned int num_args) const { - if (auto ptr = get(name, num_args)) { - return ptr->op; - } - return Bytecode::Op::Nop; - } +#include +#include - CallbackFunction find_callback(nonstd::string_view name, unsigned int num_args) const { - if (auto ptr = get(name, num_args)) { - return ptr->function; - } - return nullptr; - } +namespace inja { - private: - struct FunctionData { - unsigned int num_args {0}; - Bytecode::Op op {Bytecode::Op::Nop}; // for builtins - CallbackFunction function; // for callbacks - }; +struct SourceLocation { + size_t line; + size_t column; +}; - FunctionData& get_or_new(nonstd::string_view name, unsigned int num_args) { - auto &vec = m_map[static_cast(name)]; - for (auto &i: vec) { - if (i.num_args == num_args) return i; - } - vec.emplace_back(); - vec.back().num_args = num_args; - return vec.back(); - } +struct InjaError : public std::runtime_error { + const std::string type; + const std::string message; - const FunctionData* get(nonstd::string_view name, unsigned int num_args) const { - auto it = m_map.find(static_cast(name)); - if (it == m_map.end()) return nullptr; - for (auto &&i: it->second) { - if (i.num_args == num_args) return &i; - } - return nullptr; - } + const SourceLocation location; - std::map> m_map; + explicit InjaError(const std::string &type, const std::string &message) + : std::runtime_error("[inja.exception." + type + "] " + message), type(type), message(message), location({0, 0}) {} + + explicit InjaError(const std::string &type, const std::string &message, SourceLocation location) + : std::runtime_error("[inja.exception." + type + "] (at " + std::to_string(location.line) + ":" + + std::to_string(location.column) + ") " + message), + type(type), message(message), location(location) {} }; -} +struct ParserError : public InjaError { + explicit ParserError(const std::string &message, SourceLocation location) : InjaError("parser_error", message, location) {} +}; -#endif // PANTOR_INJA_FUNCTION_STORAGE_HPP +struct RenderError : public InjaError { + explicit RenderError(const std::string &message, SourceLocation location) : InjaError("render_error", message, location) {} +}; -// #include "parser.hpp" -#ifndef PANTOR_INJA_PARSER_HPP -#define PANTOR_INJA_PARSER_HPP +struct FileError : public InjaError { + explicit FileError(const std::string &message) : InjaError("file_error", message) {} + explicit FileError(const std::string &message, SourceLocation location) : InjaError("file_error", message, location) {} +}; -#include -#include -#include -#include +struct JsonError : public InjaError { + explicit JsonError(const std::string &message, SourceLocation location) : InjaError("json_error", message, location) {} +}; -// #include "bytecode.hpp" +} // namespace inja -// #include "config.hpp" +#endif // INCLUDE_INJA_EXCEPTIONS_HPP_ // #include "function_storage.hpp" // #include "lexer.hpp" -#ifndef PANTOR_INJA_LEXER_HPP -#define PANTOR_INJA_LEXER_HPP +// Copyright (c) 2020 Pantor. All rights reserved. + +#ifndef INCLUDE_INJA_LEXER_HPP_ +#define INCLUDE_INJA_LEXER_HPP_ #include #include @@ -1694,130 +1737,157 @@ class FunctionStorage { // #include "config.hpp" // #include "token.hpp" -#ifndef PANTOR_INJA_TOKEN_HPP -#define PANTOR_INJA_TOKEN_HPP +// Copyright (c) 2020 Pantor. All rights reserved. + +#ifndef INCLUDE_INJA_TOKEN_HPP_ +#define INCLUDE_INJA_TOKEN_HPP_ #include // #include "string_view.hpp" - namespace inja { /*! - * \brief Helper-class for the inja Parser. + * \brief Helper-class for the inja Lexer. */ struct Token { enum class Kind { Text, - ExpressionOpen, // {{ - ExpressionClose, // }} - LineStatementOpen, // ## - LineStatementClose, // \n - StatementOpen, // {% - StatementClose, // %} - CommentOpen, // {# - CommentClose, // #} - Id, // this, this.foo - Number, // 1, 2, -1, 5.2, -5.3 - String, // "this" - Comma, // , - Colon, // : - LeftParen, // ( - RightParen, // ) - LeftBracket, // [ - RightBracket, // ] - LeftBrace, // { - RightBrace, // } - Equal, // == - GreaterThan, // > - GreaterEqual, // >= - LessThan, // < - LessEqual, // <= - NotEqual, // != + ExpressionOpen, // {{ + ExpressionClose, // }} + LineStatementOpen, // ## + LineStatementClose, // \n + StatementOpen, // {% + StatementClose, // %} + CommentOpen, // {# + CommentClose, // #} + Id, // this, this.foo + Number, // 1, 2, -1, 5.2, -5.3 + String, // "this" + Plus, // + + Minus, // - + Times, // * + Slash, // / + Percent, // % + Power, // ^ + Comma, // , + Dot, // . + Colon, // : + LeftParen, // ( + RightParen, // ) + LeftBracket, // [ + RightBracket, // ] + LeftBrace, // { + RightBrace, // } + Equal, // == + NotEqual, // != + GreaterThan, // > + GreaterEqual, // >= + LessThan, // < + LessEqual, // <= Unknown, - Eof - } kind {Kind::Unknown}; - + Eof, + }; + + Kind kind {Kind::Unknown}; nonstd::string_view text; - constexpr Token() = default; - constexpr Token(Kind kind, nonstd::string_view text): kind(kind), text(text) {} + explicit constexpr Token() = default; + explicit constexpr Token(Kind kind, nonstd::string_view text) : kind(kind), text(text) {} std::string describe() const { switch (kind) { - case Kind::Text: - return ""; - case Kind::LineStatementClose: - return ""; - case Kind::Eof: - return ""; - default: - return static_cast(text); + case Kind::Text: + return ""; + case Kind::LineStatementClose: + return ""; + case Kind::Eof: + return ""; + default: + return static_cast(text); } } }; -} +} // namespace inja -#endif // PANTOR_INJA_TOKEN_HPP +#endif // INCLUDE_INJA_TOKEN_HPP_ // #include "utils.hpp" -#ifndef PANTOR_INJA_UTILS_HPP -#define PANTOR_INJA_UTILS_HPP +// Copyright (c) 2020 Pantor. All rights reserved. + +#ifndef INCLUDE_INJA_UTILS_HPP_ +#define INCLUDE_INJA_UTILS_HPP_ #include #include -#include #include #include -// #include "string_view.hpp" +// #include "exceptions.hpp" +// #include "string_view.hpp" namespace inja { -inline void inja_throw(const std::string& type, const std::string& message) { - throw std::runtime_error("[inja.exception." + type + "] " + message); -} - -inline std::ifstream open_file_or_throw(const std::string& path) { - std::ifstream file; +inline void open_file_or_throw(const std::string &path, std::ifstream &file) { file.exceptions(std::ifstream::failbit | std::ifstream::badbit); try { file.open(path); - } catch(const std::ios_base::failure& e) { - inja_throw("file_error", "failed accessing file at '" + path + "'"); + } catch (const std::ios_base::failure & /*e*/) { + throw FileError("failed accessing file at '" + path + "'"); } - return file; } namespace string_view { - inline nonstd::string_view slice(nonstd::string_view view, size_t start, size_t end) { - start = std::min(start, view.size()); - end = std::min(std::max(start, end), view.size()); - return view.substr(start, end - start); // StringRef(Data + Start, End - Start); +inline nonstd::string_view slice(nonstd::string_view view, size_t start, size_t end) { + start = std::min(start, view.size()); + end = std::min(std::max(start, end), view.size()); + return view.substr(start, end - start); +} + +inline std::pair split(nonstd::string_view view, char Separator) { + size_t idx = view.find(Separator); + if (idx == nonstd::string_view::npos) { + return std::make_pair(view, nonstd::string_view()); } + return std::make_pair(slice(view, 0, idx), slice(view, idx + 1, nonstd::string_view::npos)); +} - inline std::pair split(nonstd::string_view view, char Separator) { - size_t idx = view.find(Separator); - if (idx == nonstd::string_view::npos) { - return std::make_pair(view, nonstd::string_view()); - } - return std::make_pair(slice(view, 0, idx), slice(view, idx + 1, nonstd::string_view::npos)); +inline bool starts_with(nonstd::string_view view, nonstd::string_view prefix) { + return (view.size() >= prefix.size() && view.compare(0, prefix.size(), prefix) == 0); +} +} // namespace string_view + +inline SourceLocation get_source_location(nonstd::string_view content, size_t pos) { + // Get line and offset position (starts at 1:1) + auto sliced = string_view::slice(content, 0, pos); + std::size_t last_newline = sliced.rfind("\n"); + + if (last_newline == nonstd::string_view::npos) { + return {1, sliced.length() + 1}; } - inline bool starts_with(nonstd::string_view view, nonstd::string_view prefix) { - return (view.size() >= prefix.size() && view.compare(0, prefix.size(), prefix) == 0); + // Count newlines + size_t count_lines = 0; + size_t search_start = 0; + while (search_start <= sliced.size()) { + search_start = sliced.find("\n", search_start) + 1; + if (search_start == 0) { + break; + } + count_lines += 1; } -} // namespace string -} // namespace inja + return {count_lines + 1, sliced.length() - last_newline}; +} -#endif // PANTOR_INJA_UTILS_HPP +} // namespace inja +#endif // INCLUDE_INJA_UTILS_HPP_ namespace inja { @@ -1829,236 +1899,188 @@ class Lexer { enum class State { Text, ExpressionStart, + ExpressionStartForceLstrip, ExpressionBody, LineStart, LineBody, StatementStart, + StatementStartNoLstrip, + StatementStartForceLstrip, StatementBody, CommentStart, - CommentBody - } m_state; - - const LexerConfig& m_config; - nonstd::string_view m_in; - size_t m_tok_start; - size_t m_pos; - - public: - explicit Lexer(const LexerConfig& config) : m_config(config) {} - - void start(nonstd::string_view in) { - m_in = in; - m_tok_start = 0; - m_pos = 0; - m_state = State::Text; - } - - Token scan() { - m_tok_start = m_pos; + CommentBody, + }; - again: - if (m_tok_start >= m_in.size()) return make_token(Token::Kind::Eof); + enum class MinusState { + Operator, + Number, + }; - switch (m_state) { - default: - case State::Text: { - // fast-scan to first open character - size_t open_start = m_in.substr(m_pos).find_first_of(m_config.open_chars); - if (open_start == nonstd::string_view::npos) { - // didn't find open, return remaining text as text token - m_pos = m_in.size(); - return make_token(Token::Kind::Text); - } - m_pos += open_start; - - // try to match one of the opening sequences, and get the close - nonstd::string_view open_str = m_in.substr(m_pos); - bool must_lstrip = false; - if (inja::string_view::starts_with(open_str, m_config.expression_open)) { - m_state = State::ExpressionStart; - } else if (inja::string_view::starts_with(open_str, m_config.statement_open)) { - m_state = State::StatementStart; - must_lstrip = m_config.lstrip_blocks; - } else if (inja::string_view::starts_with(open_str, m_config.comment_open)) { - m_state = State::CommentStart; - must_lstrip = m_config.lstrip_blocks; - } else if ((m_pos == 0 || m_in[m_pos - 1] == '\n') && - inja::string_view::starts_with(open_str, m_config.line_statement)) { - m_state = State::LineStart; - } else { - m_pos += 1; // wasn't actually an opening sequence - goto again; - } + const LexerConfig &config; - nonstd::string_view text = string_view::slice(m_in, m_tok_start, m_pos); - if (must_lstrip) - text = clear_final_line_if_whitespace(text); - - if (text.empty()) goto again; // don't generate empty token - return Token(Token::Kind::Text, text); - } - case State::ExpressionStart: { - m_state = State::ExpressionBody; - m_pos += m_config.expression_open.size(); - return make_token(Token::Kind::ExpressionOpen); - } - case State::LineStart: { - m_state = State::LineBody; - m_pos += m_config.line_statement.size(); - return make_token(Token::Kind::LineStatementOpen); - } - case State::StatementStart: { - m_state = State::StatementBody; - m_pos += m_config.statement_open.size(); - return make_token(Token::Kind::StatementOpen); - } - case State::CommentStart: { - m_state = State::CommentBody; - m_pos += m_config.comment_open.size(); - return make_token(Token::Kind::CommentOpen); - } - case State::ExpressionBody: - return scan_body(m_config.expression_close, Token::Kind::ExpressionClose); - case State::LineBody: - return scan_body("\n", Token::Kind::LineStatementClose); - case State::StatementBody: - return scan_body(m_config.statement_close, Token::Kind::StatementClose, m_config.trim_blocks); - case State::CommentBody: { - // fast-scan to comment close - size_t end = m_in.substr(m_pos).find(m_config.comment_close); - if (end == nonstd::string_view::npos) { - m_pos = m_in.size(); - return make_token(Token::Kind::Eof); - } - // return the entire comment in the close token - m_state = State::Text; - m_pos += end + m_config.comment_close.size(); - Token tok = make_token(Token::Kind::CommentClose); - if (m_config.trim_blocks) - skip_newline(); - return tok; - } - } - } + State state; + MinusState minus_state; + nonstd::string_view m_in; + size_t tok_start; + size_t pos; - const LexerConfig& get_config() const { return m_config; } - private: - Token scan_body(nonstd::string_view close, Token::Kind closeKind, bool trim = false) { + Token scan_body(nonstd::string_view close, Token::Kind closeKind, nonstd::string_view close_trim = nonstd::string_view(), bool trim = false) { again: // skip whitespace (except for \n as it might be a close) - if (m_tok_start >= m_in.size()) return make_token(Token::Kind::Eof); - char ch = m_in[m_tok_start]; + if (tok_start >= m_in.size()) { + return make_token(Token::Kind::Eof); + } + char ch = m_in[tok_start]; if (ch == ' ' || ch == '\t' || ch == '\r') { - m_tok_start += 1; + tok_start += 1; goto again; } // check for close - if (inja::string_view::starts_with(m_in.substr(m_tok_start), close)) { - m_state = State::Text; - m_pos = m_tok_start + close.size(); + if (!close_trim.empty() && inja::string_view::starts_with(m_in.substr(tok_start), close_trim)) { + state = State::Text; + pos = tok_start + close_trim.size(); + Token tok = make_token(closeKind); + skip_whitespaces_and_newlines(); + return tok; + } + + if (inja::string_view::starts_with(m_in.substr(tok_start), close)) { + state = State::Text; + pos = tok_start + close.size(); Token tok = make_token(closeKind); - if (trim) - skip_newline(); + if (trim) { + skip_whitespaces_and_first_newline(); + } return tok; } // skip \n if (ch == '\n') { - m_tok_start += 1; + tok_start += 1; goto again; } - m_pos = m_tok_start + 1; - if (std::isalpha(ch)) return scan_id(); + pos = tok_start + 1; + if (std::isalpha(ch)) { + minus_state = MinusState::Operator; + return scan_id(); + } + + MinusState current_minus_state = minus_state; + if (minus_state == MinusState::Operator) { + minus_state = MinusState::Number; + } + switch (ch) { - case ',': - return make_token(Token::Kind::Comma); - case ':': - return make_token(Token::Kind::Colon); - case '(': - return make_token(Token::Kind::LeftParen); - case ')': - return make_token(Token::Kind::RightParen); - case '[': - return make_token(Token::Kind::LeftBracket); - case ']': - return make_token(Token::Kind::RightBracket); - case '{': - return make_token(Token::Kind::LeftBrace); - case '}': - return make_token(Token::Kind::RightBrace); - case '>': - if (m_pos < m_in.size() && m_in[m_pos] == '=') { - m_pos += 1; - return make_token(Token::Kind::GreaterEqual); - } - return make_token(Token::Kind::GreaterThan); - case '<': - if (m_pos < m_in.size() && m_in[m_pos] == '=') { - m_pos += 1; - return make_token(Token::Kind::LessEqual); - } - return make_token(Token::Kind::LessThan); - case '=': - if (m_pos < m_in.size() && m_in[m_pos] == '=') { - m_pos += 1; - return make_token(Token::Kind::Equal); - } - return make_token(Token::Kind::Unknown); - case '!': - if (m_pos < m_in.size() && m_in[m_pos] == '=') { - m_pos += 1; - return make_token(Token::Kind::NotEqual); - } - return make_token(Token::Kind::Unknown); - case '\"': - return scan_string(); - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - case '-': - return scan_number(); - case '_': - return scan_id(); - default: - return make_token(Token::Kind::Unknown); + case '+': + return make_token(Token::Kind::Plus); + case '-': + if (current_minus_state == MinusState::Operator) { + return make_token(Token::Kind::Minus); + } + return scan_number(); + case '*': + return make_token(Token::Kind::Times); + case '/': + return make_token(Token::Kind::Slash); + case '^': + return make_token(Token::Kind::Power); + case '%': + return make_token(Token::Kind::Percent); + case '.': + return make_token(Token::Kind::Dot); + case ',': + return make_token(Token::Kind::Comma); + case ':': + return make_token(Token::Kind::Colon); + case '(': + return make_token(Token::Kind::LeftParen); + case ')': + minus_state = MinusState::Operator; + return make_token(Token::Kind::RightParen); + case '[': + return make_token(Token::Kind::LeftBracket); + case ']': + minus_state = MinusState::Operator; + return make_token(Token::Kind::RightBracket); + case '{': + return make_token(Token::Kind::LeftBrace); + case '}': + minus_state = MinusState::Operator; + return make_token(Token::Kind::RightBrace); + case '>': + if (pos < m_in.size() && m_in[pos] == '=') { + pos += 1; + return make_token(Token::Kind::GreaterEqual); + } + return make_token(Token::Kind::GreaterThan); + case '<': + if (pos < m_in.size() && m_in[pos] == '=') { + pos += 1; + return make_token(Token::Kind::LessEqual); + } + return make_token(Token::Kind::LessThan); + case '=': + if (pos < m_in.size() && m_in[pos] == '=') { + pos += 1; + return make_token(Token::Kind::Equal); + } + return make_token(Token::Kind::Unknown); + case '!': + if (pos < m_in.size() && m_in[pos] == '=') { + pos += 1; + return make_token(Token::Kind::NotEqual); + } + return make_token(Token::Kind::Unknown); + case '\"': + return scan_string(); + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + minus_state = MinusState::Operator; + return scan_number(); + case '_': + minus_state = MinusState::Operator; + return scan_id(); + default: + return make_token(Token::Kind::Unknown); } } Token scan_id() { for (;;) { - if (m_pos >= m_in.size()) { + if (pos >= m_in.size()) { break; } - char ch = m_in[m_pos]; + char ch = m_in[pos]; if (!std::isalnum(ch) && ch != '.' && ch != '/' && ch != '_' && ch != '-') { break; } - m_pos += 1; + pos += 1; } return make_token(Token::Kind::Id); } Token scan_number() { for (;;) { - if (m_pos >= m_in.size()) { + if (pos >= m_in.size()) { break; } - char ch = m_in[m_pos]; + char ch = m_in[pos]; // be very permissive in lexer (we'll catch errors when conversion happens) if (!std::isdigit(ch) && ch != '.' && ch != 'e' && ch != 'E' && ch != '+' && ch != '-') { break; } - m_pos += 1; + pos += 1; } return make_token(Token::Kind::Number); } @@ -2066,11 +2088,13 @@ class Lexer { Token scan_string() { bool escape {false}; for (;;) { - if (m_pos >= m_in.size()) break; - char ch = m_in[m_pos++]; + if (pos >= m_in.size()) { + break; + } + char ch = m_in[pos++]; if (ch == '\\') { escape = true; - } else if (!escape && ch == m_in[m_tok_start]) { + } else if (!escape && ch == m_in[tok_start]) { break; } else { escape = false; @@ -2079,556 +2103,1183 @@ class Lexer { return make_token(Token::Kind::String); } - Token make_token(Token::Kind kind) const { - return Token(kind, string_view::slice(m_in, m_tok_start, m_pos)); + Token make_token(Token::Kind kind) const { return Token(kind, string_view::slice(m_in, tok_start, pos)); } + + void skip_whitespaces_and_newlines() { + if (pos < m_in.size()) { + while (pos < m_in.size() && (m_in[pos] == ' ' || m_in[pos] == '\t' || m_in[pos] == '\n' || m_in[pos] == '\r')) { + pos += 1; + } + } } - void skip_newline() { - if (m_pos < m_in.size()) { - char ch = m_in[m_pos]; - if (ch == '\n') - m_pos += 1; - else if (ch == '\r') { - m_pos += 1; - if (m_pos < m_in.size() && m_in[m_pos] == '\n') - m_pos += 1; + void skip_whitespaces_and_first_newline() { + if (pos < m_in.size()) { + while (pos < m_in.size() && (m_in[pos] == ' ' || m_in[pos] == '\t')) { + pos += 1; + } + } + + if (pos < m_in.size()) { + char ch = m_in[pos]; + if (ch == '\n') { + pos += 1; + } else if (ch == '\r') { + pos += 1; + if (pos < m_in.size() && m_in[pos] == '\n') { + pos += 1; + } } } } - static nonstd::string_view clear_final_line_if_whitespace(nonstd::string_view text) - { + static nonstd::string_view clear_final_line_if_whitespace(nonstd::string_view text) { nonstd::string_view result = text; while (!result.empty()) { char ch = result.back(); - if (ch == ' ' || ch == '\t') - result.remove_suffix(1); - else if (ch == '\n' || ch == '\r') + if (ch == ' ' || ch == '\t') { + result.remove_suffix(1); + } else if (ch == '\n' || ch == '\r') { break; - else + } else { return text; + } } return result; } -}; -} +public: + explicit Lexer(const LexerConfig &config) : config(config), state(State::Text), minus_state(MinusState::Number) {} -#endif // PANTOR_INJA_LEXER_HPP + SourceLocation current_position() const { + return get_source_location(m_in, tok_start); + } -// #include "template.hpp" -#ifndef PANTOR_INJA_TEMPLATE_HPP -#define PANTOR_INJA_TEMPLATE_HPP + void start(nonstd::string_view input) { + m_in = input; + tok_start = 0; + pos = 0; + state = State::Text; + minus_state = MinusState::Number; -#include -#include -#include + // Consume byte order mark (BOM) for UTF-8 + if (inja::string_view::starts_with(m_in, "\xEF\xBB\xBF")) { + m_in = m_in.substr(3); + } + } -// #include "bytecode.hpp" + Token scan() { + tok_start = pos; + again: + if (tok_start >= m_in.size()) { + return make_token(Token::Kind::Eof); + } + switch (state) { + default: + case State::Text: { + // fast-scan to first open character + size_t open_start = m_in.substr(pos).find_first_of(config.open_chars); + if (open_start == nonstd::string_view::npos) { + // didn't find open, return remaining text as text token + pos = m_in.size(); + return make_token(Token::Kind::Text); + } + pos += open_start; + + // try to match one of the opening sequences, and get the close + nonstd::string_view open_str = m_in.substr(pos); + bool must_lstrip = false; + if (inja::string_view::starts_with(open_str, config.expression_open)) { + if (inja::string_view::starts_with(open_str, config.expression_open_force_lstrip)) { + state = State::ExpressionStartForceLstrip; + must_lstrip = true; + } else { + state = State::ExpressionStart; + } + } else if (inja::string_view::starts_with(open_str, config.statement_open)) { + if (inja::string_view::starts_with(open_str, config.statement_open_no_lstrip)) { + state = State::StatementStartNoLstrip; + } else if (inja::string_view::starts_with(open_str, config.statement_open_force_lstrip )) { + state = State::StatementStartForceLstrip; + must_lstrip = true; + } else { + state = State::StatementStart; + must_lstrip = config.lstrip_blocks; + } + } else if (inja::string_view::starts_with(open_str, config.comment_open)) { + state = State::CommentStart; + must_lstrip = config.lstrip_blocks; + } else if ((pos == 0 || m_in[pos - 1] == '\n') && inja::string_view::starts_with(open_str, config.line_statement)) { + state = State::LineStart; + } else { + pos += 1; // wasn't actually an opening sequence + goto again; + } -namespace inja { + nonstd::string_view text = string_view::slice(m_in, tok_start, pos); + if (must_lstrip) { + text = clear_final_line_if_whitespace(text); + } -/*! - * \brief The main inja Template. - */ -struct Template { - std::vector bytecodes; - std::string content; -}; + if (text.empty()) { + goto again; // don't generate empty token + } + return Token(Token::Kind::Text, text); + } + case State::ExpressionStart: { + state = State::ExpressionBody; + pos += config.expression_open.size(); + return make_token(Token::Kind::ExpressionOpen); + } + case State::ExpressionStartForceLstrip: { + state = State::ExpressionBody; + pos += config.expression_open_force_lstrip.size(); + return make_token(Token::Kind::ExpressionOpen); + } + case State::LineStart: { + state = State::LineBody; + pos += config.line_statement.size(); + return make_token(Token::Kind::LineStatementOpen); + } + case State::StatementStart: { + state = State::StatementBody; + pos += config.statement_open.size(); + return make_token(Token::Kind::StatementOpen); + } + case State::StatementStartNoLstrip: { + state = State::StatementBody; + pos += config.statement_open_no_lstrip.size(); + return make_token(Token::Kind::StatementOpen); + } + case State::StatementStartForceLstrip: { + state = State::StatementBody; + pos += config.statement_open_force_lstrip.size(); + return make_token(Token::Kind::StatementOpen); + } + case State::CommentStart: { + state = State::CommentBody; + pos += config.comment_open.size(); + return make_token(Token::Kind::CommentOpen); + } + case State::ExpressionBody: + return scan_body(config.expression_close, Token::Kind::ExpressionClose, config.expression_close_force_rstrip); + case State::LineBody: + return scan_body("\n", Token::Kind::LineStatementClose); + case State::StatementBody: + return scan_body(config.statement_close, Token::Kind::StatementClose, config.statement_close_force_rstrip, config.trim_blocks); + case State::CommentBody: { + // fast-scan to comment close + size_t end = m_in.substr(pos).find(config.comment_close); + if (end == nonstd::string_view::npos) { + pos = m_in.size(); + return make_token(Token::Kind::Eof); + } + // return the entire comment in the close token + state = State::Text; + pos += end + config.comment_close.size(); + Token tok = make_token(Token::Kind::CommentClose); + if (config.trim_blocks) { + skip_whitespaces_and_first_newline(); + } + return tok; + } + } + } -using TemplateStorage = std::map; + const LexerConfig &get_config() const { + return config; + } +}; -} +} // namespace inja -#endif // PANTOR_INJA_TEMPLATE_HPP +#endif // INCLUDE_INJA_LEXER_HPP_ -// #include "token.hpp" +// #include "node.hpp" +// Copyright (c) 2020 Pantor. All rights reserved. -// #include "utils.hpp" +#ifndef INCLUDE_INJA_NODE_HPP_ +#define INCLUDE_INJA_NODE_HPP_ +#include +#include #include +// #include "function_storage.hpp" + +// #include "string_view.hpp" + + namespace inja { -class ParserStatic { - ParserStatic() { - functions.add_builtin("at", 2, Bytecode::Op::At); - functions.add_builtin("default", 2, Bytecode::Op::Default); - functions.add_builtin("divisibleBy", 2, Bytecode::Op::DivisibleBy); - functions.add_builtin("even", 1, Bytecode::Op::Even); - functions.add_builtin("first", 1, Bytecode::Op::First); - functions.add_builtin("float", 1, Bytecode::Op::Float); - functions.add_builtin("int", 1, Bytecode::Op::Int); - functions.add_builtin("last", 1, Bytecode::Op::Last); - functions.add_builtin("length", 1, Bytecode::Op::Length); - functions.add_builtin("lower", 1, Bytecode::Op::Lower); - functions.add_builtin("max", 1, Bytecode::Op::Max); - functions.add_builtin("min", 1, Bytecode::Op::Min); - functions.add_builtin("odd", 1, Bytecode::Op::Odd); - functions.add_builtin("range", 1, Bytecode::Op::Range); - functions.add_builtin("round", 2, Bytecode::Op::Round); - functions.add_builtin("sort", 1, Bytecode::Op::Sort); - functions.add_builtin("upper", 1, Bytecode::Op::Upper); - functions.add_builtin("exists", 1, Bytecode::Op::Exists); - functions.add_builtin("existsIn", 2, Bytecode::Op::ExistsInObject); - functions.add_builtin("isBoolean", 1, Bytecode::Op::IsBoolean); - functions.add_builtin("isNumber", 1, Bytecode::Op::IsNumber); - functions.add_builtin("isInteger", 1, Bytecode::Op::IsInteger); - functions.add_builtin("isFloat", 1, Bytecode::Op::IsFloat); - functions.add_builtin("isObject", 1, Bytecode::Op::IsObject); - functions.add_builtin("isArray", 1, Bytecode::Op::IsArray); - functions.add_builtin("isString", 1, Bytecode::Op::IsString); - } - - public: - ParserStatic(const ParserStatic&) = delete; - ParserStatic& operator=(const ParserStatic&) = delete; - - static const ParserStatic& get_instance() { - static ParserStatic inst; - return inst; - } - - FunctionStorage functions; +class NodeVisitor; +class BlockNode; +class TextNode; +class ExpressionNode; +class LiteralNode; +class JsonNode; +class FunctionNode; +class ExpressionListNode; +class StatementNode; +class ForStatementNode; +class ForArrayStatementNode; +class ForObjectStatementNode; +class IfStatementNode; +class IncludeStatementNode; +class SetStatementNode; + + +class NodeVisitor { +public: + virtual void visit(const BlockNode& node) = 0; + virtual void visit(const TextNode& node) = 0; + virtual void visit(const ExpressionNode& node) = 0; + virtual void visit(const LiteralNode& node) = 0; + virtual void visit(const JsonNode& node) = 0; + virtual void visit(const FunctionNode& node) = 0; + virtual void visit(const ExpressionListNode& node) = 0; + virtual void visit(const StatementNode& node) = 0; + virtual void visit(const ForStatementNode& node) = 0; + virtual void visit(const ForArrayStatementNode& node) = 0; + virtual void visit(const ForObjectStatementNode& node) = 0; + virtual void visit(const IfStatementNode& node) = 0; + virtual void visit(const IncludeStatementNode& node) = 0; + virtual void visit(const SetStatementNode& node) = 0; }; /*! - * \brief Class for parsing an inja Template. + * \brief Base node class for the abstract syntax tree (AST). */ -class Parser { - public: - explicit Parser(const ParserConfig& parser_config, const LexerConfig& lexer_config, TemplateStorage& included_templates): m_config(parser_config), m_lexer(lexer_config), m_included_templates(included_templates), m_static(ParserStatic::get_instance()) { } - - bool parse_expression(Template& tmpl) { - if (!parse_expression_and(tmpl)) return false; - if (m_tok.kind != Token::Kind::Id || m_tok.text != static_cast("or")) return true; - get_next_token(); - if (!parse_expression_and(tmpl)) return false; - append_function(tmpl, Bytecode::Op::Or, 2); - return true; - } +class AstNode { +public: + virtual void accept(NodeVisitor& v) const = 0; - bool parse_expression_and(Template& tmpl) { - if (!parse_expression_not(tmpl)) return false; - if (m_tok.kind != Token::Kind::Id || m_tok.text != static_cast("and")) return true; - get_next_token(); - if (!parse_expression_not(tmpl)) return false; - append_function(tmpl, Bytecode::Op::And, 2); - return true; - } + size_t pos; - bool parse_expression_not(Template& tmpl) { - if (m_tok.kind == Token::Kind::Id && m_tok.text == static_cast("not")) { - get_next_token(); - if (!parse_expression_not(tmpl)) return false; - append_function(tmpl, Bytecode::Op::Not, 1); - return true; - } else { - return parse_expression_comparison(tmpl); - } - } + AstNode(size_t pos) : pos(pos) { } + virtual ~AstNode() { }; +}; - bool parse_expression_comparison(Template& tmpl) { - if (!parse_expression_datum(tmpl)) return false; - Bytecode::Op op; - switch (m_tok.kind) { - case Token::Kind::Id: - if (m_tok.text == static_cast("in")) - op = Bytecode::Op::In; - else - return true; - break; - case Token::Kind::Equal: - op = Bytecode::Op::Equal; - break; - case Token::Kind::GreaterThan: - op = Bytecode::Op::Greater; - break; - case Token::Kind::LessThan: - op = Bytecode::Op::Less; - break; - case Token::Kind::LessEqual: - op = Bytecode::Op::LessEqual; - break; - case Token::Kind::GreaterEqual: - op = Bytecode::Op::GreaterEqual; - break; - case Token::Kind::NotEqual: - op = Bytecode::Op::Different; - break; - default: - return true; - } - get_next_token(); - if (!parse_expression_datum(tmpl)) return false; - append_function(tmpl, op, 2); - return true; + +class BlockNode : public AstNode { +public: + std::vector> nodes; + + explicit BlockNode() : AstNode(0) {} + + void accept(NodeVisitor& v) const { + v.visit(*this); } +}; - bool parse_expression_datum(Template& tmpl) { - nonstd::string_view json_first; - size_t bracket_level = 0; - size_t brace_level = 0; +class TextNode : public AstNode { +public: + const size_t length; - for (;;) { - switch (m_tok.kind) { - case Token::Kind::LeftParen: { - get_next_token(); - if (!parse_expression(tmpl)) return false; - if (m_tok.kind != Token::Kind::RightParen) { - inja_throw("parser_error", "unmatched '('"); + explicit TextNode(size_t pos, size_t length): AstNode(pos), length(length) { } + + void accept(NodeVisitor& v) const { + v.visit(*this); + } +}; + +class ExpressionNode : public AstNode { +public: + explicit ExpressionNode(size_t pos) : AstNode(pos) {} + + void accept(NodeVisitor& v) const { + v.visit(*this); + } +}; + +class LiteralNode : public ExpressionNode { +public: + const nlohmann::json value; + + explicit LiteralNode(const nlohmann::json& value, size_t pos) : ExpressionNode(pos), value(value) { } + + void accept(NodeVisitor& v) const { + v.visit(*this); + } +}; + +class JsonNode : public ExpressionNode { +public: + const std::string name; + const json::json_pointer ptr; + + static std::string convert_dot_to_json_ptr(nonstd::string_view ptr_name) { + std::string result; + do { + nonstd::string_view part; + std::tie(part, ptr_name) = string_view::split(ptr_name, '.'); + result.push_back('/'); + result.append(part.begin(), part.end()); + } while (!ptr_name.empty()); + return result; + } + + explicit JsonNode(nonstd::string_view ptr_name, size_t pos) : ExpressionNode(pos), name(ptr_name), ptr(json::json_pointer(convert_dot_to_json_ptr(ptr_name))) { } + + void accept(NodeVisitor& v) const { + v.visit(*this); + } +}; + +class FunctionNode : public ExpressionNode { + using Op = FunctionStorage::Operation; + +public: + enum class Associativity { + Left, + Right, + }; + + unsigned int precedence; + Associativity associativity; + + Op operation; + + std::string name; + int number_args; // Should also be negative -> -1 for unknown number + CallbackFunction callback; + + explicit FunctionNode(nonstd::string_view name, size_t pos) : ExpressionNode(pos), precedence(8), associativity(Associativity::Left), operation(Op::Callback), name(name), number_args(1) { } + explicit FunctionNode(Op operation, size_t pos) : ExpressionNode(pos), operation(operation), number_args(1) { + switch (operation) { + case Op::Not: { + precedence = 4; + associativity = Associativity::Left; + } break; + case Op::And: { + precedence = 1; + associativity = Associativity::Left; + } break; + case Op::Or: { + precedence = 1; + associativity = Associativity::Left; + } break; + case Op::In: { + precedence = 2; + associativity = Associativity::Left; + } break; + case Op::Equal: { + precedence = 2; + associativity = Associativity::Left; + } break; + case Op::NotEqual: { + precedence = 2; + associativity = Associativity::Left; + } break; + case Op::Greater: { + precedence = 2; + associativity = Associativity::Left; + } break; + case Op::GreaterEqual: { + precedence = 2; + associativity = Associativity::Left; + } break; + case Op::Less: { + precedence = 2; + associativity = Associativity::Left; + } break; + case Op::LessEqual: { + precedence = 2; + associativity = Associativity::Left; + } break; + case Op::Add: { + precedence = 3; + associativity = Associativity::Left; + } break; + case Op::Subtract: { + precedence = 3; + associativity = Associativity::Left; + } break; + case Op::Multiplication: { + precedence = 4; + associativity = Associativity::Left; + } break; + case Op::Division: { + precedence = 4; + associativity = Associativity::Left; + } break; + case Op::Power: { + precedence = 5; + associativity = Associativity::Right; + } break; + case Op::Modulo: { + precedence = 4; + associativity = Associativity::Left; + } break; + case Op::AtId: { + precedence = 8; + associativity = Associativity::Left; + } break; + default: { + precedence = 1; + associativity = Associativity::Left; + } + } + } + + void accept(NodeVisitor& v) const { + v.visit(*this); + } +}; + +class ExpressionListNode : public AstNode { +public: + std::vector> rpn_output; + + explicit ExpressionListNode() : AstNode(0) { } + explicit ExpressionListNode(size_t pos) : AstNode(pos) { } + + void accept(NodeVisitor& v) const { + v.visit(*this); + } +}; + +class StatementNode : public AstNode { +public: + StatementNode(size_t pos) : AstNode(pos) { } + + virtual void accept(NodeVisitor& v) const = 0; +}; + +class ForStatementNode : public StatementNode { +public: + ExpressionListNode condition; + BlockNode body; + BlockNode *const parent; + + ForStatementNode(BlockNode *const parent, size_t pos) : StatementNode(pos), parent(parent) { } + + virtual void accept(NodeVisitor& v) const = 0; +}; + +class ForArrayStatementNode : public ForStatementNode { +public: + const std::string value; + + explicit ForArrayStatementNode(const std::string& value, BlockNode *const parent, size_t pos) : ForStatementNode(parent, pos), value(value) { } + + void accept(NodeVisitor& v) const { + v.visit(*this); + } +}; + +class ForObjectStatementNode : public ForStatementNode { +public: + const std::string key; + const std::string value; + + explicit ForObjectStatementNode(const std::string& key, const std::string& value, BlockNode *const parent, size_t pos) : ForStatementNode(parent, pos), key(key), value(value) { } + + void accept(NodeVisitor& v) const { + v.visit(*this); + } +}; + +class IfStatementNode : public StatementNode { +public: + ExpressionListNode condition; + BlockNode true_statement; + BlockNode false_statement; + BlockNode *const parent; + + const bool is_nested; + bool has_false_statement {false}; + + explicit IfStatementNode(BlockNode *const parent, size_t pos) : StatementNode(pos), parent(parent), is_nested(false) { } + explicit IfStatementNode(bool is_nested, BlockNode *const parent, size_t pos) : StatementNode(pos), parent(parent), is_nested(is_nested) { } + + void accept(NodeVisitor& v) const { + v.visit(*this); + } +}; + +class IncludeStatementNode : public StatementNode { +public: + const std::string file; + + explicit IncludeStatementNode(const std::string& file, size_t pos) : StatementNode(pos), file(file) { } + + void accept(NodeVisitor& v) const { + v.visit(*this); + }; +}; + +class SetStatementNode : public StatementNode { +public: + const std::string key; + ExpressionListNode expression; + + explicit SetStatementNode(const std::string& key, size_t pos) : StatementNode(pos), key(key) { } + + void accept(NodeVisitor& v) const { + v.visit(*this); + }; +}; + +} // namespace inja + +#endif // INCLUDE_INJA_NODE_HPP_ + +// #include "template.hpp" +// Copyright (c) 2019 Pantor. All rights reserved. + +#ifndef INCLUDE_INJA_TEMPLATE_HPP_ +#define INCLUDE_INJA_TEMPLATE_HPP_ + +#include +#include +#include +#include + +// #include "node.hpp" + +// #include "statistics.hpp" +// Copyright (c) 2019 Pantor. All rights reserved. + +#ifndef INCLUDE_INJA_STATISTICS_HPP_ +#define INCLUDE_INJA_STATISTICS_HPP_ + +// #include "node.hpp" + + + +namespace inja { + +/*! + * \brief A class for counting statistics on a Template. + */ +class StatisticsVisitor : public NodeVisitor { + void visit(const BlockNode& node) { + for (auto& n : node.nodes) { + n->accept(*this); + } + } + + void visit(const TextNode&) { } + void visit(const ExpressionNode&) { } + void visit(const LiteralNode&) { } + + void visit(const JsonNode&) { + variable_counter += 1; + } + + void visit(const FunctionNode&) { } + + void visit(const ExpressionListNode& node) { + for (auto& n : node.rpn_output) { + n->accept(*this); + } + } + + void visit(const StatementNode&) { } + void visit(const ForStatementNode&) { } + + void visit(const ForArrayStatementNode& node) { + node.condition.accept(*this); + node.body.accept(*this); + } + + void visit(const ForObjectStatementNode& node) { + node.condition.accept(*this); + node.body.accept(*this); + } + + void visit(const IfStatementNode& node) { + node.condition.accept(*this); + node.true_statement.accept(*this); + node.false_statement.accept(*this); + } + + void visit(const IncludeStatementNode&) { } + + void visit(const SetStatementNode&) { } + +public: + unsigned int variable_counter; + + explicit StatisticsVisitor() : variable_counter(0) { } +}; + +} // namespace inja + +#endif // INCLUDE_INJA_STATISTICS_HPP_ + + + +namespace inja { + +/*! + * \brief The main inja Template. + */ +struct Template { + BlockNode root; + std::string content; + + explicit Template() { } + explicit Template(const std::string& content): content(content) { } + + /// Return number of variables (total number, not distinct ones) in the template + int count_variables() { + auto statistic_visitor = StatisticsVisitor(); + root.accept(statistic_visitor); + return statistic_visitor.variable_counter; + } +}; + +using TemplateStorage = std::map; + +} // namespace inja + +#endif // INCLUDE_INJA_TEMPLATE_HPP_ + +// #include "token.hpp" + +// #include "utils.hpp" + + +#include + +namespace inja { + +/*! + * \brief Class for parsing an inja Template. + */ +class Parser { + const ParserConfig &config; + + Lexer lexer; + TemplateStorage &template_storage; + const FunctionStorage &function_storage; + + Token tok, peek_tok; + bool have_peek_tok {false}; + + size_t current_paren_level {0}; + size_t current_bracket_level {0}; + size_t current_brace_level {0}; + + nonstd::string_view json_literal_start; + + BlockNode *current_block {nullptr}; + ExpressionListNode *current_expression_list {nullptr}; + std::stack> function_stack; + + std::stack> operator_stack; + std::stack if_statement_stack; + std::stack for_statement_stack; + + void throw_parser_error(const std::string &message) { + throw ParserError(message, lexer.current_position()); + } + + void get_next_token() { + if (have_peek_tok) { + tok = peek_tok; + have_peek_tok = false; + } else { + tok = lexer.scan(); + } + } + + void get_peek_token() { + if (!have_peek_tok) { + peek_tok = lexer.scan(); + have_peek_tok = true; + } + } + + void add_json_literal(const char* content_ptr) { + nonstd::string_view json_text(json_literal_start.data(), tok.text.data() - json_literal_start.data() + tok.text.size()); + current_expression_list->rpn_output.emplace_back(std::make_shared(json::parse(json_text), json_text.data() - content_ptr)); + } + + bool parse_expression(Template &tmpl, Token::Kind closing) { + while (tok.kind != closing && tok.kind != Token::Kind::Eof) { + // Literals + switch (tok.kind) { + case Token::Kind::String: { + if (current_brace_level == 0 && current_bracket_level == 0) { + json_literal_start = tok.text; + add_json_literal(tmpl.content.c_str()); + } + + } break; + case Token::Kind::Number: { + if (current_brace_level == 0 && current_bracket_level == 0) { + json_literal_start = tok.text; + add_json_literal(tmpl.content.c_str()); + } + + } break; + case Token::Kind::LeftBracket: { + if (current_brace_level == 0 && current_bracket_level == 0) { + json_literal_start = tok.text; + } + current_bracket_level += 1; + + } break; + case Token::Kind::LeftBrace: { + if (current_brace_level == 0 && current_bracket_level == 0) { + json_literal_start = tok.text; + } + current_brace_level += 1; + + } break; + case Token::Kind::RightBracket: { + if (current_bracket_level == 0) { + throw_parser_error("unexpected ']'"); + } + + current_bracket_level -= 1; + if (current_brace_level == 0 && current_bracket_level == 0) { + add_json_literal(tmpl.content.c_str()); + } + + } break; + case Token::Kind::RightBrace: { + if (current_brace_level == 0) { + throw_parser_error("unexpected '}'"); + } + + current_brace_level -= 1; + if (current_brace_level == 0 && current_bracket_level == 0) { + add_json_literal(tmpl.content.c_str()); + } + + } break; + case Token::Kind::Id: { + get_peek_token(); + + // Json Literal + if (tok.text == static_cast("true") || tok.text == static_cast("false") || tok.text == static_cast("null")) { + if (current_brace_level == 0 && current_bracket_level == 0) { + json_literal_start = tok.text; + add_json_literal(tmpl.content.c_str()); } - get_next_token(); - return true; + + // Operator + } else if (tok.text == "and" || tok.text == "or" || tok.text == "in" || tok.text == "not") { + goto parse_operator; + + // Functions + } else if (peek_tok.kind == Token::Kind::LeftParen) { + operator_stack.emplace(std::make_shared(static_cast(tok.text), tok.text.data() - tmpl.content.c_str())); + function_stack.emplace(operator_stack.top().get(), current_paren_level); + + // Variables + } else { + current_expression_list->rpn_output.emplace_back(std::make_shared(static_cast(tok.text), tok.text.data() - tmpl.content.c_str())); } - case Token::Kind::Id: - get_peek_token(); - if (m_peek_tok.kind == Token::Kind::LeftParen) { - // function call, parse arguments - Token func_token = m_tok; - get_next_token(); // id - get_next_token(); // leftParen - unsigned int num_args = 0; - if (m_tok.kind == Token::Kind::RightParen) { - // no args - get_next_token(); - } else { - for (;;) { - if (!parse_expression(tmpl)) { - inja_throw("parser_error", "expected expression, got '" + m_tok.describe() + "'"); - } - num_args += 1; - if (m_tok.kind == Token::Kind::RightParen) { - get_next_token(); - break; - } - if (m_tok.kind != Token::Kind::Comma) { - inja_throw("parser_error", "expected ')' or ',', got '" + m_tok.describe() + "'"); - } - get_next_token(); - } - } - - auto op = m_static.functions.find_builtin(func_token.text, num_args); - - if (op != Bytecode::Op::Nop) { - // swap arguments for default(); see comment in RenderTo() - if (op == Bytecode::Op::Default) - std::swap(tmpl.bytecodes.back(), *(tmpl.bytecodes.rbegin() + 1)); - append_function(tmpl, op, num_args); - return true; - } else { - append_callback(tmpl, func_token.text, num_args); - return true; - } - } else if (m_tok.text == static_cast("true") || - m_tok.text == static_cast("false") || - m_tok.text == static_cast("null")) { - // true, false, null are json literals - if (brace_level == 0 && bracket_level == 0) { - json_first = m_tok.text; - goto returnJson; - } - break; + + // Operators + } break; + case Token::Kind::Equal: + case Token::Kind::NotEqual: + case Token::Kind::GreaterThan: + case Token::Kind::GreaterEqual: + case Token::Kind::LessThan: + case Token::Kind::LessEqual: + case Token::Kind::Plus: + case Token::Kind::Minus: + case Token::Kind::Times: + case Token::Kind::Slash: + case Token::Kind::Power: + case Token::Kind::Percent: + case Token::Kind::Dot: { + + parse_operator: + FunctionStorage::Operation operation; + switch (tok.kind) { + case Token::Kind::Id: { + if (tok.text == "and") { + operation = FunctionStorage::Operation::And; + } else if (tok.text == "or") { + operation = FunctionStorage::Operation::Or; + } else if (tok.text == "in") { + operation = FunctionStorage::Operation::In; + } else if (tok.text == "not") { + operation = FunctionStorage::Operation::Not; } else { - // normal literal (json read) - tmpl.bytecodes.emplace_back( - Bytecode::Op::Push, m_tok.text, - m_config.notation == ElementNotation::Pointer ? Bytecode::Flag::ValueLookupPointer : Bytecode::Flag::ValueLookupDot); - get_next_token(); - return true; - } - // json passthrough - case Token::Kind::Number: - case Token::Kind::String: - if (brace_level == 0 && bracket_level == 0) { - json_first = m_tok.text; - goto returnJson; + throw_parser_error("unknown operator in parser."); } - break; - case Token::Kind::Comma: - case Token::Kind::Colon: - if (brace_level == 0 && bracket_level == 0) { - inja_throw("parser_error", "unexpected token '" + m_tok.describe() + "'"); - } - break; - case Token::Kind::LeftBracket: - if (brace_level == 0 && bracket_level == 0) { - json_first = m_tok.text; - } - bracket_level += 1; - break; - case Token::Kind::LeftBrace: - if (brace_level == 0 && bracket_level == 0) { - json_first = m_tok.text; + } break; + case Token::Kind::Equal: { + operation = FunctionStorage::Operation::Equal; + } break; + case Token::Kind::NotEqual: { + operation = FunctionStorage::Operation::NotEqual; + } break; + case Token::Kind::GreaterThan: { + operation = FunctionStorage::Operation::Greater; + } break; + case Token::Kind::GreaterEqual: { + operation = FunctionStorage::Operation::GreaterEqual; + } break; + case Token::Kind::LessThan: { + operation = FunctionStorage::Operation::Less; + } break; + case Token::Kind::LessEqual: { + operation = FunctionStorage::Operation::LessEqual; + } break; + case Token::Kind::Plus: { + operation = FunctionStorage::Operation::Add; + } break; + case Token::Kind::Minus: { + operation = FunctionStorage::Operation::Subtract; + } break; + case Token::Kind::Times: { + operation = FunctionStorage::Operation::Multiplication; + } break; + case Token::Kind::Slash: { + operation = FunctionStorage::Operation::Division; + } break; + case Token::Kind::Power: { + operation = FunctionStorage::Operation::Power; + } break; + case Token::Kind::Percent: { + operation = FunctionStorage::Operation::Modulo; + } break; + case Token::Kind::Dot: { + operation = FunctionStorage::Operation::AtId; + } break; + default: { + throw_parser_error("unknown operator in parser."); + } + } + auto function_node = std::make_shared(operation, tok.text.data() - tmpl.content.c_str()); + + while (!operator_stack.empty() && ((operator_stack.top()->precedence > function_node->precedence) || (operator_stack.top()->precedence == function_node->precedence && function_node->associativity == FunctionNode::Associativity::Left)) && (operator_stack.top()->operation != FunctionStorage::Operation::ParenLeft)) { + current_expression_list->rpn_output.emplace_back(operator_stack.top()); + operator_stack.pop(); + } + + operator_stack.emplace(function_node); + + } break; + case Token::Kind::Comma: { + if (current_brace_level == 0 && current_bracket_level == 0) { + if (function_stack.empty()) { + throw_parser_error("unexpected ','"); } - brace_level += 1; - break; - case Token::Kind::RightBracket: - if (bracket_level == 0) { - inja_throw("parser_error", "unexpected ']'"); + + function_stack.top().first->number_args += 1; + } + + } break; + case Token::Kind::Colon: { + if (current_brace_level == 0 && current_bracket_level == 0) { + throw_parser_error("unexpected ':'"); + } + + } break; + case Token::Kind::LeftParen: { + current_paren_level += 1; + operator_stack.emplace(std::make_shared(FunctionStorage::Operation::ParenLeft, tok.text.data() - tmpl.content.c_str())); + + get_peek_token(); + if (peek_tok.kind == Token::Kind::RightParen) { + if (!function_stack.empty() && function_stack.top().second == current_paren_level - 1) { + function_stack.top().first->number_args = 0; } - --bracket_level; - if (brace_level == 0 && bracket_level == 0) goto returnJson; - break; - case Token::Kind::RightBrace: - if (brace_level == 0) { - inja_throw("parser_error", "unexpected '}'"); + } + + } break; + case Token::Kind::RightParen: { + current_paren_level -= 1; + while (!operator_stack.empty() && operator_stack.top()->operation != FunctionStorage::Operation::ParenLeft) { + current_expression_list->rpn_output.emplace_back(operator_stack.top()); + operator_stack.pop(); + } + + if (!operator_stack.empty() && operator_stack.top()->operation == FunctionStorage::Operation::ParenLeft) { + operator_stack.pop(); + } + + if (!function_stack.empty() && function_stack.top().second == current_paren_level) { + auto func = function_stack.top().first; + auto function_data = function_storage.find_function(func->name, func->number_args); + if (function_data.operation == FunctionStorage::Operation::None) { + throw_parser_error("unknown function " + func->name); } - --brace_level; - if (brace_level == 0 && bracket_level == 0) goto returnJson; - break; - default: - if (brace_level != 0) { - inja_throw("parser_error", "unmatched '{'"); + func->operation = function_data.operation; + if (function_data.operation == FunctionStorage::Operation::Callback) { + func->callback = function_data.callback; } - if (bracket_level != 0) { - inja_throw("parser_error", "unmatched '['"); + + if (operator_stack.empty()) { + throw_parser_error("internal error at function " + func->name); } - return false; + + current_expression_list->rpn_output.emplace_back(operator_stack.top()); + operator_stack.pop(); + function_stack.pop(); + } + } + default: + break; } get_next_token(); } - returnJson: - // bridge across all intermediate tokens - nonstd::string_view json_text(json_first.data(), m_tok.text.data() - json_first.data() + m_tok.text.size()); - tmpl.bytecodes.emplace_back(Bytecode::Op::Push, json::parse(json_text), Bytecode::Flag::ValueImmediate); - get_next_token(); + while (!operator_stack.empty()) { + current_expression_list->rpn_output.emplace_back(operator_stack.top()); + operator_stack.pop(); + } + return true; } - bool parse_statement(Template& tmpl, nonstd::string_view path) { - if (m_tok.kind != Token::Kind::Id) return false; + bool parse_statement(Template &tmpl, Token::Kind closing, nonstd::string_view path) { + if (tok.kind != Token::Kind::Id) { + return false; + } - if (m_tok.text == static_cast("if")) { + if (tok.text == static_cast("if")) { get_next_token(); - // evaluate expression - if (!parse_expression(tmpl)) return false; + auto if_statement_node = std::make_shared(current_block, tok.text.data() - tmpl.content.c_str()); + current_block->nodes.emplace_back(if_statement_node); + if_statement_stack.emplace(if_statement_node.get()); + current_block = &if_statement_node->true_statement; + current_expression_list = &if_statement_node->condition; - // start a new if block on if stack - m_if_stack.emplace_back(tmpl.bytecodes.size()); + if (!parse_expression(tmpl, closing)) { + return false; + } - // conditional jump; destination will be filled in by else or endif - tmpl.bytecodes.emplace_back(Bytecode::Op::ConditionalJump); - } else if (m_tok.text == static_cast("endif")) { - if (m_if_stack.empty()) { - inja_throw("parser_error", "endif without matching if"); + } else if (tok.text == static_cast("else")) { + if (if_statement_stack.empty()) { + throw_parser_error("else without matching if"); } - auto& if_data = m_if_stack.back(); + auto &if_statement_data = if_statement_stack.top(); get_next_token(); - // previous conditional jump jumps here - if (if_data.prev_cond_jump != std::numeric_limits::max()) { - tmpl.bytecodes[if_data.prev_cond_jump].args = tmpl.bytecodes.size(); - } + if_statement_data->has_false_statement = true; + current_block = &if_statement_data->false_statement; - // update all previous unconditional jumps to here - for (unsigned int i: if_data.uncond_jumps) { - tmpl.bytecodes[i].args = tmpl.bytecodes.size(); - } + // Chained else if + if (tok.kind == Token::Kind::Id && tok.text == static_cast("if")) { + get_next_token(); - // pop if stack - m_if_stack.pop_back(); - } else if (m_tok.text == static_cast("else")) { - if (m_if_stack.empty()) - inja_throw("parser_error", "else without matching if"); - auto& if_data = m_if_stack.back(); - get_next_token(); + auto if_statement_node = std::make_shared(true, current_block, tok.text.data() - tmpl.content.c_str()); + current_block->nodes.emplace_back(if_statement_node); + if_statement_stack.emplace(if_statement_node.get()); + current_block = &if_statement_node->true_statement; + current_expression_list = &if_statement_node->condition; - // end previous block with unconditional jump to endif; destination will be - // filled in by endif - if_data.uncond_jumps.push_back(tmpl.bytecodes.size()); - tmpl.bytecodes.emplace_back(Bytecode::Op::Jump); + if (!parse_expression(tmpl, closing)) { + return false; + } + } - // previous conditional jump jumps here - tmpl.bytecodes[if_data.prev_cond_jump].args = tmpl.bytecodes.size(); - if_data.prev_cond_jump = std::numeric_limits::max(); + } else if (tok.text == static_cast("endif")) { + if (if_statement_stack.empty()) { + throw_parser_error("endif without matching if"); + } - // chained else if - if (m_tok.kind == Token::Kind::Id && m_tok.text == static_cast("if")) { - get_next_token(); + // Nested if statements + while (if_statement_stack.top()->is_nested) { + if_statement_stack.pop(); + } - // evaluate expression - if (!parse_expression(tmpl)) return false; + auto &if_statement_data = if_statement_stack.top(); + get_next_token(); - // update "previous jump" - if_data.prev_cond_jump = tmpl.bytecodes.size(); + current_block = if_statement_data->parent; + if_statement_stack.pop(); - // conditional jump; destination will be filled in by else or endif - tmpl.bytecodes.emplace_back(Bytecode::Op::ConditionalJump); - } - } else if (m_tok.text == static_cast("for")) { + } else if (tok.text == static_cast("for")) { get_next_token(); // options: for a in arr; for a, b in obj - if (m_tok.kind != Token::Kind::Id) - inja_throw("parser_error", "expected id, got '" + m_tok.describe() + "'"); - Token value_token = m_tok; + if (tok.kind != Token::Kind::Id) { + throw_parser_error("expected id, got '" + tok.describe() + "'"); + } + + Token value_token = tok; get_next_token(); - Token key_token; - if (m_tok.kind == Token::Kind::Comma) { + // Object type + std::shared_ptr for_statement_node; + if (tok.kind == Token::Kind::Comma) { get_next_token(); - if (m_tok.kind != Token::Kind::Id) - inja_throw("parser_error", "expected id, got '" + m_tok.describe() + "'"); - key_token = std::move(value_token); - value_token = m_tok; + if (tok.kind != Token::Kind::Id) { + throw_parser_error("expected id, got '" + tok.describe() + "'"); + } + + Token key_token = std::move(value_token); + value_token = tok; get_next_token(); - } - if (m_tok.kind != Token::Kind::Id || m_tok.text != static_cast("in")) - inja_throw("parser_error", - "expected 'in', got '" + m_tok.describe() + "'"); - get_next_token(); + for_statement_node = std::make_shared(static_cast(key_token.text), static_cast(value_token.text), current_block, tok.text.data() - tmpl.content.c_str()); - if (!parse_expression(tmpl)) return false; + // Array type + } else { + for_statement_node = std::make_shared(static_cast(value_token.text), current_block, tok.text.data() - tmpl.content.c_str()); + } - m_loop_stack.push_back(tmpl.bytecodes.size()); + current_block->nodes.emplace_back(for_statement_node); + for_statement_stack.emplace(for_statement_node.get()); + current_block = &for_statement_node->body; + current_expression_list = &for_statement_node->condition; - tmpl.bytecodes.emplace_back(Bytecode::Op::StartLoop); - if (!key_token.text.empty()) { - tmpl.bytecodes.back().value = key_token.text; + if (tok.kind != Token::Kind::Id || tok.text != static_cast("in")) { + throw_parser_error("expected 'in', got '" + tok.describe() + "'"); } - tmpl.bytecodes.back().str = static_cast(value_token.text); - } else if (m_tok.text == static_cast("endfor")) { get_next_token(); - if (m_loop_stack.empty()) { - inja_throw("parser_error", "endfor without matching for"); + + if (!parse_expression(tmpl, closing)) { + return false; } - // update loop with EndLoop index (for empty case) - tmpl.bytecodes[m_loop_stack.back()].args = tmpl.bytecodes.size(); + } else if (tok.text == static_cast("endfor")) { + if (for_statement_stack.empty()) { + throw_parser_error("endfor without matching for"); + } - tmpl.bytecodes.emplace_back(Bytecode::Op::EndLoop); - tmpl.bytecodes.back().args = m_loop_stack.back() + 1; // loop body - m_loop_stack.pop_back(); - } else if (m_tok.text == static_cast("include")) { + auto &for_statement_data = for_statement_stack.top(); get_next_token(); - if (m_tok.kind != Token::Kind::String) { - inja_throw("parser_error", "expected string, got '" + m_tok.describe() + "'"); + current_block = for_statement_data->parent; + for_statement_stack.pop(); + + } else if (tok.text == static_cast("include")) { + get_next_token(); + + if (tok.kind != Token::Kind::String) { + throw_parser_error("expected string, got '" + tok.describe() + "'"); } - // build the relative path - json json_name = json::parse(m_tok.text); + // Build the relative path + json json_name = json::parse(tok.text); std::string pathname = static_cast(path); - pathname += json_name.get_ref(); + pathname += json_name.get_ref(); if (pathname.compare(0, 2, "./") == 0) { pathname.erase(0, 2); } // sys::path::remove_dots(pathname, true, sys::path::Style::posix); - if (m_included_templates.find(pathname) == m_included_templates.end()) { - Template include_template = parse_template(pathname); - m_included_templates.emplace(pathname, include_template); + if (config.search_included_templates_in_files && template_storage.find(pathname) == template_storage.end()) { + auto include_template = Template(load_file(pathname)); + template_storage.emplace(pathname, include_template); + parse_into_template(template_storage[pathname], pathname); } - // generate a reference bytecode - tmpl.bytecodes.emplace_back(Bytecode::Op::Include, json(pathname), Bytecode::Flag::ValueImmediate); + current_block->nodes.emplace_back(std::make_shared(pathname, tok.text.data() - tmpl.content.c_str())); get_next_token(); - } else { - return false; - } - return true; - } - void append_function(Template& tmpl, Bytecode::Op op, unsigned int num_args) { - // we can merge with back-to-back push - if (!tmpl.bytecodes.empty()) { - Bytecode& last = tmpl.bytecodes.back(); - if (last.op == Bytecode::Op::Push) { - last.op = op; - last.args = num_args; - return; + } else if (tok.text == static_cast("set")) { + get_next_token(); + + if (tok.kind != Token::Kind::Id) { + throw_parser_error("expected variable name, got '" + tok.describe() + "'"); } - } - // otherwise just add it to the end - tmpl.bytecodes.emplace_back(op, num_args); - } + std::string key = static_cast(tok.text); + get_next_token(); + + auto set_statement_node = std::make_shared(key, tok.text.data() - tmpl.content.c_str()); + current_block->nodes.emplace_back(set_statement_node); + current_expression_list = &set_statement_node->expression; + + if (tok.text != static_cast("=")) { + throw_parser_error("expected '=', got '" + tok.describe() + "'"); + } + get_next_token(); - void append_callback(Template& tmpl, nonstd::string_view name, unsigned int num_args) { - // we can merge with back-to-back push value (not lookup) - if (!tmpl.bytecodes.empty()) { - Bytecode& last = tmpl.bytecodes.back(); - if (last.op == Bytecode::Op::Push && - (last.flags & Bytecode::Flag::ValueMask) == Bytecode::Flag::ValueImmediate) { - last.op = Bytecode::Op::Callback; - last.args = num_args; - last.str = static_cast(name); - return; + if (!parse_expression(tmpl, closing)) { + return false; } + + } else { + return false; } - - // otherwise just add it to the end - tmpl.bytecodes.emplace_back(Bytecode::Op::Callback, num_args); - tmpl.bytecodes.back().str = static_cast(name); + return true; } - void parse_into(Template& tmpl, nonstd::string_view path) { - m_lexer.start(tmpl.content); + void parse_into(Template &tmpl, nonstd::string_view path) { + lexer.start(tmpl.content); + current_block = &tmpl.root; for (;;) { get_next_token(); - switch (m_tok.kind) { - case Token::Kind::Eof: - if (!m_if_stack.empty()) inja_throw("parser_error", "unmatched if"); - if (!m_loop_stack.empty()) inja_throw("parser_error", "unmatched for"); - return; - case Token::Kind::Text: - tmpl.bytecodes.emplace_back(Bytecode::Op::PrintText, m_tok.text, 0u); - break; - case Token::Kind::StatementOpen: - get_next_token(); - if (!parse_statement(tmpl, path)) { - inja_throw("parser_error", "expected statement, got '" + m_tok.describe() + "'"); - } - if (m_tok.kind != Token::Kind::StatementClose) { - inja_throw("parser_error", "expected statement close, got '" + m_tok.describe() + "'"); - } - break; - case Token::Kind::LineStatementOpen: - get_next_token(); - parse_statement(tmpl, path); - if (m_tok.kind != Token::Kind::LineStatementClose && - m_tok.kind != Token::Kind::Eof) { - inja_throw("parser_error", "expected line statement close, got '" + m_tok.describe() + "'"); - } - break; - case Token::Kind::ExpressionOpen: - get_next_token(); - if (!parse_expression(tmpl)) { - inja_throw("parser_error", "expected expression, got '" + m_tok.describe() + "'"); - } - append_function(tmpl, Bytecode::Op::PrintValue, 1); - if (m_tok.kind != Token::Kind::ExpressionClose) { - inja_throw("parser_error", "expected expression close, got '" + m_tok.describe() + "'"); - } - break; - case Token::Kind::CommentOpen: - get_next_token(); - if (m_tok.kind != Token::Kind::CommentClose) { - inja_throw("parser_error", "expected comment close, got '" + m_tok.describe() + "'"); - } - break; - default: - inja_throw("parser_error", "unexpected token '" + m_tok.describe() + "'"); - break; + switch (tok.kind) { + case Token::Kind::Eof: { + if (!if_statement_stack.empty()) { + throw_parser_error("unmatched if"); + } + if (!for_statement_stack.empty()) { + throw_parser_error("unmatched for"); + } + } return; + case Token::Kind::Text: { + current_block->nodes.emplace_back(std::make_shared(tok.text.data() - tmpl.content.c_str(), tok.text.size())); + } break; + case Token::Kind::StatementOpen: { + get_next_token(); + if (!parse_statement(tmpl, Token::Kind::StatementClose, path)) { + throw_parser_error("expected statement, got '" + tok.describe() + "'"); + } + if (tok.kind != Token::Kind::StatementClose) { + throw_parser_error("expected statement close, got '" + tok.describe() + "'"); + } + } break; + case Token::Kind::LineStatementOpen: { + get_next_token(); + if (!parse_statement(tmpl, Token::Kind::LineStatementClose, path)) { + throw_parser_error("expected statement, got '" + tok.describe() + "'"); + } + if (tok.kind != Token::Kind::LineStatementClose && tok.kind != Token::Kind::Eof) { + throw_parser_error("expected line statement close, got '" + tok.describe() + "'"); + } + } break; + case Token::Kind::ExpressionOpen: { + get_next_token(); + + auto expression_list_node = std::make_shared(tok.text.data() - tmpl.content.c_str()); + current_block->nodes.emplace_back(expression_list_node); + current_expression_list = expression_list_node.get(); + + if (!parse_expression(tmpl, Token::Kind::ExpressionClose)) { + throw_parser_error("expected expression, got '" + tok.describe() + "'"); + } + + if (tok.kind != Token::Kind::ExpressionClose) { + throw_parser_error("expected expression close, got '" + tok.describe() + "'"); + } + } break; + case Token::Kind::CommentOpen: { + get_next_token(); + if (tok.kind != Token::Kind::CommentClose) { + throw_parser_error("expected comment close, got '" + tok.describe() + "'"); + } + } break; + default: { + throw_parser_error("unexpected token '" + tok.describe() + "'"); + } break; } } } + +public: + explicit Parser(const ParserConfig &parser_config, const LexerConfig &lexer_config, + TemplateStorage &template_storage, const FunctionStorage &function_storage) + : config(parser_config), lexer(lexer_config), template_storage(template_storage), function_storage(function_storage) { } + Template parse(nonstd::string_view input, nonstd::string_view path) { - Template result; - result.content = static_cast(input); + auto result = Template(static_cast(input)); parse_into(result, path); return result; } @@ -2637,118 +3288,31 @@ class Parser { return parse(input, "./"); } - Template parse_template(nonstd::string_view filename) { - Template result; - result.content = load_file(filename); - + void parse_into_template(Template& tmpl, nonstd::string_view filename) { nonstd::string_view path = filename.substr(0, filename.find_last_of("/\\") + 1); - // StringRef path = sys::path::parent_path(filename); - Parser(m_config, m_lexer.get_config(), m_included_templates).parse_into(result, path); - return result; + + // StringRef path = sys::path::parent_path(filename); + auto sub_parser = Parser(config, lexer.get_config(), template_storage, function_storage); + sub_parser.parse_into(tmpl, path); } std::string load_file(nonstd::string_view filename) { - std::ifstream file = open_file_or_throw(static_cast(filename)); + std::ifstream file; + open_file_or_throw(static_cast(filename), file); std::string text((std::istreambuf_iterator(file)), std::istreambuf_iterator()); return text; } - - private: - const ParserConfig& m_config; - Lexer m_lexer; - Token m_tok; - Token m_peek_tok; - bool m_have_peek_tok {false}; - TemplateStorage& m_included_templates; - const ParserStatic& m_static; - - struct IfData { - unsigned int prev_cond_jump; - std::vector uncond_jumps; - - explicit IfData(unsigned int condJump): prev_cond_jump(condJump) {} - }; - - std::vector m_if_stack; - std::vector m_loop_stack; - - void get_next_token() { - if (m_have_peek_tok) { - m_tok = m_peek_tok; - m_have_peek_tok = false; - } else { - m_tok = m_lexer.scan(); - } - } - - void get_peek_token() { - if (!m_have_peek_tok) { - m_peek_tok = m_lexer.scan(); - m_have_peek_tok = true; - } - } }; -} // namespace inja - -#endif // PANTOR_INJA_PARSER_HPP - -// #include "polyfill.hpp" -#ifndef PANTOR_INJA_POLYFILL_HPP -#define PANTOR_INJA_POLYFILL_HPP - - -#if __cplusplus < 201402L - -#include -#include -#include -#include - - -namespace stdinja { - template struct _Unique_if { - typedef std::unique_ptr _Single_object; - }; - - template struct _Unique_if { - typedef std::unique_ptr _Unknown_bound; - }; - - template struct _Unique_if { - typedef void _Known_bound; - }; - - template - typename _Unique_if::_Single_object - make_unique(Args&&... args) { - return std::unique_ptr(new T(std::forward(args)...)); - } - - template - typename _Unique_if::_Unknown_bound - make_unique(size_t n) { - typedef typename std::remove_extent::type U; - return std::unique_ptr(new U[n]()); - } - - template - typename _Unique_if::_Known_bound - make_unique(Args&&...) = delete; -} - -#else - -namespace stdinja = std; - -#endif // memory */ +} // namespace inja - -#endif // PANTOR_INJA_POLYFILL_HPP +#endif // INCLUDE_INJA_PARSER_HPP_ // #include "renderer.hpp" -#ifndef PANTOR_INJA_RENDERER_HPP -#define PANTOR_INJA_RENDERER_HPP +// Copyright (c) 2020 Pantor. All rights reserved. + +#ifndef INCLUDE_INJA_RENDERER_HPP_ +#define INCLUDE_INJA_RENDERER_HPP_ #include #include @@ -2758,577 +3322,605 @@ namespace stdinja = std; #include -// #include "bytecode.hpp" +// #include "config.hpp" + +// #include "exceptions.hpp" + +// #include "node.hpp" // #include "template.hpp" // #include "utils.hpp" - namespace inja { -inline nonstd::string_view convert_dot_to_json_pointer(nonstd::string_view dot, std::string& out) { - out.clear(); - do { - nonstd::string_view part; - std::tie(part, dot) = string_view::split(dot, '.'); - out.push_back('/'); - out.append(part.begin(), part.end()); - } while (!dot.empty()); - return nonstd::string_view(out.data(), out.size()); -} - /*! * \brief Class for rendering a Template with data. */ -class Renderer { - std::vector& get_args(const Bytecode& bc) { - m_tmp_args.clear(); +class Renderer : public NodeVisitor { + using Op = FunctionStorage::Operation; + + const RenderConfig config; + const Template *current_template; + const TemplateStorage &template_storage; + const FunctionStorage &function_storage; + + const json *json_input; + std::ostream *output_stream; + + json json_additional_data; + json* current_loop_data = &json_additional_data["loop"]; + + std::vector> json_tmp_stack; + std::stack json_eval_stack; + std::stack not_found_stack; + + bool truthy(const json* data) const { + if (data->is_boolean()) { + return data->get(); + } else if (data->is_number()) { + return (*data != 0); + } else if (data->is_null()) { + return false; + } + return !data->empty(); + } - bool has_imm = ((bc.flags & Bytecode::Flag::ValueMask) != Bytecode::Flag::ValuePop); + void print_json(const std::shared_ptr value) { + if (value->is_string()) { + *output_stream << value->get_ref(); + } else if (value->is_number_integer()) { + *output_stream << value->get(); + } else if (value->is_null()) { + } else { + *output_stream << value->dump(); + } + } - // get args from stack - unsigned int pop_args = bc.args; - if (has_imm) { - pop_args -= 1; + const std::shared_ptr eval_expression_list(const ExpressionListNode& expression_list) { + for (auto& expression : expression_list.rpn_output) { + expression->accept(*this); } - for (auto i = std::prev(m_stack.end(), pop_args); i != m_stack.end(); i++) { - m_tmp_args.push_back(&(*i)); + if (json_eval_stack.empty()) { + throw_renderer_error("empty expression", expression_list); + } else if (json_eval_stack.size() != 1) { + throw_renderer_error("malformed expression", expression_list); } - // get immediate arg - if (has_imm) { - m_tmp_args.push_back(get_imm(bc)); + auto result = json_eval_stack.top(); + json_eval_stack.pop(); + + if (!result) { + if (not_found_stack.empty()) { + throw_renderer_error("expression could not be evaluated", expression_list); + } + + auto node = not_found_stack.top(); + not_found_stack.pop(); + + throw_renderer_error("variable '" + static_cast(node->name) + "' not found", *node); } + return std::make_shared(*result); + } - return m_tmp_args; + void throw_renderer_error(const std::string &message, const AstNode& node) { + SourceLocation loc = get_source_location(current_template->content, node.pos); + throw RenderError(message, loc); } - void pop_args(const Bytecode& bc) { - unsigned int popArgs = bc.args; - if ((bc.flags & Bytecode::Flag::ValueMask) != Bytecode::Flag::ValuePop) { - popArgs -= 1; + template + std::array get_arguments(const AstNode& node) { + if (json_eval_stack.size() < N) { + throw_renderer_error("function needs " + std::to_string(N) + " variables, but has only found " + std::to_string(json_eval_stack.size()), node); } - for (unsigned int i = 0; i < popArgs; ++i) { - m_stack.pop_back(); + + std::array result; + for (size_t i = 0; i < N; i += 1) { + result[N - i - 1] = json_eval_stack.top(); + json_eval_stack.pop(); + + if (!result[N - i - 1]) { + auto json_node = not_found_stack.top(); + not_found_stack.pop(); + + if (throw_not_found) { + throw_renderer_error("variable '" + static_cast(json_node->name) + "' not found", *json_node); + } + } } + return result; } - const json* get_imm(const Bytecode& bc) { - std::string ptr_buffer; - nonstd::string_view ptr; - switch (bc.flags & Bytecode::Flag::ValueMask) { - case Bytecode::Flag::ValuePop: - return nullptr; - case Bytecode::Flag::ValueImmediate: - return &bc.value; - case Bytecode::Flag::ValueLookupDot: - ptr = convert_dot_to_json_pointer(bc.str, ptr_buffer); - break; - case Bytecode::Flag::ValueLookupPointer: - ptr_buffer += '/'; - ptr_buffer += bc.str; - ptr = ptr_buffer; - break; - } - try { - return &m_data->at(json::json_pointer(ptr.data())); - } catch (std::exception&) { - // try to evaluate as a no-argument callback - if (auto callback = m_callbacks.find_callback(bc.str, 0)) { - std::vector arguments {}; - m_tmp_val = callback(arguments); - return &m_tmp_val; + template + Arguments get_argument_vector(size_t N, const AstNode& node) { + Arguments result {N}; + for (size_t i = 0; i < N; i += 1) { + result[N - i - 1] = json_eval_stack.top(); + json_eval_stack.pop(); + + if (!result[N - i - 1]) { + auto json_node = not_found_stack.top(); + not_found_stack.pop(); + + if (throw_not_found) { + throw_renderer_error("variable '" + static_cast(json_node->name) + "' not found", *json_node); + } } - inja_throw("render_error", "variable '" + static_cast(bc.str) + "' not found"); - return nullptr; } + return result; } - bool truthy(const json& var) const { - if (var.empty()) { - return false; - } else if (var.is_number()) { - return (var != 0); - } else if (var.is_string()) { - return !var.empty(); + void visit(const BlockNode& node) { + for (auto& n : node.nodes) { + n->accept(*this); } + } - try { - return var.get(); - } catch (json::type_error& e) { - inja_throw("json_error", e.what()); - throw; - } + void visit(const TextNode& node) { + output_stream->write(current_template->content.c_str() + node.pos, node.length); } - void update_loop_data() { - LoopLevel& level = m_loop_stack.back(); + void visit(const ExpressionNode&) { } - if (level.loop_type == LoopLevel::Type::Array) { - level.data[static_cast(level.value_name)] = level.values.at(level.index); // *level.it; - auto& loopData = level.data["loop"]; - loopData["index"] = level.index; - loopData["index1"] = level.index + 1; - loopData["is_first"] = (level.index == 0); - loopData["is_last"] = (level.index == level.size - 1); - } else { - level.data[static_cast(level.key_name)] = level.map_it->first; - level.data[static_cast(level.value_name)] = *level.map_it->second; - } + void visit(const LiteralNode& node) { + json_eval_stack.push(&node.value); } - const TemplateStorage& m_included_templates; - const FunctionStorage& m_callbacks; - - std::vector m_stack; + void visit(const JsonNode& node) { + if (json_additional_data.contains(node.ptr)) { + json_eval_stack.push(&(json_additional_data[node.ptr])); + + } else if (json_input->contains(node.ptr)) { + json_eval_stack.push(&(*json_input)[node.ptr]); + + } else { + // Try to evaluate as a no-argument callback + auto function_data = function_storage.find_function(node.name, 0); + if (function_data.operation == FunctionStorage::Operation::Callback) { + Arguments empty_args {}; + auto value = std::make_shared(function_data.callback(empty_args)); + json_tmp_stack.push_back(value); + json_eval_stack.push(value.get()); + } else { + json_eval_stack.push(nullptr); + not_found_stack.emplace(&node); + } + } + } - struct LoopLevel { - enum class Type { Map, Array }; + void visit(const FunctionNode& node) { + std::shared_ptr result_ptr; + + switch (node.operation) { + case Op::Not: { + auto args = get_arguments<1>(node); + result_ptr = std::make_shared(!truthy(args[0])); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::And: { + auto args = get_arguments<2>(node); + result_ptr = std::make_shared(truthy(args[0]) && truthy(args[1])); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::Or: { + auto args = get_arguments<2>(node); + result_ptr = std::make_shared(truthy(args[0]) || truthy(args[1])); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::In: { + auto args = get_arguments<2>(node); + result_ptr = std::make_shared(std::find(args[1]->begin(), args[1]->end(), *args[0]) != args[1]->end()); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::Equal: { + auto args = get_arguments<2>(node); + result_ptr = std::make_shared(*args[0] == *args[1]); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::NotEqual: { + auto args = get_arguments<2>(node); + result_ptr = std::make_shared(*args[0] != *args[1]); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::Greater: { + auto args = get_arguments<2>(node); + result_ptr = std::make_shared(*args[0] > *args[1]); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::GreaterEqual: { + auto args = get_arguments<2>(node); + result_ptr = std::make_shared(*args[0] >= *args[1]); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::Less: { + auto args = get_arguments<2>(node); + result_ptr = std::make_shared(*args[0] < *args[1]); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::LessEqual: { + auto args = get_arguments<2>(node); + result_ptr = std::make_shared(*args[0] <= *args[1]); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::Add: { + auto args = get_arguments<2>(node); + if (args[0]->is_string() && args[1]->is_string()) { + result_ptr = std::make_shared(args[0]->get_ref() + args[1]->get_ref()); + json_tmp_stack.push_back(result_ptr); + } else if (args[0]->is_number_integer() && args[1]->is_number_integer()) { + result_ptr = std::make_shared(args[0]->get() + args[1]->get()); + json_tmp_stack.push_back(result_ptr); + } else { + result_ptr = std::make_shared(args[0]->get() + args[1]->get()); + json_tmp_stack.push_back(result_ptr); + } + json_eval_stack.push(result_ptr.get()); + } break; + case Op::Subtract: { + auto args = get_arguments<2>(node); + if (args[0]->is_number_integer() && args[1]->is_number_integer()) { + result_ptr = std::make_shared(args[0]->get() - args[1]->get()); + json_tmp_stack.push_back(result_ptr); + } else { + result_ptr = std::make_shared(args[0]->get() - args[1]->get()); + json_tmp_stack.push_back(result_ptr); + } + json_eval_stack.push(result_ptr.get()); + } break; + case Op::Multiplication: { + auto args = get_arguments<2>(node); + if (args[0]->is_number_integer() && args[1]->is_number_integer()) { + result_ptr = std::make_shared(args[0]->get() * args[1]->get()); + json_tmp_stack.push_back(result_ptr); + } else { + result_ptr = std::make_shared(args[0]->get() * args[1]->get()); + json_tmp_stack.push_back(result_ptr); + } + json_eval_stack.push(result_ptr.get()); + } break; + case Op::Division: { + auto args = get_arguments<2>(node); + if (args[1]->get() == 0) { + throw_renderer_error("division by zero", node); + } + result_ptr = std::make_shared(args[0]->get() / args[1]->get()); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::Power: { + auto args = get_arguments<2>(node); + if (args[0]->is_number_integer() && args[1]->get() >= 0) { + int result = std::pow(args[0]->get(), args[1]->get()); + result_ptr = std::make_shared(std::move(result)); + json_tmp_stack.push_back(result_ptr); + } else { + double result = std::pow(args[0]->get(), args[1]->get()); + result_ptr = std::make_shared(std::move(result)); + json_tmp_stack.push_back(result_ptr); + } + json_eval_stack.push(result_ptr.get()); + } break; + case Op::Modulo: { + auto args = get_arguments<2>(node); + result_ptr = std::make_shared(args[0]->get() % args[1]->get()); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::AtId: { + json_eval_stack.pop(); // Pop id nullptr + auto container = get_arguments<1, false>(node)[0]; + if (not_found_stack.empty()) { + throw_renderer_error("could not find element with given name", node); + } + auto id_node = not_found_stack.top(); + not_found_stack.pop(); + json_eval_stack.push(&container->at(id_node->name)); + } break; + case Op::At: { + auto args = get_arguments<2>(node); + json_eval_stack.push(&args[0]->at(args[1]->get())); + } break; + case Op::Default: { + auto default_arg = get_arguments<1>(node)[0]; + auto test_arg = get_arguments<1, false>(node)[0]; + json_eval_stack.push(test_arg ? test_arg : default_arg); + } break; + case Op::DivisibleBy: { + auto args = get_arguments<2>(node); + int divisor = args[1]->get(); + result_ptr = std::make_shared((divisor != 0) && (args[0]->get() % divisor == 0)); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::Even: { + result_ptr = std::make_shared(get_arguments<1>(node)[0]->get() % 2 == 0); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::Exists: { + auto &&name = get_arguments<1>(node)[0]->get_ref(); + result_ptr = std::make_shared(json_input->contains(json::json_pointer(JsonNode::convert_dot_to_json_ptr(name)))); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::ExistsInObject: { + auto args = get_arguments<2>(node); + auto &&name = args[1]->get_ref(); + result_ptr = std::make_shared(args[0]->find(name) != args[0]->end()); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::First: { + auto result = &get_arguments<1>(node)[0]->front(); + json_eval_stack.push(result); + } break; + case Op::Float: { + result_ptr = std::make_shared(std::stod(get_arguments<1>(node)[0]->get_ref())); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::Int: { + result_ptr = std::make_shared(std::stoi(get_arguments<1>(node)[0]->get_ref())); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::Last: { + auto result = &get_arguments<1>(node)[0]->back(); + json_eval_stack.push(result); + } break; + case Op::Length: { + auto val = get_arguments<1>(node)[0]; + if (val->is_string()) { + result_ptr = std::make_shared(val->get_ref().length()); + } else { + result_ptr = std::make_shared(val->size()); + } + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::Lower: { + std::string result = get_arguments<1>(node)[0]->get(); + std::transform(result.begin(), result.end(), result.begin(), ::tolower); + result_ptr = std::make_shared(std::move(result)); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::Max: { + auto args = get_arguments<1>(node); + auto result = std::max_element(args[0]->begin(), args[0]->end()); + json_eval_stack.push(&(*result)); + } break; + case Op::Min: { + auto args = get_arguments<1>(node); + auto result = std::min_element(args[0]->begin(), args[0]->end()); + json_eval_stack.push(&(*result)); + } break; + case Op::Odd: { + result_ptr = std::make_shared(get_arguments<1>(node)[0]->get() % 2 != 0); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::Range: { + std::vector result(get_arguments<1>(node)[0]->get()); + std::iota(result.begin(), result.end(), 0); + result_ptr = std::make_shared(std::move(result)); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::Round: { + auto args = get_arguments<2>(node); + int precision = args[1]->get(); + double result = std::round(args[0]->get() * std::pow(10.0, precision)) / std::pow(10.0, precision); + result_ptr = std::make_shared(std::move(result)); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::Sort: { + result_ptr = std::make_shared(get_arguments<1>(node)[0]->get>()); + std::sort(result_ptr->begin(), result_ptr->end()); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::Upper: { + std::string result = get_arguments<1>(node)[0]->get(); + std::transform(result.begin(), result.end(), result.begin(), ::toupper); + result_ptr = std::make_shared(std::move(result)); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::IsBoolean: { + result_ptr = std::make_shared(get_arguments<1>(node)[0]->is_boolean()); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::IsNumber: { + result_ptr = std::make_shared(get_arguments<1>(node)[0]->is_number()); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::IsInteger: { + result_ptr = std::make_shared(get_arguments<1>(node)[0]->is_number_integer()); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::IsFloat: { + result_ptr = std::make_shared(get_arguments<1>(node)[0]->is_number_float()); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::IsObject: { + result_ptr = std::make_shared(get_arguments<1>(node)[0]->is_object()); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::IsArray: { + result_ptr = std::make_shared(get_arguments<1>(node)[0]->is_array()); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::IsString: { + result_ptr = std::make_shared(get_arguments<1>(node)[0]->is_string()); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::Callback: { + auto args = get_argument_vector(node.number_args, node); + result_ptr = std::make_shared(node.callback(args)); + json_tmp_stack.push_back(result_ptr); + json_eval_stack.push(result_ptr.get()); + } break; + case Op::ParenLeft: + case Op::ParenRight: + case Op::None: + break; + } + } - Type loop_type; - nonstd::string_view key_name; // variable name for keys - nonstd::string_view value_name; // variable name for values - json data; // data with loop info added + void visit(const ExpressionListNode& node) { + print_json(eval_expression_list(node)); + } - json values; // values to iterate over + void visit(const StatementNode&) { } - // loop over list - size_t index; // current list index - size_t size; // length of list + void visit(const ForStatementNode&) { } - // loop over map - using KeyValue = std::pair; - using MapValues = std::vector; - MapValues map_values; // values to iterate over - MapValues::iterator map_it; // iterator over values + void visit(const ForArrayStatementNode& node) { + auto result = eval_expression_list(node.condition); + if (!result->is_array()) { + throw_renderer_error("object must be an array", node); + } - }; + if (!current_loop_data->empty()) { + auto tmp = *current_loop_data; // Because of clang-3 + (*current_loop_data)["parent"] = std::move(tmp); + } - std::vector m_loop_stack; - const json* m_data; + size_t index = 0; + (*current_loop_data)["is_first"] = true; + (*current_loop_data)["is_last"] = (result->size() <= 1); + for (auto it = result->begin(); it != result->end(); ++it) { + json_additional_data[static_cast(node.value)] = *it; - std::vector m_tmp_args; - json m_tmp_val; + (*current_loop_data)["index"] = index; + (*current_loop_data)["index1"] = index + 1; + if (index == 1) { + (*current_loop_data)["is_first"] = false; + } + if (index == result->size() - 1) { + (*current_loop_data)["is_last"] = true; + } + node.body.accept(*this); + ++index; + } - public: - Renderer(const TemplateStorage& included_templates, const FunctionStorage& callbacks): m_included_templates(included_templates), m_callbacks(callbacks) { - m_stack.reserve(16); - m_tmp_args.reserve(4); - m_loop_stack.reserve(16); + json_additional_data[static_cast(node.value)].clear(); + if (!(*current_loop_data)["parent"].empty()) { + auto tmp = (*current_loop_data)["parent"]; + *current_loop_data = std::move(tmp); + } else { + current_loop_data = &json_additional_data["loop"]; + } } - void render_to(std::ostream& os, const Template& tmpl, const json& data) { - m_data = &data; + void visit(const ForObjectStatementNode& node) { + auto result = eval_expression_list(node.condition); + if (!result->is_object()) { + throw_renderer_error("object must be an object", node); + } - for (size_t i = 0; i < tmpl.bytecodes.size(); ++i) { - const auto& bc = tmpl.bytecodes[i]; + if (!current_loop_data->empty()) { + (*current_loop_data)["parent"] = std::move(*current_loop_data); + } - switch (bc.op) { - case Bytecode::Op::Nop: { - break; - } - case Bytecode::Op::PrintText: { - os << bc.str; - break; - } - case Bytecode::Op::PrintValue: { - const json& val = *get_args(bc)[0]; - if (val.is_string()) { - os << val.get_ref(); - } else { - os << val.dump(); - } - pop_args(bc); - break; - } - case Bytecode::Op::Push: { - m_stack.emplace_back(*get_imm(bc)); - break; - } - case Bytecode::Op::Upper: { - auto result = get_args(bc)[0]->get(); - std::transform(result.begin(), result.end(), result.begin(), ::toupper); - pop_args(bc); - m_stack.emplace_back(std::move(result)); - break; - } - case Bytecode::Op::Lower: { - auto result = get_args(bc)[0]->get(); - std::transform(result.begin(), result.end(), result.begin(), ::tolower); - pop_args(bc); - m_stack.emplace_back(std::move(result)); - break; - } - case Bytecode::Op::Range: { - int number = get_args(bc)[0]->get(); - std::vector result(number); - std::iota(std::begin(result), std::end(result), 0); - pop_args(bc); - m_stack.emplace_back(std::move(result)); - break; - } - case Bytecode::Op::Length: { - const json& val = *get_args(bc)[0]; + size_t index = 0; + (*current_loop_data)["is_first"] = true; + (*current_loop_data)["is_last"] = (result->size() <= 1); + for (auto it = result->begin(); it != result->end(); ++it) { + json_additional_data[static_cast(node.key)] = it.key(); + json_additional_data[static_cast(node.value)] = it.value(); + + (*current_loop_data)["index"] = index; + (*current_loop_data)["index1"] = index + 1; + if (index == 1) { + (*current_loop_data)["is_first"] = false; + } + if (index == result->size() - 1) { + (*current_loop_data)["is_last"] = true; + } - int result; - if (val.is_string()) { - result = val.get_ref().length(); - } else { - result = val.size(); - } + node.body.accept(*this); + ++index; + } - pop_args(bc); - m_stack.emplace_back(result); - break; - } - case Bytecode::Op::Sort: { - auto result = get_args(bc)[0]->get>(); - std::sort(result.begin(), result.end()); - pop_args(bc); - m_stack.emplace_back(std::move(result)); - break; - } - case Bytecode::Op::At: { - auto args = get_args(bc); - auto result = args[0]->at(args[1]->get()); - pop_args(bc); - m_stack.emplace_back(result); - break; - } - case Bytecode::Op::First: { - auto result = get_args(bc)[0]->front(); - pop_args(bc); - m_stack.emplace_back(result); - break; - } - case Bytecode::Op::Last: { - auto result = get_args(bc)[0]->back(); - pop_args(bc); - m_stack.emplace_back(result); - break; - } - case Bytecode::Op::Round: { - auto args = get_args(bc); - double number = args[0]->get(); - int precision = args[1]->get(); - pop_args(bc); - m_stack.emplace_back(std::round(number * std::pow(10.0, precision)) / std::pow(10.0, precision)); - break; - } - case Bytecode::Op::DivisibleBy: { - auto args = get_args(bc); - int number = args[0]->get(); - int divisor = args[1]->get(); - pop_args(bc); - m_stack.emplace_back((divisor != 0) && (number % divisor == 0)); - break; - } - case Bytecode::Op::Odd: { - int number = get_args(bc)[0]->get(); - pop_args(bc); - m_stack.emplace_back(number % 2 != 0); - break; - } - case Bytecode::Op::Even: { - int number = get_args(bc)[0]->get(); - pop_args(bc); - m_stack.emplace_back(number % 2 == 0); - break; - } - case Bytecode::Op::Max: { - auto args = get_args(bc); - auto result = *std::max_element(args[0]->begin(), args[0]->end()); - pop_args(bc); - m_stack.emplace_back(std::move(result)); - break; - } - case Bytecode::Op::Min: { - auto args = get_args(bc); - auto result = *std::min_element(args[0]->begin(), args[0]->end()); - pop_args(bc); - m_stack.emplace_back(std::move(result)); - break; - } - case Bytecode::Op::Not: { - bool result = !truthy(*get_args(bc)[0]); - pop_args(bc); - m_stack.emplace_back(result); - break; - } - case Bytecode::Op::And: { - auto args = get_args(bc); - bool result = truthy(*args[0]) && truthy(*args[1]); - pop_args(bc); - m_stack.emplace_back(result); - break; - } - case Bytecode::Op::Or: { - auto args = get_args(bc); - bool result = truthy(*args[0]) || truthy(*args[1]); - pop_args(bc); - m_stack.emplace_back(result); - break; - } - case Bytecode::Op::In: { - auto args = get_args(bc); - bool result = std::find(args[1]->begin(), args[1]->end(), *args[0]) != - args[1]->end(); - pop_args(bc); - m_stack.emplace_back(result); - break; - } - case Bytecode::Op::Equal: { - auto args = get_args(bc); - bool result = (*args[0] == *args[1]); - pop_args(bc); - m_stack.emplace_back(result); - break; - } - case Bytecode::Op::Greater: { - auto args = get_args(bc); - bool result = (*args[0] > *args[1]); - pop_args(bc); - m_stack.emplace_back(result); - break; - } - case Bytecode::Op::Less: { - auto args = get_args(bc); - bool result = (*args[0] < *args[1]); - pop_args(bc); - m_stack.emplace_back(result); - break; - } - case Bytecode::Op::GreaterEqual: { - auto args = get_args(bc); - bool result = (*args[0] >= *args[1]); - pop_args(bc); - m_stack.emplace_back(result); - break; - } - case Bytecode::Op::LessEqual: { - auto args = get_args(bc); - bool result = (*args[0] <= *args[1]); - pop_args(bc); - m_stack.emplace_back(result); - break; - } - case Bytecode::Op::Different: { - auto args = get_args(bc); - bool result = (*args[0] != *args[1]); - pop_args(bc); - m_stack.emplace_back(result); - break; - } - case Bytecode::Op::Float: { - double result = - std::stod(get_args(bc)[0]->get_ref()); - pop_args(bc); - m_stack.emplace_back(result); - break; - } - case Bytecode::Op::Int: { - int result = std::stoi(get_args(bc)[0]->get_ref()); - pop_args(bc); - m_stack.emplace_back(result); - break; - } - case Bytecode::Op::Exists: { - auto&& name = get_args(bc)[0]->get_ref(); - bool result = (data.find(name) != data.end()); - pop_args(bc); - m_stack.emplace_back(result); - break; - } - case Bytecode::Op::ExistsInObject: { - auto args = get_args(bc); - auto&& name = args[1]->get_ref(); - bool result = (args[0]->find(name) != args[0]->end()); - pop_args(bc); - m_stack.emplace_back(result); - break; - } - case Bytecode::Op::IsBoolean: { - bool result = get_args(bc)[0]->is_boolean(); - pop_args(bc); - m_stack.emplace_back(result); - break; - } - case Bytecode::Op::IsNumber: { - bool result = get_args(bc)[0]->is_number(); - pop_args(bc); - m_stack.emplace_back(result); - break; - } - case Bytecode::Op::IsInteger: { - bool result = get_args(bc)[0]->is_number_integer(); - pop_args(bc); - m_stack.emplace_back(result); - break; - } - case Bytecode::Op::IsFloat: { - bool result = get_args(bc)[0]->is_number_float(); - pop_args(bc); - m_stack.emplace_back(result); - break; - } - case Bytecode::Op::IsObject: { - bool result = get_args(bc)[0]->is_object(); - pop_args(bc); - m_stack.emplace_back(result); - break; - } - case Bytecode::Op::IsArray: { - bool result = get_args(bc)[0]->is_array(); - pop_args(bc); - m_stack.emplace_back(result); - break; - } - case Bytecode::Op::IsString: { - bool result = get_args(bc)[0]->is_string(); - pop_args(bc); - m_stack.emplace_back(result); - break; - } - case Bytecode::Op::Default: { - // default needs to be a bit "magic"; we can't evaluate the first - // argument during the push operation, so we swap the arguments during - // the parse phase so the second argument is pushed on the stack and - // the first argument is in the immediate - try { - const json* imm = get_imm(bc); - // if no exception was raised, replace the stack value with it - m_stack.back() = *imm; - } catch (std::exception&) { - // couldn't read immediate, just leave the stack as is - } - break; - } - case Bytecode::Op::Include: - Renderer(m_included_templates, m_callbacks).render_to(os, m_included_templates.find(get_imm(bc)->get_ref())->second, *m_data); - break; - case Bytecode::Op::Callback: { - auto callback = m_callbacks.find_callback(bc.str, bc.args); - if (!callback) { - inja_throw("render_error", "function '" + static_cast(bc.str) + "' (" + std::to_string(static_cast(bc.args)) + ") not found"); - } - json result = callback(get_args(bc)); - pop_args(bc); - m_stack.emplace_back(std::move(result)); - break; - } - case Bytecode::Op::Jump: { - i = bc.args - 1; // -1 due to ++i in loop - break; - } - case Bytecode::Op::ConditionalJump: { - if (!truthy(m_stack.back())) { - i = bc.args - 1; // -1 due to ++i in loop - } - m_stack.pop_back(); - break; - } - case Bytecode::Op::StartLoop: { - // jump past loop body if empty - if (m_stack.back().empty()) { - m_stack.pop_back(); - i = bc.args; // ++i in loop will take it past EndLoop - break; - } + json_additional_data[static_cast(node.key)].clear(); + json_additional_data[static_cast(node.value)].clear(); + if (!(*current_loop_data)["parent"].empty()) { + *current_loop_data = std::move((*current_loop_data)["parent"]); + } else { + current_loop_data = &json_additional_data["loop"]; + } + } - m_loop_stack.emplace_back(); - LoopLevel& level = m_loop_stack.back(); - level.value_name = bc.str; - level.values = std::move(m_stack.back()); - level.data = (*m_data); - m_stack.pop_back(); - - if (bc.value.is_string()) { - // map iterator - if (!level.values.is_object()) { - m_loop_stack.pop_back(); - inja_throw("render_error", "for key, value requires object"); - } - level.loop_type = LoopLevel::Type::Map; - level.key_name = bc.value.get_ref(); - - // sort by key - for (auto it = level.values.begin(), end = level.values.end(); it != end; ++it) { - level.map_values.emplace_back(it.key(), &it.value()); - } - std::sort(level.map_values.begin(), level.map_values.end(), [](const LoopLevel::KeyValue& a, const LoopLevel::KeyValue& b) { return a.first < b.first; }); - level.map_it = level.map_values.begin(); - } else { - if (!level.values.is_array()) { - m_loop_stack.pop_back(); - inja_throw("render_error", "type must be array"); - } - - // list iterator - level.loop_type = LoopLevel::Type::Array; - level.index = 0; - level.size = level.values.size(); - } + void visit(const IfStatementNode& node) { + auto result = eval_expression_list(node.condition); + if (truthy(result.get())) { + node.true_statement.accept(*this); + } else if (node.has_false_statement) { + node.false_statement.accept(*this); + } + } - // provide parent access in nested loop - auto parent_loop_it = level.data.find("loop"); - if (parent_loop_it != level.data.end()) { - json loop_copy = *parent_loop_it; - (*parent_loop_it)["parent"] = std::move(loop_copy); - } + void visit(const IncludeStatementNode& node) { + auto sub_renderer = Renderer(config, template_storage, function_storage); + auto included_template_it = template_storage.find(node.file); - // set "current" data to loop data - m_data = &level.data; - update_loop_data(); - break; - } - case Bytecode::Op::EndLoop: { - if (m_loop_stack.empty()) { - inja_throw("render_error", "unexpected state in renderer"); - } - LoopLevel& level = m_loop_stack.back(); + if (included_template_it != template_storage.end()) { + sub_renderer.render_to(*output_stream, included_template_it->second, *json_input, &json_additional_data); + } else if (config.throw_at_missing_includes) { + throw_renderer_error("include '" + node.file + "' not found", node); + } + } - bool done; - if (level.loop_type == LoopLevel::Type::Array) { - level.index += 1; - done = (level.index == level.values.size()); - } else { - level.map_it += 1; - done = (level.map_it == level.map_values.end()); - } + void visit(const SetStatementNode& node) { + json_additional_data[node.key] = *eval_expression_list(node.expression); + } - if (done) { - m_loop_stack.pop_back(); - // set "current" data to outer loop data or main data as appropriate - if (!m_loop_stack.empty()) { - m_data = &m_loop_stack.back().data; - } else { - m_data = &data; - } - break; - } +public: + Renderer(const RenderConfig& config, const TemplateStorage &template_storage, const FunctionStorage &function_storage) + : config(config), template_storage(template_storage), function_storage(function_storage) { } + + void render_to(std::ostream &os, const Template &tmpl, const json &data, json *loop_data = nullptr) { + output_stream = &os; + current_template = &tmpl; + json_input = &data; + if (loop_data) { + json_additional_data = *loop_data; + current_loop_data = &json_additional_data["loop"]; + } - update_loop_data(); + current_template->root.accept(*this); - // jump back to start of loop - i = bc.args - 1; // -1 due to ++i in loop - break; - } - default: { - inja_throw("render_error", "unknown op in renderer: " + std::to_string(static_cast(bc.op))); - } - } - } + json_tmp_stack.clear(); } }; -} // namespace inja +} // namespace inja -#endif // PANTOR_INJA_RENDERER_HPP +#endif // INCLUDE_INJA_RENDERER_HPP_ // #include "string_view.hpp" @@ -3337,193 +3929,223 @@ class Renderer { // #include "utils.hpp" - namespace inja { -using namespace nlohmann; +using json = nlohmann::json; /*! * \brief Class for changing the configuration. */ class Environment { - class Impl { - public: - std::string input_path; - std::string output_path; - - LexerConfig lexer_config; - ParserConfig parser_config; + std::string input_path; + std::string output_path; - FunctionStorage callbacks; - TemplateStorage included_templates; - }; + LexerConfig lexer_config; + ParserConfig parser_config; + RenderConfig render_config; - std::unique_ptr m_impl; + FunctionStorage function_storage; + TemplateStorage template_storage; - public: - Environment(): Environment("") { } +public: + Environment() : Environment("") {} - explicit Environment(const std::string& global_path): m_impl(stdinja::make_unique()) { - m_impl->input_path = global_path; - m_impl->output_path = global_path; - } + explicit Environment(const std::string &global_path) : input_path(global_path), output_path(global_path) {} - explicit Environment(const std::string& input_path, const std::string& output_path): m_impl(stdinja::make_unique()) { - m_impl->input_path = input_path; - m_impl->output_path = output_path; - } + Environment(const std::string &input_path, const std::string &output_path) + : input_path(input_path), output_path(output_path) {} /// Sets the opener and closer for template statements - void set_statement(const std::string& open, const std::string& close) { - m_impl->lexer_config.statement_open = open; - m_impl->lexer_config.statement_close = close; - m_impl->lexer_config.update_open_chars(); + void set_statement(const std::string &open, const std::string &close) { + lexer_config.statement_open = open; + lexer_config.statement_open_no_lstrip = open + "+"; + lexer_config.statement_open_force_lstrip = open + "-"; + lexer_config.statement_close = close; + lexer_config.statement_close_force_rstrip = "-" + close; + lexer_config.update_open_chars(); } /// Sets the opener for template line statements - void set_line_statement(const std::string& open) { - m_impl->lexer_config.line_statement = open; - m_impl->lexer_config.update_open_chars(); + void set_line_statement(const std::string &open) { + lexer_config.line_statement = open; + lexer_config.update_open_chars(); } /// Sets the opener and closer for template expressions - void set_expression(const std::string& open, const std::string& close) { - m_impl->lexer_config.expression_open = open; - m_impl->lexer_config.expression_close = close; - m_impl->lexer_config.update_open_chars(); + void set_expression(const std::string &open, const std::string &close) { + lexer_config.expression_open = open; + lexer_config.expression_open_force_lstrip = open + "-"; + lexer_config.expression_close = close; + lexer_config.expression_close_force_rstrip = "-" + close; + lexer_config.update_open_chars(); } /// Sets the opener and closer for template comments - void set_comment(const std::string& open, const std::string& close) { - m_impl->lexer_config.comment_open = open; - m_impl->lexer_config.comment_close = close; - m_impl->lexer_config.update_open_chars(); + void set_comment(const std::string &open, const std::string &close) { + lexer_config.comment_open = open; + lexer_config.comment_close = close; + lexer_config.update_open_chars(); } /// Sets whether to remove the first newline after a block void set_trim_blocks(bool trim_blocks) { - m_impl->lexer_config.trim_blocks = trim_blocks; + lexer_config.trim_blocks = trim_blocks; } /// Sets whether to strip the spaces and tabs from the start of a line to a block void set_lstrip_blocks(bool lstrip_blocks) { - m_impl->lexer_config.lstrip_blocks = lstrip_blocks; + lexer_config.lstrip_blocks = lstrip_blocks; } /// Sets the element notation syntax - void set_element_notation(ElementNotation notation) { - m_impl->parser_config.notation = notation; + void set_search_included_templates_in_files(bool search_in_files) { + parser_config.search_included_templates_in_files = search_in_files; } + /// Sets whether a missing include will throw an error + void set_throw_at_missing_includes(bool will_throw) { + render_config.throw_at_missing_includes = will_throw; + } Template parse(nonstd::string_view input) { - Parser parser(m_impl->parser_config, m_impl->lexer_config, m_impl->included_templates); + Parser parser(parser_config, lexer_config, template_storage, function_storage); return parser.parse(input); } - Template parse_template(const std::string& filename) { - Parser parser(m_impl->parser_config, m_impl->lexer_config, m_impl->included_templates); - return parser.parse_template(m_impl->input_path + static_cast(filename)); - } + Template parse_template(const std::string &filename) { + Parser parser(parser_config, lexer_config, template_storage, function_storage); + auto result = Template(parser.load_file(input_path + static_cast(filename))); + parser.parse_into_template(result, input_path + static_cast(filename)); + return result; + } - std::string render(nonstd::string_view input, const json& data) { - return render(parse(input), data); + Template parse_file(const std::string &filename) { + return parse_template(filename); } - std::string render(const Template& tmpl, const json& data) { + std::string render(nonstd::string_view input, const json &data) { return render(parse(input), data); } + + std::string render(const Template &tmpl, const json &data) { std::stringstream os; render_to(os, tmpl, data); return os.str(); } - std::string render_file(const std::string& filename, const json& data) { - return render(parse_template(filename), data); - } + std::string render_file(const std::string &filename, const json &data) { + return render(parse_template(filename), data); + } - std::string render_file_with_json_file(const std::string& filename, const std::string& filename_data) { - const json data = load_json(filename_data); - return render_file(filename, data); - } + std::string render_file_with_json_file(const std::string &filename, const std::string &filename_data) { + const json data = load_json(filename_data); + return render_file(filename, data); + } - void write(const std::string& filename, const json& data, const std::string& filename_out) { - std::ofstream file(m_impl->output_path + filename_out); - file << render_file(filename, data); - file.close(); - } + void write(const std::string &filename, const json &data, const std::string &filename_out) { + std::ofstream file(output_path + filename_out); + file << render_file(filename, data); + file.close(); + } - void write(const Template& temp, const json& data, const std::string& filename_out) { - std::ofstream file(m_impl->output_path + filename_out); - file << render(temp, data); - file.close(); - } + void write(const Template &temp, const json &data, const std::string &filename_out) { + std::ofstream file(output_path + filename_out); + file << render(temp, data); + file.close(); + } - void write_with_json_file(const std::string& filename, const std::string& filename_data, const std::string& filename_out) { - const json data = load_json(filename_data); - write(filename, data, filename_out); - } + void write_with_json_file(const std::string &filename, const std::string &filename_data, + const std::string &filename_out) { + const json data = load_json(filename_data); + write(filename, data, filename_out); + } - void write_with_json_file(const Template& temp, const std::string& filename_data, const std::string& filename_out) { - const json data = load_json(filename_data); - write(temp, data, filename_out); - } + void write_with_json_file(const Template &temp, const std::string &filename_data, const std::string &filename_out) { + const json data = load_json(filename_data); + write(temp, data, filename_out); + } - std::ostream& render_to(std::ostream& os, const Template& tmpl, const json& data) { - Renderer(m_impl->included_templates, m_impl->callbacks).render_to(os, tmpl, data); + std::ostream &render_to(std::ostream &os, const Template &tmpl, const json &data) { + Renderer(render_config, template_storage, function_storage).render_to(os, tmpl, data); return os; } - std::string load_file(const std::string& filename) { - Parser parser(m_impl->parser_config, m_impl->lexer_config, m_impl->included_templates); - return parser.load_file(m_impl->input_path + filename); - } + std::string load_file(const std::string &filename) { + Parser parser(parser_config, lexer_config, template_storage, function_storage); + return parser.load_file(input_path + filename); + } - json load_json(const std::string& filename) { - std::ifstream file = open_file_or_throw(m_impl->input_path + filename); - json j; - file >> j; - return j; - } + json load_json(const std::string &filename) { + std::ifstream file; + open_file_or_throw(input_path + filename, file); + json j; + file >> j; + return j; + } + + /*! + @brief Adds a variadic callback + */ + void add_callback(const std::string &name, const CallbackFunction &callback) { + add_callback(name, -1, callback); + } + + /*! + @brief Adds a variadic void callback + */ + void add_void_callback(const std::string &name, const VoidCallbackFunction &callback) { + add_void_callback(name, -1, callback); + } + + /*! + @brief Adds a callback with given number or arguments + */ + void add_callback(const std::string &name, int num_args, const CallbackFunction &callback) { + function_storage.add_callback(name, num_args, callback); + } - void add_callback(const std::string& name, unsigned int numArgs, const CallbackFunction& callback) { - m_impl->callbacks.add_callback(name, numArgs, callback); + /*! + @brief Adds a void callback with given number or arguments + */ + void add_void_callback(const std::string &name, int num_args, const VoidCallbackFunction &callback) { + function_storage.add_callback(name, num_args, [callback](Arguments& args) { callback(args); return json(); }); } /** Includes a template with a given name into the environment. * Then, a template can be rendered in another template using the * include "" syntax. */ - void include_template(const std::string& name, const Template& tmpl) { - m_impl->included_templates[name] = tmpl; + void include_template(const std::string &name, const Template &tmpl) { + template_storage[name] = tmpl; } }; /*! @brief render with default settings to a string */ -inline std::string render(nonstd::string_view input, const json& data) { +inline std::string render(nonstd::string_view input, const json &data) { return Environment().render(input, data); } /*! @brief render with default settings to the given output stream */ -inline void render_to(std::ostream& os, nonstd::string_view input, const json& data) { +inline void render_to(std::ostream &os, nonstd::string_view input, const json &data) { Environment env; env.render_to(os, env.parse(input), data); } -} - -#endif // PANTOR_INJA_ENVIRONMENT_HPP +} // namespace inja -// #include "string_view.hpp" +#endif // INCLUDE_INJA_ENVIRONMENT_HPP_ -// #include "template.hpp" +// #include "exceptions.hpp" // #include "parser.hpp" // #include "renderer.hpp" +// #include "string_view.hpp" + +// #include "template.hpp" -#endif // PANTOR_INJA_HPP +#endif // INCLUDE_INJA_INJA_HPP_ diff --git a/tools/jsonproc/jsonproc.cpp b/tools/jsonproc/jsonproc.cpp index bcbe53e4..48905da4 100644 --- a/tools/jsonproc/jsonproc.cpp +++ b/tools/jsonproc/jsonproc.cpp @@ -128,6 +128,10 @@ int main(int argc, char *argv[]) return args.at(0)->empty(); }); + env.add_void_callback("log", 1, [](Arguments& args) { + std::cout << args.at(0)->get() << std::endl; + }); + try { env.write_with_json_file(templateFilepath, jsonfilepath, outputFilepath); diff --git a/tools/jsonproc/nlohmann/json.hpp b/tools/jsonproc/nlohmann/json.hpp index 5003a4fa..cc822a54 100644 --- a/tools/jsonproc/nlohmann/json.hpp +++ b/tools/jsonproc/nlohmann/json.hpp @@ -1,7 +1,7 @@ /* __ _____ _____ _____ __| | __| | | | JSON for Modern C++ -| | |__ | | | | | | version 3.6.1 +| | |__ | | | | | | version 3.8.0 |_____|_____|_____|_|___| https://github.com/nlohmann/json Licensed under the MIT License . @@ -31,12 +31,11 @@ SOFTWARE. #define INCLUDE_NLOHMANN_JSON_HPP_ #define NLOHMANN_JSON_VERSION_MAJOR 3 -#define NLOHMANN_JSON_VERSION_MINOR 6 -#define NLOHMANN_JSON_VERSION_PATCH 1 +#define NLOHMANN_JSON_VERSION_MINOR 8 +#define NLOHMANN_JSON_VERSION_PATCH 0 #include // all_of, find, for_each #include // assert -#include // and, not, or #include // nullptr_t, ptrdiff_t, size_t #include // hash, less #include // initializer_list @@ -58,7 +57,6 @@ SOFTWARE. #include // transform #include // array -#include // and, not #include // forward_list #include // inserter, front_inserter, end #include // map @@ -69,41 +67,2087 @@ SOFTWARE. #include // pair, declval #include // valarray +// #include + + +// Header is removed in C++20. +// See for more information. + +#if __cplusplus <= 201703L + #include // and, not, or +#endif + // #include -#include // exception -#include // runtime_error -#include // to_string +#include // exception +#include // runtime_error +#include // to_string + +// #include + + +#include // size_t + +namespace nlohmann +{ +namespace detail +{ +/// struct to capture the start position of the current token +struct position_t +{ + /// the total number of characters read + std::size_t chars_read_total = 0; + /// the number of characters read in the current line + std::size_t chars_read_current_line = 0; + /// the number of lines read + std::size_t lines_read = 0; + + /// conversion to size_t to preserve SAX interface + constexpr operator size_t() const + { + return chars_read_total; + } +}; + +} // namespace detail +} // namespace nlohmann + +// #include + + +#include // pair +// #include +/* Hedley - https://nemequ.github.io/hedley + * Created by Evan Nemerson + * + * To the extent possible under law, the author(s) have dedicated all + * copyright and related and neighboring rights to this software to + * the public domain worldwide. This software is distributed without + * any warranty. + * + * For details, see . + * SPDX-License-Identifier: CC0-1.0 + */ + +#if !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < 13) +#if defined(JSON_HEDLEY_VERSION) + #undef JSON_HEDLEY_VERSION +#endif +#define JSON_HEDLEY_VERSION 13 + +#if defined(JSON_HEDLEY_STRINGIFY_EX) + #undef JSON_HEDLEY_STRINGIFY_EX +#endif +#define JSON_HEDLEY_STRINGIFY_EX(x) #x + +#if defined(JSON_HEDLEY_STRINGIFY) + #undef JSON_HEDLEY_STRINGIFY +#endif +#define JSON_HEDLEY_STRINGIFY(x) JSON_HEDLEY_STRINGIFY_EX(x) + +#if defined(JSON_HEDLEY_CONCAT_EX) + #undef JSON_HEDLEY_CONCAT_EX +#endif +#define JSON_HEDLEY_CONCAT_EX(a,b) a##b + +#if defined(JSON_HEDLEY_CONCAT) + #undef JSON_HEDLEY_CONCAT +#endif +#define JSON_HEDLEY_CONCAT(a,b) JSON_HEDLEY_CONCAT_EX(a,b) + +#if defined(JSON_HEDLEY_CONCAT3_EX) + #undef JSON_HEDLEY_CONCAT3_EX +#endif +#define JSON_HEDLEY_CONCAT3_EX(a,b,c) a##b##c + +#if defined(JSON_HEDLEY_CONCAT3) + #undef JSON_HEDLEY_CONCAT3 +#endif +#define JSON_HEDLEY_CONCAT3(a,b,c) JSON_HEDLEY_CONCAT3_EX(a,b,c) + +#if defined(JSON_HEDLEY_VERSION_ENCODE) + #undef JSON_HEDLEY_VERSION_ENCODE +#endif +#define JSON_HEDLEY_VERSION_ENCODE(major,minor,revision) (((major) * 1000000) + ((minor) * 1000) + (revision)) + +#if defined(JSON_HEDLEY_VERSION_DECODE_MAJOR) + #undef JSON_HEDLEY_VERSION_DECODE_MAJOR +#endif +#define JSON_HEDLEY_VERSION_DECODE_MAJOR(version) ((version) / 1000000) + +#if defined(JSON_HEDLEY_VERSION_DECODE_MINOR) + #undef JSON_HEDLEY_VERSION_DECODE_MINOR +#endif +#define JSON_HEDLEY_VERSION_DECODE_MINOR(version) (((version) % 1000000) / 1000) + +#if defined(JSON_HEDLEY_VERSION_DECODE_REVISION) + #undef JSON_HEDLEY_VERSION_DECODE_REVISION +#endif +#define JSON_HEDLEY_VERSION_DECODE_REVISION(version) ((version) % 1000) + +#if defined(JSON_HEDLEY_GNUC_VERSION) + #undef JSON_HEDLEY_GNUC_VERSION +#endif +#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__) + #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) +#elif defined(__GNUC__) + #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, 0) +#endif + +#if defined(JSON_HEDLEY_GNUC_VERSION_CHECK) + #undef JSON_HEDLEY_GNUC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_GNUC_VERSION) + #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GNUC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_MSVC_VERSION) + #undef JSON_HEDLEY_MSVC_VERSION +#endif +#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, (_MSC_FULL_VER % 10000000) / 100000, (_MSC_FULL_VER % 100000) / 100) +#elif defined(_MSC_FULL_VER) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 1000000, (_MSC_FULL_VER % 1000000) / 10000, (_MSC_FULL_VER % 10000) / 10) +#elif defined(_MSC_VER) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_VER / 100, _MSC_VER % 100, 0) +#endif + +#if defined(JSON_HEDLEY_MSVC_VERSION_CHECK) + #undef JSON_HEDLEY_MSVC_VERSION_CHECK +#endif +#if !defined(_MSC_VER) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (0) +#elif defined(_MSC_VER) && (_MSC_VER >= 1400) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch))) +#elif defined(_MSC_VER) && (_MSC_VER >= 1200) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch))) +#else + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_VER >= ((major * 100) + (minor))) +#endif + +#if defined(JSON_HEDLEY_INTEL_VERSION) + #undef JSON_HEDLEY_INTEL_VERSION +#endif +#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) + #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, __INTEL_COMPILER_UPDATE) +#elif defined(__INTEL_COMPILER) + #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0) +#endif + +#if defined(JSON_HEDLEY_INTEL_VERSION_CHECK) + #undef JSON_HEDLEY_INTEL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_INTEL_VERSION) + #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_PGI_VERSION) + #undef JSON_HEDLEY_PGI_VERSION +#endif +#if defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__) + #define JSON_HEDLEY_PGI_VERSION JSON_HEDLEY_VERSION_ENCODE(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__) +#endif + +#if defined(JSON_HEDLEY_PGI_VERSION_CHECK) + #undef JSON_HEDLEY_PGI_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_PGI_VERSION) + #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PGI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_SUNPRO_VERSION) + #undef JSON_HEDLEY_SUNPRO_VERSION +#endif +#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), (__SUNPRO_C & 0xf) * 10) +#elif defined(__SUNPRO_C) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_C >> 8) & 0xf, (__SUNPRO_C >> 4) & 0xf, (__SUNPRO_C) & 0xf) +#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), (__SUNPRO_CC & 0xf) * 10) +#elif defined(__SUNPRO_CC) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_CC >> 8) & 0xf, (__SUNPRO_CC >> 4) & 0xf, (__SUNPRO_CC) & 0xf) +#endif + +#if defined(JSON_HEDLEY_SUNPRO_VERSION_CHECK) + #undef JSON_HEDLEY_SUNPRO_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_SUNPRO_VERSION) + #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_SUNPRO_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) + #undef JSON_HEDLEY_EMSCRIPTEN_VERSION +#endif +#if defined(__EMSCRIPTEN__) + #define JSON_HEDLEY_EMSCRIPTEN_VERSION JSON_HEDLEY_VERSION_ENCODE(__EMSCRIPTEN_major__, __EMSCRIPTEN_minor__, __EMSCRIPTEN_tiny__) +#endif + +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK) + #undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) + #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_EMSCRIPTEN_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_ARM_VERSION) + #undef JSON_HEDLEY_ARM_VERSION +#endif +#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION) + #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, (__ARMCOMPILER_VERSION % 1000000) / 10000, (__ARMCOMPILER_VERSION % 10000) / 100) +#elif defined(__CC_ARM) && defined(__ARMCC_VERSION) + #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, (__ARMCC_VERSION % 1000000) / 10000, (__ARMCC_VERSION % 10000) / 100) +#endif + +#if defined(JSON_HEDLEY_ARM_VERSION_CHECK) + #undef JSON_HEDLEY_ARM_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_ARM_VERSION) + #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_ARM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_IBM_VERSION) + #undef JSON_HEDLEY_IBM_VERSION +#endif +#if defined(__ibmxl__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ibmxl_version__, __ibmxl_release__, __ibmxl_modification__) +#elif defined(__xlC__) && defined(__xlC_ver__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff) +#elif defined(__xlC__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, 0) +#endif + +#if defined(JSON_HEDLEY_IBM_VERSION_CHECK) + #undef JSON_HEDLEY_IBM_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_IBM_VERSION) + #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IBM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_VERSION) + #undef JSON_HEDLEY_TI_VERSION +#endif +#if \ + defined(__TI_COMPILER_VERSION__) && \ + ( \ + defined(__TMS470__) || defined(__TI_ARM__) || \ + defined(__MSP430__) || \ + defined(__TMS320C2000__) \ + ) +#if (__TI_COMPILER_VERSION__ >= 16000000) + #define JSON_HEDLEY_TI_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif +#endif + +#if defined(JSON_HEDLEY_TI_VERSION_CHECK) + #undef JSON_HEDLEY_TI_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_VERSION) + #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL2000_VERSION) + #undef JSON_HEDLEY_TI_CL2000_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C2000__) + #define JSON_HEDLEY_TI_CL2000_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL2000_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL2000_VERSION) + #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL2000_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL430_VERSION) + #undef JSON_HEDLEY_TI_CL430_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__MSP430__) + #define JSON_HEDLEY_TI_CL430_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL430_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL430_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL430_VERSION) + #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL430_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) + #undef JSON_HEDLEY_TI_ARMCL_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && (defined(__TMS470__) || defined(__TI_ARM__)) + #define JSON_HEDLEY_TI_ARMCL_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION_CHECK) + #undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) + #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_ARMCL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL6X_VERSION) + #undef JSON_HEDLEY_TI_CL6X_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C6X__) + #define JSON_HEDLEY_TI_CL6X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL6X_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL6X_VERSION) + #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL6X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL7X_VERSION) + #undef JSON_HEDLEY_TI_CL7X_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__C7000__) + #define JSON_HEDLEY_TI_CL7X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL7X_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL7X_VERSION) + #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL7X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) + #undef JSON_HEDLEY_TI_CLPRU_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__PRU__) + #define JSON_HEDLEY_TI_CLPRU_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) + #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CLPRU_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_CRAY_VERSION) + #undef JSON_HEDLEY_CRAY_VERSION +#endif +#if defined(_CRAYC) + #if defined(_RELEASE_PATCHLEVEL) + #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, _RELEASE_PATCHLEVEL) + #else + #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, 0) + #endif +#endif + +#if defined(JSON_HEDLEY_CRAY_VERSION_CHECK) + #undef JSON_HEDLEY_CRAY_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_CRAY_VERSION) + #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_CRAY_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_IAR_VERSION) + #undef JSON_HEDLEY_IAR_VERSION +#endif +#if defined(__IAR_SYSTEMS_ICC__) + #if __VER__ > 1000 + #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE((__VER__ / 1000000), ((__VER__ / 1000) % 1000), (__VER__ % 1000)) + #else + #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE(VER / 100, __VER__ % 100, 0) + #endif +#endif + +#if defined(JSON_HEDLEY_IAR_VERSION_CHECK) + #undef JSON_HEDLEY_IAR_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_IAR_VERSION) + #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IAR_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TINYC_VERSION) + #undef JSON_HEDLEY_TINYC_VERSION +#endif +#if defined(__TINYC__) + #define JSON_HEDLEY_TINYC_VERSION JSON_HEDLEY_VERSION_ENCODE(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100) +#endif + +#if defined(JSON_HEDLEY_TINYC_VERSION_CHECK) + #undef JSON_HEDLEY_TINYC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TINYC_VERSION) + #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TINYC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_DMC_VERSION) + #undef JSON_HEDLEY_DMC_VERSION +#endif +#if defined(__DMC__) + #define JSON_HEDLEY_DMC_VERSION JSON_HEDLEY_VERSION_ENCODE(__DMC__ >> 8, (__DMC__ >> 4) & 0xf, __DMC__ & 0xf) +#endif + +#if defined(JSON_HEDLEY_DMC_VERSION_CHECK) + #undef JSON_HEDLEY_DMC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_DMC_VERSION) + #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_DMC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_COMPCERT_VERSION) + #undef JSON_HEDLEY_COMPCERT_VERSION +#endif +#if defined(__COMPCERT_VERSION__) + #define JSON_HEDLEY_COMPCERT_VERSION JSON_HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, (__COMPCERT_VERSION__ / 100) % 100, __COMPCERT_VERSION__ % 100) +#endif + +#if defined(JSON_HEDLEY_COMPCERT_VERSION_CHECK) + #undef JSON_HEDLEY_COMPCERT_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_COMPCERT_VERSION) + #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_COMPCERT_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_PELLES_VERSION) + #undef JSON_HEDLEY_PELLES_VERSION +#endif +#if defined(__POCC__) + #define JSON_HEDLEY_PELLES_VERSION JSON_HEDLEY_VERSION_ENCODE(__POCC__ / 100, __POCC__ % 100, 0) +#endif + +#if defined(JSON_HEDLEY_PELLES_VERSION_CHECK) + #undef JSON_HEDLEY_PELLES_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_PELLES_VERSION) + #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PELLES_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_GCC_VERSION) + #undef JSON_HEDLEY_GCC_VERSION +#endif +#if \ + defined(JSON_HEDLEY_GNUC_VERSION) && \ + !defined(__clang__) && \ + !defined(JSON_HEDLEY_INTEL_VERSION) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_ARM_VERSION) && \ + !defined(JSON_HEDLEY_TI_VERSION) && \ + !defined(JSON_HEDLEY_TI_ARMCL_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL430_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL2000_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL6X_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL7X_VERSION) && \ + !defined(JSON_HEDLEY_TI_CLPRU_VERSION) && \ + !defined(__COMPCERT__) + #define JSON_HEDLEY_GCC_VERSION JSON_HEDLEY_GNUC_VERSION +#endif + +#if defined(JSON_HEDLEY_GCC_VERSION_CHECK) + #undef JSON_HEDLEY_GCC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_GCC_VERSION) + #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) + #define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) __has_attribute(attribute) +#else + #define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) + #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) __has_attribute(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) + #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) __has_attribute(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE +#endif +#if \ + defined(__has_cpp_attribute) && \ + defined(__cplusplus) && \ + (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS) + #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS +#endif +#if !defined(__cplusplus) || !defined(__has_cpp_attribute) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#elif \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_IAR_VERSION) && \ + (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) && \ + (!defined(JSON_HEDLEY_MSVC_VERSION) || JSON_HEDLEY_MSVC_VERSION_CHECK(19,20,0)) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(ns::attribute) +#else + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE +#endif +#if defined(__has_cpp_attribute) && defined(__cplusplus) + #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE +#endif +#if defined(__has_cpp_attribute) && defined(__cplusplus) + #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_BUILTIN) + #undef JSON_HEDLEY_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_HAS_BUILTIN(builtin) __has_builtin(builtin) +#else + #define JSON_HEDLEY_HAS_BUILTIN(builtin) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_BUILTIN) + #undef JSON_HEDLEY_GNUC_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#else + #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_BUILTIN) + #undef JSON_HEDLEY_GCC_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#else + #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_FEATURE) + #undef JSON_HEDLEY_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_HAS_FEATURE(feature) __has_feature(feature) +#else + #define JSON_HEDLEY_HAS_FEATURE(feature) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_FEATURE) + #undef JSON_HEDLEY_GNUC_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#else + #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_FEATURE) + #undef JSON_HEDLEY_GCC_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#else + #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_EXTENSION) + #undef JSON_HEDLEY_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_HAS_EXTENSION(extension) __has_extension(extension) +#else + #define JSON_HEDLEY_HAS_EXTENSION(extension) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_EXTENSION) + #undef JSON_HEDLEY_GNUC_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#else + #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_EXTENSION) + #undef JSON_HEDLEY_GCC_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#else + #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_WARNING) + #undef JSON_HEDLEY_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_HAS_WARNING(warning) __has_warning(warning) +#else + #define JSON_HEDLEY_HAS_WARNING(warning) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_WARNING) + #undef JSON_HEDLEY_GNUC_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#else + #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_WARNING) + #undef JSON_HEDLEY_GCC_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#else + #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +/* JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ is for + HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ +#endif +#if defined(__cplusplus) +# if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat") +# if JSON_HEDLEY_HAS_WARNING("-Wc++17-extensions") +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# endif +# endif +#endif +#if !defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(x) x +#endif + +#if defined(JSON_HEDLEY_CONST_CAST) + #undef JSON_HEDLEY_CONST_CAST +#endif +#if defined(__cplusplus) +# define JSON_HEDLEY_CONST_CAST(T, expr) (const_cast(expr)) +#elif \ + JSON_HEDLEY_HAS_WARNING("-Wcast-qual") || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_CONST_CAST(T, expr) (__extension__ ({ \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL \ + ((T) (expr)); \ + JSON_HEDLEY_DIAGNOSTIC_POP \ + })) +#else +# define JSON_HEDLEY_CONST_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_REINTERPRET_CAST) + #undef JSON_HEDLEY_REINTERPRET_CAST +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) (reinterpret_cast(expr)) +#else + #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_STATIC_CAST) + #undef JSON_HEDLEY_STATIC_CAST +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_STATIC_CAST(T, expr) (static_cast(expr)) +#else + #define JSON_HEDLEY_STATIC_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_CPP_CAST) + #undef JSON_HEDLEY_CPP_CAST +#endif +#if defined(__cplusplus) +# if JSON_HEDLEY_HAS_WARNING("-Wold-style-cast") +# define JSON_HEDLEY_CPP_CAST(T, expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wold-style-cast\"") \ + ((T) (expr)) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# elif JSON_HEDLEY_IAR_VERSION_CHECK(8,3,0) +# define JSON_HEDLEY_CPP_CAST(T, expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("diag_suppress=Pe137") \ + JSON_HEDLEY_DIAGNOSTIC_POP \ +# else +# define JSON_HEDLEY_CPP_CAST(T, expr) ((T) (expr)) +# endif +#else +# define JSON_HEDLEY_CPP_CAST(T, expr) (expr) +#endif + +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + defined(__clang__) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,17) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(8,0,0) || \ + (JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) && defined(__C99_PRAGMA_OPERATOR)) + #define JSON_HEDLEY_PRAGMA(value) _Pragma(#value) +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_PRAGMA(value) __pragma(value) +#else + #define JSON_HEDLEY_PRAGMA(value) +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_PUSH) + #undef JSON_HEDLEY_DIAGNOSTIC_PUSH +#endif +#if defined(JSON_HEDLEY_DIAGNOSTIC_POP) + #undef JSON_HEDLEY_DIAGNOSTIC_POP +#endif +#if defined(__clang__) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("clang diagnostic pop") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(push)) + #define JSON_HEDLEY_DIAGNOSTIC_POP __pragma(warning(pop)) +#elif JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("pop") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,4,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("diag_push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("diag_pop") +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") +#else + #define JSON_HEDLEY_DIAGNOSTIC_PUSH + #define JSON_HEDLEY_DIAGNOSTIC_POP +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wdeprecated-declarations") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warning(disable:1478 1786)") +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:4996)) +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1291,1718") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && !defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,E_DEPRECATED_ATT,E_DEPRECATED_ATT_MESS)") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,symdeprecated,symdeprecated2)") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress=Pe1444,Pe1215") +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warn(disable:2241)") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)") +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068)) +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(16,9,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-attributes") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("clang diagnostic ignored \"-Wunknown-attributes\"") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("warning(disable:1292)") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:5030)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("error_messages(off,attrskipunsup)") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1173") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress=Pe1097") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wcast-qual") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("clang diagnostic ignored \"-Wcast-qual\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("warning(disable:2203 2331)") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("GCC diagnostic ignored \"-Wcast-qual\"") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#endif + +#if defined(JSON_HEDLEY_DEPRECATED) + #undef JSON_HEDLEY_DEPRECATED +#endif +#if defined(JSON_HEDLEY_DEPRECATED_FOR) + #undef JSON_HEDLEY_DEPRECATED_FOR +#endif +#if JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) + #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated("Since " # since)) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated("Since " #since "; use " #replacement)) +#elif defined(__cplusplus) && (__cplusplus >= 201402L) + #define JSON_HEDLEY_DEPRECATED(since) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since)]]) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since "; use " #replacement)]]) +#elif \ + JSON_HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) + #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__("Since " #since))) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__("Since " #since "; use " #replacement))) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(deprecated) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__)) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_PELLES_VERSION_CHECK(6,50,0) + #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated) +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DEPRECATED(since) _Pragma("deprecated") + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) _Pragma("deprecated") +#else + #define JSON_HEDLEY_DEPRECATED(since) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) +#endif + +#if defined(JSON_HEDLEY_UNAVAILABLE) + #undef JSON_HEDLEY_UNAVAILABLE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(warning) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_UNAVAILABLE(available_since) __attribute__((__warning__("Not available until " #available_since))) +#else + #define JSON_HEDLEY_UNAVAILABLE(available_since) +#endif + +#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT) + #undef JSON_HEDLEY_WARN_UNUSED_RESULT +#endif +#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT_MSG) + #undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG +#endif +#if (JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) >= 201907L) + #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard(msg)]]) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) + #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) __attribute__((__warn_unused_result__)) +#elif defined(_Check_return_) /* SAL */ + #define JSON_HEDLEY_WARN_UNUSED_RESULT _Check_return_ + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) _Check_return_ +#else + #define JSON_HEDLEY_WARN_UNUSED_RESULT + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) +#endif + +#if defined(JSON_HEDLEY_SENTINEL) + #undef JSON_HEDLEY_SENTINEL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(sentinel) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) + #define JSON_HEDLEY_SENTINEL(position) __attribute__((__sentinel__(position))) +#else + #define JSON_HEDLEY_SENTINEL(position) +#endif + +#if defined(JSON_HEDLEY_NO_RETURN) + #undef JSON_HEDLEY_NO_RETURN +#endif +#if JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_NO_RETURN __noreturn +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) +#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L + #define JSON_HEDLEY_NO_RETURN _Noreturn +#elif defined(__cplusplus) && (__cplusplus >= 201103L) + #define JSON_HEDLEY_NO_RETURN JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[noreturn]]) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(noreturn) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,2,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_NO_RETURN _Pragma("does_not_return") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) + #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) + #define JSON_HEDLEY_NO_RETURN _Pragma("FUNC_NEVER_RETURNS;") +#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) + #define JSON_HEDLEY_NO_RETURN __attribute((noreturn)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) + #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) +#else + #define JSON_HEDLEY_NO_RETURN +#endif + +#if defined(JSON_HEDLEY_NO_ESCAPE) + #undef JSON_HEDLEY_NO_ESCAPE +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(noescape) + #define JSON_HEDLEY_NO_ESCAPE __attribute__((__noescape__)) +#else + #define JSON_HEDLEY_NO_ESCAPE +#endif + +#if defined(JSON_HEDLEY_UNREACHABLE) + #undef JSON_HEDLEY_UNREACHABLE +#endif +#if defined(JSON_HEDLEY_UNREACHABLE_RETURN) + #undef JSON_HEDLEY_UNREACHABLE_RETURN +#endif +#if defined(JSON_HEDLEY_ASSUME) + #undef JSON_HEDLEY_ASSUME +#endif +#if \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_ASSUME(expr) __assume(expr) +#elif JSON_HEDLEY_HAS_BUILTIN(__builtin_assume) + #define JSON_HEDLEY_ASSUME(expr) __builtin_assume(expr) +#elif \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) + #if defined(__cplusplus) + #define JSON_HEDLEY_ASSUME(expr) std::_nassert(expr) + #else + #define JSON_HEDLEY_ASSUME(expr) _nassert(expr) + #endif +#endif +#if \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_unreachable) && (!defined(JSON_HEDLEY_ARM_VERSION))) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,10,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,5) + #define JSON_HEDLEY_UNREACHABLE() __builtin_unreachable() +#elif defined(JSON_HEDLEY_ASSUME) + #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) +#endif +#if !defined(JSON_HEDLEY_ASSUME) + #if defined(JSON_HEDLEY_UNREACHABLE) + #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, ((expr) ? 1 : (JSON_HEDLEY_UNREACHABLE(), 1))) + #else + #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, expr) + #endif +#endif +#if defined(JSON_HEDLEY_UNREACHABLE) + #if \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (JSON_HEDLEY_STATIC_CAST(void, JSON_HEDLEY_ASSUME(0)), (value)) + #else + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) JSON_HEDLEY_UNREACHABLE() + #endif +#else + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (value) +#endif +#if !defined(JSON_HEDLEY_UNREACHABLE) + #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) +#endif + +JSON_HEDLEY_DIAGNOSTIC_PUSH +#if JSON_HEDLEY_HAS_WARNING("-Wpedantic") + #pragma clang diagnostic ignored "-Wpedantic" +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic") && defined(__cplusplus) + #pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif +#if JSON_HEDLEY_GCC_HAS_WARNING("-Wvariadic-macros",4,0,0) + #if defined(__clang__) + #pragma clang diagnostic ignored "-Wvariadic-macros" + #elif defined(JSON_HEDLEY_GCC_VERSION) + #pragma GCC diagnostic ignored "-Wvariadic-macros" + #endif +#endif +#if defined(JSON_HEDLEY_NON_NULL) + #undef JSON_HEDLEY_NON_NULL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(nonnull) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) + #define JSON_HEDLEY_NON_NULL(...) __attribute__((__nonnull__(__VA_ARGS__))) +#else + #define JSON_HEDLEY_NON_NULL(...) +#endif +JSON_HEDLEY_DIAGNOSTIC_POP + +#if defined(JSON_HEDLEY_PRINTF_FORMAT) + #undef JSON_HEDLEY_PRINTF_FORMAT +#endif +#if defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && !defined(__USE_MINGW_ANSI_STDIO) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(ms_printf, string_idx, first_to_check))) +#elif defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && defined(__USE_MINGW_ANSI_STDIO) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(gnu_printf, string_idx, first_to_check))) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(format) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(__printf__, string_idx, first_to_check))) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(6,0,0) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __declspec(vaformat(printf,string_idx,first_to_check)) +#else + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) +#endif + +#if defined(JSON_HEDLEY_CONSTEXPR) + #undef JSON_HEDLEY_CONSTEXPR +#endif +#if defined(__cplusplus) + #if __cplusplus >= 201103L + #define JSON_HEDLEY_CONSTEXPR JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(constexpr) + #endif +#endif +#if !defined(JSON_HEDLEY_CONSTEXPR) + #define JSON_HEDLEY_CONSTEXPR +#endif + +#if defined(JSON_HEDLEY_PREDICT) + #undef JSON_HEDLEY_PREDICT +#endif +#if defined(JSON_HEDLEY_LIKELY) + #undef JSON_HEDLEY_LIKELY +#endif +#if defined(JSON_HEDLEY_UNLIKELY) + #undef JSON_HEDLEY_UNLIKELY +#endif +#if defined(JSON_HEDLEY_UNPREDICTABLE) + #undef JSON_HEDLEY_UNPREDICTABLE +#endif +#if JSON_HEDLEY_HAS_BUILTIN(__builtin_unpredictable) + #define JSON_HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable((expr)) +#endif +#if \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(9,0,0) +# define JSON_HEDLEY_PREDICT(expr, value, probability) __builtin_expect_with_probability( (expr), (value), (probability)) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) __builtin_expect_with_probability(!!(expr), 1 , (probability)) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) __builtin_expect_with_probability(!!(expr), 0 , (probability)) +# define JSON_HEDLEY_LIKELY(expr) __builtin_expect (!!(expr), 1 ) +# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect (!!(expr), 0 ) +#elif \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_expect) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,27) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) +# define JSON_HEDLEY_PREDICT(expr, expected, probability) \ + (((probability) >= 0.9) ? __builtin_expect((expr), (expected)) : (JSON_HEDLEY_STATIC_CAST(void, expected), (expr))) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) \ + (__extension__ ({ \ + double hedley_probability_ = (probability); \ + ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 1) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0) : !!(expr))); \ + })) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) \ + (__extension__ ({ \ + double hedley_probability_ = (probability); \ + ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 0) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1) : !!(expr))); \ + })) +# define JSON_HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1) +# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0) +#else +# define JSON_HEDLEY_PREDICT(expr, expected, probability) (JSON_HEDLEY_STATIC_CAST(void, expected), (expr)) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) (!!(expr)) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) (!!(expr)) +# define JSON_HEDLEY_LIKELY(expr) (!!(expr)) +# define JSON_HEDLEY_UNLIKELY(expr) (!!(expr)) +#endif +#if !defined(JSON_HEDLEY_UNPREDICTABLE) + #define JSON_HEDLEY_UNPREDICTABLE(expr) JSON_HEDLEY_PREDICT(expr, 1, 0.5) +#endif + +#if defined(JSON_HEDLEY_MALLOC) + #undef JSON_HEDLEY_MALLOC +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(malloc) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_MALLOC __attribute__((__malloc__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_MALLOC _Pragma("returns_new_memory") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(14, 0, 0) + #define JSON_HEDLEY_MALLOC __declspec(restrict) +#else + #define JSON_HEDLEY_MALLOC +#endif + +#if defined(JSON_HEDLEY_PURE) + #undef JSON_HEDLEY_PURE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(pure) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(2,96,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) +# define JSON_HEDLEY_PURE __attribute__((__pure__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) +# define JSON_HEDLEY_PURE _Pragma("does_not_write_global_data") +#elif defined(__cplusplus) && \ + ( \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) \ + ) +# define JSON_HEDLEY_PURE _Pragma("FUNC_IS_PURE;") +#else +# define JSON_HEDLEY_PURE +#endif + +#if defined(JSON_HEDLEY_CONST) + #undef JSON_HEDLEY_CONST +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(const) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(2,5,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_CONST __attribute__((__const__)) +#elif \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_CONST _Pragma("no_side_effect") +#else + #define JSON_HEDLEY_CONST JSON_HEDLEY_PURE +#endif + +#if defined(JSON_HEDLEY_RESTRICT) + #undef JSON_HEDLEY_RESTRICT +#endif +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__cplusplus) + #define JSON_HEDLEY_RESTRICT restrict +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,4) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ + defined(__clang__) + #define JSON_HEDLEY_RESTRICT __restrict +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,3,0) && !defined(__cplusplus) + #define JSON_HEDLEY_RESTRICT _Restrict +#else + #define JSON_HEDLEY_RESTRICT +#endif + +#if defined(JSON_HEDLEY_INLINE) + #undef JSON_HEDLEY_INLINE +#endif +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + (defined(__cplusplus) && (__cplusplus >= 199711L)) + #define JSON_HEDLEY_INLINE inline +#elif \ + defined(JSON_HEDLEY_GCC_VERSION) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(6,2,0) + #define JSON_HEDLEY_INLINE __inline__ +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,1,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_INLINE __inline +#else + #define JSON_HEDLEY_INLINE +#endif + +#if defined(JSON_HEDLEY_ALWAYS_INLINE) + #undef JSON_HEDLEY_ALWAYS_INLINE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(always_inline) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) +# define JSON_HEDLEY_ALWAYS_INLINE __attribute__((__always_inline__)) JSON_HEDLEY_INLINE +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) +# define JSON_HEDLEY_ALWAYS_INLINE __forceinline +#elif defined(__cplusplus) && \ + ( \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) \ + ) +# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("FUNC_ALWAYS_INLINE;") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("inline=forced") +#else +# define JSON_HEDLEY_ALWAYS_INLINE JSON_HEDLEY_INLINE +#endif + +#if defined(JSON_HEDLEY_NEVER_INLINE) + #undef JSON_HEDLEY_NEVER_INLINE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(noinline) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_NEVER_INLINE __attribute__((__noinline__)) +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) + #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(10,2,0) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("noinline") +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("FUNC_CANNOT_INLINE;") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("inline=never") +#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) + #define JSON_HEDLEY_NEVER_INLINE __attribute((noinline)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) + #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) +#else + #define JSON_HEDLEY_NEVER_INLINE +#endif + +#if defined(JSON_HEDLEY_PRIVATE) + #undef JSON_HEDLEY_PRIVATE +#endif +#if defined(JSON_HEDLEY_PUBLIC) + #undef JSON_HEDLEY_PUBLIC +#endif +#if defined(JSON_HEDLEY_IMPORT) + #undef JSON_HEDLEY_IMPORT +#endif +#if defined(_WIN32) || defined(__CYGWIN__) +# define JSON_HEDLEY_PRIVATE +# define JSON_HEDLEY_PUBLIC __declspec(dllexport) +# define JSON_HEDLEY_IMPORT __declspec(dllimport) +#else +# if \ + JSON_HEDLEY_HAS_ATTRIBUTE(visibility) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + ( \ + defined(__TI_EABI__) && \ + ( \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) \ + ) \ + ) +# define JSON_HEDLEY_PRIVATE __attribute__((__visibility__("hidden"))) +# define JSON_HEDLEY_PUBLIC __attribute__((__visibility__("default"))) +# else +# define JSON_HEDLEY_PRIVATE +# define JSON_HEDLEY_PUBLIC +# endif +# define JSON_HEDLEY_IMPORT extern +#endif + +#if defined(JSON_HEDLEY_NO_THROW) + #undef JSON_HEDLEY_NO_THROW +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(nothrow) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_NO_THROW __attribute__((__nothrow__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) + #define JSON_HEDLEY_NO_THROW __declspec(nothrow) +#else + #define JSON_HEDLEY_NO_THROW +#endif + +#if defined(JSON_HEDLEY_FALL_THROUGH) + #undef JSON_HEDLEY_FALL_THROUGH +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(fallthrough) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(7,0,0) + #define JSON_HEDLEY_FALL_THROUGH __attribute__((__fallthrough__)) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(clang,fallthrough) + #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[clang::fallthrough]]) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(fallthrough) + #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[fallthrough]]) +#elif defined(__fallthrough) /* SAL */ + #define JSON_HEDLEY_FALL_THROUGH __fallthrough +#else + #define JSON_HEDLEY_FALL_THROUGH +#endif + +#if defined(JSON_HEDLEY_RETURNS_NON_NULL) + #undef JSON_HEDLEY_RETURNS_NON_NULL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) + #define JSON_HEDLEY_RETURNS_NON_NULL __attribute__((__returns_nonnull__)) +#elif defined(_Ret_notnull_) /* SAL */ + #define JSON_HEDLEY_RETURNS_NON_NULL _Ret_notnull_ +#else + #define JSON_HEDLEY_RETURNS_NON_NULL +#endif + +#if defined(JSON_HEDLEY_ARRAY_PARAM) + #undef JSON_HEDLEY_ARRAY_PARAM +#endif +#if \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ + !defined(__STDC_NO_VLA__) && \ + !defined(__cplusplus) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_TINYC_VERSION) + #define JSON_HEDLEY_ARRAY_PARAM(name) (name) +#else + #define JSON_HEDLEY_ARRAY_PARAM(name) +#endif + +#if defined(JSON_HEDLEY_IS_CONSTANT) + #undef JSON_HEDLEY_IS_CONSTANT +#endif +#if defined(JSON_HEDLEY_REQUIRE_CONSTEXPR) + #undef JSON_HEDLEY_REQUIRE_CONSTEXPR +#endif +/* JSON_HEDLEY_IS_CONSTEXPR_ is for + HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ +#if defined(JSON_HEDLEY_IS_CONSTEXPR_) + #undef JSON_HEDLEY_IS_CONSTEXPR_ +#endif +#if \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_constant_p) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,19) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) && !defined(__cplusplus)) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) + #define JSON_HEDLEY_IS_CONSTANT(expr) __builtin_constant_p(expr) +#endif +#if !defined(__cplusplus) +# if \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,24) +#if defined(__INTPTR_TYPE__) + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0)), int*) +#else + #include + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((intptr_t) ((expr) * 0)) : (int*) 0)), int*) +#endif +# elif \ + ( \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \ + !defined(JSON_HEDLEY_SUNPRO_VERSION) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_IAR_VERSION)) || \ + JSON_HEDLEY_HAS_EXTENSION(c_generic_selections) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,3,0) +#if defined(__INTPTR_TYPE__) + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0), int*: 1, void*: 0) +#else + #include + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((intptr_t) * 0) : (int*) 0), int*: 1, void*: 0) +#endif +# elif \ + defined(JSON_HEDLEY_GCC_VERSION) || \ + defined(JSON_HEDLEY_INTEL_VERSION) || \ + defined(JSON_HEDLEY_TINYC_VERSION) || \ + defined(JSON_HEDLEY_TI_ARMCL_VERSION) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(18,12,0) || \ + defined(JSON_HEDLEY_TI_CL2000_VERSION) || \ + defined(JSON_HEDLEY_TI_CL6X_VERSION) || \ + defined(JSON_HEDLEY_TI_CL7X_VERSION) || \ + defined(JSON_HEDLEY_TI_CLPRU_VERSION) || \ + defined(__clang__) +# define JSON_HEDLEY_IS_CONSTEXPR_(expr) ( \ + sizeof(void) != \ + sizeof(*( \ + 1 ? \ + ((void*) ((expr) * 0L) ) : \ +((struct { char v[sizeof(void) * 2]; } *) 1) \ + ) \ + ) \ + ) +# endif +#endif +#if defined(JSON_HEDLEY_IS_CONSTEXPR_) + #if !defined(JSON_HEDLEY_IS_CONSTANT) + #define JSON_HEDLEY_IS_CONSTANT(expr) JSON_HEDLEY_IS_CONSTEXPR_(expr) + #endif + #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (JSON_HEDLEY_IS_CONSTEXPR_(expr) ? (expr) : (-1)) +#else + #if !defined(JSON_HEDLEY_IS_CONSTANT) + #define JSON_HEDLEY_IS_CONSTANT(expr) (0) + #endif + #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (expr) +#endif + +#if defined(JSON_HEDLEY_BEGIN_C_DECLS) + #undef JSON_HEDLEY_BEGIN_C_DECLS +#endif +#if defined(JSON_HEDLEY_END_C_DECLS) + #undef JSON_HEDLEY_END_C_DECLS +#endif +#if defined(JSON_HEDLEY_C_DECL) + #undef JSON_HEDLEY_C_DECL +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_BEGIN_C_DECLS extern "C" { + #define JSON_HEDLEY_END_C_DECLS } + #define JSON_HEDLEY_C_DECL extern "C" +#else + #define JSON_HEDLEY_BEGIN_C_DECLS + #define JSON_HEDLEY_END_C_DECLS + #define JSON_HEDLEY_C_DECL +#endif + +#if defined(JSON_HEDLEY_STATIC_ASSERT) + #undef JSON_HEDLEY_STATIC_ASSERT +#endif +#if \ + !defined(__cplusplus) && ( \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \ + JSON_HEDLEY_HAS_FEATURE(c_static_assert) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(6,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + defined(_Static_assert) \ + ) +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) _Static_assert(expr, message) +#elif \ + (defined(__cplusplus) && (__cplusplus >= 201103L)) || \ + JSON_HEDLEY_MSVC_VERSION_CHECK(16,0,0) +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(static_assert(expr, message)) +#else +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) +#endif + +#if defined(JSON_HEDLEY_NULL) + #undef JSON_HEDLEY_NULL +#endif +#if defined(__cplusplus) + #if __cplusplus >= 201103L + #define JSON_HEDLEY_NULL JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(nullptr) + #elif defined(NULL) + #define JSON_HEDLEY_NULL NULL + #else + #define JSON_HEDLEY_NULL JSON_HEDLEY_STATIC_CAST(void*, 0) + #endif +#elif defined(NULL) + #define JSON_HEDLEY_NULL NULL +#else + #define JSON_HEDLEY_NULL ((void*) 0) +#endif + +#if defined(JSON_HEDLEY_MESSAGE) + #undef JSON_HEDLEY_MESSAGE +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define JSON_HEDLEY_MESSAGE(msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ + JSON_HEDLEY_PRAGMA(message msg) \ + JSON_HEDLEY_DIAGNOSTIC_POP +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message msg) +#elif JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(_CRI message msg) +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#else +# define JSON_HEDLEY_MESSAGE(msg) +#endif + +#if defined(JSON_HEDLEY_WARNING) + #undef JSON_HEDLEY_WARNING +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define JSON_HEDLEY_WARNING(msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ + JSON_HEDLEY_PRAGMA(clang warning msg) \ + JSON_HEDLEY_DIAGNOSTIC_POP +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,8,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(GCC warning msg) +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#else +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_MESSAGE(msg) +#endif + +#if defined(JSON_HEDLEY_REQUIRE) + #undef JSON_HEDLEY_REQUIRE +#endif +#if defined(JSON_HEDLEY_REQUIRE_MSG) + #undef JSON_HEDLEY_REQUIRE_MSG +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(diagnose_if) +# if JSON_HEDLEY_HAS_WARNING("-Wgcc-compat") +# define JSON_HEDLEY_REQUIRE(expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ + __attribute__((diagnose_if(!(expr), #expr, "error"))) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ + __attribute__((diagnose_if(!(expr), msg, "error"))) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_REQUIRE(expr) __attribute__((diagnose_if(!(expr), #expr, "error"))) +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) __attribute__((diagnose_if(!(expr), msg, "error"))) +# endif +#else +# define JSON_HEDLEY_REQUIRE(expr) +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) +#endif -// #include +#if defined(JSON_HEDLEY_FLAGS) + #undef JSON_HEDLEY_FLAGS +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(flag_enum) + #define JSON_HEDLEY_FLAGS __attribute__((__flag_enum__)) +#endif +#if defined(JSON_HEDLEY_FLAGS_CAST) + #undef JSON_HEDLEY_FLAGS_CAST +#endif +#if JSON_HEDLEY_INTEL_VERSION_CHECK(19,0,0) +# define JSON_HEDLEY_FLAGS_CAST(T, expr) (__extension__ ({ \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("warning(disable:188)") \ + ((T) (expr)); \ + JSON_HEDLEY_DIAGNOSTIC_POP \ + })) +#else +# define JSON_HEDLEY_FLAGS_CAST(T, expr) JSON_HEDLEY_STATIC_CAST(T, expr) +#endif -#include // size_t +#if defined(JSON_HEDLEY_EMPTY_BASES) + #undef JSON_HEDLEY_EMPTY_BASES +#endif +#if JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,23918) && !JSON_HEDLEY_MSVC_VERSION_CHECK(20,0,0) + #define JSON_HEDLEY_EMPTY_BASES __declspec(empty_bases) +#else + #define JSON_HEDLEY_EMPTY_BASES +#endif -namespace nlohmann -{ -namespace detail -{ -/// struct to capture the start position of the current token -struct position_t -{ - /// the total number of characters read - std::size_t chars_read_total = 0; - /// the number of characters read in the current line - std::size_t chars_read_current_line = 0; - /// the number of lines read - std::size_t lines_read = 0; +/* Remaining macros are deprecated. */ - /// conversion to size_t to preserve SAX interface - constexpr operator size_t() const - { - return chars_read_total; +#if defined(JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK) + #undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK +#endif +#if defined(__clang__) + #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) (0) +#else + #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_CLANG_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_BUILTIN) + #undef JSON_HEDLEY_CLANG_HAS_BUILTIN +#endif +#define JSON_HEDLEY_CLANG_HAS_BUILTIN(builtin) JSON_HEDLEY_HAS_BUILTIN(builtin) + +#if defined(JSON_HEDLEY_CLANG_HAS_FEATURE) + #undef JSON_HEDLEY_CLANG_HAS_FEATURE +#endif +#define JSON_HEDLEY_CLANG_HAS_FEATURE(feature) JSON_HEDLEY_HAS_FEATURE(feature) + +#if defined(JSON_HEDLEY_CLANG_HAS_EXTENSION) + #undef JSON_HEDLEY_CLANG_HAS_EXTENSION +#endif +#define JSON_HEDLEY_CLANG_HAS_EXTENSION(extension) JSON_HEDLEY_HAS_EXTENSION(extension) + +#if defined(JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_WARNING) + #undef JSON_HEDLEY_CLANG_HAS_WARNING +#endif +#define JSON_HEDLEY_CLANG_HAS_WARNING(warning) JSON_HEDLEY_HAS_WARNING(warning) + +#endif /* !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < X) */ + + +// This file contains all internal macro definitions +// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them + +// exclude unsupported compilers +#if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK) + #if defined(__clang__) + #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400 + #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER)) + #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800 + #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #endif +#endif + +// C++ language standard detection +#if (defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 +#elif (defined(__cplusplus) && __cplusplus >= 201402L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1) + #define JSON_HAS_CPP_14 +#endif + +// disable float-equal warnings on GCC/clang +#if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__) + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wfloat-equal" +#endif + +// disable documentation warnings on clang +#if defined(__clang__) + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wdocumentation" +#endif + +// allow to disable exceptions +#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION) + #define JSON_THROW(exception) throw exception + #define JSON_TRY try + #define JSON_CATCH(exception) catch(exception) + #define JSON_INTERNAL_CATCH(exception) catch(exception) +#else + #include + #define JSON_THROW(exception) std::abort() + #define JSON_TRY if(true) + #define JSON_CATCH(exception) if(false) + #define JSON_INTERNAL_CATCH(exception) if(false) +#endif + +// override exception macros +#if defined(JSON_THROW_USER) + #undef JSON_THROW + #define JSON_THROW JSON_THROW_USER +#endif +#if defined(JSON_TRY_USER) + #undef JSON_TRY + #define JSON_TRY JSON_TRY_USER +#endif +#if defined(JSON_CATCH_USER) + #undef JSON_CATCH + #define JSON_CATCH JSON_CATCH_USER + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_CATCH_USER +#endif +#if defined(JSON_INTERNAL_CATCH_USER) + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER +#endif + +/*! +@brief macro to briefly define a mapping between an enum and JSON +@def NLOHMANN_JSON_SERIALIZE_ENUM +@since version 3.4.0 +*/ +#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \ + template \ + inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \ + { \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [e](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.first == e; \ + }); \ + j = ((it != std::end(m)) ? it : std::begin(m))->second; \ + } \ + template \ + inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \ + { \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [&j](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.second == j; \ + }); \ + e = ((it != std::end(m)) ? it : std::begin(m))->first; \ } -}; -} // namespace detail -} // namespace nlohmann +// Ugly macros to avoid uglier copy-paste when specializing basic_json. They +// may be removed in the future once the class is split. + +#define NLOHMANN_BASIC_JSON_TPL_DECLARATION \ + template class ObjectType, \ + template class ArrayType, \ + class StringType, class BooleanType, class NumberIntegerType, \ + class NumberUnsignedType, class NumberFloatType, \ + template class AllocatorType, \ + template class JSONSerializer, \ + class BinaryType> + +#define NLOHMANN_BASIC_JSON_TPL \ + basic_json namespace nlohmann @@ -146,6 +2190,7 @@ class exception : public std::exception { public: /// returns the explanatory string + JSON_HEDLEY_RETURNS_NON_NULL const char* what() const noexcept override { return m.what(); @@ -155,6 +2200,7 @@ class exception : public std::exception const int id; protected: + JSON_HEDLEY_NON_NULL(3) exception(int id_, const char* what_arg) : id(id_), m(what_arg) {} static std::string name(const std::string& ename, int id_) @@ -307,6 +2353,7 @@ class invalid_iterator : public exception } private: + JSON_HEDLEY_NON_NULL(3) invalid_iterator(int id_, const char* what_arg) : exception(id_, what_arg) {} }; @@ -360,6 +2407,7 @@ class type_error : public exception } private: + JSON_HEDLEY_NON_NULL(3) type_error(int id_, const char* what_arg) : exception(id_, what_arg) {} }; @@ -406,6 +2454,7 @@ class out_of_range : public exception } private: + JSON_HEDLEY_NON_NULL(3) out_of_range(int id_, const char* what_arg) : exception(id_, what_arg) {} }; @@ -442,172 +2491,24 @@ class other_error : public exception return other_error(id_, w.c_str()); } - private: - other_error(int id_, const char* what_arg) : exception(id_, what_arg) {} -}; -} // namespace detail -} // namespace nlohmann - -// #include - - -#include // pair - -// This file contains all internal macro definitions -// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them - -// exclude unsupported compilers -#if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK) - #if defined(__clang__) - #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400 - #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers" - #endif - #elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER)) - #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800 - #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers" - #endif - #endif -#endif - -// disable float-equal warnings on GCC/clang -#if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__) - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wfloat-equal" -#endif - -// disable documentation warnings on clang -#if defined(__clang__) - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wdocumentation" -#endif - -// allow for portable deprecation warnings -#if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__) - #define JSON_DEPRECATED __attribute__((deprecated)) -#elif defined(_MSC_VER) - #define JSON_DEPRECATED __declspec(deprecated) -#else - #define JSON_DEPRECATED -#endif - -// allow for portable nodiscard warnings -#if defined(__has_cpp_attribute) - #if __has_cpp_attribute(nodiscard) - #define JSON_NODISCARD [[nodiscard]] - #elif __has_cpp_attribute(gnu::warn_unused_result) - #define JSON_NODISCARD [[gnu::warn_unused_result]] - #else - #define JSON_NODISCARD - #endif -#else - #define JSON_NODISCARD -#endif - -// allow to disable exceptions -#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION) - #define JSON_THROW(exception) throw exception - #define JSON_TRY try - #define JSON_CATCH(exception) catch(exception) - #define JSON_INTERNAL_CATCH(exception) catch(exception) -#else - #include - #define JSON_THROW(exception) std::abort() - #define JSON_TRY if(true) - #define JSON_CATCH(exception) if(false) - #define JSON_INTERNAL_CATCH(exception) if(false) -#endif - -// override exception macros -#if defined(JSON_THROW_USER) - #undef JSON_THROW - #define JSON_THROW JSON_THROW_USER -#endif -#if defined(JSON_TRY_USER) - #undef JSON_TRY - #define JSON_TRY JSON_TRY_USER -#endif -#if defined(JSON_CATCH_USER) - #undef JSON_CATCH - #define JSON_CATCH JSON_CATCH_USER - #undef JSON_INTERNAL_CATCH - #define JSON_INTERNAL_CATCH JSON_CATCH_USER -#endif -#if defined(JSON_INTERNAL_CATCH_USER) - #undef JSON_INTERNAL_CATCH - #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER -#endif - -// manual branch prediction -#if defined(__clang__) || defined(__GNUC__) || defined(__GNUG__) - #define JSON_LIKELY(x) __builtin_expect(x, 1) - #define JSON_UNLIKELY(x) __builtin_expect(x, 0) -#else - #define JSON_LIKELY(x) x - #define JSON_UNLIKELY(x) x -#endif - -// C++ language standard detection -#if (defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464 - #define JSON_HAS_CPP_17 - #define JSON_HAS_CPP_14 -#elif (defined(__cplusplus) && __cplusplus >= 201402L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1) - #define JSON_HAS_CPP_14 -#endif - -/*! -@brief macro to briefly define a mapping between an enum and JSON -@def NLOHMANN_JSON_SERIALIZE_ENUM -@since version 3.4.0 -*/ -#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \ - template \ - inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \ - { \ - static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ - static const std::pair m[] = __VA_ARGS__; \ - auto it = std::find_if(std::begin(m), std::end(m), \ - [e](const std::pair& ej_pair) -> bool \ - { \ - return ej_pair.first == e; \ - }); \ - j = ((it != std::end(m)) ? it : std::begin(m))->second; \ - } \ - template \ - inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \ - { \ - static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ - static const std::pair m[] = __VA_ARGS__; \ - auto it = std::find_if(std::begin(m), std::end(m), \ - [j](const std::pair& ej_pair) -> bool \ - { \ - return ej_pair.second == j; \ - }); \ - e = ((it != std::end(m)) ? it : std::begin(m))->first; \ - } - -// Ugly macros to avoid uglier copy-paste when specializing basic_json. They -// may be removed in the future once the class is split. - -#define NLOHMANN_BASIC_JSON_TPL_DECLARATION \ - template class ObjectType, \ - template class ArrayType, \ - class StringType, class BooleanType, class NumberIntegerType, \ - class NumberUnsignedType, class NumberFloatType, \ - template class AllocatorType, \ - template class JSONSerializer> + private: + JSON_HEDLEY_NON_NULL(3) + other_error(int id_, const char* what_arg) : exception(id_, what_arg) {} +}; +} // namespace detail +} // namespace nlohmann -#define NLOHMANN_BASIC_JSON_TPL \ - basic_json +// #include // #include -#include // not #include // size_t #include // conditional, enable_if, false_type, integral_constant, is_constructible, is_integral, is_same, remove_cv, remove_reference, true_type +// #include + + namespace nlohmann { namespace detail @@ -669,11 +2570,12 @@ constexpr T static_const::value; // #include -#include // not #include // numeric_limits #include // false_type, is_constructible, is_integral, is_same, true_type #include // declval +// #include + // #include @@ -754,7 +2656,7 @@ struct iterator_traits::value>> // #include -// http://en.cppreference.com/w/cpp/experimental/is_detected +// https://en.cppreference.com/w/cpp/experimental/is_detected namespace nlohmann { namespace detail @@ -843,7 +2745,8 @@ template class ObjectType = class NumberFloatType = double, template class AllocatorType = std::allocator, template class JSONSerializer = - adl_serializer> + adl_serializer, + class BinaryType = std::vector> class basic_json; /*! @@ -904,6 +2807,19 @@ template struct is_basic_json : std::false_type {}; NLOHMANN_BASIC_JSON_TPL_DECLARATION struct is_basic_json : std::true_type {}; +////////////////////// +// json_ref helpers // +////////////////////// + +template +class json_ref; + +template +struct is_json_ref : std::false_type {}; + +template +struct is_json_ref> : std::true_type {}; + ////////////////////////// // aliases for detected // ////////////////////////// @@ -1055,10 +2971,19 @@ struct is_constructible_object_type_impl < using object_t = typename BasicJsonType::object_t; static constexpr bool value = - (std::is_constructible::value and - std::is_same::value) or - (has_from_json::value or - has_non_default_from_json::value); + (std::is_default_constructible::value and + (std::is_move_assignable::value or + std::is_copy_assignable::value) and + (std::is_constructible::value and + std::is_same < + typename object_t::mapped_type, + typename ConstructibleObjectType::mapped_type >::value)) or + (has_from_json::value or + has_non_default_from_json < + BasicJsonType, + typename ConstructibleObjectType::mapped_type >::value); }; template @@ -1141,20 +3066,24 @@ struct is_constructible_array_type_impl < BasicJsonType, ConstructibleArrayType, enable_if_t::value and - is_detected::value and - is_detected::value and - is_complete_type< - detected_t>::value >> + std::is_default_constructible::value and +(std::is_move_assignable::value or + std::is_copy_assignable::value) and +is_detected::value and +is_detected::value and +is_complete_type< +detected_t>::value >> { static constexpr bool value = // This is needed because json_reverse_iterator has a ::iterator type, - // furthermore, std::back_insert_iterator (and other iterators) have a base class `iterator`... - // Therefore it is detected as a ConstructibleArrayType. - // The real fix would be to have an Iterable concept. - not is_iterator_traits < - iterator_traits>::value and - - (std::is_same::value or + // furthermore, std::back_insert_iterator (and other iterators) have a + // base class `iterator`... Therefore it is detected as a + // ConstructibleArrayType. The real fix would be to have an Iterable + // concept. + not is_iterator_traits>::value and + + (std::is_same::value or has_from_json::value or has_non_default_from_json < @@ -1207,6 +3136,19 @@ struct is_compatible_type_impl < template struct is_compatible_type : is_compatible_type_impl {}; + +// https://en.cppreference.com/w/cpp/types/conjunction +template struct conjunction : std::true_type { }; +template struct conjunction : B1 { }; +template +struct conjunction +: std::conditional, B1>::type {}; + +template +struct is_constructible_tuple : std::false_type {}; + +template +struct is_constructible_tuple> : conjunction...> {}; } // namespace detail } // namespace nlohmann @@ -1214,11 +3156,13 @@ struct is_compatible_type #include // array -#include // and #include // size_t #include // uint8_t #include // string +// #include + + namespace nlohmann { namespace detail @@ -1261,24 +3205,29 @@ enum class value_t : std::uint8_t number_integer, ///< number value (signed integer) number_unsigned, ///< number value (unsigned integer) number_float, ///< number value (floating-point) - discarded ///< discarded by the the parser callback function + binary, ///< binary array (ordered collection of bytes) + discarded ///< discarded by the parser callback function }; /*! @brief comparison operator for JSON types Returns an ordering that is similar to Python: -- order: null < boolean < number < object < array < string +- order: null < boolean < number < object < array < string < binary - furthermore, each type is not smaller than itself - discarded values are not comparable +- binary is represented as a b"" string in python and directly comparable to a + string; however, making a binary array directly comparable with a string would + be surprising behavior in a JSON file. @since version 1.0.0 */ inline bool operator<(const value_t lhs, const value_t rhs) noexcept { - static constexpr std::array order = {{ + static constexpr std::array order = {{ 0 /* null */, 3 /* object */, 4 /* array */, 5 /* string */, - 1 /* boolean */, 2 /* integer */, 2 /* unsigned */, 2 /* float */ + 1 /* boolean */, 2 /* integer */, 2 /* unsigned */, 2 /* float */, + 6 /* binary */ } }; @@ -1297,7 +3246,7 @@ namespace detail template void from_json(const BasicJsonType& j, typename std::nullptr_t& n) { - if (JSON_UNLIKELY(not j.is_null())) + if (JSON_HEDLEY_UNLIKELY(not j.is_null())) { JSON_THROW(type_error::create(302, "type must be null, but is " + std::string(j.type_name()))); } @@ -1337,7 +3286,7 @@ void get_arithmetic_value(const BasicJsonType& j, ArithmeticType& val) template void from_json(const BasicJsonType& j, typename BasicJsonType::boolean_t& b) { - if (JSON_UNLIKELY(not j.is_boolean())) + if (JSON_HEDLEY_UNLIKELY(not j.is_boolean())) { JSON_THROW(type_error::create(302, "type must be boolean, but is " + std::string(j.type_name()))); } @@ -1347,7 +3296,7 @@ void from_json(const BasicJsonType& j, typename BasicJsonType::boolean_t& b) template void from_json(const BasicJsonType& j, typename BasicJsonType::string_t& s) { - if (JSON_UNLIKELY(not j.is_string())) + if (JSON_HEDLEY_UNLIKELY(not j.is_string())) { JSON_THROW(type_error::create(302, "type must be string, but is " + std::string(j.type_name()))); } @@ -1363,7 +3312,7 @@ template < int > = 0 > void from_json(const BasicJsonType& j, ConstructibleStringType& s) { - if (JSON_UNLIKELY(not j.is_string())) + if (JSON_HEDLEY_UNLIKELY(not j.is_string())) { JSON_THROW(type_error::create(302, "type must be string, but is " + std::string(j.type_name()))); } @@ -1403,10 +3352,11 @@ template::value, int> = 0> void from_json(const BasicJsonType& j, std::forward_list& l) { - if (JSON_UNLIKELY(not j.is_array())) + if (JSON_HEDLEY_UNLIKELY(not j.is_array())) { JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()))); } + l.clear(); std::transform(j.rbegin(), j.rend(), std::front_inserter(l), [](const BasicJsonType & i) { @@ -1419,12 +3369,22 @@ template::value, int> = 0> void from_json(const BasicJsonType& j, std::valarray& l) { - if (JSON_UNLIKELY(not j.is_array())) + if (JSON_HEDLEY_UNLIKELY(not j.is_array())) { JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()))); } l.resize(j.size()); - std::copy(j.m_value.array->begin(), j.m_value.array->end(), std::begin(l)); + std::copy(j.begin(), j.end(), std::begin(l)); +} + +template +auto from_json(const BasicJsonType& j, T (&arr)[N]) +-> decltype(j.template get(), void()) +{ + for (std::size_t i = 0; i < N; ++i) + { + arr[i] = j.at(i).template get(); + } } template @@ -1453,14 +3413,16 @@ auto from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, p { using std::end; - arr.reserve(j.size()); + ConstructibleArrayType ret; + ret.reserve(j.size()); std::transform(j.begin(), j.end(), - std::inserter(arr, end(arr)), [](const BasicJsonType & i) + std::inserter(ret, end(ret)), [](const BasicJsonType & i) { // get() returns *this, this won't call a from_json // method when value_type is BasicJsonType return i.template get(); }); + arr = std::move(ret); } template @@ -1469,14 +3431,16 @@ void from_json_array_impl(const BasicJsonType& j, ConstructibleArrayType& arr, { using std::end; + ConstructibleArrayType ret; std::transform( - j.begin(), j.end(), std::inserter(arr, end(arr)), + j.begin(), j.end(), std::inserter(ret, end(ret)), [](const BasicJsonType & i) { // get() returns *this, this won't call a from_json // method when value_type is BasicJsonType return i.template get(); }); + arr = std::move(ret); } template ::value and not is_constructible_object_type::value and not is_constructible_string_type::value and + not std::is_same::value and not is_basic_json::value, int > = 0 > - auto from_json(const BasicJsonType& j, ConstructibleArrayType& arr) -> decltype(from_json_array_impl(j, arr, priority_tag<3> {}), j.template get(), void()) { - if (JSON_UNLIKELY(not j.is_array())) + if (JSON_HEDLEY_UNLIKELY(not j.is_array())) { JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()))); @@ -1501,24 +3465,37 @@ void()) from_json_array_impl(j, arr, priority_tag<3> {}); } +template +void from_json(const BasicJsonType& j, typename BasicJsonType::binary_t& bin) +{ + if (JSON_HEDLEY_UNLIKELY(not j.is_binary())) + { + JSON_THROW(type_error::create(302, "type must be binary, but is " + std::string(j.type_name()))); + } + + bin = *j.template get_ptr(); +} + template::value, int> = 0> void from_json(const BasicJsonType& j, ConstructibleObjectType& obj) { - if (JSON_UNLIKELY(not j.is_object())) + if (JSON_HEDLEY_UNLIKELY(not j.is_object())) { JSON_THROW(type_error::create(302, "type must be object, but is " + std::string(j.type_name()))); } + ConstructibleObjectType ret; auto inner_object = j.template get_ptr(); using value_type = typename ConstructibleObjectType::value_type; std::transform( inner_object->begin(), inner_object->end(), - std::inserter(obj, obj.begin()), + std::inserter(ret, ret.begin()), [](typename BasicJsonType::object_t::value_type const & p) { return value_type(p.first, p.second.template get()); }); + obj = std::move(ret); } // overload for arithmetic types, not chosen for basic_json template arguments @@ -1586,13 +3563,14 @@ template ::value>> void from_json(const BasicJsonType& j, std::map& m) { - if (JSON_UNLIKELY(not j.is_array())) + if (JSON_HEDLEY_UNLIKELY(not j.is_array())) { JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()))); } + m.clear(); for (const auto& p : j) { - if (JSON_UNLIKELY(not p.is_array())) + if (JSON_HEDLEY_UNLIKELY(not p.is_array())) { JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(p.type_name()))); } @@ -1605,13 +3583,14 @@ template ::value>> void from_json(const BasicJsonType& j, std::unordered_map& m) { - if (JSON_UNLIKELY(not j.is_array())) + if (JSON_HEDLEY_UNLIKELY(not j.is_array())) { JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(j.type_name()))); } + m.clear(); for (const auto& p : j) { - if (JSON_UNLIKELY(not p.is_array())) + if (JSON_HEDLEY_UNLIKELY(not p.is_array())) { JSON_THROW(type_error::create(302, "type must be array, but is " + std::string(p.type_name()))); } @@ -1638,13 +3617,12 @@ namespace { constexpr const auto& from_json = detail::static_const::value; } // namespace -} // namespace nlohmann +} // namespace nlohmann // #include #include // copy -#include // or, and, not #include // begin, end #include // string #include // tuple, get @@ -1653,6 +3631,8 @@ constexpr const auto& from_json = detail::static_const::va #include // valarray #include // vector +// #include + // #include @@ -1670,6 +3650,11 @@ namespace nlohmann { namespace detail { +template +void int_to_string( string_type& target, std::size_t value ) +{ + target = std::to_string(value); +} template class iteration_proxy_value { public: @@ -1678,6 +3663,7 @@ template class iteration_proxy_value using pointer = value_type * ; using reference = value_type & ; using iterator_category = std::input_iterator_tag; + using string_type = typename std::remove_cv< typename std::remove_reference().key() ) >::type >::type; private: /// the iterator @@ -1687,9 +3673,9 @@ template class iteration_proxy_value /// last stringified array index mutable std::size_t array_index_last = 0; /// a string representation of the array index - mutable std::string array_index_str = "0"; + mutable string_type array_index_str = "0"; /// an empty string (to return a reference for primitive values) - const std::string empty_str = ""; + const string_type empty_str = ""; public: explicit iteration_proxy_value(IteratorType it) noexcept : anchor(it) {} @@ -1722,7 +3708,7 @@ template class iteration_proxy_value } /// return key of the iterator - const std::string& key() const + const string_type& key() const { assert(anchor.m_object != nullptr); @@ -1733,7 +3719,7 @@ template class iteration_proxy_value { if (array_index != array_index_last) { - array_index_str = std::to_string(array_index); + int_to_string( array_index_str, array_index ); array_index_last = array_index; } return array_index_str; @@ -1886,6 +3872,28 @@ struct external_constructor } }; +template<> +struct external_constructor +{ + template + static void construct(BasicJsonType& j, const typename BasicJsonType::binary_t& b) + { + j.m_type = value_t::binary; + typename BasicJsonType::binary_t value{b}; + j.m_value = value; + j.assert_invariant(); + } + + template + static void construct(BasicJsonType& j, typename BasicJsonType::binary_t&& b) + { + j.m_type = value_t::binary; + typename BasicJsonType::binary_t value{std::move(b)}; + j.m_value = value; + j.assert_invariant(); + } +}; + template<> struct external_constructor { @@ -1973,7 +3981,10 @@ struct external_constructor j.m_type = value_t::array; j.m_value = value_t::array; j.m_value.array->resize(arr.size()); - std::copy(std::begin(arr), std::end(arr), j.m_value.array->begin()); + if (arr.size() > 0) + { + std::copy(std::begin(arr), std::end(arr), j.m_value.array->begin()); + } j.assert_invariant(); } }; @@ -2072,9 +4083,9 @@ void to_json(BasicJsonType& j, const std::vector& e) template ::value and - not is_compatible_object_type< - BasicJsonType, CompatibleArrayType>::value and + not is_compatible_object_type::value and not is_compatible_string_type::value and + not std::is_same::value and not is_basic_json::value, int> = 0> void to_json(BasicJsonType& j, const CompatibleArrayType& arr) @@ -2082,6 +4093,12 @@ void to_json(BasicJsonType& j, const CompatibleArrayType& arr) external_constructor::construct(j, arr); } +template +void to_json(BasicJsonType& j, const typename BasicJsonType::binary_t& bin) +{ + external_constructor::construct(j, bin); +} + template::value, int> = 0> void to_json(BasicJsonType& j, const std::valarray& arr) @@ -2118,8 +4135,8 @@ void to_json(BasicJsonType& j, const T(&arr)[N]) external_constructor::construct(j, arr); } -template -void to_json(BasicJsonType& j, const std::pair& p) +template < typename BasicJsonType, typename T1, typename T2, enable_if_t < std::is_constructible::value&& std::is_constructible::value, int > = 0 > +void to_json(BasicJsonType& j, const std::pair& p) { j = { p.first, p.second }; } @@ -2138,10 +4155,10 @@ void to_json_tuple_impl(BasicJsonType& j, const Tuple& t, index_sequence j = { std::get(t)... }; } -template -void to_json(BasicJsonType& j, const std::tuple& t) +template::value, int > = 0> +void to_json(BasicJsonType& j, const T& t) { - to_json_tuple_impl(j, t, index_sequence_for {}); + to_json_tuple_impl(j, t, make_index_sequence::value> {}); } struct to_json_fn @@ -2160,7 +4177,7 @@ namespace { constexpr const auto& to_json = detail::static_const::value; } // namespace -} // namespace nlohmann +} // namespace nlohmann namespace nlohmann @@ -2206,6 +4223,176 @@ struct adl_serializer } // namespace nlohmann +// #include + + +#include // uint8_t +#include // tie +#include // move + +namespace nlohmann +{ + +/*! +@brief an internal type for a backed binary type + +This type extends the template parameter @a BinaryType provided to `basic_json` +with a subtype used by BSON and MessagePack. This type exists so that the user +does not have to specify a type themselves with a specific naming scheme in +order to override the binary type. + +@tparam BinaryType container to store bytes (`std::vector` by + default) + +@since version 3.8.0 +*/ +template +class byte_container_with_subtype : public BinaryType +{ + public: + /// the type of the underlying container + using container_type = BinaryType; + + byte_container_with_subtype() noexcept(noexcept(container_type())) + : container_type() + {} + + byte_container_with_subtype(const container_type& b) noexcept(noexcept(container_type(b))) + : container_type(b) + {} + + byte_container_with_subtype(container_type&& b) noexcept(noexcept(container_type(std::move(b)))) + : container_type(std::move(b)) + {} + + byte_container_with_subtype(const container_type& b, std::uint8_t subtype) noexcept(noexcept(container_type(b))) + : container_type(b) + , m_subtype(subtype) + , m_has_subtype(true) + {} + + byte_container_with_subtype(container_type&& b, std::uint8_t subtype) noexcept(noexcept(container_type(std::move(b)))) + : container_type(std::move(b)) + , m_subtype(subtype) + , m_has_subtype(true) + {} + + bool operator==(const byte_container_with_subtype& rhs) const + { + return std::tie(static_cast(*this), m_subtype, m_has_subtype) == + std::tie(static_cast(rhs), rhs.m_subtype, rhs.m_has_subtype); + } + + bool operator!=(const byte_container_with_subtype& rhs) const + { + return !(rhs == *this); + } + + /*! + @brief sets the binary subtype + + Sets the binary subtype of the value, also flags a binary JSON value as + having a subtype, which has implications for serialization. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @sa @ref subtype() -- return the binary subtype + @sa @ref clear_subtype() -- clears the binary subtype + @sa @ref has_subtype() -- returns whether or not the binary value has a + subtype + + @since version 3.8.0 + */ + void set_subtype(std::uint8_t subtype) noexcept + { + m_subtype = subtype; + m_has_subtype = true; + } + + /*! + @brief return the binary subtype + + Returns the numerical subtype of the value if it has a subtype. If it does + not have a subtype, this function will return size_t(-1) as a sentinel + value. + + @return the numerical subtype of the binary value + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @sa @ref set_subtype() -- sets the binary subtype + @sa @ref clear_subtype() -- clears the binary subtype + @sa @ref has_subtype() -- returns whether or not the binary value has a + subtype + + @since version 3.8.0 + */ + constexpr std::uint8_t subtype() const noexcept + { + return m_subtype; + } + + /*! + @brief return whether the value has a subtype + + @return whether the value has a subtype + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @sa @ref subtype() -- return the binary subtype + @sa @ref set_subtype() -- sets the binary subtype + @sa @ref clear_subtype() -- clears the binary subtype + + @since version 3.8.0 + */ + constexpr bool has_subtype() const noexcept + { + return m_has_subtype; + } + + /*! + @brief clears the binary subtype + + Clears the binary subtype and flags the value as not having a subtype, which + has implications for serialization; for instance MessagePack will prefer the + bin family over the ext family. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @sa @ref subtype() -- return the binary subtype + @sa @ref set_subtype() -- sets the binary subtype + @sa @ref has_subtype() -- returns whether or not the binary value has a + subtype + + @since version 3.8.0 + */ + void clear_subtype() noexcept + { + m_subtype = 0; + m_has_subtype = false; + } + + private: + std::uint8_t m_subtype = 0; + bool m_has_subtype = false; +}; + +} // namespace nlohmann + +// #include + // #include // #include @@ -2262,34 +4449,16 @@ enum class input_format_t { json, cbor, msgpack, ubjson, bson }; // input adapters // //////////////////// -/*! -@brief abstract input adapter interface - -Produces a stream of std::char_traits::int_type characters from a -std::istream, a buffer, or some other input type. Accepts the return of -exactly one non-EOF character for future input. The int_type characters -returned consist of all valid char values as positive values (typically -unsigned char), plus an EOF value outside that range, specified by the value -of the function std::char_traits::eof(). This value is typically -1, but -could be any arbitrary value which is not a valid char value. -*/ -struct input_adapter_protocol -{ - /// get a character [0,255] or std::char_traits::eof(). - virtual std::char_traits::int_type get_character() = 0; - virtual ~input_adapter_protocol() = default; -}; - -/// a type to simplify interfaces -using input_adapter_t = std::shared_ptr; - /*! Input adapter for stdio file access. This adapter read only 1 byte and do not use any buffer. This adapter is a very low level adapter. */ -class file_input_adapter : public input_adapter_protocol +class file_input_adapter { public: + using char_type = char; + + JSON_HEDLEY_NON_NULL(2) explicit file_input_adapter(std::FILE* f) noexcept : m_file(f) {} @@ -2298,10 +4467,9 @@ class file_input_adapter : public input_adapter_protocol file_input_adapter(const file_input_adapter&) = delete; file_input_adapter(file_input_adapter&&) = default; file_input_adapter& operator=(const file_input_adapter&) = delete; - file_input_adapter& operator=(file_input_adapter&&) = default; - ~file_input_adapter() override = default; + file_input_adapter& operator=(file_input_adapter&&) = delete; - std::char_traits::int_type get_character() noexcept override + std::char_traits::int_type get_character() noexcept { return std::fgetc(m_file); } @@ -2321,91 +4489,111 @@ characters following those used in parsing the JSON input. Clears the std::istream flags; any input errors (e.g., EOF) will be detected by the first subsequent call for input from the std::istream. */ -class input_stream_adapter : public input_adapter_protocol +class input_stream_adapter { public: - ~input_stream_adapter() override + using char_type = char; + + ~input_stream_adapter() { // clear stream flags; we use underlying streambuf I/O, do not // maintain ifstream flags, except eof - is.clear(is.rdstate() & std::ios::eofbit); + if (is) + { + is->clear(is->rdstate() & std::ios::eofbit); + } } explicit input_stream_adapter(std::istream& i) - : is(i), sb(*i.rdbuf()) + : is(&i), sb(i.rdbuf()) {} // delete because of pointer members input_stream_adapter(const input_stream_adapter&) = delete; input_stream_adapter& operator=(input_stream_adapter&) = delete; - input_stream_adapter(input_stream_adapter&&) = delete; - input_stream_adapter& operator=(input_stream_adapter&&) = delete; + input_stream_adapter& operator=(input_stream_adapter&& rhs) = delete; + + input_stream_adapter(input_stream_adapter&& rhs) : is(rhs.is), sb(rhs.sb) + { + rhs.is = nullptr; + rhs.sb = nullptr; + } // std::istream/std::streambuf use std::char_traits::to_int_type, to // ensure that std::char_traits::eof() and the character 0xFF do not // end up as the same value, eg. 0xFFFFFFFF. - std::char_traits::int_type get_character() override + std::char_traits::int_type get_character() { - auto res = sb.sbumpc(); + auto res = sb->sbumpc(); // set eof manually, as we don't use the istream interface. - if (res == EOF) + if (JSON_HEDLEY_UNLIKELY(res == EOF)) { - is.clear(is.rdstate() | std::ios::eofbit); + is->clear(is->rdstate() | std::ios::eofbit); } return res; } private: /// the associated input stream - std::istream& is; - std::streambuf& sb; + std::istream* is = nullptr; + std::streambuf* sb = nullptr; }; -/// input adapter for buffer input -class input_buffer_adapter : public input_adapter_protocol +// General-purpose iterator-based adapter. It might not be as fast as +// theoretically possible for some containers, but it is extremely versatile. +template +class iterator_input_adapter { public: - input_buffer_adapter(const char* b, const std::size_t l) noexcept - : cursor(b), limit(b + l) - {} + using char_type = typename std::iterator_traits::value_type; - // delete because of pointer members - input_buffer_adapter(const input_buffer_adapter&) = delete; - input_buffer_adapter& operator=(input_buffer_adapter&) = delete; - input_buffer_adapter(input_buffer_adapter&&) = delete; - input_buffer_adapter& operator=(input_buffer_adapter&&) = delete; - ~input_buffer_adapter() override = default; + iterator_input_adapter(IteratorType first, IteratorType last) + : current(std::move(first)), end(std::move(last)) {} - std::char_traits::int_type get_character() noexcept override + typename std::char_traits::int_type get_character() { - if (JSON_LIKELY(cursor < limit)) + if (JSON_HEDLEY_LIKELY(current != end)) + { + auto result = std::char_traits::to_int_type(*current); + std::advance(current, 1); + return result; + } + else { - return std::char_traits::to_int_type(*(cursor++)); + return std::char_traits::eof(); } - - return std::char_traits::eof(); } private: - /// pointer to the current character - const char* cursor; - /// pointer past the last character - const char* const limit; + IteratorType current; + IteratorType end; + + template + friend struct wide_string_input_helper; + + bool empty() const + { + return current == end; + } + }; -template -struct wide_string_input_helper + +template +struct wide_string_input_helper; + +template +struct wide_string_input_helper { // UTF-32 - static void fill_buffer(const WideStringType& str, - size_t& current_wchar, + static void fill_buffer(BaseInputAdapter& input, std::array::int_type, 4>& utf8_bytes, size_t& utf8_bytes_index, size_t& utf8_bytes_filled) { utf8_bytes_index = 0; - if (current_wchar == str.size()) + if (JSON_HEDLEY_UNLIKELY(input.empty())) { utf8_bytes[0] = std::char_traits::eof(); utf8_bytes_filled = 1; @@ -2413,7 +4601,7 @@ struct wide_string_input_helper else { // get the current character - const auto wc = static_cast(str[current_wchar++]); + const auto wc = input.get_character(); // UTF-32 to UTF-8 encoding if (wc < 0x80) @@ -2423,23 +4611,23 @@ struct wide_string_input_helper } else if (wc <= 0x7FF) { - utf8_bytes[0] = static_cast::int_type>(0xC0u | ((wc >> 6u) & 0x1Fu)); - utf8_bytes[1] = static_cast::int_type>(0x80u | (wc & 0x3Fu)); + utf8_bytes[0] = static_cast::int_type>(0xC0u | ((static_cast(wc) >> 6u) & 0x1Fu)); + utf8_bytes[1] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); utf8_bytes_filled = 2; } else if (wc <= 0xFFFF) { - utf8_bytes[0] = static_cast::int_type>(0xE0u | ((wc >> 12u) & 0x0Fu)); - utf8_bytes[1] = static_cast::int_type>(0x80u | ((wc >> 6u) & 0x3Fu)); - utf8_bytes[2] = static_cast::int_type>(0x80u | (wc & 0x3Fu)); + utf8_bytes[0] = static_cast::int_type>(0xE0u | ((static_cast(wc) >> 12u) & 0x0Fu)); + utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); + utf8_bytes[2] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); utf8_bytes_filled = 3; } else if (wc <= 0x10FFFF) { - utf8_bytes[0] = static_cast::int_type>(0xF0u | ((wc >> 18u) & 0x07u)); - utf8_bytes[1] = static_cast::int_type>(0x80u | ((wc >> 12u) & 0x3Fu)); - utf8_bytes[2] = static_cast::int_type>(0x80u | ((wc >> 6u) & 0x3Fu)); - utf8_bytes[3] = static_cast::int_type>(0x80u | (wc & 0x3Fu)); + utf8_bytes[0] = static_cast::int_type>(0xF0u | ((static_cast(wc) >> 18u) & 0x07u)); + utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 12u) & 0x3Fu)); + utf8_bytes[2] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); + utf8_bytes[3] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); utf8_bytes_filled = 4; } else @@ -2452,19 +4640,18 @@ struct wide_string_input_helper } }; -template -struct wide_string_input_helper +template +struct wide_string_input_helper { // UTF-16 - static void fill_buffer(const WideStringType& str, - size_t& current_wchar, + static void fill_buffer(BaseInputAdapter& input, std::array::int_type, 4>& utf8_bytes, size_t& utf8_bytes_index, size_t& utf8_bytes_filled) { utf8_bytes_index = 0; - if (current_wchar == str.size()) + if (JSON_HEDLEY_UNLIKELY(input.empty())) { utf8_bytes[0] = std::char_traits::eof(); utf8_bytes_filled = 1; @@ -2472,7 +4659,7 @@ struct wide_string_input_helper else { // get the current character - const auto wc = static_cast(str[current_wchar++]); + const auto wc = input.get_character(); // UTF-16 to UTF-8 encoding if (wc < 0x80) @@ -2482,23 +4669,23 @@ struct wide_string_input_helper } else if (wc <= 0x7FF) { - utf8_bytes[0] = static_cast::int_type>(0xC0u | ((wc >> 6u))); - utf8_bytes[1] = static_cast::int_type>(0x80u | (wc & 0x3Fu)); + utf8_bytes[0] = static_cast::int_type>(0xC0u | ((static_cast(wc) >> 6u))); + utf8_bytes[1] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); utf8_bytes_filled = 2; } else if (0xD800 > wc or wc >= 0xE000) { - utf8_bytes[0] = static_cast::int_type>(0xE0u | ((wc >> 12u))); - utf8_bytes[1] = static_cast::int_type>(0x80u | ((wc >> 6u) & 0x3Fu)); - utf8_bytes[2] = static_cast::int_type>(0x80u | (wc & 0x3Fu)); + utf8_bytes[0] = static_cast::int_type>(0xE0u | ((static_cast(wc) >> 12u))); + utf8_bytes[1] = static_cast::int_type>(0x80u | ((static_cast(wc) >> 6u) & 0x3Fu)); + utf8_bytes[2] = static_cast::int_type>(0x80u | (static_cast(wc) & 0x3Fu)); utf8_bytes_filled = 3; } else { - if (current_wchar < str.size()) + if (JSON_HEDLEY_UNLIKELY(not input.empty())) { - const auto wc2 = static_cast(str[current_wchar++]); - const auto charcode = 0x10000u + (((wc & 0x3FFu) << 10u) | (wc2 & 0x3FFu)); + const auto wc2 = static_cast(input.get_character()); + const auto charcode = 0x10000u + (((static_cast(wc) & 0x3FFu) << 10u) | (wc2 & 0x3FFu)); utf8_bytes[0] = static_cast::int_type>(0xF0u | (charcode >> 18u)); utf8_bytes[1] = static_cast::int_type>(0x80u | ((charcode >> 12u) & 0x3Fu)); utf8_bytes[2] = static_cast::int_type>(0x80u | ((charcode >> 6u) & 0x3Fu)); @@ -2507,8 +4694,6 @@ struct wide_string_input_helper } else { - // unknown character - ++current_wchar; utf8_bytes[0] = static_cast::int_type>(wc); utf8_bytes_filled = 1; } @@ -2517,20 +4702,22 @@ struct wide_string_input_helper } }; -template -class wide_string_input_adapter : public input_adapter_protocol +// Wraps another input apdater to convert wide character types into individual bytes. +template +class wide_string_input_adapter { public: - explicit wide_string_input_adapter(const WideStringType& w) noexcept - : str(w) - {} + using char_type = char; - std::char_traits::int_type get_character() noexcept override + wide_string_input_adapter(BaseInputAdapter base) + : base_adapter(base) {} + + typename std::char_traits::int_type get_character() noexcept { // check if buffer needs to be filled if (utf8_bytes_index == utf8_bytes_filled) { - fill_buffer(); + fill_buffer(); assert(utf8_bytes_filled > 0); assert(utf8_bytes_index == 0); @@ -2543,18 +4730,14 @@ class wide_string_input_adapter : public input_adapter_protocol } private: + BaseInputAdapter base_adapter; + template void fill_buffer() { - wide_string_input_helper::fill_buffer(str, current_wchar, utf8_bytes, utf8_bytes_index, utf8_bytes_filled); + wide_string_input_helper::fill_buffer(base_adapter, utf8_bytes, utf8_bytes_index, utf8_bytes_filled); } - /// the wstring to process - const WideStringType& str; - - /// index of the current wchar in str - std::size_t current_wchar = 0; - /// a buffer for UTF-8 bytes std::array::int_type, 4> utf8_bytes = {{0, 0, 0, 0}}; @@ -2564,111 +4747,131 @@ class wide_string_input_adapter : public input_adapter_protocol std::size_t utf8_bytes_filled = 0; }; -class input_adapter + +template +struct iterator_input_adapter_factory { - public: - // native support - input_adapter(std::FILE* file) - : ia(std::make_shared(file)) {} - /// input adapter for input stream - input_adapter(std::istream& i) - : ia(std::make_shared(i)) {} + using iterator_type = IteratorType; + using char_type = typename std::iterator_traits::value_type; + using adapter_type = iterator_input_adapter; + + static adapter_type create(IteratorType first, IteratorType last) + { + return adapter_type(std::move(first), std::move(last)); + } +}; - /// input adapter for input stream - input_adapter(std::istream&& i) - : ia(std::make_shared(i)) {} +template +struct is_iterator_of_multibyte +{ + using value_type = typename std::iterator_traits::value_type; + enum + { + value = sizeof(value_type) > 1 + }; +}; - input_adapter(const std::wstring& ws) - : ia(std::make_shared>(ws)) {} +template +struct iterator_input_adapter_factory::value>> +{ + using iterator_type = IteratorType; + using char_type = typename std::iterator_traits::value_type; + using base_adapter_type = iterator_input_adapter; + using adapter_type = wide_string_input_adapter; - input_adapter(const std::u16string& ws) - : ia(std::make_shared>(ws)) {} + static adapter_type create(IteratorType first, IteratorType last) + { + return adapter_type(base_adapter_type(std::move(first), std::move(last))); + } +}; - input_adapter(const std::u32string& ws) - : ia(std::make_shared>(ws)) {} +// General purpose iterator-based input +template +typename iterator_input_adapter_factory::adapter_type input_adapter(IteratorType first, IteratorType last) +{ + using factory_type = iterator_input_adapter_factory; + return factory_type::create(first, last); +} - /// input adapter for buffer - template::value and - std::is_integral::type>::value and - sizeof(typename std::remove_pointer::type) == 1, - int>::type = 0> - input_adapter(CharT b, std::size_t l) - : ia(std::make_shared(reinterpret_cast(b), l)) {} +// Convenience shorthand from container to iterator +template +auto input_adapter(const ContainerType& container) -> decltype(input_adapter(begin(container), end(container))) +{ + // Enable ADL + using std::begin; + using std::end; + + return input_adapter(begin(container), end(container)); +} + +// Special cases with fast paths +inline file_input_adapter input_adapter(std::FILE* file) +{ + return file_input_adapter(file); +} + +inline input_stream_adapter input_adapter(std::istream& stream) +{ + return input_stream_adapter(stream); +} + +inline input_stream_adapter input_adapter(std::istream&& stream) +{ + return input_stream_adapter(stream); +} - // derived support +using contiguous_bytes_input_adapter = decltype(input_adapter(std::declval(), std::declval())); + +// Null-delimited strings, and the like. +template < typename CharT, + typename std::enable_if < + std::is_pointer::value and + not std::is_array::value and + std::is_integral::type>::value and + sizeof(typename std::remove_pointer::type) == 1, + int >::type = 0 > +contiguous_bytes_input_adapter input_adapter(CharT b) +{ + auto length = std::strlen(reinterpret_cast(b)); + auto ptr = reinterpret_cast(b); + return input_adapter(ptr, ptr + length); +} + +template +auto input_adapter(T (&array)[N]) -> decltype(input_adapter(array, array + N)) +{ + return input_adapter(array, array + N); +} - /// input adapter for string literal +// This class only handles inputs of input_buffer_adapter type. +// It's required so that expressions like {ptr, len} can be implicitely casted +// to the correct adapter. +class span_input_adapter +{ + public: template::value and std::is_integral::type>::value and sizeof(typename std::remove_pointer::type) == 1, int>::type = 0> - input_adapter(CharT b) - : input_adapter(reinterpret_cast(b), - std::strlen(reinterpret_cast(b))) {} + span_input_adapter(CharT b, std::size_t l) + : ia(reinterpret_cast(b), reinterpret_cast(b) + l) {} - /// input adapter for iterator range with contiguous storage template::iterator_category, std::random_access_iterator_tag>::value, int>::type = 0> - input_adapter(IteratorType first, IteratorType last) - { -#ifndef NDEBUG - // assertion to check that the iterator range is indeed contiguous, - // see http://stackoverflow.com/a/35008842/266378 for more discussion - const auto is_contiguous = std::accumulate( - first, last, std::pair(true, 0), - [&first](std::pair res, decltype(*first) val) - { - res.first &= (val == *(std::next(std::addressof(*first), res.second++))); - return res; - }).first; - assert(is_contiguous); -#endif - - // assertion to check that each element is 1 byte long - static_assert( - sizeof(typename iterator_traits::value_type) == 1, - "each element in the iterator range must have the size of 1 byte"); - - const auto len = static_cast(std::distance(first, last)); - if (JSON_LIKELY(len > 0)) - { - // there is at least one element: use the address of first - ia = std::make_shared(reinterpret_cast(&(*first)), len); - } - else - { - // the address of first cannot be used: use nullptr - ia = std::make_shared(nullptr, len); - } - } - - /// input adapter for array - template - input_adapter(T (&array)[N]) - : input_adapter(std::begin(array), std::end(array)) {} - - /// input adapter for contiguous container - template::value and - std::is_base_of()))>::iterator_category>::value, - int>::type = 0> - input_adapter(const ContiguousContainer& c) - : input_adapter(std::begin(c), std::end(c)) {} + span_input_adapter(IteratorType first, IteratorType last) + : ia(input_adapter(first, last)) {} - operator input_adapter_t() + contiguous_bytes_input_adapter&& get() { - return ia; + return std::move(ia); } private: - /// the actual adapter - input_adapter_t ia = nullptr; + contiguous_bytes_input_adapter ia; }; } // namespace detail } // namespace nlohmann @@ -2701,14 +4904,11 @@ input. template struct json_sax { - /// type for (signed) integers using number_integer_t = typename BasicJsonType::number_integer_t; - /// type for unsigned integers using number_unsigned_t = typename BasicJsonType::number_unsigned_t; - /// type for floating-point numbers using number_float_t = typename BasicJsonType::number_float_t; - /// type for strings using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; /*! @brief a null value was read @@ -2753,6 +4953,14 @@ struct json_sax */ virtual bool string(string_t& val) = 0; + /*! + @brief a binary string was read + @param[in] val binary value + @return whether parsing should proceed + @note It is safe to move the passed binary. + */ + virtual bool binary(binary_t& val) = 0; + /*! @brief the beginning of an object was read @param[in] elements number of object elements or -1 if unknown @@ -2827,6 +5035,7 @@ class json_sax_dom_parser using number_unsigned_t = typename BasicJsonType::number_unsigned_t; using number_float_t = typename BasicJsonType::number_float_t; using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; /*! @param[in, out] r reference to a JSON value that is manipulated while @@ -2880,11 +5089,17 @@ class json_sax_dom_parser return true; } + bool binary(binary_t& val) + { + handle_value(std::move(val)); + return true; + } + bool start_object(std::size_t len) { ref_stack.push_back(handle_value(BasicJsonType::value_t::object)); - if (JSON_UNLIKELY(len != std::size_t(-1) and len > ref_stack.back()->max_size())) + if (JSON_HEDLEY_UNLIKELY(len != std::size_t(-1) and len > ref_stack.back()->max_size())) { JSON_THROW(out_of_range::create(408, "excessive object size: " + std::to_string(len))); @@ -2910,7 +5125,7 @@ class json_sax_dom_parser { ref_stack.push_back(handle_value(BasicJsonType::value_t::array)); - if (JSON_UNLIKELY(len != std::size_t(-1) and len > ref_stack.back()->max_size())) + if (JSON_HEDLEY_UNLIKELY(len != std::size_t(-1) and len > ref_stack.back()->max_size())) { JSON_THROW(out_of_range::create(408, "excessive array size: " + std::to_string(len))); @@ -2966,6 +5181,7 @@ class json_sax_dom_parser object to which we can add elements */ template + JSON_HEDLEY_RETURNS_NON_NULL BasicJsonType* handle_value(Value&& v) { if (ref_stack.empty()) @@ -3008,6 +5224,7 @@ class json_sax_dom_callback_parser using number_unsigned_t = typename BasicJsonType::number_unsigned_t; using number_float_t = typename BasicJsonType::number_float_t; using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; using parser_callback_t = typename BasicJsonType::parser_callback_t; using parse_event_t = typename BasicJsonType::parse_event_t; @@ -3062,6 +5279,12 @@ class json_sax_dom_callback_parser return true; } + bool binary(binary_t& val) + { + handle_value(std::move(val)); + return true; + } + bool start_object(std::size_t len) { // check callback for object start @@ -3072,7 +5295,7 @@ class json_sax_dom_callback_parser ref_stack.push_back(val.second); // check object limit - if (ref_stack.back() and JSON_UNLIKELY(len != std::size_t(-1) and len > ref_stack.back()->max_size())) + if (ref_stack.back() and JSON_HEDLEY_UNLIKELY(len != std::size_t(-1) and len > ref_stack.back()->max_size())) { JSON_THROW(out_of_range::create(408, "excessive object size: " + std::to_string(len))); } @@ -3110,7 +5333,7 @@ class json_sax_dom_callback_parser ref_stack.pop_back(); keep_stack.pop_back(); - if (not ref_stack.empty() and ref_stack.back() and ref_stack.back()->is_object()) + if (not ref_stack.empty() and ref_stack.back() and ref_stack.back()->is_structured()) { // remove discarded value for (auto it = ref_stack.back()->begin(); it != ref_stack.back()->end(); ++it) @@ -3135,7 +5358,7 @@ class json_sax_dom_callback_parser ref_stack.push_back(val.second); // check array limit - if (ref_stack.back() and JSON_UNLIKELY(len != std::size_t(-1) and len > ref_stack.back()->max_size())) + if (ref_stack.back() and JSON_HEDLEY_UNLIKELY(len != std::size_t(-1) and len > ref_stack.back()->max_size())) { JSON_THROW(out_of_range::create(408, "excessive array size: " + std::to_string(len))); } @@ -3312,6 +5535,7 @@ class json_sax_acceptor using number_unsigned_t = typename BasicJsonType::number_unsigned_t; using number_float_t = typename BasicJsonType::number_float_t; using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; bool null() { @@ -3343,7 +5567,12 @@ class json_sax_acceptor return true; } - bool start_object(std::size_t /*unused*/ = std::size_t(-1)) + bool binary(binary_t& /*unused*/) + { + return true; + } + + bool start_object(std::size_t /*unused*/ = std::size_t(-1)) { return true; } @@ -3358,7 +5587,7 @@ class json_sax_acceptor return true; } - bool start_array(std::size_t /*unused*/ = std::size_t(-1)) + bool start_array(std::size_t /*unused*/ = std::size_t(-1)) { return true; } @@ -3532,6 +5761,20 @@ namespace nlohmann { namespace detail { + +/*! +@brief determine system byte order + +@return true if and only if system's byte order is little endian + +@note from https://stackoverflow.com/a/1001328/266378 +*/ +static inline bool little_endianess(int num = 1) noexcept +{ + return *reinterpret_cast(&num) == 1; +} + + /////////////////// // binary reader // /////////////////// @@ -3539,14 +5782,17 @@ namespace detail /*! @brief deserialization of CBOR, MessagePack, and UBJSON values */ -template> +template> class binary_reader { using number_integer_t = typename BasicJsonType::number_integer_t; using number_unsigned_t = typename BasicJsonType::number_unsigned_t; using number_float_t = typename BasicJsonType::number_float_t; using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; using json_sax_t = SAX; + using char_type = typename InputAdapterType::char_type; + using char_int_type = typename std::char_traits::int_type; public: /*! @@ -3554,10 +5800,9 @@ class binary_reader @param[in] adapter input adapter to read from */ - explicit binary_reader(input_adapter_t adapter) : ia(std::move(adapter)) + explicit binary_reader(InputAdapterType&& adapter) : ia(std::move(adapter)) { (void)detail::is_sax_static_asserts {}; - assert(ia); } // make class move-only @@ -3574,6 +5819,7 @@ class binary_reader @return */ + JSON_HEDLEY_NON_NULL(3) bool sax_parse(const input_format_t format, json_sax_t* sax_, const bool strict = true) @@ -3615,7 +5861,7 @@ class binary_reader get(); } - if (JSON_UNLIKELY(current != std::char_traits::eof())) + if (JSON_HEDLEY_UNLIKELY(current != std::char_traits::eof())) { return sax->parse_error(chars_read, get_token_string(), parse_error::create(110, chars_read, exception_message(format, "expected end of input; last byte: 0x" + get_token_string(), "value"))); @@ -3625,18 +5871,6 @@ class binary_reader return result; } - /*! - @brief determine system byte order - - @return true if and only if system's byte order is little endian - - @note from http://stackoverflow.com/a/1001328/266378 - */ - static constexpr bool little_endianess(int num = 1) noexcept - { - return *reinterpret_cast(&num) == 1; - } - private: ////////// // BSON // @@ -3651,12 +5885,12 @@ class binary_reader std::int32_t document_size; get_number(input_format_t::bson, document_size); - if (JSON_UNLIKELY(not sax->start_object(std::size_t(-1)))) + if (JSON_HEDLEY_UNLIKELY(not sax->start_object(std::size_t(-1)))) { return false; } - if (JSON_UNLIKELY(not parse_bson_element_list(/*is_array*/false))) + if (JSON_HEDLEY_UNLIKELY(not parse_bson_element_list(/*is_array*/false))) { return false; } @@ -3677,7 +5911,7 @@ class binary_reader while (true) { get(); - if (JSON_UNLIKELY(not unexpect_eof(input_format_t::bson, "cstring"))) + if (JSON_HEDLEY_UNLIKELY(not unexpect_eof(input_format_t::bson, "cstring"))) { return false; } @@ -3685,7 +5919,7 @@ class binary_reader { return true; } - *out++ = static_cast(current); + *out++ = static_cast(current); } return true; @@ -3705,13 +5939,39 @@ class binary_reader template bool get_bson_string(const NumberType len, string_t& result) { - if (JSON_UNLIKELY(len < 1)) + if (JSON_HEDLEY_UNLIKELY(len < 1)) { auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::bson, "string length must be at least 1, is " + std::to_string(len), "string"))); } - return get_string(input_format_t::bson, len - static_cast(1), result) and get() != std::char_traits::eof(); + return get_string(input_format_t::bson, len - static_cast(1), result) and get() != std::char_traits::eof(); + } + + /*! + @brief Parses a byte array input of length @a len from the BSON input. + @param[in] len The length of the byte array to be read. + @param[in, out] result A reference to the binary variable where the read + array is to be stored. + @tparam NumberType The type of the length @a len + @pre len >= 0 + @return `true` if the byte array was successfully parsed + */ + template + bool get_bson_binary(const NumberType len, binary_t& result) + { + if (JSON_HEDLEY_UNLIKELY(len < 0)) + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(112, chars_read, exception_message(input_format_t::bson, "byte array length cannot be negative, is " + std::to_string(len), "binary"))); + } + + // All BSON binary values have a subtype + std::uint8_t subtype; + get_number(input_format_t::bson, subtype); + result.set_subtype(subtype); + + return get_binary(input_format_t::bson, len, result); } /*! @@ -3724,7 +5984,7 @@ class binary_reader Unsupported BSON record type 0x... @return whether a valid BSON-object/array was passed to the SAX parser */ - bool parse_bson_element_internal(const int element_type, + bool parse_bson_element_internal(const char_int_type element_type, const std::size_t element_type_parse_position) { switch (element_type) @@ -3752,6 +6012,13 @@ class binary_reader return parse_bson_array(); } + case 0x05: // binary + { + std::int32_t len; + binary_t value; + return get_number(input_format_t::bson, len) and get_bson_binary(len, value) and sax->binary(value); + } + case 0x08: // boolean { return sax->boolean(get() != 0); @@ -3798,15 +6065,16 @@ class binary_reader bool parse_bson_element_list(const bool is_array) { string_t key; - while (int element_type = get()) + + while (auto element_type = get()) { - if (JSON_UNLIKELY(not unexpect_eof(input_format_t::bson, "element list"))) + if (JSON_HEDLEY_UNLIKELY(not unexpect_eof(input_format_t::bson, "element list"))) { return false; } const std::size_t element_type_parse_position = chars_read; - if (JSON_UNLIKELY(not get_bson_cstr(key))) + if (JSON_HEDLEY_UNLIKELY(not get_bson_cstr(key))) { return false; } @@ -3816,7 +6084,7 @@ class binary_reader return false; } - if (JSON_UNLIKELY(not parse_bson_element_internal(element_type, element_type_parse_position))) + if (JSON_HEDLEY_UNLIKELY(not parse_bson_element_internal(element_type, element_type_parse_position))) { return false; } @@ -3837,12 +6105,12 @@ class binary_reader std::int32_t document_size; get_number(input_format_t::bson, document_size); - if (JSON_UNLIKELY(not sax->start_array(std::size_t(-1)))) + if (JSON_HEDLEY_UNLIKELY(not sax->start_array(std::size_t(-1)))) { return false; } - if (JSON_UNLIKELY(not parse_bson_element_list(/*is_array*/true))) + if (JSON_HEDLEY_UNLIKELY(not parse_bson_element_list(/*is_array*/true))) { return false; } @@ -3866,7 +6134,7 @@ class binary_reader switch (get_char ? get() : current) { // EOF - case std::char_traits::eof(): + case std::char_traits::eof(): return unexpect_eof(input_format_t::cbor, "value"); // Integer 0x00..0x17 (0..23) @@ -3972,6 +6240,41 @@ class binary_reader - static_cast(number)); } + // Binary data (0x00..0x17 bytes follow) + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4A: + case 0x4B: + case 0x4C: + case 0x4D: + case 0x4E: + case 0x4F: + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + case 0x58: // Binary data (one-byte uint8_t for n follows) + case 0x59: // Binary data (two-byte uint16_t for n follow) + case 0x5A: // Binary data (four-byte uint32_t for n follow) + case 0x5B: // Binary data (eight-byte uint64_t for n follow) + case 0x5F: // Binary data (indefinite length) + { + binary_t b; + return get_cbor_binary(b) and sax->binary(b); + } + // UTF-8 string (0x00..0x17 bytes follow) case 0x60: case 0x61: @@ -4126,13 +6429,13 @@ class binary_reader case 0xF9: // Half-Precision Float (two-byte IEEE 754) { - const int byte1_raw = get(); - if (JSON_UNLIKELY(not unexpect_eof(input_format_t::cbor, "number"))) + const auto byte1_raw = get(); + if (JSON_HEDLEY_UNLIKELY(not unexpect_eof(input_format_t::cbor, "number"))) { return false; } - const int byte2_raw = get(); - if (JSON_UNLIKELY(not unexpect_eof(input_format_t::cbor, "number"))) + const auto byte2_raw = get(); + if (JSON_HEDLEY_UNLIKELY(not unexpect_eof(input_format_t::cbor, "number"))) { return false; } @@ -4154,7 +6457,7 @@ class binary_reader const int exp = (half >> 10u) & 0x1Fu; const unsigned int mant = half & 0x3FFu; assert(0 <= exp and exp <= 32); - assert(0 <= mant and mant <= 1024); + assert(mant <= 1024); switch (exp) { case 0: @@ -4205,7 +6508,7 @@ class binary_reader */ bool get_cbor_string(string_t& result) { - if (JSON_UNLIKELY(not unexpect_eof(input_format_t::cbor, "string"))) + if (JSON_HEDLEY_UNLIKELY(not unexpect_eof(input_format_t::cbor, "string"))) { return false; } @@ -4287,6 +6590,105 @@ class binary_reader } } + /*! + @brief reads a CBOR byte array + + This function first reads starting bytes to determine the expected + byte array length and then copies this number of bytes into the byte array. + Additionally, CBOR's byte arrays with indefinite lengths are supported. + + @param[out] result created byte array + + @return whether byte array creation completed + */ + bool get_cbor_binary(binary_t& result) + { + if (JSON_HEDLEY_UNLIKELY(not unexpect_eof(input_format_t::cbor, "binary"))) + { + return false; + } + + switch (current) + { + // Binary data (0x00..0x17 bytes follow) + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4A: + case 0x4B: + case 0x4C: + case 0x4D: + case 0x4E: + case 0x4F: + case 0x50: + case 0x51: + case 0x52: + case 0x53: + case 0x54: + case 0x55: + case 0x56: + case 0x57: + { + return get_binary(input_format_t::cbor, static_cast(current) & 0x1Fu, result); + } + + case 0x58: // Binary data (one-byte uint8_t for n follows) + { + std::uint8_t len; + return get_number(input_format_t::cbor, len) and + get_binary(input_format_t::cbor, len, result); + } + + case 0x59: // Binary data (two-byte uint16_t for n follow) + { + std::uint16_t len; + return get_number(input_format_t::cbor, len) and + get_binary(input_format_t::cbor, len, result); + } + + case 0x5A: // Binary data (four-byte uint32_t for n follow) + { + std::uint32_t len; + return get_number(input_format_t::cbor, len) and + get_binary(input_format_t::cbor, len, result); + } + + case 0x5B: // Binary data (eight-byte uint64_t for n follow) + { + std::uint64_t len; + return get_number(input_format_t::cbor, len) and + get_binary(input_format_t::cbor, len, result); + } + + case 0x5F: // Binary data (indefinite length) + { + while (get() != 0xFF) + { + binary_t chunk; + if (not get_cbor_binary(chunk)) + { + return false; + } + result.insert(result.end(), chunk.begin(), chunk.end()); + } + return true; + } + + default: + { + auto last_token = get_token_string(); + return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::cbor, "expected length specification (0x40-0x5B) or indefinite binary array type (0x5F); last byte: 0x" + last_token, "binary"))); + } + } + } + /*! @param[in] len the length of the array or std::size_t(-1) for an array of indefinite size @@ -4294,7 +6696,7 @@ class binary_reader */ bool get_cbor_array(const std::size_t len) { - if (JSON_UNLIKELY(not sax->start_array(len))) + if (JSON_HEDLEY_UNLIKELY(not sax->start_array(len))) { return false; } @@ -4303,7 +6705,7 @@ class binary_reader { for (std::size_t i = 0; i < len; ++i) { - if (JSON_UNLIKELY(not parse_cbor_internal())) + if (JSON_HEDLEY_UNLIKELY(not parse_cbor_internal())) { return false; } @@ -4313,7 +6715,7 @@ class binary_reader { while (get() != 0xFF) { - if (JSON_UNLIKELY(not parse_cbor_internal(false))) + if (JSON_HEDLEY_UNLIKELY(not parse_cbor_internal(false))) { return false; } @@ -4330,7 +6732,7 @@ class binary_reader */ bool get_cbor_object(const std::size_t len) { - if (JSON_UNLIKELY(not sax->start_object(len))) + if (JSON_HEDLEY_UNLIKELY(not sax->start_object(len))) { return false; } @@ -4341,12 +6743,12 @@ class binary_reader for (std::size_t i = 0; i < len; ++i) { get(); - if (JSON_UNLIKELY(not get_cbor_string(key) or not sax->key(key))) + if (JSON_HEDLEY_UNLIKELY(not get_cbor_string(key) or not sax->key(key))) { return false; } - if (JSON_UNLIKELY(not parse_cbor_internal())) + if (JSON_HEDLEY_UNLIKELY(not parse_cbor_internal())) { return false; } @@ -4357,12 +6759,12 @@ class binary_reader { while (get() != 0xFF) { - if (JSON_UNLIKELY(not get_cbor_string(key) or not sax->key(key))) + if (JSON_HEDLEY_UNLIKELY(not get_cbor_string(key) or not sax->key(key))) { return false; } - if (JSON_UNLIKELY(not parse_cbor_internal())) + if (JSON_HEDLEY_UNLIKELY(not parse_cbor_internal())) { return false; } @@ -4385,7 +6787,7 @@ class binary_reader switch (get()) { // EOF - case std::char_traits::eof(): + case std::char_traits::eof(): return unexpect_eof(input_format_t::msgpack, "value"); // positive fixint @@ -4590,6 +6992,9 @@ class binary_reader case 0xBD: case 0xBE: case 0xBF: + case 0xD9: // str 8 + case 0xDA: // str 16 + case 0xDB: // str 32 { string_t s; return get_msgpack_string(s) and sax->string(s); @@ -4604,6 +7009,22 @@ class binary_reader case 0xC3: // true return sax->boolean(true); + case 0xC4: // bin 8 + case 0xC5: // bin 16 + case 0xC6: // bin 32 + case 0xC7: // ext 8 + case 0xC8: // ext 16 + case 0xC9: // ext 32 + case 0xD4: // fixext 1 + case 0xD5: // fixext 2 + case 0xD6: // fixext 4 + case 0xD7: // fixext 8 + case 0xD8: // fixext 16 + { + binary_t b; + return get_msgpack_binary(b) and sax->binary(b); + } + case 0xCA: // float 32 { float number; @@ -4664,14 +7085,6 @@ class binary_reader return get_number(input_format_t::msgpack, number) and sax->number_integer(number); } - case 0xD9: // str 8 - case 0xDA: // str 16 - case 0xDB: // str 32 - { - string_t s; - return get_msgpack_string(s) and sax->string(s); - } - case 0xDC: // array 16 { std::uint16_t len; @@ -4751,7 +7164,7 @@ class binary_reader */ bool get_msgpack_string(string_t& result) { - if (JSON_UNLIKELY(not unexpect_eof(input_format_t::msgpack, "string"))) + if (JSON_HEDLEY_UNLIKELY(not unexpect_eof(input_format_t::msgpack, "string"))) { return false; } @@ -4821,20 +7234,137 @@ class binary_reader } } + /*! + @brief reads a MessagePack byte array + + This function first reads starting bytes to determine the expected + byte array length and then copies this number of bytes into a byte array. + + @param[out] result created byte array + + @return whether byte array creation completed + */ + bool get_msgpack_binary(binary_t& result) + { + // helper function to set the subtype + auto assign_and_return_true = [&result](std::int8_t subtype) + { + result.set_subtype(static_cast(subtype)); + return true; + }; + + switch (current) + { + case 0xC4: // bin 8 + { + std::uint8_t len; + return get_number(input_format_t::msgpack, len) and + get_binary(input_format_t::msgpack, len, result); + } + + case 0xC5: // bin 16 + { + std::uint16_t len; + return get_number(input_format_t::msgpack, len) and + get_binary(input_format_t::msgpack, len, result); + } + + case 0xC6: // bin 32 + { + std::uint32_t len; + return get_number(input_format_t::msgpack, len) and + get_binary(input_format_t::msgpack, len, result); + } + + case 0xC7: // ext 8 + { + std::uint8_t len; + std::int8_t subtype; + return get_number(input_format_t::msgpack, len) and + get_number(input_format_t::msgpack, subtype) and + get_binary(input_format_t::msgpack, len, result) and + assign_and_return_true(subtype); + } + + case 0xC8: // ext 16 + { + std::uint16_t len; + std::int8_t subtype; + return get_number(input_format_t::msgpack, len) and + get_number(input_format_t::msgpack, subtype) and + get_binary(input_format_t::msgpack, len, result) and + assign_and_return_true(subtype); + } + + case 0xC9: // ext 32 + { + std::uint32_t len; + std::int8_t subtype; + return get_number(input_format_t::msgpack, len) and + get_number(input_format_t::msgpack, subtype) and + get_binary(input_format_t::msgpack, len, result) and + assign_and_return_true(subtype); + } + + case 0xD4: // fixext 1 + { + std::int8_t subtype; + return get_number(input_format_t::msgpack, subtype) and + get_binary(input_format_t::msgpack, 1, result) and + assign_and_return_true(subtype); + } + + case 0xD5: // fixext 2 + { + std::int8_t subtype; + return get_number(input_format_t::msgpack, subtype) and + get_binary(input_format_t::msgpack, 2, result) and + assign_and_return_true(subtype); + } + + case 0xD6: // fixext 4 + { + std::int8_t subtype; + return get_number(input_format_t::msgpack, subtype) and + get_binary(input_format_t::msgpack, 4, result) and + assign_and_return_true(subtype); + } + + case 0xD7: // fixext 8 + { + std::int8_t subtype; + return get_number(input_format_t::msgpack, subtype) and + get_binary(input_format_t::msgpack, 8, result) and + assign_and_return_true(subtype); + } + + case 0xD8: // fixext 16 + { + std::int8_t subtype; + return get_number(input_format_t::msgpack, subtype) and + get_binary(input_format_t::msgpack, 16, result) and + assign_and_return_true(subtype); + } + + default: // LCOV_EXCL_LINE + return false; // LCOV_EXCL_LINE + } + } + /*! @param[in] len the length of the array @return whether array creation completed */ bool get_msgpack_array(const std::size_t len) { - if (JSON_UNLIKELY(not sax->start_array(len))) + if (JSON_HEDLEY_UNLIKELY(not sax->start_array(len))) { return false; } for (std::size_t i = 0; i < len; ++i) { - if (JSON_UNLIKELY(not parse_msgpack_internal())) + if (JSON_HEDLEY_UNLIKELY(not parse_msgpack_internal())) { return false; } @@ -4849,7 +7379,7 @@ class binary_reader */ bool get_msgpack_object(const std::size_t len) { - if (JSON_UNLIKELY(not sax->start_object(len))) + if (JSON_HEDLEY_UNLIKELY(not sax->start_object(len))) { return false; } @@ -4858,12 +7388,12 @@ class binary_reader for (std::size_t i = 0; i < len; ++i) { get(); - if (JSON_UNLIKELY(not get_msgpack_string(key) or not sax->key(key))) + if (JSON_HEDLEY_UNLIKELY(not get_msgpack_string(key) or not sax->key(key))) { return false; } - if (JSON_UNLIKELY(not parse_msgpack_internal())) + if (JSON_HEDLEY_UNLIKELY(not parse_msgpack_internal())) { return false; } @@ -4910,7 +7440,7 @@ class binary_reader get(); // TODO(niels): may we ignore N here? } - if (JSON_UNLIKELY(not unexpect_eof(input_format_t::ubjson, "value"))) + if (JSON_HEDLEY_UNLIKELY(not unexpect_eof(input_format_t::ubjson, "value"))) { return false; } @@ -4964,7 +7494,7 @@ class binary_reader case 'U': { std::uint8_t number; - if (JSON_UNLIKELY(not get_number(input_format_t::ubjson, number))) + if (JSON_HEDLEY_UNLIKELY(not get_number(input_format_t::ubjson, number))) { return false; } @@ -4975,7 +7505,7 @@ class binary_reader case 'i': { std::int8_t number; - if (JSON_UNLIKELY(not get_number(input_format_t::ubjson, number))) + if (JSON_HEDLEY_UNLIKELY(not get_number(input_format_t::ubjson, number))) { return false; } @@ -4986,7 +7516,7 @@ class binary_reader case 'I': { std::int16_t number; - if (JSON_UNLIKELY(not get_number(input_format_t::ubjson, number))) + if (JSON_HEDLEY_UNLIKELY(not get_number(input_format_t::ubjson, number))) { return false; } @@ -4997,7 +7527,7 @@ class binary_reader case 'l': { std::int32_t number; - if (JSON_UNLIKELY(not get_number(input_format_t::ubjson, number))) + if (JSON_HEDLEY_UNLIKELY(not get_number(input_format_t::ubjson, number))) { return false; } @@ -5008,7 +7538,7 @@ class binary_reader case 'L': { std::int64_t number; - if (JSON_UNLIKELY(not get_number(input_format_t::ubjson, number))) + if (JSON_HEDLEY_UNLIKELY(not get_number(input_format_t::ubjson, number))) { return false; } @@ -5034,7 +7564,7 @@ class binary_reader @return whether pair creation completed */ - bool get_ubjson_size_type(std::pair& result) + bool get_ubjson_size_type(std::pair& result) { result.first = string_t::npos; // size result.second = 0; // type @@ -5044,15 +7574,15 @@ class binary_reader if (current == '$') { result.second = get(); // must not ignore 'N', because 'N' maybe the type - if (JSON_UNLIKELY(not unexpect_eof(input_format_t::ubjson, "type"))) + if (JSON_HEDLEY_UNLIKELY(not unexpect_eof(input_format_t::ubjson, "type"))) { return false; } get_ignore_noop(); - if (JSON_UNLIKELY(current != '#')) + if (JSON_HEDLEY_UNLIKELY(current != '#')) { - if (JSON_UNLIKELY(not unexpect_eof(input_format_t::ubjson, "value"))) + if (JSON_HEDLEY_UNLIKELY(not unexpect_eof(input_format_t::ubjson, "value"))) { return false; } @@ -5075,11 +7605,11 @@ class binary_reader @param prefix the previously read or set type prefix @return whether value creation completed */ - bool get_ubjson_value(const int prefix) + bool get_ubjson_value(const char_int_type prefix) { switch (prefix) { - case std::char_traits::eof(): // EOF + case std::char_traits::eof(): // EOF return unexpect_eof(input_format_t::ubjson, "value"); case 'T': // true @@ -5135,16 +7665,16 @@ class binary_reader case 'C': // char { get(); - if (JSON_UNLIKELY(not unexpect_eof(input_format_t::ubjson, "char"))) + if (JSON_HEDLEY_UNLIKELY(not unexpect_eof(input_format_t::ubjson, "char"))) { return false; } - if (JSON_UNLIKELY(current > 127)) + if (JSON_HEDLEY_UNLIKELY(current > 127)) { auto last_token = get_token_string(); return sax->parse_error(chars_read, last_token, parse_error::create(113, chars_read, exception_message(input_format_t::ubjson, "byte after 'C' must be in range 0x00..0x7F; last byte: 0x" + last_token, "char"))); } - string_t s(1, static_cast(current)); + string_t s(1, static_cast(current)); return sax->string(s); } @@ -5173,15 +7703,15 @@ class binary_reader */ bool get_ubjson_array() { - std::pair size_and_type; - if (JSON_UNLIKELY(not get_ubjson_size_type(size_and_type))) + std::pair size_and_type; + if (JSON_HEDLEY_UNLIKELY(not get_ubjson_size_type(size_and_type))) { return false; } if (size_and_type.first != string_t::npos) { - if (JSON_UNLIKELY(not sax->start_array(size_and_type.first))) + if (JSON_HEDLEY_UNLIKELY(not sax->start_array(size_and_type.first))) { return false; } @@ -5192,7 +7722,7 @@ class binary_reader { for (std::size_t i = 0; i < size_and_type.first; ++i) { - if (JSON_UNLIKELY(not get_ubjson_value(size_and_type.second))) + if (JSON_HEDLEY_UNLIKELY(not get_ubjson_value(size_and_type.second))) { return false; } @@ -5203,7 +7733,7 @@ class binary_reader { for (std::size_t i = 0; i < size_and_type.first; ++i) { - if (JSON_UNLIKELY(not parse_ubjson_internal())) + if (JSON_HEDLEY_UNLIKELY(not parse_ubjson_internal())) { return false; } @@ -5212,14 +7742,14 @@ class binary_reader } else { - if (JSON_UNLIKELY(not sax->start_array(std::size_t(-1)))) + if (JSON_HEDLEY_UNLIKELY(not sax->start_array(std::size_t(-1)))) { return false; } while (current != ']') { - if (JSON_UNLIKELY(not parse_ubjson_internal(false))) + if (JSON_HEDLEY_UNLIKELY(not parse_ubjson_internal(false))) { return false; } @@ -5235,8 +7765,8 @@ class binary_reader */ bool get_ubjson_object() { - std::pair size_and_type; - if (JSON_UNLIKELY(not get_ubjson_size_type(size_and_type))) + std::pair size_and_type; + if (JSON_HEDLEY_UNLIKELY(not get_ubjson_size_type(size_and_type))) { return false; } @@ -5244,7 +7774,7 @@ class binary_reader string_t key; if (size_and_type.first != string_t::npos) { - if (JSON_UNLIKELY(not sax->start_object(size_and_type.first))) + if (JSON_HEDLEY_UNLIKELY(not sax->start_object(size_and_type.first))) { return false; } @@ -5253,11 +7783,11 @@ class binary_reader { for (std::size_t i = 0; i < size_and_type.first; ++i) { - if (JSON_UNLIKELY(not get_ubjson_string(key) or not sax->key(key))) + if (JSON_HEDLEY_UNLIKELY(not get_ubjson_string(key) or not sax->key(key))) { return false; } - if (JSON_UNLIKELY(not get_ubjson_value(size_and_type.second))) + if (JSON_HEDLEY_UNLIKELY(not get_ubjson_value(size_and_type.second))) { return false; } @@ -5268,11 +7798,11 @@ class binary_reader { for (std::size_t i = 0; i < size_and_type.first; ++i) { - if (JSON_UNLIKELY(not get_ubjson_string(key) or not sax->key(key))) + if (JSON_HEDLEY_UNLIKELY(not get_ubjson_string(key) or not sax->key(key))) { return false; } - if (JSON_UNLIKELY(not parse_ubjson_internal())) + if (JSON_HEDLEY_UNLIKELY(not parse_ubjson_internal())) { return false; } @@ -5282,18 +7812,18 @@ class binary_reader } else { - if (JSON_UNLIKELY(not sax->start_object(std::size_t(-1)))) + if (JSON_HEDLEY_UNLIKELY(not sax->start_object(std::size_t(-1)))) { return false; } while (current != '}') { - if (JSON_UNLIKELY(not get_ubjson_string(key, false) or not sax->key(key))) + if (JSON_HEDLEY_UNLIKELY(not get_ubjson_string(key, false) or not sax->key(key))) { return false; } - if (JSON_UNLIKELY(not parse_ubjson_internal())) + if (JSON_HEDLEY_UNLIKELY(not parse_ubjson_internal())) { return false; } @@ -5305,6 +7835,9 @@ class binary_reader return sax->end_object(); } + // Note, no reader for UBJSON binary types is implemented because they do + // not exist + /////////////////////// // Utility functions // /////////////////////// @@ -5314,20 +7847,20 @@ class binary_reader This function provides the interface to the used input adapter. It does not throw in case the input reached EOF, but returns a -'ve valued - `std::char_traits::eof()` in that case. + `std::char_traits::eof()` in that case. @return character read from the input */ - int get() + char_int_type get() { ++chars_read; - return current = ia->get_character(); + return current = ia.get_character(); } /*! @return character read from the input after ignoring all 'N' entries */ - int get_ignore_noop() + char_int_type get_ignore_noop() { do { @@ -5359,7 +7892,7 @@ class binary_reader for (std::size_t i = 0; i < sizeof(NumberType); ++i) { get(); - if (JSON_UNLIKELY(not unexpect_eof(format, "number"))) + if (JSON_HEDLEY_UNLIKELY(not unexpect_eof(format, "number"))) { return false; } @@ -5403,11 +7936,43 @@ class binary_reader std::generate_n(std::back_inserter(result), len, [this, &success, &format]() { get(); - if (JSON_UNLIKELY(not unexpect_eof(format, "string"))) + if (JSON_HEDLEY_UNLIKELY(not unexpect_eof(format, "string"))) + { + success = false; + } + return std::char_traits::to_char_type(current); + }); + return success; + } + + /*! + @brief create a byte array by reading bytes from the input + + @tparam NumberType the type of the number + @param[in] format the current format (for diagnostics) + @param[in] len number of bytes to read + @param[out] result byte array created by reading @a len bytes + + @return whether byte array creation completed + + @note We can not reserve @a len bytes for the result, because @a len + may be too large. Usually, @ref unexpect_eof() detects the end of + the input before we run out of memory. + */ + template + bool get_binary(const input_format_t format, + const NumberType len, + binary_t& result) + { + bool success = true; + std::generate_n(std::back_inserter(result), len, [this, &success, &format]() + { + get(); + if (JSON_HEDLEY_UNLIKELY(not unexpect_eof(format, "binary"))) { success = false; } - return static_cast(current); + return static_cast(current); }); return success; } @@ -5417,9 +7982,10 @@ class binary_reader @param[in] context further context information (for diagnostics) @return whether the last read character is not EOF */ + JSON_HEDLEY_NON_NULL(3) bool unexpect_eof(const input_format_t format, const char* context) const { - if (JSON_UNLIKELY(current == std::char_traits::eof())) + if (JSON_HEDLEY_UNLIKELY(current == std::char_traits::eof())) { return sax->parse_error(chars_read, "", parse_error::create(110, chars_read, exception_message(format, "unexpected end of input", context))); @@ -5440,7 +8006,7 @@ class binary_reader /*! @param[in] format the current format @param[in] detail a detailed error message - @param[in] context further contect information + @param[in] context further context information @return a message string to use in the parse_error exceptions */ std::string exception_message(const input_format_t format, @@ -5476,10 +8042,10 @@ class binary_reader private: /// input adapter - input_adapter_t ia = nullptr; + InputAdapterType ia; /// the current character - int current = std::char_traits::eof(); + char_int_type current = std::char_traits::eof(); /// the number of characters read std::size_t chars_read = 0; @@ -5523,19 +8089,9 @@ namespace detail // lexer // /////////// -/*! -@brief lexical analysis - -This class organizes the lexical analysis during JSON deserialization. -*/ template -class lexer +class lexer_base { - using number_integer_t = typename BasicJsonType::number_integer_t; - using number_unsigned_t = typename BasicJsonType::number_unsigned_t; - using number_float_t = typename BasicJsonType::number_float_t; - using string_t = typename BasicJsonType::string_t; - public: /// token types for the parser enum class token_type @@ -5560,6 +8116,8 @@ class lexer }; /// return name of values of type token_type (only used for errors) + JSON_HEDLEY_RETURNS_NON_NULL + JSON_HEDLEY_CONST static const char* token_type_name(const token_type t) noexcept { switch (t) @@ -5574,9 +8132,9 @@ class lexer return "null literal"; case token_type::value_string: return "string literal"; - case lexer::token_type::value_unsigned: - case lexer::token_type::value_integer: - case lexer::token_type::value_float: + case token_type::value_unsigned: + case token_type::value_integer: + case token_type::value_float: return "number literal"; case token_type::begin_array: return "'['"; @@ -5602,15 +8160,33 @@ class lexer // LCOV_EXCL_STOP } } +}; +/*! +@brief lexical analysis + +This class organizes the lexical analysis during JSON deserialization. +*/ +template +class lexer : public lexer_base +{ + using number_integer_t = typename BasicJsonType::number_integer_t; + using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using number_float_t = typename BasicJsonType::number_float_t; + using string_t = typename BasicJsonType::string_t; + using char_type = typename InputAdapterType::char_type; + using char_int_type = typename std::char_traits::int_type; + + public: + using token_type = typename lexer_base::token_type; - explicit lexer(detail::input_adapter_t&& adapter) - : ia(std::move(adapter)), decimal_point_char(get_decimal_point()) {} + explicit lexer(InputAdapterType&& adapter) + : ia(std::move(adapter)), decimal_point_char(static_cast(get_decimal_point())) {} // delete because of pointer members lexer(const lexer&) = delete; - lexer(lexer&&) = delete; + lexer(lexer&&) = default; lexer& operator=(lexer&) = delete; - lexer& operator=(lexer&&) = delete; + lexer& operator=(lexer&&) = default; ~lexer() = default; private: @@ -5619,6 +8195,7 @@ class lexer ///////////////////// /// return the locale-dependent decimal point + JSON_HEDLEY_PURE static char get_decimal_point() noexcept { const auto loc = localeconv(); @@ -5693,7 +8270,7 @@ class lexer @return true if and only if no range violation was detected */ - bool next_byte_in_range(std::initializer_list ranges) + bool next_byte_in_range(std::initializer_list ranges) { assert(ranges.size() == 2 or ranges.size() == 4 or ranges.size() == 6); add(current); @@ -5701,7 +8278,7 @@ class lexer for (auto range = ranges.begin(); range != ranges.end(); ++range) { get(); - if (JSON_LIKELY(*range <= current and current <= *(++range))) + if (JSON_HEDLEY_LIKELY(*range <= current and current <= *(++range))) { add(current); } @@ -5744,7 +8321,7 @@ class lexer switch (get()) { // end of file while parsing string - case std::char_traits::eof(): + case std::char_traits::eof(): { error_message = "invalid string: missing closing quote"; return token_type::parse_error; @@ -5800,7 +8377,7 @@ class lexer const int codepoint1 = get_codepoint(); int codepoint = codepoint1; // start with codepoint1 - if (JSON_UNLIKELY(codepoint1 == -1)) + if (JSON_HEDLEY_UNLIKELY(codepoint1 == -1)) { error_message = "invalid string: '\\u' must be followed by 4 hex digits"; return token_type::parse_error; @@ -5810,18 +8387,18 @@ class lexer if (0xD800 <= codepoint1 and codepoint1 <= 0xDBFF) { // expect next \uxxxx entry - if (JSON_LIKELY(get() == '\\' and get() == 'u')) + if (JSON_HEDLEY_LIKELY(get() == '\\' and get() == 'u')) { const int codepoint2 = get_codepoint(); - if (JSON_UNLIKELY(codepoint2 == -1)) + if (JSON_HEDLEY_UNLIKELY(codepoint2 == -1)) { error_message = "invalid string: '\\u' must be followed by 4 hex digits"; return token_type::parse_error; } // check if codepoint2 is a low surrogate - if (JSON_LIKELY(0xDC00 <= codepoint2 and codepoint2 <= 0xDFFF)) + if (JSON_HEDLEY_LIKELY(0xDC00 <= codepoint2 and codepoint2 <= 0xDFFF)) { // overwrite codepoint codepoint = static_cast( @@ -5836,19 +8413,19 @@ class lexer } else { - error_message = "invalid string: surrogate U+DC00..U+DFFF must be followed by U+DC00..U+DFFF"; + error_message = "invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF"; return token_type::parse_error; } } else { - error_message = "invalid string: surrogate U+DC00..U+DFFF must be followed by U+DC00..U+DFFF"; + error_message = "invalid string: surrogate U+D800..U+DBFF must be followed by U+DC00..U+DFFF"; return token_type::parse_error; } } else { - if (JSON_UNLIKELY(0xDC00 <= codepoint1 and codepoint1 <= 0xDFFF)) + if (JSON_HEDLEY_UNLIKELY(0xDC00 <= codepoint1 and codepoint1 <= 0xDFFF)) { error_message = "invalid string: surrogate U+DC00..U+DFFF must follow U+D800..U+DBFF"; return token_type::parse_error; @@ -5862,28 +8439,28 @@ class lexer if (codepoint < 0x80) { // 1-byte characters: 0xxxxxxx (ASCII) - add(codepoint); + add(static_cast(codepoint)); } else if (codepoint <= 0x7FF) { // 2-byte characters: 110xxxxx 10xxxxxx - add(static_cast(0xC0u | (static_cast(codepoint) >> 6u))); - add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); + add(static_cast(0xC0u | (static_cast(codepoint) >> 6u))); + add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); } else if (codepoint <= 0xFFFF) { // 3-byte characters: 1110xxxx 10xxxxxx 10xxxxxx - add(static_cast(0xE0u | (static_cast(codepoint) >> 12u))); - add(static_cast(0x80u | ((static_cast(codepoint) >> 6u) & 0x3Fu))); - add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); + add(static_cast(0xE0u | (static_cast(codepoint) >> 12u))); + add(static_cast(0x80u | ((static_cast(codepoint) >> 6u) & 0x3Fu))); + add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); } else { // 4-byte characters: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - add(static_cast(0xF0u | (static_cast(codepoint) >> 18u))); - add(static_cast(0x80u | ((static_cast(codepoint) >> 12u) & 0x3Fu))); - add(static_cast(0x80u | ((static_cast(codepoint) >> 6u) & 0x3Fu))); - add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); + add(static_cast(0xF0u | (static_cast(codepoint) >> 18u))); + add(static_cast(0x80u | ((static_cast(codepoint) >> 12u) & 0x3Fu))); + add(static_cast(0x80u | ((static_cast(codepoint) >> 6u) & 0x3Fu))); + add(static_cast(0x80u | (static_cast(codepoint) & 0x3Fu))); } break; @@ -6223,7 +8800,7 @@ class lexer case 0xDE: case 0xDF: { - if (JSON_UNLIKELY(not next_byte_in_range({0x80, 0xBF}))) + if (JSON_HEDLEY_UNLIKELY(not next_byte_in_range({0x80, 0xBF}))) { return token_type::parse_error; } @@ -6233,7 +8810,7 @@ class lexer // U+0800..U+0FFF: bytes E0 A0..BF 80..BF case 0xE0: { - if (JSON_UNLIKELY(not (next_byte_in_range({0xA0, 0xBF, 0x80, 0xBF})))) + if (JSON_HEDLEY_UNLIKELY(not (next_byte_in_range({0xA0, 0xBF, 0x80, 0xBF})))) { return token_type::parse_error; } @@ -6257,7 +8834,7 @@ class lexer case 0xEE: case 0xEF: { - if (JSON_UNLIKELY(not (next_byte_in_range({0x80, 0xBF, 0x80, 0xBF})))) + if (JSON_HEDLEY_UNLIKELY(not (next_byte_in_range({0x80, 0xBF, 0x80, 0xBF})))) { return token_type::parse_error; } @@ -6267,7 +8844,7 @@ class lexer // U+D000..U+D7FF: bytes ED 80..9F 80..BF case 0xED: { - if (JSON_UNLIKELY(not (next_byte_in_range({0x80, 0x9F, 0x80, 0xBF})))) + if (JSON_HEDLEY_UNLIKELY(not (next_byte_in_range({0x80, 0x9F, 0x80, 0xBF})))) { return token_type::parse_error; } @@ -6277,7 +8854,7 @@ class lexer // U+10000..U+3FFFF F0 90..BF 80..BF 80..BF case 0xF0: { - if (JSON_UNLIKELY(not (next_byte_in_range({0x90, 0xBF, 0x80, 0xBF, 0x80, 0xBF})))) + if (JSON_HEDLEY_UNLIKELY(not (next_byte_in_range({0x90, 0xBF, 0x80, 0xBF, 0x80, 0xBF})))) { return token_type::parse_error; } @@ -6289,7 +8866,7 @@ class lexer case 0xF2: case 0xF3: { - if (JSON_UNLIKELY(not (next_byte_in_range({0x80, 0xBF, 0x80, 0xBF, 0x80, 0xBF})))) + if (JSON_HEDLEY_UNLIKELY(not (next_byte_in_range({0x80, 0xBF, 0x80, 0xBF, 0x80, 0xBF})))) { return token_type::parse_error; } @@ -6299,7 +8876,7 @@ class lexer // U+100000..U+10FFFF F4 80..8F 80..BF 80..BF case 0xF4: { - if (JSON_UNLIKELY(not (next_byte_in_range({0x80, 0x8F, 0x80, 0xBF, 0x80, 0xBF})))) + if (JSON_HEDLEY_UNLIKELY(not (next_byte_in_range({0x80, 0x8F, 0x80, 0xBF, 0x80, 0xBF})))) { return token_type::parse_error; } @@ -6316,16 +8893,19 @@ class lexer } } + JSON_HEDLEY_NON_NULL(2) static void strtof(float& f, const char* str, char** endptr) noexcept { f = std::strtof(str, endptr); } + JSON_HEDLEY_NON_NULL(2) static void strtof(double& f, const char* str, char** endptr) noexcept { f = std::strtod(str, endptr); } + JSON_HEDLEY_NON_NULL(2) static void strtof(long double& f, const char* str, char** endptr) noexcept { f = std::strtold(str, endptr); @@ -6348,7 +8928,7 @@ class lexer minus | zero | any1 | [error] | [error] | [error] | [error] | [error] zero | done | done | exponent | done | done | decimal1 | done any1 | any1 | any1 | exponent | done | done | decimal1 | done - decimal1 | decimal2 | [error] | [error] | [error] | [error] | [error] | [error] + decimal1 | decimal2 | decimal2 | [error] | [error] | [error] | [error] | [error] decimal2 | decimal2 | decimal2 | exponent | done | done | done | done exponent | any2 | any2 | [error] | sign | sign | [error] | [error] sign | any2 | any2 | [error] | [error] | [error] | [error] | [error] @@ -6701,13 +9281,14 @@ scan_number_done: @param[in] length the length of the passed literal text @param[in] return_type the token type to return on success */ - token_type scan_literal(const char* literal_text, const std::size_t length, + JSON_HEDLEY_NON_NULL(2) + token_type scan_literal(const char_type* literal_text, const std::size_t length, token_type return_type) { - assert(current == literal_text[0]); + assert(std::char_traits::to_char_type(current) == literal_text[0]); for (std::size_t i = 1; i < length; ++i) { - if (JSON_UNLIKELY(get() != literal_text[i])) + if (JSON_HEDLEY_UNLIKELY(std::char_traits::to_char_type(get()) != literal_text[i])) { error_message = "invalid literal"; return token_type::parse_error; @@ -6725,7 +9306,7 @@ scan_number_done: { token_buffer.clear(); token_string.clear(); - token_string.push_back(std::char_traits::to_char_type(current)); + token_string.push_back(std::char_traits::to_char_type(current)); } /* @@ -6738,7 +9319,7 @@ scan_number_done: @return character read from the input */ - std::char_traits::int_type get() + char_int_type get() { ++position.chars_read_total; ++position.chars_read_current_line; @@ -6750,12 +9331,12 @@ scan_number_done: } else { - current = ia->get_character(); + current = ia.get_character(); } - if (JSON_LIKELY(current != std::char_traits::eof())) + if (JSON_HEDLEY_LIKELY(current != std::char_traits::eof())) { - token_string.push_back(std::char_traits::to_char_type(current)); + token_string.push_back(std::char_traits::to_char_type(current)); } if (current == '\n') @@ -6794,7 +9375,7 @@ scan_number_done: --position.chars_read_current_line; } - if (JSON_LIKELY(current != std::char_traits::eof())) + if (JSON_HEDLEY_LIKELY(current != std::char_traits::eof())) { assert(not token_string.empty()); token_string.pop_back(); @@ -6802,9 +9383,9 @@ scan_number_done: } /// add a character to token_buffer - void add(int c) + void add(char_int_type c) { - token_buffer.push_back(std::char_traits::to_char_type(c)); + token_buffer.push_back(static_cast(c)); } public: @@ -6855,7 +9436,7 @@ scan_number_done: std::string result; for (const auto c : token_string) { - if ('\x00' <= c and c <= '\x1F') + if (static_cast(c) <= '\x1F') { // escape control characters std::array cs{{}}; @@ -6865,7 +9446,7 @@ scan_number_done: else { // add character as is - result.push_back(c); + result.push_back(static_cast(c)); } } @@ -6873,6 +9454,7 @@ scan_number_done: } /// return syntax error message + JSON_HEDLEY_RETURNS_NON_NULL constexpr const char* get_error_message() const noexcept { return error_message; @@ -6934,11 +9516,20 @@ scan_number_done: // literals case 't': - return scan_literal("true", 4, token_type::literal_true); + { + std::array true_literal = {{'t', 'r', 'u', 'e'}}; + return scan_literal(true_literal.data(), true_literal.size(), token_type::literal_true); + } case 'f': - return scan_literal("false", 5, token_type::literal_false); + { + std::array false_literal = {{'f', 'a', 'l', 's', 'e'}}; + return scan_literal(false_literal.data(), false_literal.size(), token_type::literal_false); + } case 'n': - return scan_literal("null", 4, token_type::literal_null); + { + std::array null_literal = {{'n', 'u', 'l', 'l'}}; + return scan_literal(null_literal.data(), null_literal.size(), token_type::literal_null); + } // string case '\"': @@ -6961,7 +9552,7 @@ scan_number_done: // end of input (the null byte is needed when parsing from // string literals) case '\0': - case std::char_traits::eof(): + case std::char_traits::eof(): return token_type::end_of_input; // error @@ -6973,10 +9564,10 @@ scan_number_done: private: /// input adapter - detail::input_adapter_t ia = nullptr; + InputAdapterType ia; /// the current character - std::char_traits::int_type current = std::char_traits::eof(); + char_int_type current = std::char_traits::eof(); /// whether the next get() call should just return current bool next_unget = false; @@ -6985,7 +9576,7 @@ scan_number_done: position_t position {}; /// raw input token string (for error messages) - std::vector token_string {}; + std::vector token_string {}; /// buffer for variable-length tokens (numbers, strings) string_t token_buffer {}; @@ -6999,7 +9590,7 @@ scan_number_done: number_float_t value_float = 0; /// the decimal point - const char decimal_point_char = '.'; + const char_int_type decimal_point_char = '.'; }; } // namespace detail } // namespace nlohmann @@ -7038,44 +9629,45 @@ namespace detail // parser // //////////// +enum class parse_event_t : uint8_t +{ + /// the parser read `{` and started to process a JSON object + object_start, + /// the parser read `}` and finished processing a JSON object + object_end, + /// the parser read `[` and started to process a JSON array + array_start, + /// the parser read `]` and finished processing a JSON array + array_end, + /// the parser read a key of a value in an object + key, + /// the parser finished reading a JSON value + value +}; + +template +using parser_callback_t = + std::function; + /*! @brief syntax analysis -This class implements a recursive decent parser. +This class implements a recursive descent parser. */ -template +template class parser { using number_integer_t = typename BasicJsonType::number_integer_t; using number_unsigned_t = typename BasicJsonType::number_unsigned_t; using number_float_t = typename BasicJsonType::number_float_t; using string_t = typename BasicJsonType::string_t; - using lexer_t = lexer; + using lexer_t = lexer; using token_type = typename lexer_t::token_type; public: - enum class parse_event_t : uint8_t - { - /// the parser read `{` and started to process a JSON object - object_start, - /// the parser read `}` and finished processing a JSON object - object_end, - /// the parser read `[` and started to process a JSON array - array_start, - /// the parser read `]` and finished processing a JSON array - array_end, - /// the parser read a key of a value in an object - key, - /// the parser finished reading a JSON value - value - }; - - using parser_callback_t = - std::function; - /// a parser reading from an input adapter - explicit parser(detail::input_adapter_t&& adapter, - const parser_callback_t cb = nullptr, + explicit parser(InputAdapterType&& adapter, + const parser_callback_t cb = nullptr, const bool allow_exceptions_ = true) : callback(cb), m_lexer(std::move(adapter)), allow_exceptions(allow_exceptions_) { @@ -7161,6 +9753,7 @@ class parser } template + JSON_HEDLEY_NON_NULL(2) bool sax_parse(SAX* sax, const bool strict = true) { (void)detail::is_sax_static_asserts {}; @@ -7180,6 +9773,7 @@ class parser private: template + JSON_HEDLEY_NON_NULL(2) bool sax_parse_internal(SAX* sax) { // stack to remember the hierarchy of structured values we are parsing @@ -7197,7 +9791,7 @@ class parser { case token_type::begin_object: { - if (JSON_UNLIKELY(not sax->start_object(std::size_t(-1)))) + if (JSON_HEDLEY_UNLIKELY(not sax->start_object(std::size_t(-1)))) { return false; } @@ -7205,7 +9799,7 @@ class parser // closing } -> we are done if (get_token() == token_type::end_object) { - if (JSON_UNLIKELY(not sax->end_object())) + if (JSON_HEDLEY_UNLIKELY(not sax->end_object())) { return false; } @@ -7213,20 +9807,20 @@ class parser } // parse key - if (JSON_UNLIKELY(last_token != token_type::value_string)) + if (JSON_HEDLEY_UNLIKELY(last_token != token_type::value_string)) { return sax->parse_error(m_lexer.get_position(), m_lexer.get_token_string(), parse_error::create(101, m_lexer.get_position(), exception_message(token_type::value_string, "object key"))); } - if (JSON_UNLIKELY(not sax->key(m_lexer.get_string()))) + if (JSON_HEDLEY_UNLIKELY(not sax->key(m_lexer.get_string()))) { return false; } // parse separator (:) - if (JSON_UNLIKELY(get_token() != token_type::name_separator)) + if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::name_separator)) { return sax->parse_error(m_lexer.get_position(), m_lexer.get_token_string(), @@ -7244,7 +9838,7 @@ class parser case token_type::begin_array: { - if (JSON_UNLIKELY(not sax->start_array(std::size_t(-1)))) + if (JSON_HEDLEY_UNLIKELY(not sax->start_array(std::size_t(-1)))) { return false; } @@ -7252,7 +9846,7 @@ class parser // closing ] -> we are done if (get_token() == token_type::end_array) { - if (JSON_UNLIKELY(not sax->end_array())) + if (JSON_HEDLEY_UNLIKELY(not sax->end_array())) { return false; } @@ -7270,14 +9864,14 @@ class parser { const auto res = m_lexer.get_number_float(); - if (JSON_UNLIKELY(not std::isfinite(res))) + if (JSON_HEDLEY_UNLIKELY(not std::isfinite(res))) { return sax->parse_error(m_lexer.get_position(), m_lexer.get_token_string(), out_of_range::create(406, "number overflow parsing '" + m_lexer.get_token_string() + "'")); } - if (JSON_UNLIKELY(not sax->number_float(res, m_lexer.get_string()))) + if (JSON_HEDLEY_UNLIKELY(not sax->number_float(res, m_lexer.get_string()))) { return false; } @@ -7287,7 +9881,7 @@ class parser case token_type::literal_false: { - if (JSON_UNLIKELY(not sax->boolean(false))) + if (JSON_HEDLEY_UNLIKELY(not sax->boolean(false))) { return false; } @@ -7296,7 +9890,7 @@ class parser case token_type::literal_null: { - if (JSON_UNLIKELY(not sax->null())) + if (JSON_HEDLEY_UNLIKELY(not sax->null())) { return false; } @@ -7305,7 +9899,7 @@ class parser case token_type::literal_true: { - if (JSON_UNLIKELY(not sax->boolean(true))) + if (JSON_HEDLEY_UNLIKELY(not sax->boolean(true))) { return false; } @@ -7314,7 +9908,7 @@ class parser case token_type::value_integer: { - if (JSON_UNLIKELY(not sax->number_integer(m_lexer.get_number_integer()))) + if (JSON_HEDLEY_UNLIKELY(not sax->number_integer(m_lexer.get_number_integer()))) { return false; } @@ -7323,7 +9917,7 @@ class parser case token_type::value_string: { - if (JSON_UNLIKELY(not sax->string(m_lexer.get_string()))) + if (JSON_HEDLEY_UNLIKELY(not sax->string(m_lexer.get_string()))) { return false; } @@ -7332,7 +9926,7 @@ class parser case token_type::value_unsigned: { - if (JSON_UNLIKELY(not sax->number_unsigned(m_lexer.get_number_unsigned()))) + if (JSON_HEDLEY_UNLIKELY(not sax->number_unsigned(m_lexer.get_number_unsigned()))) { return false; } @@ -7380,9 +9974,9 @@ class parser } // closing ] - if (JSON_LIKELY(last_token == token_type::end_array)) + if (JSON_HEDLEY_LIKELY(last_token == token_type::end_array)) { - if (JSON_UNLIKELY(not sax->end_array())) + if (JSON_HEDLEY_UNLIKELY(not sax->end_array())) { return false; } @@ -7408,7 +10002,7 @@ class parser if (get_token() == token_type::value_separator) { // parse key - if (JSON_UNLIKELY(get_token() != token_type::value_string)) + if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::value_string)) { return sax->parse_error(m_lexer.get_position(), m_lexer.get_token_string(), @@ -7416,13 +10010,13 @@ class parser exception_message(token_type::value_string, "object key"))); } - if (JSON_UNLIKELY(not sax->key(m_lexer.get_string()))) + if (JSON_HEDLEY_UNLIKELY(not sax->key(m_lexer.get_string()))) { return false; } // parse separator (:) - if (JSON_UNLIKELY(get_token() != token_type::name_separator)) + if (JSON_HEDLEY_UNLIKELY(get_token() != token_type::name_separator)) { return sax->parse_error(m_lexer.get_position(), m_lexer.get_token_string(), @@ -7436,9 +10030,9 @@ class parser } // closing } - if (JSON_LIKELY(last_token == token_type::end_object)) + if (JSON_HEDLEY_LIKELY(last_token == token_type::end_object)) { - if (JSON_UNLIKELY(not sax->end_object())) + if (JSON_HEDLEY_UNLIKELY(not sax->end_object())) { return false; } @@ -7498,7 +10092,7 @@ class parser private: /// callback function - const parser_callback_t callback = nullptr; + const parser_callback_t callback = nullptr; /// the type of the last read token token_type last_token = token_type::uninitialized; /// the lexer @@ -7651,6 +10245,8 @@ template struct internal_iterator typename BasicJsonType::object_t::iterator object_iterator {}; /// iterator for JSON arrays typename BasicJsonType::array_t::iterator array_iterator {}; + /// iterator for JSON binary arrays + typename BasicJsonType::binary_t::container_type::iterator binary_iterator {}; /// generic iterator for all other types primitive_iterator_t primitive_iterator {}; }; @@ -7660,10 +10256,11 @@ template struct internal_iterator // #include -#include // not #include // iterator, random_access_iterator_tag, bidirectional_iterator_tag, advance, next #include // conditional, is_const, remove_const +// #include + // #include // #include @@ -7785,17 +10382,42 @@ class iter_impl to iterator is not defined. */ + /*! + @brief const copy constructor + @param[in] other const iterator to copy from + @note This copy constructor had to be defined explicitly to circumvent a bug + occurring on msvc v19.0 compiler (VS 2015) debug build. For more + information refer to: https://github.com/nlohmann/json/issues/1608 + */ + iter_impl(const iter_impl& other) noexcept + : m_object(other.m_object), m_it(other.m_it) + {} + + /*! + @brief converting assignment + @param[in] other const iterator to copy from + @return const/non-const iterator + @note It is not checked whether @a other is initialized. + */ + iter_impl& operator=(const iter_impl& other) noexcept + { + m_object = other.m_object; + m_it = other.m_it; + return *this; + } + /*! @brief converting constructor @param[in] other non-const iterator to copy from @note It is not checked whether @a other is initialized. */ iter_impl(const iter_impl::type>& other) noexcept - : m_object(other.m_object), m_it(other.m_it) {} + : m_object(other.m_object), m_it(other.m_it) + {} /*! @brief converting assignment - @param[in,out] other non-const iterator to copy from + @param[in] other non-const iterator to copy from @return const/non-const iterator @note It is not checked whether @a other is initialized. */ @@ -7902,7 +10524,7 @@ class iter_impl default: { - if (JSON_LIKELY(m_it.primitive_iterator.is_begin())) + if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.is_begin())) { return *m_object; } @@ -7936,7 +10558,7 @@ class iter_impl default: { - if (JSON_LIKELY(m_it.primitive_iterator.is_begin())) + if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.is_begin())) { return m_object; } @@ -8039,7 +10661,7 @@ class iter_impl bool operator==(const iter_impl& other) const { // if objects are not the same, the comparison is undefined - if (JSON_UNLIKELY(m_object != other.m_object)) + if (JSON_HEDLEY_UNLIKELY(m_object != other.m_object)) { JSON_THROW(invalid_iterator::create(212, "cannot compare iterators of different containers")); } @@ -8075,7 +10697,7 @@ class iter_impl bool operator<(const iter_impl& other) const { // if objects are not the same, the comparison is undefined - if (JSON_UNLIKELY(m_object != other.m_object)) + if (JSON_HEDLEY_UNLIKELY(m_object != other.m_object)) { JSON_THROW(invalid_iterator::create(212, "cannot compare iterators of different containers")); } @@ -8235,7 +10857,7 @@ class iter_impl default: { - if (JSON_LIKELY(m_it.primitive_iterator.get_value() == -n)) + if (JSON_HEDLEY_LIKELY(m_it.primitive_iterator.get_value() == -n)) { return *m_object; } @@ -8253,7 +10875,7 @@ class iter_impl { assert(m_object != nullptr); - if (JSON_LIKELY(m_object->is_object())) + if (JSON_HEDLEY_LIKELY(m_object->is_object())) { return m_it.object_iterator->first; } @@ -8276,7 +10898,7 @@ class iter_impl /// the actual iterator of the associated instance internal_iterator::type> m_it {}; }; -} // namespace detail +} // namespace detail } // namespace nlohmann // #include @@ -8409,6 +11031,7 @@ class json_reverse_iterator : public std::reverse_iterator #include // all_of #include // assert +#include // isdigit #include // accumulate #include // string #include // move @@ -8535,8 +11158,8 @@ class json_pointer /*! @brief append an array index at the end of this JSON pointer - @param[in] array_index array index ot append - @return JSON pointer with @a array_index appended + @param[in] array_idx array index to append + @return JSON pointer with @a array_idx appended @liveexample{The example shows the usage of `operator/=`.,json_pointer__operator_add} @@ -8548,9 +11171,9 @@ class json_pointer @since version 3.6.0 */ - json_pointer& operator/=(std::size_t array_index) + json_pointer& operator/=(std::size_t array_idx) { - return *this /= std::to_string(array_index); + return *this /= std::to_string(array_idx); } /*! @@ -8598,8 +11221,8 @@ class json_pointer @brief create a new JSON pointer by appending the array-index-token at the end of the JSON pointer @param[in] ptr JSON pointer - @param[in] array_index array index - @return a new JSON pointer with @a array_index appended to @a ptr + @param[in] array_idx array index + @return a new JSON pointer with @a array_idx appended to @a ptr @liveexample{The example shows the usage of `operator/`.,json_pointer__operator_add_binary} @@ -8609,9 +11232,9 @@ class json_pointer @since version 3.6.0 */ - friend json_pointer operator/(const json_pointer& ptr, std::size_t array_index) + friend json_pointer operator/(const json_pointer& ptr, std::size_t array_idx) { - return json_pointer(ptr) /= array_index; + return json_pointer(ptr) /= array_idx; } /*! @@ -8654,7 +11277,7 @@ class json_pointer */ void pop_back() { - if (JSON_UNLIKELY(empty())) + if (JSON_HEDLEY_UNLIKELY(empty())) { JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent")); } @@ -8676,9 +11299,9 @@ class json_pointer @since version 3.6.0 */ - const std::string& back() + const std::string& back() const { - if (JSON_UNLIKELY(empty())) + if (JSON_HEDLEY_UNLIKELY(empty())) { JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent")); } @@ -8738,11 +11361,33 @@ class json_pointer */ static int array_index(const std::string& s) { + // error condition (cf. RFC 6901, Sect. 4) + if (JSON_HEDLEY_UNLIKELY(s.size() > 1 and s[0] == '0')) + { + JSON_THROW(detail::parse_error::create(106, 0, + "array index '" + s + + "' must not begin with '0'")); + } + + // error condition (cf. RFC 6901, Sect. 4) + if (JSON_HEDLEY_UNLIKELY(s.size() > 1 and not (s[0] >= '1' and s[0] <= '9'))) + { + JSON_THROW(detail::parse_error::create(109, 0, "array index '" + s + "' is not a number")); + } + std::size_t processed_chars = 0; - const int res = std::stoi(s, &processed_chars); + int res = 0; + JSON_TRY + { + res = std::stoi(s, &processed_chars); + } + JSON_CATCH(std::out_of_range&) + { + JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + s + "'")); + } // check if the string was completely read - if (JSON_UNLIKELY(processed_chars != s.size())) + if (JSON_HEDLEY_UNLIKELY(processed_chars != s.size())) { JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + s + "'")); } @@ -8752,7 +11397,7 @@ class json_pointer json_pointer top() const { - if (JSON_UNLIKELY(empty())) + if (JSON_HEDLEY_UNLIKELY(empty())) { JSON_THROW(detail::out_of_range::create(405, "JSON pointer has no parent")); } @@ -8779,7 +11424,7 @@ class json_pointer // j which will be overwritten by a primitive value for (const auto& reference_token : reference_tokens) { - switch (result->m_type) + switch (result->type()) { case detail::value_t::null: { @@ -8806,14 +11451,7 @@ class json_pointer case detail::value_t::array: { // create an entry in the array - JSON_TRY - { - result = &result->operator[](static_cast(array_index(reference_token))); - } - JSON_CATCH(std::invalid_argument&) - { - JSON_THROW(detail::parse_error::create(109, 0, "array index '" + reference_token + "' is not a number")); - } + result = &result->operator[](static_cast(array_index(reference_token))); break; } @@ -8856,14 +11494,14 @@ class json_pointer for (const auto& reference_token : reference_tokens) { // convert null values to arrays or objects before continuing - if (ptr->m_type == detail::value_t::null) + if (ptr->is_null()) { // check if reference token is a number const bool nums = std::all_of(reference_token.begin(), reference_token.end(), - [](const char x) + [](const unsigned char x) { - return x >= '0' and x <= '9'; + return std::isdigit(x); }); // change value to array for numbers or "-" or to object otherwise @@ -8872,7 +11510,7 @@ class json_pointer : detail::value_t::object; } - switch (ptr->m_type) + switch (ptr->type()) { case detail::value_t::object: { @@ -8883,14 +11521,6 @@ class json_pointer case detail::value_t::array: { - // error condition (cf. RFC 6901, Sect. 4) - if (JSON_UNLIKELY(reference_token.size() > 1 and reference_token[0] == '0')) - { - JSON_THROW(detail::parse_error::create(106, 0, - "array index '" + reference_token + - "' must not begin with '0'")); - } - if (reference_token == "-") { // explicitly treat "-" as index beyond the end @@ -8899,15 +11529,8 @@ class json_pointer else { // convert array index to number; unchecked access - JSON_TRY - { - ptr = &ptr->operator[]( - static_cast(array_index(reference_token))); - } - JSON_CATCH(std::invalid_argument&) - { - JSON_THROW(detail::parse_error::create(109, 0, "array index '" + reference_token + "' is not a number")); - } + ptr = &ptr->operator[]( + static_cast(array_index(reference_token))); } break; } @@ -8931,7 +11554,7 @@ class json_pointer using size_type = typename BasicJsonType::size_type; for (const auto& reference_token : reference_tokens) { - switch (ptr->m_type) + switch (ptr->type()) { case detail::value_t::object: { @@ -8942,7 +11565,7 @@ class json_pointer case detail::value_t::array: { - if (JSON_UNLIKELY(reference_token == "-")) + if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) { // "-" always fails the range check JSON_THROW(detail::out_of_range::create(402, @@ -8950,23 +11573,8 @@ class json_pointer ") is out of range")); } - // error condition (cf. RFC 6901, Sect. 4) - if (JSON_UNLIKELY(reference_token.size() > 1 and reference_token[0] == '0')) - { - JSON_THROW(detail::parse_error::create(106, 0, - "array index '" + reference_token + - "' must not begin with '0'")); - } - // note: at performs range check - JSON_TRY - { - ptr = &ptr->at(static_cast(array_index(reference_token))); - } - JSON_CATCH(std::invalid_argument&) - { - JSON_THROW(detail::parse_error::create(109, 0, "array index '" + reference_token + "' is not a number")); - } + ptr = &ptr->at(static_cast(array_index(reference_token))); break; } @@ -8996,7 +11604,7 @@ class json_pointer using size_type = typename BasicJsonType::size_type; for (const auto& reference_token : reference_tokens) { - switch (ptr->m_type) + switch (ptr->type()) { case detail::value_t::object: { @@ -9007,7 +11615,7 @@ class json_pointer case detail::value_t::array: { - if (JSON_UNLIKELY(reference_token == "-")) + if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) { // "-" cannot be used for const access JSON_THROW(detail::out_of_range::create(402, @@ -9015,24 +11623,9 @@ class json_pointer ") is out of range")); } - // error condition (cf. RFC 6901, Sect. 4) - if (JSON_UNLIKELY(reference_token.size() > 1 and reference_token[0] == '0')) - { - JSON_THROW(detail::parse_error::create(106, 0, - "array index '" + reference_token + - "' must not begin with '0'")); - } - // use unchecked array access - JSON_TRY - { - ptr = &ptr->operator[]( - static_cast(array_index(reference_token))); - } - JSON_CATCH(std::invalid_argument&) - { - JSON_THROW(detail::parse_error::create(109, 0, "array index '" + reference_token + "' is not a number")); - } + ptr = &ptr->operator[]( + static_cast(array_index(reference_token))); break; } @@ -9055,7 +11648,7 @@ class json_pointer using size_type = typename BasicJsonType::size_type; for (const auto& reference_token : reference_tokens) { - switch (ptr->m_type) + switch (ptr->type()) { case detail::value_t::object: { @@ -9066,7 +11659,7 @@ class json_pointer case detail::value_t::array: { - if (JSON_UNLIKELY(reference_token == "-")) + if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) { // "-" always fails the range check JSON_THROW(detail::out_of_range::create(402, @@ -9074,32 +11667,93 @@ class json_pointer ") is out of range")); } - // error condition (cf. RFC 6901, Sect. 4) - if (JSON_UNLIKELY(reference_token.size() > 1 and reference_token[0] == '0')) + // note: at performs range check + ptr = &ptr->at(static_cast(array_index(reference_token))); + break; + } + + default: + JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + reference_token + "'")); + } + } + + return *ptr; + } + + /*! + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + */ + bool contains(const BasicJsonType* ptr) const + { + using size_type = typename BasicJsonType::size_type; + for (const auto& reference_token : reference_tokens) + { + switch (ptr->type()) + { + case detail::value_t::object: + { + if (not ptr->contains(reference_token)) { - JSON_THROW(detail::parse_error::create(106, 0, - "array index '" + reference_token + - "' must not begin with '0'")); + // we did not find the key in the object + return false; } - // note: at performs range check - JSON_TRY + ptr = &ptr->operator[](reference_token); + break; + } + + case detail::value_t::array: + { + if (JSON_HEDLEY_UNLIKELY(reference_token == "-")) + { + // "-" always fails the range check + return false; + } + if (JSON_HEDLEY_UNLIKELY(reference_token.size() == 1 and not ("0" <= reference_token and reference_token <= "9"))) + { + // invalid char + return false; + } + if (JSON_HEDLEY_UNLIKELY(reference_token.size() > 1)) { - ptr = &ptr->at(static_cast(array_index(reference_token))); + if (JSON_HEDLEY_UNLIKELY(not ('1' <= reference_token[0] and reference_token[0] <= '9'))) + { + // first char should be between '1' and '9' + return false; + } + for (std::size_t i = 1; i < reference_token.size(); i++) + { + if (JSON_HEDLEY_UNLIKELY(not ('0' <= reference_token[i] and reference_token[i] <= '9'))) + { + // other char should be between '0' and '9' + return false; + } + } } - JSON_CATCH(std::invalid_argument&) + + const auto idx = static_cast(array_index(reference_token)); + if (idx >= ptr->size()) { - JSON_THROW(detail::parse_error::create(109, 0, "array index '" + reference_token + "' is not a number")); + // index out of range + return false; } + + ptr = &ptr->operator[](idx); break; } default: - JSON_THROW(detail::out_of_range::create(404, "unresolved reference token '" + reference_token + "'")); + { + // we do not expect primitive values if there is still a + // reference token to process + return false; + } } } - return *ptr; + // no reference token left means we found a primitive value + return true; } /*! @@ -9122,7 +11776,7 @@ class json_pointer } // check if nonempty reference string begins with slash - if (JSON_UNLIKELY(reference_string[0] != '/')) + if (JSON_HEDLEY_UNLIKELY(reference_string[0] != '/')) { JSON_THROW(detail::parse_error::create(107, 1, "JSON pointer must be empty or begin with '/' - was: '" + @@ -9157,9 +11811,9 @@ class json_pointer assert(reference_token[pos] == '~'); // ~ must be followed by 0 or 1 - if (JSON_UNLIKELY(pos == reference_token.size() - 1 or - (reference_token[pos + 1] != '0' and - reference_token[pos + 1] != '1'))) + if (JSON_HEDLEY_UNLIKELY(pos == reference_token.size() - 1 or + (reference_token[pos + 1] != '0' and + reference_token[pos + 1] != '1'))) { JSON_THROW(detail::parse_error::create(108, 0, "escape character '~' must be followed with '0' or '1'")); } @@ -9223,7 +11877,7 @@ class json_pointer const BasicJsonType& value, BasicJsonType& result) { - switch (value.m_type) + switch (value.type()) { case detail::value_t::array: { @@ -9284,7 +11938,7 @@ class json_pointer static BasicJsonType unflatten(const BasicJsonType& value) { - if (JSON_UNLIKELY(not value.is_object())) + if (JSON_HEDLEY_UNLIKELY(not value.is_object())) { JSON_THROW(detail::type_error::create(314, "only objects can be unflattened")); } @@ -9294,7 +11948,7 @@ class json_pointer // iterate the JSON object values for (const auto& element : *value.m_value.object) { - if (JSON_UNLIKELY(not element.second.is_primitive())) + if (JSON_HEDLEY_UNLIKELY(not element.second.is_primitive())) { JSON_THROW(detail::type_error::create(315, "values in object must be primitive")); } @@ -9435,9 +12089,12 @@ class json_ref #include // memcpy #include // numeric_limits #include // string +#include // isnan, isinf // #include +// #include + // #include @@ -9449,6 +12106,8 @@ class json_ref #include // basic_ostream #include // basic_string #include // vector +// #include + namespace nlohmann { @@ -9480,6 +12139,7 @@ class output_vector_adapter : public output_adapter_protocol v.push_back(c); } + JSON_HEDLEY_NON_NULL(2) void write_characters(const CharType* s, std::size_t length) override { std::copy(s, s + length, std::back_inserter(v)); @@ -9503,6 +12163,7 @@ class output_stream_adapter : public output_adapter_protocol stream.put(c); } + JSON_HEDLEY_NON_NULL(2) void write_characters(const CharType* s, std::size_t length) override { stream.write(s, static_cast(length)); @@ -9526,6 +12187,7 @@ class output_string_adapter : public output_adapter_protocol str.push_back(c); } + JSON_HEDLEY_NON_NULL(2) void write_characters(const CharType* s, std::size_t length) override { str.append(s, length); @@ -9575,6 +12237,7 @@ template class binary_writer { using string_t = typename BasicJsonType::string_t; + using binary_t = typename BasicJsonType::binary_t; public: /*! @@ -9725,8 +12388,35 @@ class binary_writer case value_t::number_float: { - oa->write_character(get_cbor_float_prefix(j.m_value.number_float)); - write_number(j.m_value.number_float); + if (std::isnan(j.m_value.number_float)) + { + // NaN is 0xf97e00 in CBOR + oa->write_character(to_char_type(0xF9)); + oa->write_character(to_char_type(0x7E)); + oa->write_character(to_char_type(0x00)); + } + else if (std::isinf(j.m_value.number_float)) + { + // Infinity is 0xf97c00, -Infinity is 0xf9fc00 + oa->write_character(to_char_type(0xf9)); + oa->write_character(j.m_value.number_float > 0 ? to_char_type(0x7C) : to_char_type(0xFC)); + oa->write_character(to_char_type(0x00)); + } + else + { + if (static_cast(j.m_value.number_float) >= static_cast(std::numeric_limits::lowest()) and + static_cast(j.m_value.number_float) <= static_cast((std::numeric_limits::max)()) and + static_cast(static_cast(j.m_value.number_float)) == static_cast(j.m_value.number_float)) + { + oa->write_character(get_cbor_float_prefix(static_cast(j.m_value.number_float))); + write_number(static_cast(j.m_value.number_float)); + } + else + { + oa->write_character(get_cbor_float_prefix(j.m_value.number_float)); + write_number(j.m_value.number_float); + } + } break; } @@ -9807,6 +12497,45 @@ class binary_writer break; } + case value_t::binary: + { + // step 1: write control byte and the binary array size + const auto N = j.m_value.binary->size(); + if (N <= 0x17) + { + write_number(static_cast(0x40 + N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x58)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x59)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x5A)); + write_number(static_cast(N)); + } + // LCOV_EXCL_START + else if (N <= (std::numeric_limits::max)()) + { + oa->write_character(to_char_type(0x5B)); + write_number(static_cast(N)); + } + // LCOV_EXCL_STOP + + // step 2: write each element + oa->write_characters( + reinterpret_cast(j.m_value.binary->data()), + N); + + break; + } + case value_t::object: { // step 1: write control byte and the object size @@ -10055,6 +12784,101 @@ class binary_writer break; } + case value_t::binary: + { + // step 0: determine if the binary type has a set subtype to + // determine whether or not to use the ext or fixext types + const bool use_ext = j.m_value.binary->has_subtype(); + + // step 1: write control byte and the byte string length + const auto N = j.m_value.binary->size(); + if (N <= (std::numeric_limits::max)()) + { + std::uint8_t output_type; + bool fixed = true; + if (use_ext) + { + switch (N) + { + case 1: + output_type = 0xD4; // fixext 1 + break; + case 2: + output_type = 0xD5; // fixext 2 + break; + case 4: + output_type = 0xD6; // fixext 4 + break; + case 8: + output_type = 0xD7; // fixext 8 + break; + case 16: + output_type = 0xD8; // fixext 16 + break; + default: + output_type = 0xC7; // ext 8 + fixed = false; + break; + } + + } + else + { + output_type = 0xC4; // bin 8 + fixed = false; + } + + oa->write_character(to_char_type(output_type)); + if (not fixed) + { + write_number(static_cast(N)); + } + } + else if (N <= (std::numeric_limits::max)()) + { + std::uint8_t output_type; + if (use_ext) + { + output_type = 0xC8; // ext 16 + } + else + { + output_type = 0xC5; // bin 16 + } + + oa->write_character(to_char_type(output_type)); + write_number(static_cast(N)); + } + else if (N <= (std::numeric_limits::max)()) + { + std::uint8_t output_type; + if (use_ext) + { + output_type = 0xC9; // ext 32 + } + else + { + output_type = 0xC6; // bin 32 + } + + oa->write_character(to_char_type(output_type)); + write_number(static_cast(N)); + } + + // step 1.5: if this is an ext type, write the subtype + if (use_ext) + { + write_number(static_cast(j.m_value.binary->subtype())); + } + + // step 2: write the byte string + oa->write_characters( + reinterpret_cast(j.m_value.binary->data()), + N); + + break; + } + case value_t::object: { // step 1: write control byte and the object size @@ -10182,12 +13006,55 @@ class binary_writer if (use_count) { oa->write_character(to_char_type('#')); - write_number_with_ubjson_prefix(j.m_value.array->size(), true); + write_number_with_ubjson_prefix(j.m_value.array->size(), true); + } + + for (const auto& el : *j.m_value.array) + { + write_ubjson(el, use_count, use_type, prefix_required); + } + + if (not use_count) + { + oa->write_character(to_char_type(']')); + } + + break; + } + + case value_t::binary: + { + if (add_prefix) + { + oa->write_character(to_char_type('[')); + } + + if (use_type and not j.m_value.binary->empty()) + { + assert(use_count); + oa->write_character(to_char_type('$')); + oa->write_character('U'); + } + + if (use_count) + { + oa->write_character(to_char_type('#')); + write_number_with_ubjson_prefix(j.m_value.binary->size(), true); } - for (const auto& el : *j.m_value.array) + if (use_type) { - write_ubjson(el, use_count, use_type, prefix_required); + oa->write_characters( + reinterpret_cast(j.m_value.binary->data()), + j.m_value.binary->size()); + } + else + { + for (size_t i = 0; i < j.m_value.binary->size(); ++i) + { + oa->write_character(to_char_type('U')); + oa->write_character(j.m_value.binary->data()[i]); + } } if (not use_count) @@ -10264,7 +13131,7 @@ class binary_writer static std::size_t calc_bson_entry_header_size(const string_t& name) { const auto it = name.find(static_cast(0)); - if (JSON_UNLIKELY(it != BasicJsonType::string_t::npos)) + if (JSON_HEDLEY_UNLIKELY(it != BasicJsonType::string_t::npos)) { JSON_THROW(out_of_range::create(409, "BSON key cannot contain code point U+0000 (at byte " + std::to_string(it) + ")")); @@ -10410,17 +13277,24 @@ class binary_writer */ static std::size_t calc_bson_array_size(const typename BasicJsonType::array_t& value) { - std::size_t embedded_document_size = 0ul; std::size_t array_index = 0ul; - for (const auto& el : value) + const std::size_t embedded_document_size = std::accumulate(std::begin(value), std::end(value), std::size_t(0), [&array_index](std::size_t result, const typename BasicJsonType::array_t::value_type & el) { - embedded_document_size += calc_bson_element_size(std::to_string(array_index++), el); - } + return result + calc_bson_element_size(std::to_string(array_index++), el); + }); return sizeof(std::int32_t) + embedded_document_size + 1ul; } + /*! + @return The size of the BSON-encoded binary array @a value + */ + static std::size_t calc_bson_binary_size(const typename BasicJsonType::binary_t& value) + { + return sizeof(std::int32_t) + value.size() + 1ul; + } + /*! @brief Writes a BSON element with key @a name and array @a value */ @@ -10440,6 +13314,20 @@ class binary_writer oa->write_character(to_char_type(0x00)); } + /*! + @brief Writes a BSON element with key @a name and binary value @a value + */ + void write_bson_binary(const string_t& name, + const binary_t& value) + { + write_bson_entry_header(name, 0x05); + + write_number(static_cast(value.size())); + write_number(value.has_subtype() ? value.subtype() : std::uint8_t(0x00)); + + oa->write_characters(reinterpret_cast(value.data()), value.size()); + } + /*! @brief Calculates the size necessary to serialize the JSON value @a j with its @a name @return The calculated size for the BSON document entry for @a j with the given @a name. @@ -10456,6 +13344,9 @@ class binary_writer case value_t::array: return header_size + calc_bson_array_size(*j.m_value.array); + case value_t::binary: + return header_size + calc_bson_binary_size(*j.m_value.binary); + case value_t::boolean: return header_size + 1ul; @@ -10500,6 +13391,9 @@ class binary_writer case value_t::array: return write_bson_array(name, *j.m_value.array); + case value_t::binary: + return write_bson_binary(name, *j.m_value.binary); + case value_t::boolean: return write_bson_boolean(name, j.m_value.boolean); @@ -10534,7 +13428,7 @@ class binary_writer */ static std::size_t calc_bson_object_size(const typename BasicJsonType::object_t& value) { - std::size_t document_size = std::accumulate(value.begin(), value.end(), 0ul, + std::size_t document_size = std::accumulate(value.begin(), value.end(), std::size_t(0), [](size_t result, const typename BasicJsonType::object_t::value_type & el) { return result += calc_bson_element_size(el.first, el.second); @@ -10754,19 +13648,19 @@ class binary_writer case value_t::number_unsigned: { - if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) { return 'i'; } - if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) { return 'U'; } - if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) { return 'I'; } - if (j.m_value.number_unsigned <= (std::numeric_limits::max)()) + if (j.m_value.number_unsigned <= static_cast((std::numeric_limits::max)())) { return 'l'; } @@ -10780,7 +13674,8 @@ class binary_writer case value_t::string: return 'S'; - case value_t::array: + case value_t::array: // fallthrough + case value_t::binary: return '['; case value_t::object: @@ -10850,7 +13745,7 @@ class binary_writer static CharType to_char_type(std::uint8_t x) noexcept { static_assert(sizeof(std::uint8_t) == sizeof(CharType), "size of CharType must be equal to std::uint8_t"); - static_assert(std::is_pod::value, "CharType must be POD"); + static_assert(std::is_trivial::value, "CharType must be trivial"); CharType result; std::memcpy(&result, &x, sizeof(x)); return result; @@ -10876,7 +13771,7 @@ class binary_writer private: /// whether we can assume little endianess - const bool is_little_endian = binary_reader::little_endianess(); + const bool is_little_endian = little_endianess(); /// the output output_adapter_t oa = nullptr; @@ -10892,7 +13787,6 @@ class binary_writer #include // reverse, remove, fill, find, none_of #include // array #include // assert -#include // and, or #include // localeconv, lconv #include // labs, isfinite, isnan, signbit #include // size_t, ptrdiff_t @@ -10903,18 +13797,24 @@ class binary_writer #include // is_same #include // move +// #include + // #include #include // array #include // assert -#include // or, and, not #include // signbit, isfinite #include // intN_t, uintN_t #include // memcpy, memmove #include // numeric_limits #include // conditional +// #include + +// #include + + namespace nlohmann { namespace detail @@ -11235,7 +14135,7 @@ inline cached_power get_cached_power_for_binary_exponent(int e) // ==> 2^(q - 1 + alpha) <= c * 2^(e + q) // ==> 2^(alpha - e - 1) <= c // - // If c were an exakt power of ten, i.e. c = 10^k, one may determine k as + // If c were an exact power of ten, i.e. c = 10^k, one may determine k as // // k = ceil( log_10( 2^(alpha - e - 1) ) ) // = ceil( (alpha - e - 1) * log_10(2) ) @@ -11724,6 +14624,7 @@ v = buf * 10^decimal_exponent len is the length of the buffer (number of decimal digits) The buffer must be large enough, i.e. >= max_digits10. */ +JSON_HEDLEY_NON_NULL(1) inline void grisu2(char* buf, int& len, int& decimal_exponent, diyfp m_minus, diyfp v, diyfp m_plus) { @@ -11783,6 +14684,7 @@ len is the length of the buffer (number of decimal digits) The buffer must be large enough, i.e. >= max_digits10. */ template +JSON_HEDLEY_NON_NULL(1) void grisu2(char* buf, int& len, int& decimal_exponent, FloatType value) { static_assert(diyfp::kPrecision >= std::numeric_limits::digits + 3, @@ -11821,6 +14723,8 @@ void grisu2(char* buf, int& len, int& decimal_exponent, FloatType value) @return a pointer to the element following the exponent. @pre -1000 < e < 1000 */ +JSON_HEDLEY_NON_NULL(1) +JSON_HEDLEY_RETURNS_NON_NULL inline char* append_exponent(char* buf, int e) { assert(e > -1000); @@ -11871,6 +14775,8 @@ notation. Otherwise it will be printed in exponential notation. @pre min_exp < 0 @pre max_exp > 0 */ +JSON_HEDLEY_NON_NULL(1) +JSON_HEDLEY_RETURNS_NON_NULL inline char* format_buffer(char* buf, int len, int decimal_exponent, int min_exp, int max_exp) { @@ -11889,11 +14795,11 @@ inline char* format_buffer(char* buf, int len, int decimal_exponent, // digits[000] // len <= max_exp + 2 - std::memset(buf + k, '0', static_cast(n - k)); + std::memset(buf + k, '0', static_cast(n) - static_cast(k)); // Make it look like a floating-point number (#362, #378) buf[n + 0] = '.'; buf[n + 1] = '0'; - return buf + (n + 2); + return buf + (static_cast(n) + 2); } if (0 < n and n <= max_exp) @@ -11903,9 +14809,9 @@ inline char* format_buffer(char* buf, int len, int decimal_exponent, assert(k > n); - std::memmove(buf + (n + 1), buf + n, static_cast(k - n)); + std::memmove(buf + (static_cast(n) + 1), buf + n, static_cast(k) - static_cast(n)); buf[n] = '.'; - return buf + (k + 1); + return buf + (static_cast(k) + 1U); } if (min_exp < n and n <= 0) @@ -11913,11 +14819,11 @@ inline char* format_buffer(char* buf, int len, int decimal_exponent, // 0.[000]digits // len <= 2 + (-min_exp - 1) + max_digits10 - std::memmove(buf + (2 + -n), buf, static_cast(k)); + std::memmove(buf + (2 + static_cast(-n)), buf, static_cast(k)); buf[0] = '0'; buf[1] = '.'; std::memset(buf + 2, '0', static_cast(-n)); - return buf + (2 + (-n) + k); + return buf + (2U + static_cast(-n) + static_cast(k)); } if (k == 1) @@ -11932,9 +14838,9 @@ inline char* format_buffer(char* buf, int len, int decimal_exponent, // d.igitsE+123 // len <= max_digits10 + 1 + 5 - std::memmove(buf + 2, buf + 1, static_cast(k - 1)); + std::memmove(buf + 2, buf + 1, static_cast(k) - 1); buf[1] = '.'; - buf += 1 + k; + buf += 1 + static_cast(k); } *buf++ = 'e'; @@ -11954,6 +14860,8 @@ format. Returns an iterator pointing past-the-end of the decimal representation. @note The result is NOT null-terminated. */ template +JSON_HEDLEY_NON_NULL(1, 2) +JSON_HEDLEY_RETURNS_NON_NULL char* to_chars(char* first, const char* last, FloatType value) { static_cast(last); // maybe unused - fix warning @@ -12038,6 +14946,7 @@ class serializer using number_float_t = typename BasicJsonType::number_float_t; using number_integer_t = typename BasicJsonType::number_integer_t; using number_unsigned_t = typename BasicJsonType::number_unsigned_t; + using binary_char_t = typename BasicJsonType::binary_t::value_type; static constexpr std::uint8_t UTF8_ACCEPT = 0; static constexpr std::uint8_t UTF8_REJECT = 1; @@ -12076,13 +14985,19 @@ class serializer - strings and object keys are escaped using `escape_string()` - integer numbers are converted implicitly via `operator<<` - floating-point numbers are converted to a string using `"%g"` format + - binary values are serialized as objects containing the subtype and the + byte array - @param[in] val value to serialize - @param[in] pretty_print whether the output shall be pretty-printed - @param[in] indent_step the indent level - @param[in] current_indent the current indent level (only used internally) + @param[in] val value to serialize + @param[in] pretty_print whether the output shall be pretty-printed + @param[in] ensure_ascii If @a ensure_ascii is true, all non-ASCII characters + in the output are escaped with `\uXXXX` sequences, and the result consists + of ASCII characters only. + @param[in] indent_step the indent level + @param[in] current_indent the current indent level (only used internally) */ - void dump(const BasicJsonType& val, const bool pretty_print, + void dump(const BasicJsonType& val, + const bool pretty_print, const bool ensure_ascii, const unsigned int indent_step, const unsigned int current_indent = 0) @@ -12103,7 +15018,7 @@ class serializer // variable to hold indentation for recursive calls const auto new_indent = current_indent + indent_step; - if (JSON_UNLIKELY(indent_string.size() < new_indent)) + if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent)) { indent_string.resize(indent_string.size() * 2, ' '); } @@ -12176,7 +15091,7 @@ class serializer // variable to hold indentation for recursive calls const auto new_indent = current_indent + indent_step; - if (JSON_UNLIKELY(indent_string.size() < new_indent)) + if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent)) { indent_string.resize(indent_string.size() * 2, ' '); } @@ -12229,6 +15144,79 @@ class serializer return; } + case value_t::binary: + { + if (pretty_print) + { + o->write_characters("{\n", 2); + + // variable to hold indentation for recursive calls + const auto new_indent = current_indent + indent_step; + if (JSON_HEDLEY_UNLIKELY(indent_string.size() < new_indent)) + { + indent_string.resize(indent_string.size() * 2, ' '); + } + + o->write_characters(indent_string.c_str(), new_indent); + + o->write_characters("\"bytes\": [", 10); + + if (not val.m_value.binary->empty()) + { + for (auto i = val.m_value.binary->cbegin(); + i != val.m_value.binary->cend() - 1; ++i) + { + dump_integer(*i); + o->write_characters(", ", 2); + } + dump_integer(val.m_value.binary->back()); + } + + o->write_characters("],\n", 3); + o->write_characters(indent_string.c_str(), new_indent); + + o->write_characters("\"subtype\": ", 11); + if (val.m_value.binary->has_subtype()) + { + dump_integer(val.m_value.binary->subtype()); + } + else + { + o->write_characters("null", 4); + } + o->write_character('\n'); + o->write_characters(indent_string.c_str(), current_indent); + o->write_character('}'); + } + else + { + o->write_characters("{\"bytes\":[", 10); + + if (not val.m_value.binary->empty()) + { + for (auto i = val.m_value.binary->cbegin(); + i != val.m_value.binary->cend() - 1; ++i) + { + dump_integer(*i); + o->write_character(','); + } + dump_integer(val.m_value.binary->back()); + } + + o->write_characters("],\"subtype\":", 12); + if (val.m_value.binary->has_subtype()) + { + dump_integer(val.m_value.binary->subtype()); + o->write_character('}'); + } + else + { + o->write_characters("null}", 5); + } + } + return; + } + case value_t::boolean: { if (val.m_value.boolean) @@ -12491,7 +15479,7 @@ class serializer } // we finished processing the string - if (JSON_LIKELY(state == UTF8_ACCEPT)) + if (JSON_HEDLEY_LIKELY(state == UTF8_ACCEPT)) { // write buffer if (bytes > 0) @@ -12585,7 +15573,8 @@ class serializer */ template::value or - std::is_same::value, + std::is_same::value or + std::is_same::value, int> = 0> void dump_integer(NumberType x) { @@ -12623,7 +15612,7 @@ class serializer if (is_negative) { *buffer_ptr = '-'; - abs_value = static_cast(std::abs(static_cast(x))); + abs_value = remove_sign(static_cast(x)); // account one more byte for the minus sign n_chars = 1 + count_digits(abs_value); @@ -12800,10 +15789,38 @@ class serializer ? (byte & 0x3fu) | (codep << 6u) : (0xFFu >> type) & (byte); - state = utf8d[256u + state * 16u + type]; + std::size_t index = 256u + static_cast(state) * 16u + static_cast(type); + assert(index < 400); + state = utf8d[index]; return state; } + /* + * Overload to make the compiler happy while it is instantiating + * dump_integer for number_unsigned_t. + * Must never be called. + */ + number_unsigned_t remove_sign(number_unsigned_t x) + { + assert(false); // LCOV_EXCL_LINE + return x; // LCOV_EXCL_LINE + } + + /* + * Helper function for dump_integer + * + * This function takes a negative signed integer and returns its absolute + * value as unsigned integer. The plus/minus shuffling is necessary as we can + * not directly remove the sign of an arbitrary signed integer as the + * absolute values of INT_MIN and INT_MAX are usually not the same. See + * #1708 for details. + */ + inline number_unsigned_t remove_sign(number_integer_t x) noexcept + { + assert(x < 0 and x < (std::numeric_limits::max)()); + return static_cast(-(x + 1)) + 1; + } + private: /// the output of the serializer output_adapter_t o = nullptr; @@ -12862,6 +15879,9 @@ default; will be used in @ref number_integer_t) `uint64_t` by default; will be used in @ref number_unsigned_t) @tparam NumberFloatType type for JSON floating-point numbers (`double` by default; will be used in @ref number_float_t) +@tparam BinaryType type for packed binary data for compatibility with binary +serialization formats (`std::vector` by default; will be used in +@ref binary_t) @tparam AllocatorType type of the allocator to use (`std::allocator` by default) @tparam JSONSerializer the serializer to resolve internal calls to `to_json()` @@ -12916,7 +15936,7 @@ relationship: The invariants are checked by member function assert_invariant(). @internal -@note ObjectType trick from http://stackoverflow.com/a/9860911 +@note ObjectType trick from https://stackoverflow.com/a/9860911 @endinternal @see [RFC 7159: The JavaScript Object Notation (JSON) Data Interchange @@ -12932,13 +15952,15 @@ class basic_json private: template friend struct detail::external_constructor; friend ::nlohmann::json_pointer; - friend ::nlohmann::detail::parser; + + template + friend class ::nlohmann::detail::parser; friend ::nlohmann::detail::serializer; template friend class ::nlohmann::detail::iter_impl; template friend class ::nlohmann::detail::binary_writer; - template + template friend class ::nlohmann::detail::binary_reader; template friend class ::nlohmann::detail::json_sax_dom_parser; @@ -12949,8 +15971,17 @@ class basic_json using basic_json_t = NLOHMANN_BASIC_JSON_TPL; // convenience aliases for types residing in namespace detail; - using lexer = ::nlohmann::detail::lexer; - using parser = ::nlohmann::detail::parser; + using lexer = ::nlohmann::detail::lexer_base; + + template + static ::nlohmann::detail::parser parser( + InputAdapterType adapter, + detail::parser_callback_tcb = nullptr, + bool allow_exceptions = true + ) + { + return ::nlohmann::detail::parser(std::move(adapter), std::move(cb), allow_exceptions); + } using primitive_iterator_t = ::nlohmann::detail::primitive_iterator_t; template @@ -12964,7 +15995,8 @@ class basic_json template using output_adapter_t = ::nlohmann::detail::output_adapter_t; - using binary_reader = ::nlohmann::detail::binary_reader; + template + using binary_reader = ::nlohmann::detail::binary_reader; template using binary_writer = ::nlohmann::detail::binary_writer; using serializer = ::nlohmann::detail::serializer; @@ -13084,7 +16116,7 @@ class basic_json @since 2.1.0 */ - JSON_NODISCARD + JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json meta() { basic_json result; @@ -13583,12 +16615,83 @@ class basic_json */ using number_float_t = NumberFloatType; + /*! + @brief a type for a packed binary type + + This type is a type designed to carry binary data that appears in various + serialized formats, such as CBOR's Major Type 2, MessagePack's bin, and + BSON's generic binary subtype. This type is NOT a part of standard JSON and + exists solely for compatibility with these binary types. As such, it is + simply defined as an ordered sequence of zero or more byte values. + + Additionally, as an implementation detail, the subtype of the binary data is + carried around as a `std::uint8_t`, which is compatible with both of the + binary data formats that use binary subtyping, (though the specific + numbering is incompatible with each other, and it is up to the user to + translate between them). + + [CBOR's RFC 7049](https://tools.ietf.org/html/rfc7049) describes this type + as: + > Major type 2: a byte string. The string's length in bytes is represented + > following the rules for positive integers (major type 0). + + [MessagePack's documentation on the bin type + family](https://github.com/msgpack/msgpack/blob/master/spec.md#bin-format-family) + describes this type as: + > Bin format family stores an byte array in 2, 3, or 5 bytes of extra bytes + > in addition to the size of the byte array. + + [BSON's specifications](http://bsonspec.org/spec.html) describe several + binary types; however, this type is intended to represent the generic binary + type which has the description: + > Generic binary subtype - This is the most commonly used binary subtype and + > should be the 'default' for drivers and tools. + + None of these impose any limitations on the internal representation other + than the basic unit of storage be some type of array whose parts are + decomposable into bytes. + + The default representation of this binary format is a + `std::vector`, which is a very common way to represent a byte + array in modern C++. + + #### Default type + + The default values for @a BinaryType is `std::vector` + + #### Storage + + Binary Arrays are stored as pointers in a @ref basic_json type. That is, + for any access to array values, a pointer of the type `binary_t*` must be + dereferenced. + + #### Notes on subtypes + + - CBOR + - Binary values are represented as byte strings. No subtypes are + supported and will be ignored when CBOR is written. + - MessagePack + - If a subtype is given and the binary array contains exactly 1, 2, 4, 8, + or 16 elements, the fixext family (fixext1, fixext2, fixext4, fixext8) + is used. For other sizes, the ext family (ext8, ext16, ext32) is used. + The subtype is then added as singed 8-bit integer. + - If no subtype is given, the bin family (bin8, bin16, bin32) is used. + - BSON + - If a subtype is given, it is used and added as unsigned 8-bit integer. + - If no subtype is given, the generic binary subtype 0x00 is used. + + @sa @ref binary -- create a binary array + + @since version 3.8.0 + */ + using binary_t = nlohmann::byte_container_with_subtype; /// @} private: /// helper for exception-safe object creation template + JSON_HEDLEY_RETURNS_NON_NULL static T* create(Args&& ... args) { AllocatorType alloc; @@ -13624,6 +16727,7 @@ class basic_json number | number_integer | @ref number_integer_t number | number_unsigned | @ref number_unsigned_t number | number_float | @ref number_float_t + binary | binary | pointer to @ref binary_t null | null | *no value is stored* @note Variable-length types (objects, arrays, and strings) are stored as @@ -13640,6 +16744,8 @@ class basic_json array_t* array; /// string (stored with pointer to save storage) string_t* string; + /// binary (stored with pointer to save storage) + binary_t* binary; /// boolean boolean_t boolean; /// number (integer) @@ -13682,6 +16788,12 @@ class basic_json break; } + case value_t::binary: + { + binary = create(); + break; + } + case value_t::boolean: { boolean = boolean_t(false); @@ -13715,9 +16827,9 @@ class basic_json default: { object = nullptr; // silence warning, see #821 - if (JSON_UNLIKELY(t == value_t::null)) + if (JSON_HEDLEY_UNLIKELY(t == value_t::null)) { - JSON_THROW(other_error::create(500, "961c151d2e87f2686a955a9be24d316f1362bf21 3.6.1")); // LCOV_EXCL_LINE + JSON_THROW(other_error::create(500, "961c151d2e87f2686a955a9be24d316f1362bf21 3.8.0")); // LCOV_EXCL_LINE } break; } @@ -13760,8 +16872,79 @@ class basic_json array = create(std::move(value)); } + /// constructor for binary arrays + json_value(const typename binary_t::container_type& value) + { + binary = create(value); + } + + /// constructor for rvalue binary arrays + json_value(typename binary_t::container_type&& value) + { + binary = create(std::move(value)); + } + + /// constructor for binary arrays (internal type) + json_value(const binary_t& value) + { + binary = create(value); + } + + /// constructor for rvalue binary arrays (internal type) + json_value(binary_t&& value) + { + binary = create(std::move(value)); + } + void destroy(value_t t) noexcept { + // flatten the current json_value to a heap-allocated stack + std::vector stack; + + // move the top-level items to stack + if (t == value_t::array) + { + stack.reserve(array->size()); + std::move(array->begin(), array->end(), std::back_inserter(stack)); + } + else if (t == value_t::object) + { + stack.reserve(object->size()); + for (auto&& it : *object) + { + stack.push_back(std::move(it.second)); + } + } + + while (not stack.empty()) + { + // move the last item to local variable to be processed + basic_json current_item(std::move(stack.back())); + stack.pop_back(); + + // if current_item is array/object, move + // its children to the stack to be processed later + if (current_item.is_array()) + { + std::move(current_item.m_value.array->begin(), current_item.m_value.array->end(), + std::back_inserter(stack)); + + current_item.m_value.array->clear(); + } + else if (current_item.is_object()) + { + for (auto&& it : *current_item.m_value.object) + { + stack.push_back(std::move(it.second)); + } + + current_item.m_value.object->clear(); + } + + // it's now safe that current_item get destructed + // since it doesn't have any children + } + switch (t) { case value_t::object: @@ -13788,6 +16971,14 @@ class basic_json break; } + case value_t::binary: + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, binary); + std::allocator_traits::deallocate(alloc, binary, 1); + break; + } + default: { break; @@ -13810,6 +17001,7 @@ class basic_json assert(m_type != value_t::object or m_value.object != nullptr); assert(m_type != value_t::array or m_value.array != nullptr); assert(m_type != value_t::string or m_value.string != nullptr); + assert(m_type != value_t::binary or m_value.binary != nullptr); } public: @@ -13832,7 +17024,7 @@ class basic_json @sa @ref parser_callback_t for more information and examples */ - using parse_event_t = typename parser::parse_event_t; + using parse_event_t = detail::parse_event_t; /*! @brief per-element parser callback type @@ -13883,7 +17075,7 @@ class basic_json @since version 1.0.0 */ - using parser_callback_t = typename parser::parser_callback_t; + using parser_callback_t = detail::parser_callback_t; ////////////////// // constructors // @@ -13908,6 +17100,7 @@ class basic_json number | `0` object | `{}` array | `[]` + binary | empty array @param[in] v the type of the value to create @@ -13979,6 +17172,12 @@ class basic_json @ref number_float_t, and all convertible number types such as `int`, `size_t`, `int64_t`, `float` or `double` can be used. - **boolean**: @ref boolean_t / `bool` can be used. + - **binary**: @ref binary_t / `std::vector` may be used, + unfortunately because string literals cannot be distinguished from binary + character arrays by the C++ type system, all types compatible with `const + char*` will be directed to the string constructor instead. This is both + for backwards compatibility, and due to the fact that a binary type is not + a standard JSON type. See the examples below. @@ -14060,6 +17259,7 @@ class basic_json using other_string_t = typename BasicJsonType::string_t; using other_object_t = typename BasicJsonType::object_t; using other_array_t = typename BasicJsonType::array_t; + using other_binary_t = typename BasicJsonType::binary_t; switch (val.type()) { @@ -14084,6 +17284,9 @@ class basic_json case value_t::array: JSONSerializer::to_json(*this, val.template get_ref()); break; + case value_t::binary: + JSONSerializer::to_json(*this, val.template get_ref()); + break; case value_t::null: *this = nullptr; break; @@ -14192,7 +17395,7 @@ class basic_json } // if object is wanted but impossible, throw an exception - if (JSON_UNLIKELY(manual_type == value_t::object and not is_an_object)) + if (JSON_HEDLEY_UNLIKELY(manual_type == value_t::object and not is_an_object)) { JSON_THROW(type_error::create(301, "cannot create object from initializer list")); } @@ -14222,6 +17425,99 @@ class basic_json assert_invariant(); } + /*! + @brief explicitly create a binary array (without subtype) + + Creates a JSON binary array value from a given binary container. Binary + values are part of various binary formats, such as CBOR, MessagePack, and + BSON. This constructor is used to create a value for serialization to those + formats. + + @note Note, this function exists because of the difficulty in correctly + specifying the correct template overload in the standard value ctor, as both + JSON arrays and JSON binary arrays are backed with some form of a + `std::vector`. Because JSON binary arrays are a non-standard extension it + was decided that it would be best to prevent automatic initialization of a + binary array type, for backwards compatibility and so it does not happen on + accident. + + @param[in] init container containing bytes to use as binary type + + @return JSON binary array value + + @complexity Linear in the size of @a init. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes to any JSON value. + + @since version 3.8.0 + */ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json binary(const typename binary_t::container_type& init) + { + auto res = basic_json(); + res.m_type = value_t::binary; + res.m_value = init; + return res; + } + + /*! + @brief explicitly create a binary array (with subtype) + + Creates a JSON binary array value from a given binary container. Binary + values are part of various binary formats, such as CBOR, MessagePack, and + BSON. This constructor is used to create a value for serialization to those + formats. + + @note Note, this function exists because of the difficulty in correctly + specifying the correct template overload in the standard value ctor, as both + JSON arrays and JSON binary arrays are backed with some form of a + `std::vector`. Because JSON binary arrays are a non-standard extension it + was decided that it would be best to prevent automatic initialization of a + binary array type, for backwards compatibility and so it does not happen on + accident. + + @param[in] init container containing bytes to use as binary type + @param[in] subtype subtype to use in MessagePack and BSON + + @return JSON binary array value + + @complexity Linear in the size of @a init. + + @exceptionsafety Strong guarantee: if an exception is thrown, there are no + changes to any JSON value. + + @since version 3.8.0 + */ + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json binary(const typename binary_t::container_type& init, std::uint8_t subtype) + { + auto res = basic_json(); + res.m_type = value_t::binary; + res.m_value = binary_t(init, subtype); + return res; + } + + /// @copydoc binary(const typename binary_t::container_type&) + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json binary(typename binary_t::container_type&& init) + { + auto res = basic_json(); + res.m_type = value_t::binary; + res.m_value = std::move(init); + return res; + } + + /// @copydoc binary(const typename binary_t::container_type&, std::uint8_t) + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json binary(typename binary_t::container_type&& init, std::uint8_t subtype) + { + auto res = basic_json(); + res.m_type = value_t::binary; + res.m_value = binary_t(std::move(init), subtype); + return res; + } + /*! @brief explicitly create an array from an initializer list @@ -14259,7 +17555,7 @@ class basic_json @since version 1.0.0 */ - JSON_NODISCARD + JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json array(initializer_list_t init = {}) { return basic_json(init, false, value_t::array); @@ -14303,7 +17599,7 @@ class basic_json @since version 1.0.0 */ - JSON_NODISCARD + JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json object(initializer_list_t init = {}) { return basic_json(init, false, value_t::object); @@ -14402,7 +17698,7 @@ class basic_json assert(last.m_object != nullptr); // make sure iterator fits the current value - if (JSON_UNLIKELY(first.m_object != last.m_object)) + if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object)) { JSON_THROW(invalid_iterator::create(201, "iterators are not compatible")); } @@ -14419,8 +17715,8 @@ class basic_json case value_t::number_unsigned: case value_t::string: { - if (JSON_UNLIKELY(not first.m_it.primitive_iterator.is_begin() - or not last.m_it.primitive_iterator.is_end())) + if (JSON_HEDLEY_UNLIKELY(not first.m_it.primitive_iterator.is_begin() + or not last.m_it.primitive_iterator.is_end())) { JSON_THROW(invalid_iterator::create(204, "iterators out of range")); } @@ -14477,6 +17773,12 @@ class basic_json break; } + case value_t::binary: + { + m_value = *first.m_object->m_value.binary; + break; + } + default: JSON_THROW(invalid_iterator::create(206, "cannot construct with iterators from " + std::string(first.m_object->type_name()))); @@ -14490,10 +17792,10 @@ class basic_json // other constructors and destructor // /////////////////////////////////////// - /// @private - basic_json(const detail::json_ref& ref) - : basic_json(ref.moved_or_copied()) - {} + template , + std::is_same>::value, int> = 0 > + basic_json(const JsonRef& ref) : basic_json(ref.moved_or_copied()) {} /*! @brief copy constructor @@ -14570,6 +17872,12 @@ class basic_json break; } + case value_t::binary: + { + m_value = *other.m_value.binary; + break; + } + default: break; } @@ -14714,7 +18022,11 @@ class basic_json @return string containing the serialization of the JSON value @throw type_error.316 if a string stored inside the JSON value is not - UTF-8 encoded + UTF-8 encoded and @a error_handler is set to strict + + @note Binary values are serialized as object containing two keys: + - "bytes": an array of bytes as integers + - "subtype": the subtype as integer or "null" if the binary has no subtype @complexity Linear. @@ -14729,7 +18041,8 @@ class basic_json @since version 1.0.0; indentation character @a indent_char, option @a ensure_ascii and exceptions added in version 3.0.0; error - handlers added in version 3.4.0. + handlers added in version 3.4.0; serialization of binary values added + in version 3.8.0. */ string_t dump(const int indent = -1, const char indent_char = ' ', @@ -14768,6 +18081,7 @@ class basic_json number (floating-point) | value_t::number_float object | value_t::object array | value_t::array + binary | value_t::binary discarded | value_t::discarded @complexity Constant. @@ -14810,12 +18124,13 @@ class basic_json @sa @ref is_string() -- returns whether JSON value is a string @sa @ref is_boolean() -- returns whether JSON value is a boolean @sa @ref is_number() -- returns whether JSON value is a number + @sa @ref is_binary() -- returns whether JSON value is a binary array @since version 1.0.0 */ constexpr bool is_primitive() const noexcept { - return is_null() or is_string() or is_boolean() or is_number(); + return is_null() or is_string() or is_boolean() or is_number() or is_binary(); } /*! @@ -15070,6 +18385,28 @@ class basic_json return m_type == value_t::string; } + /*! + @brief return whether value is a binary array + + This function returns true if and only if the JSON value is a binary array. + + @return `true` if type is binary array, `false` otherwise. + + @complexity Constant. + + @exceptionsafety No-throw guarantee: this member function never throws + exceptions. + + @liveexample{The following code exemplifies `is_binary()` for all JSON + types.,is_binary} + + @since version 3.8.0 + */ + constexpr bool is_binary() const noexcept + { + return m_type == value_t::binary; + } + /*! @brief return whether value is discarded @@ -15133,7 +18470,7 @@ class basic_json /// get a boolean (explicit) boolean_t get_impl(boolean_t* /*unused*/) const { - if (JSON_LIKELY(is_boolean())) + if (JSON_HEDLEY_LIKELY(is_boolean())) { return m_value.boolean; } @@ -15225,6 +18562,18 @@ class basic_json return is_number_float() ? &m_value.number_float : nullptr; } + /// get a pointer to the value (binary) + binary_t* get_impl_ptr(binary_t* /*unused*/) noexcept + { + return is_binary() ? m_value.binary : nullptr; + } + + /// get a pointer to the value (binary) + constexpr const binary_t* get_impl_ptr(const binary_t* /*unused*/) const noexcept + { + return is_binary() ? m_value.binary : nullptr; + } + /*! @brief helper function to implement get_ref() @@ -15242,7 +18591,7 @@ class basic_json // delegate the call to get_ptr<>() auto ptr = obj.template get_ptr::type>(); - if (JSON_LIKELY(ptr != nullptr)) + if (JSON_HEDLEY_LIKELY(ptr != nullptr)) { return *ptr; } @@ -15397,11 +18746,11 @@ class basic_json detail::has_non_default_from_json::value, int> = 0> ValueType get() const noexcept(noexcept( - JSONSerializer::from_json(std::declval()))) + JSONSerializer::from_json(std::declval()))) { static_assert(not std::is_reference::value, "get() cannot be used with reference types, you might want to use get_ref()"); - return JSONSerializer::from_json(*this); + return JSONSerializer::from_json(*this); } /*! @@ -15449,6 +18798,19 @@ class basic_json return v; } + template < + typename T, std::size_t N, + typename Array = T (&)[N], + detail::enable_if_t < + detail::has_from_json::value, int > = 0 > + Array get_to(T (&v)[N]) const + noexcept(noexcept(JSONSerializer::from_json( + std::declval(), v))) + { + JSONSerializer::from_json(*this, v); + return v; + } + /*! @brief get a pointer value (implicit) @@ -15625,19 +18987,46 @@ class basic_json not std::is_same>::value and not std::is_same::value and not detail::is_basic_json::value - -#ifndef _MSC_VER // fix for issue #167 operator<< ambiguity under VS2015 and not std::is_same>::value -#if defined(JSON_HAS_CPP_17) && (defined(__GNUC__) || (defined(_MSC_VER) and _MSC_VER <= 1914)) +#if defined(JSON_HAS_CPP_17) && (defined(__GNUC__) || (defined(_MSC_VER) and _MSC_VER >= 1910 and _MSC_VER <= 1914)) and not std::is_same::value -#endif #endif and detail::is_detected::value , int >::type = 0 > operator ValueType() const { - // delegate the call to get<>() const - return get(); + // delegate the call to get<>() const + return get(); + } + + /*! + @return reference to the binary value + + @throw type_error.302 if the value is not binary + + @sa @ref is_binary() to check if the value is binary + + @since version 3.8.0 + */ + binary_t& get_binary() + { + if (not is_binary()) + { + JSON_THROW(type_error::create(302, "type must be binary, but is " + std::string(type_name()))); + } + + return *get_ptr(); + } + + /// @copydoc get_binary() + const binary_t& get_binary() const + { + if (not is_binary()) + { + JSON_THROW(type_error::create(302, "type must be binary, but is " + std::string(type_name()))); + } + + return *get_ptr(); } /// @} @@ -15680,7 +19069,7 @@ class basic_json reference at(size_type idx) { // at only works for arrays - if (JSON_LIKELY(is_array())) + if (JSON_HEDLEY_LIKELY(is_array())) { JSON_TRY { @@ -15727,7 +19116,7 @@ class basic_json const_reference at(size_type idx) const { // at only works for arrays - if (JSON_LIKELY(is_array())) + if (JSON_HEDLEY_LIKELY(is_array())) { JSON_TRY { @@ -15778,7 +19167,7 @@ class basic_json reference at(const typename object_t::key_type& key) { // at only works for objects - if (JSON_LIKELY(is_object())) + if (JSON_HEDLEY_LIKELY(is_object())) { JSON_TRY { @@ -15829,7 +19218,7 @@ class basic_json const_reference at(const typename object_t::key_type& key) const { // at only works for objects - if (JSON_LIKELY(is_object())) + if (JSON_HEDLEY_LIKELY(is_object())) { JSON_TRY { @@ -15883,7 +19272,7 @@ class basic_json } // operator[] only works for arrays - if (JSON_LIKELY(is_array())) + if (JSON_HEDLEY_LIKELY(is_array())) { // fill up array with null values if given idx is outside range if (idx >= m_value.array->size()) @@ -15921,7 +19310,7 @@ class basic_json const_reference operator[](size_type idx) const { // const operator[] only works for arrays - if (JSON_LIKELY(is_array())) + if (JSON_HEDLEY_LIKELY(is_array())) { return m_value.array->operator[](idx); } @@ -15967,7 +19356,7 @@ class basic_json } // operator[] only works for objects - if (JSON_LIKELY(is_object())) + if (JSON_HEDLEY_LIKELY(is_object())) { return m_value.object->operator[](key); } @@ -16008,7 +19397,7 @@ class basic_json const_reference operator[](const typename object_t::key_type& key) const { // const operator[] only works for objects - if (JSON_LIKELY(is_object())) + if (JSON_HEDLEY_LIKELY(is_object())) { assert(m_value.object->find(key) != m_value.object->end()); return m_value.object->find(key)->second; @@ -16045,6 +19434,7 @@ class basic_json @since version 1.1.0 */ template + JSON_HEDLEY_NON_NULL(2) reference operator[](T* key) { // implicitly convert null to object @@ -16056,7 +19446,7 @@ class basic_json } // at only works for objects - if (JSON_LIKELY(is_object())) + if (JSON_HEDLEY_LIKELY(is_object())) { return m_value.object->operator[](key); } @@ -16095,10 +19485,11 @@ class basic_json @since version 1.1.0 */ template + JSON_HEDLEY_NON_NULL(2) const_reference operator[](T* key) const { // at only works for objects - if (JSON_LIKELY(is_object())) + if (JSON_HEDLEY_LIKELY(is_object())) { assert(m_value.object->find(key) != m_value.object->end()); return m_value.object->find(key)->second; @@ -16140,6 +19531,8 @@ class basic_json @return copy of the element at key @a key or @a default_value if @a key is not found + @throw type_error.302 if @a default_value does not match the type of the + value at @a key @throw type_error.306 if the JSON value is not an object; in that case, using `value()` with a key makes no sense. @@ -16156,11 +19549,12 @@ class basic_json @since version 1.0.0 */ template::value, int>::type = 0> + std::is_convertible::value + and not std::is_same::value, int>::type = 0> ValueType value(const typename object_t::key_type& key, const ValueType& default_value) const { // at only works for objects - if (JSON_LIKELY(is_object())) + if (JSON_HEDLEY_LIKELY(is_object())) { // if key is found, return value and given default value otherwise const auto it = find(key); @@ -16213,6 +19607,8 @@ class basic_json @return copy of the element at key @a key or @a default_value if @a key is not found + @throw type_error.302 if @a default_value does not match the type of the + value at @a ptr @throw type_error.306 if the JSON value is not an object; in that case, using `value()` with a key makes no sense. @@ -16230,7 +19626,7 @@ class basic_json ValueType value(const json_pointer& ptr, const ValueType& default_value) const { // at only works for objects - if (JSON_LIKELY(is_object())) + if (JSON_HEDLEY_LIKELY(is_object())) { // if pointer resolves a value, return it or use default value JSON_TRY @@ -16250,6 +19646,7 @@ class basic_json @brief overload for a default value of type const char* @copydoc basic_json::value(const json_pointer&, ValueType) const */ + JSON_HEDLEY_NON_NULL(3) string_t value(const json_pointer& ptr, const char* default_value) const { return value(ptr, string_t(default_value)); @@ -16262,8 +19659,8 @@ class basic_json container `c`, the expression `c.front()` is equivalent to `*c.begin()`. @return In case of a structured type (array or object), a reference to the - first element is returned. In case of number, string, or boolean values, a - reference to the value is returned. + first element is returned. In case of number, string, boolean, or binary + values, a reference to the value is returned. @complexity Constant. @@ -16305,8 +19702,8 @@ class basic_json @endcode @return In case of a structured type (array or object), a reference to the - last element is returned. In case of number, string, or boolean values, a - reference to the value is returned. + last element is returned. In case of number, string, boolean, or binary + values, a reference to the value is returned. @complexity Constant. @@ -16372,7 +19769,7 @@ class basic_json @complexity The complexity depends on the type: - objects: amortized constant - arrays: linear in distance between @a pos and the end of the container - - strings: linear in the length of the string + - strings and binary: linear in the length of the member - other types: constant @liveexample{The example shows the result of `erase()` for different JSON @@ -16394,7 +19791,7 @@ class basic_json IteratorType erase(IteratorType pos) { // make sure iterator fits the current value - if (JSON_UNLIKELY(this != pos.m_object)) + if (JSON_HEDLEY_UNLIKELY(this != pos.m_object)) { JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value")); } @@ -16408,8 +19805,9 @@ class basic_json case value_t::number_integer: case value_t::number_unsigned: case value_t::string: + case value_t::binary: { - if (JSON_UNLIKELY(not pos.m_it.primitive_iterator.is_begin())) + if (JSON_HEDLEY_UNLIKELY(not pos.m_it.primitive_iterator.is_begin())) { JSON_THROW(invalid_iterator::create(205, "iterator out of range")); } @@ -16421,6 +19819,13 @@ class basic_json std::allocator_traits::deallocate(alloc, m_value.string, 1); m_value.string = nullptr; } + else if (is_binary()) + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, m_value.binary); + std::allocator_traits::deallocate(alloc, m_value.binary, 1); + m_value.binary = nullptr; + } m_type = value_t::null; assert_invariant(); @@ -16478,7 +19883,7 @@ class basic_json - objects: `log(size()) + std::distance(first, last)` - arrays: linear in the distance between @a first and @a last, plus linear in the distance between @a last and end of the container - - strings: linear in the length of the string + - strings and binary: linear in the length of the member - other types: constant @liveexample{The example shows the result of `erase()` for different JSON @@ -16499,7 +19904,7 @@ class basic_json IteratorType erase(IteratorType first, IteratorType last) { // make sure iterator fits the current value - if (JSON_UNLIKELY(this != first.m_object or this != last.m_object)) + if (JSON_HEDLEY_UNLIKELY(this != first.m_object or this != last.m_object)) { JSON_THROW(invalid_iterator::create(203, "iterators do not fit current value")); } @@ -16513,9 +19918,10 @@ class basic_json case value_t::number_integer: case value_t::number_unsigned: case value_t::string: + case value_t::binary: { - if (JSON_LIKELY(not first.m_it.primitive_iterator.is_begin() - or not last.m_it.primitive_iterator.is_end())) + if (JSON_HEDLEY_LIKELY(not first.m_it.primitive_iterator.is_begin() + or not last.m_it.primitive_iterator.is_end())) { JSON_THROW(invalid_iterator::create(204, "iterators out of range")); } @@ -16527,6 +19933,13 @@ class basic_json std::allocator_traits::deallocate(alloc, m_value.string, 1); m_value.string = nullptr; } + else if (is_binary()) + { + AllocatorType alloc; + std::allocator_traits::destroy(alloc, m_value.binary); + std::allocator_traits::deallocate(alloc, m_value.binary, 1); + m_value.binary = nullptr; + } m_type = value_t::null; assert_invariant(); @@ -16586,7 +19999,7 @@ class basic_json size_type erase(const typename object_t::key_type& key) { // this erase only works for objects - if (JSON_LIKELY(is_object())) + if (JSON_HEDLEY_LIKELY(is_object())) { return m_value.object->erase(key); } @@ -16621,9 +20034,9 @@ class basic_json void erase(const size_type idx) { // this erase only works for arrays - if (JSON_LIKELY(is_array())) + if (JSON_HEDLEY_LIKELY(is_array())) { - if (JSON_UNLIKELY(idx >= size())) + if (JSON_HEDLEY_UNLIKELY(idx >= size())) { JSON_THROW(out_of_range::create(401, "array index " + std::to_string(idx) + " is out of range")); } @@ -16749,15 +20162,48 @@ class basic_json @liveexample{The following code shows an example for `contains()`.,contains} @sa @ref find(KeyT&&) -- returns an iterator to an object element + @sa @ref contains(const json_pointer&) const -- checks the existence for a JSON pointer @since version 3.6.0 */ - template - bool contains(KeyT&& key) const + template::type, json_pointer>::value, int>::type = 0> + bool contains(KeyT && key) const { return is_object() and m_value.object->find(std::forward(key)) != m_value.object->end(); } + /*! + @brief check the existence of an element in a JSON object given a JSON pointer + + Check whether the given JSON pointer @a ptr can be resolved in the current + JSON value. + + @note This method can be executed on any JSON value type. + + @param[in] ptr JSON pointer to check its existence. + + @return true if the JSON pointer can be resolved to a stored value, false + otherwise. + + @post If `j.contains(ptr)` returns true, it is safe to call `j[ptr]`. + + @throw parse_error.106 if an array index begins with '0' + @throw parse_error.109 if an array index was not a number + + @complexity Logarithmic in the size of the JSON object. + + @liveexample{The following code shows an example for `contains()`.,contains_json_pointer} + + @sa @ref contains(KeyT &&) const -- checks the existence of a key + + @since version 3.7.0 + */ + bool contains(const json_pointer& ptr) const + { + return ptr.contains(this); + } + /// @} @@ -17099,7 +20545,7 @@ class basic_json future 4.0.0 of the library. Please use @ref items() instead; that is, replace `json::iterator_wrapper(j)` with `j.items()`. */ - JSON_DEPRECATED + JSON_HEDLEY_DEPRECATED_FOR(3.1.0, items()) static iteration_proxy iterator_wrapper(reference ref) noexcept { return ref.items(); @@ -17108,7 +20554,7 @@ class basic_json /*! @copydoc iterator_wrapper(reference) */ - JSON_DEPRECATED + JSON_HEDLEY_DEPRECATED_FOR(3.1.0, items()) static iteration_proxy iterator_wrapper(const_reference ref) noexcept { return ref.items(); @@ -17165,6 +20611,11 @@ class basic_json element as string (see example). For primitive types (e.g., numbers), `key()` returns an empty string. + @warning Using `items()` on temporary objects is dangerous. Make sure the + object's lifetime exeeds the iteration. See + for more + information. + @return iteration proxy object wrapping @a ref with an interface to use in range-based for loops @@ -17213,6 +20664,7 @@ class basic_json boolean | `false` string | `false` number | `false` + binary | `false` object | result of function `object_t::empty()` array | result of function `array_t::empty()` @@ -17284,6 +20736,7 @@ class basic_json boolean | `1` string | `1` number | `1` + binary | `1` object | result of function object_t::size() array | result of function array_t::size() @@ -17358,6 +20811,7 @@ class basic_json boolean | `1` (same as `size()`) string | `1` (same as `size()`) number | `1` (same as `size()`) + binary | `1` (same as `size()`) object | result of function `object_t::max_size()` array | result of function `array_t::max_size()` @@ -17430,6 +20884,7 @@ class basic_json boolean | `false` string | `""` number | `0` + binary | An empty byte vector object | `{}` array | `[]` @@ -17487,6 +20942,12 @@ class basic_json break; } + case value_t::binary: + { + m_value.binary->clear(); + break; + } + case value_t::array: { m_value.array->clear(); @@ -17527,7 +20988,7 @@ class basic_json void push_back(basic_json&& val) { // push_back only works for null objects or arrays - if (JSON_UNLIKELY(not(is_null() or is_array()))) + if (JSON_HEDLEY_UNLIKELY(not(is_null() or is_array()))) { JSON_THROW(type_error::create(308, "cannot use push_back() with " + std::string(type_name()))); } @@ -17542,9 +21003,7 @@ class basic_json // add element to array (move semantics) m_value.array->push_back(std::move(val)); - // invalidate object: mark it null so we do not call the destructor - // cppcheck-suppress accessMoved - val.m_type = value_t::null; + // if val is moved from, basic_json move constructor marks it null so we do not call the destructor } /*! @@ -17564,7 +21023,7 @@ class basic_json void push_back(const basic_json& val) { // push_back only works for null objects or arrays - if (JSON_UNLIKELY(not(is_null() or is_array()))) + if (JSON_HEDLEY_UNLIKELY(not(is_null() or is_array()))) { JSON_THROW(type_error::create(308, "cannot use push_back() with " + std::string(type_name()))); } @@ -17614,7 +21073,7 @@ class basic_json void push_back(const typename object_t::value_type& val) { // push_back only works for null objects or objects - if (JSON_UNLIKELY(not(is_null() or is_object()))) + if (JSON_HEDLEY_UNLIKELY(not(is_null() or is_object()))) { JSON_THROW(type_error::create(308, "cannot use push_back() with " + std::string(type_name()))); } @@ -17700,6 +21159,8 @@ class basic_json @param[in] args arguments to forward to a constructor of @ref basic_json @tparam Args compatible types to create a @ref basic_json object + @return reference to the inserted element + @throw type_error.311 when called on a type other than JSON array or null; example: `"cannot use emplace_back() with number"` @@ -17709,13 +21170,13 @@ class basic_json elements to a JSON array. Note how the `null` value was silently converted to a JSON array.,emplace_back} - @since version 2.0.8 + @since version 2.0.8, returns reference since 3.7.0 */ template - void emplace_back(Args&& ... args) + reference emplace_back(Args&& ... args) { // emplace_back only works for null objects or arrays - if (JSON_UNLIKELY(not(is_null() or is_array()))) + if (JSON_HEDLEY_UNLIKELY(not(is_null() or is_array()))) { JSON_THROW(type_error::create(311, "cannot use emplace_back() with " + std::string(type_name()))); } @@ -17729,7 +21190,12 @@ class basic_json } // add element to array (perfect forwarding) +#ifdef JSON_HAS_CPP_17 + return m_value.array->emplace_back(std::forward(args)...); +#else m_value.array->emplace_back(std::forward(args)...); + return m_value.array->back(); +#endif } /*! @@ -17763,7 +21229,7 @@ class basic_json std::pair emplace(Args&& ... args) { // emplace only works for null objects or arrays - if (JSON_UNLIKELY(not(is_null() or is_object()))) + if (JSON_HEDLEY_UNLIKELY(not(is_null() or is_object()))) { JSON_THROW(type_error::create(311, "cannot use emplace() with " + std::string(type_name()))); } @@ -17831,10 +21297,10 @@ class basic_json iterator insert(const_iterator pos, const basic_json& val) { // insert only works for arrays - if (JSON_LIKELY(is_array())) + if (JSON_HEDLEY_LIKELY(is_array())) { // check if iterator pos fits to this JSON value - if (JSON_UNLIKELY(pos.m_object != this)) + if (JSON_HEDLEY_UNLIKELY(pos.m_object != this)) { JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value")); } @@ -17882,10 +21348,10 @@ class basic_json iterator insert(const_iterator pos, size_type cnt, const basic_json& val) { // insert only works for arrays - if (JSON_LIKELY(is_array())) + if (JSON_HEDLEY_LIKELY(is_array())) { // check if iterator pos fits to this JSON value - if (JSON_UNLIKELY(pos.m_object != this)) + if (JSON_HEDLEY_UNLIKELY(pos.m_object != this)) { JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value")); } @@ -17930,24 +21396,24 @@ class basic_json iterator insert(const_iterator pos, const_iterator first, const_iterator last) { // insert only works for arrays - if (JSON_UNLIKELY(not is_array())) + if (JSON_HEDLEY_UNLIKELY(not is_array())) { JSON_THROW(type_error::create(309, "cannot use insert() with " + std::string(type_name()))); } // check if iterator pos fits to this JSON value - if (JSON_UNLIKELY(pos.m_object != this)) + if (JSON_HEDLEY_UNLIKELY(pos.m_object != this)) { JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value")); } // check if range iterators belong to the same JSON object - if (JSON_UNLIKELY(first.m_object != last.m_object)) + if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object)) { JSON_THROW(invalid_iterator::create(210, "iterators do not fit")); } - if (JSON_UNLIKELY(first.m_object == this)) + if (JSON_HEDLEY_UNLIKELY(first.m_object == this)) { JSON_THROW(invalid_iterator::create(211, "passed iterators may not belong to container")); } @@ -17983,13 +21449,13 @@ class basic_json iterator insert(const_iterator pos, initializer_list_t ilist) { // insert only works for arrays - if (JSON_UNLIKELY(not is_array())) + if (JSON_HEDLEY_UNLIKELY(not is_array())) { JSON_THROW(type_error::create(309, "cannot use insert() with " + std::string(type_name()))); } // check if iterator pos fits to this JSON value - if (JSON_UNLIKELY(pos.m_object != this)) + if (JSON_HEDLEY_UNLIKELY(pos.m_object != this)) { JSON_THROW(invalid_iterator::create(202, "iterator does not fit current value")); } @@ -18024,19 +21490,19 @@ class basic_json void insert(const_iterator first, const_iterator last) { // insert only works for objects - if (JSON_UNLIKELY(not is_object())) + if (JSON_HEDLEY_UNLIKELY(not is_object())) { JSON_THROW(type_error::create(309, "cannot use insert() with " + std::string(type_name()))); } // check if range iterators belong to the same JSON object - if (JSON_UNLIKELY(first.m_object != last.m_object)) + if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object)) { JSON_THROW(invalid_iterator::create(210, "iterators do not fit")); } // passed iterators must belong to objects - if (JSON_UNLIKELY(not first.m_object->is_object())) + if (JSON_HEDLEY_UNLIKELY(not first.m_object->is_object())) { JSON_THROW(invalid_iterator::create(202, "iterators first and last must point to objects")); } @@ -18073,11 +21539,11 @@ class basic_json assert_invariant(); } - if (JSON_UNLIKELY(not is_object())) + if (JSON_HEDLEY_UNLIKELY(not is_object())) { JSON_THROW(type_error::create(312, "cannot use update() with " + std::string(type_name()))); } - if (JSON_UNLIKELY(not j.is_object())) + if (JSON_HEDLEY_UNLIKELY(not j.is_object())) { JSON_THROW(type_error::create(312, "cannot use update() with " + std::string(j.type_name()))); } @@ -18124,20 +21590,20 @@ class basic_json assert_invariant(); } - if (JSON_UNLIKELY(not is_object())) + if (JSON_HEDLEY_UNLIKELY(not is_object())) { JSON_THROW(type_error::create(312, "cannot use update() with " + std::string(type_name()))); } // check if range iterators belong to the same JSON object - if (JSON_UNLIKELY(first.m_object != last.m_object)) + if (JSON_HEDLEY_UNLIKELY(first.m_object != last.m_object)) { JSON_THROW(invalid_iterator::create(210, "iterators do not fit")); } // passed iterators must belong to objects - if (JSON_UNLIKELY(not first.m_object->is_object() - or not last.m_object->is_object())) + if (JSON_HEDLEY_UNLIKELY(not first.m_object->is_object() + or not last.m_object->is_object())) { JSON_THROW(invalid_iterator::create(202, "iterators first and last must point to objects")); } @@ -18200,7 +21666,7 @@ class basic_json void swap(array_t& other) { // swap only works for arrays - if (JSON_LIKELY(is_array())) + if (JSON_HEDLEY_LIKELY(is_array())) { std::swap(*(m_value.array), other); } @@ -18233,7 +21699,7 @@ class basic_json void swap(object_t& other) { // swap only works for objects - if (JSON_LIKELY(is_object())) + if (JSON_HEDLEY_LIKELY(is_object())) { std::swap(*(m_value.object), other); } @@ -18266,7 +21732,7 @@ class basic_json void swap(string_t& other) { // swap only works for strings - if (JSON_LIKELY(is_string())) + if (JSON_HEDLEY_LIKELY(is_string())) { std::swap(*(m_value.string), other); } @@ -18276,6 +21742,53 @@ class basic_json } } + /*! + @brief exchanges the values + + Exchanges the contents of a JSON string with those of @a other. Does not + invoke any move, copy, or swap operations on individual elements. All + iterators and references remain valid. The past-the-end iterator is + invalidated. + + @param[in,out] other binary to exchange the contents with + + @throw type_error.310 when JSON value is not a string; example: `"cannot + use swap() with boolean"` + + @complexity Constant. + + @liveexample{The example below shows how strings can be swapped with + `swap()`.,swap__binary_t} + + @since version 3.8.0 + */ + void swap(binary_t& other) + { + // swap only works for strings + if (JSON_HEDLEY_LIKELY(is_binary())) + { + std::swap(*(m_value.binary), other); + } + else + { + JSON_THROW(type_error::create(310, "cannot use swap() with " + std::string(type_name()))); + } + } + + /// @copydoc swap(binary_t) + void swap(typename binary_t::container_type& other) + { + // swap only works for strings + if (JSON_HEDLEY_LIKELY(is_binary())) + { + std::swap(*(m_value.binary), other); + } + else + { + JSON_THROW(type_error::create(310, "cannot use swap() with " + std::string(type_name()))); + } + } + /// @} public: @@ -18294,13 +21807,13 @@ class basic_json their stored values are the same according to their respective `operator==`. - Integer and floating-point numbers are automatically converted before - comparison. Note than two NaN values are always treated as unequal. + comparison. Note that two NaN values are always treated as unequal. - Two JSON null values are equal. @note Floating-point inside JSON values numbers are compared with `json::number_float_t::operator==` which is `double::operator==` by default. To compare floating-point while respecting an epsilon, an alternative - [comparison function](https://github.com/mariokonrad/marnav/blob/master/src/marnav/math/floatingpoint.hpp#L34-#L39) + [comparison function](https://github.com/mariokonrad/marnav/blob/master/include/marnav/math/floatingpoint.hpp#L34-#L39) could be used, for instance @code {.cpp} template::value, T>::type> @@ -18309,6 +21822,22 @@ class basic_json return std::abs(a - b) <= epsilon; } @endcode + Or you can self-defined operator equal function like this: + @code {.cpp} + bool my_equal(const_reference lhs, const_reference rhs) { + const auto lhs_type lhs.type(); + const auto rhs_type rhs.type(); + if (lhs_type == rhs_type) { + switch(lhs_type) + // self_defined case + case value_t::number_float: + return std::abs(lhs - rhs) <= std::numeric_limits::epsilon(); + // other cases remain the same with the original + ... + } + ... + } + @endcode @note NaN values never compare equal to themselves or to other NaN values. @@ -18358,6 +21887,9 @@ class basic_json case value_t::number_float: return lhs.m_value.number_float == rhs.m_value.number_float; + case value_t::binary: + return *lhs.m_value.binary == *rhs.m_value.binary; + default: return false; } @@ -18498,25 +22030,28 @@ class basic_json return (*lhs.m_value.array) < (*rhs.m_value.array); case value_t::object: - return *lhs.m_value.object < *rhs.m_value.object; + return (*lhs.m_value.object) < (*rhs.m_value.object); case value_t::null: return false; case value_t::string: - return *lhs.m_value.string < *rhs.m_value.string; + return (*lhs.m_value.string) < (*rhs.m_value.string); case value_t::boolean: - return lhs.m_value.boolean < rhs.m_value.boolean; + return (lhs.m_value.boolean) < (rhs.m_value.boolean); case value_t::number_integer: - return lhs.m_value.number_integer < rhs.m_value.number_integer; + return (lhs.m_value.number_integer) < (rhs.m_value.number_integer); case value_t::number_unsigned: - return lhs.m_value.number_unsigned < rhs.m_value.number_unsigned; + return (lhs.m_value.number_unsigned) < (rhs.m_value.number_unsigned); case value_t::number_float: - return lhs.m_value.number_float < rhs.m_value.number_float; + return (lhs.m_value.number_float) < (rhs.m_value.number_float); + + case value_t::binary: + return (*lhs.m_value.binary) < (*rhs.m_value.binary); default: return false; @@ -18776,7 +22311,7 @@ class basic_json instead; that is, replace calls like `j >> o;` with `o << j;`. @since version 1.0.0; deprecated since version 3.0.0 */ - JSON_DEPRECATED + JSON_HEDLEY_DEPRECATED_FOR(3.0.0, operator<<(std::ostream&, const basic_json&)) friend std::ostream& operator>>(const basic_json& j, std::ostream& o) { return o << j; @@ -18795,29 +22330,13 @@ class basic_json /*! @brief deserialize from a compatible input - This function reads from a compatible input. Examples are: - - an array of 1-byte values - - strings with character/literal type with size of 1 byte - - input streams - - container with contiguous storage of 1-byte values. Compatible container - types include `std::vector`, `std::string`, `std::array`, - `std::valarray`, and `std::initializer_list`. Furthermore, C-style - arrays can be used with `std::begin()`/`std::end()`. User-defined - containers can be used as long as they implement random-access iterators - and a contiguous storage. - - @pre Each element of the container has a size of 1 byte. Violating this - precondition yields undefined behavior. **This precondition is enforced - with a static assertion.** - - @pre The container storage is contiguous. Violating this precondition - yields undefined behavior. **This precondition is enforced with an - assertion.** - - @warning There is no way to enforce all preconditions at compile-time. If - the function is called with a noncompliant container and with - assertions switched off, the behavior is undefined and will most - likely yield segmentation violation. + @tparam InputType A compatible input, for instance + - an std::istream object + - a FILE pointer + - a C-style array of characters + - a pointer to a null-terminated string of single byte characters + - an object obj for which begin(obj) and end(obj) produces a valid pair of + iterators. @param[in] i input to read from @param[in] cb a parser callback function of type @ref parser_callback_t @@ -18837,7 +22356,7 @@ class basic_json @complexity Linear in the length of the input. The parser is a predictive LL(1) parser. The complexity can be higher if the parser callback function - @a cb has a super-linear complexity. + @a cb or reading from the input @a i has a super-linear complexity. @note A UTF-8 byte order mark is silently ignored. @@ -18855,19 +22374,107 @@ class basic_json @since version 2.0.3 (contiguous containers) */ - JSON_NODISCARD - static basic_json parse(detail::input_adapter&& i, + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json parse(InputType&& i, + const parser_callback_t cb = nullptr, + const bool allow_exceptions = true) + { + basic_json result; + parser(detail::input_adapter(std::forward(i)), cb, allow_exceptions).parse(true, result); + return result; + } + + /*! + @brief deserialize from a pair of character iterators + + The value_type of the iterator must be a integral type with size of 1, 2 or + 4 bytes, which will be interpreted respectively as UTF-8, UTF-16 and UTF-32. + + @param[in] first iterator to start of character range + @param[in] last iterator to end of character range + @param[in] cb a parser callback function of type @ref parser_callback_t + which is used to control the deserialization by filtering unwanted values + (optional) + @param[in] allow_exceptions whether to throw exceptions in case of a + parse error (optional, true by default) + + @return deserialized JSON value; in case of a parse error and + @a allow_exceptions set to `false`, the return value will be + value_t::discarded. + + @throw parse_error.101 if a parse error occurs; example: `""unexpected end + of input; expected string literal""` + @throw parse_error.102 if to_unicode fails or surrogate error + @throw parse_error.103 if to_unicode fails + */ + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json parse(IteratorType first, + IteratorType last, + const parser_callback_t cb = nullptr, + const bool allow_exceptions = true) + { + basic_json result; + parser(detail::input_adapter(std::move(first), std::move(last)), cb, allow_exceptions).parse(true, result); + return result; + } + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, parse(ptr, ptr + len)) + static basic_json parse(detail::span_input_adapter&& i, const parser_callback_t cb = nullptr, const bool allow_exceptions = true) { basic_json result; - parser(i, cb, allow_exceptions).parse(true, result); + parser(i.get(), cb, allow_exceptions).parse(true, result); return result; } - static bool accept(detail::input_adapter&& i) + /*! + @brief check if the input is valid JSON + + Unlike the @ref parse(InputType&&, const parser_callback_t,const bool) + function, this function neither throws an exception in case of invalid JSON + input (i.e., a parse error) nor creates diagnostic information. + + @tparam InputType A compatible input, for instance + - an std::istream object + - a FILE pointer + - a C-style array of characters + - a pointer to a null-terminated string of single byte characters + - an object obj for which begin(obj) and end(obj) produces a valid pair of + iterators. + + @param[in] i input to read from + + @return Whether the input read from @a i is valid JSON. + + @complexity Linear in the length of the input. The parser is a predictive + LL(1) parser. + + @note A UTF-8 byte order mark is silently ignored. + + @liveexample{The example below demonstrates the `accept()` function reading + from a string.,accept__string} + */ + template + static bool accept(InputType&& i) + { + return parser(detail::input_adapter(std::forward(i))).accept(true); + } + + template + static bool accept(IteratorType first, IteratorType last) + { + return parser(detail::input_adapter(std::move(first), std::move(last))).accept(true); + } + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, accept(ptr, ptr + len)) + static bool accept(detail::span_input_adapter&& i) { - return parser(i).accept(true); + return parser(i.get()).accept(true); } /*! @@ -18876,28 +22483,12 @@ class basic_json The SAX event lister must follow the interface of @ref json_sax. This function reads from a compatible input. Examples are: - - an array of 1-byte values - - strings with character/literal type with size of 1 byte - - input streams - - container with contiguous storage of 1-byte values. Compatible container - types include `std::vector`, `std::string`, `std::array`, - `std::valarray`, and `std::initializer_list`. Furthermore, C-style - arrays can be used with `std::begin()`/`std::end()`. User-defined - containers can be used as long as they implement random-access iterators - and a contiguous storage. - - @pre Each element of the container has a size of 1 byte. Violating this - precondition yields undefined behavior. **This precondition is enforced - with a static assertion.** - - @pre The container storage is contiguous. Violating this precondition - yields undefined behavior. **This precondition is enforced with an - assertion.** - - @warning There is no way to enforce all preconditions at compile-time. If - the function is called with a noncompliant container and with - assertions switched off, the behavior is undefined and will most - likely yield segmentation violation. + - an std::istream object + - a FILE pointer + - a C-style array of characters + - a pointer to a null-terminated string of single byte characters + - an object obj for which begin(obj) and end(obj) produces a valid pair of + iterators. @param[in] i input to read from @param[in,out] sax SAX event listener @@ -18923,95 +22514,41 @@ class basic_json @since version 3.2.0 */ - template - static bool sax_parse(detail::input_adapter&& i, SAX* sax, + template + JSON_HEDLEY_NON_NULL(2) + static bool sax_parse(InputType&& i, SAX* sax, input_format_t format = input_format_t::json, const bool strict = true) { - assert(sax); + auto ia = detail::input_adapter(std::forward(i)); return format == input_format_t::json - ? parser(std::move(i)).sax_parse(sax, strict) - : detail::binary_reader(std::move(i)).sax_parse(format, sax, strict); - } - - /*! - @brief deserialize from an iterator range with contiguous storage - - This function reads from an iterator range of a container with contiguous - storage of 1-byte values. Compatible container types include - `std::vector`, `std::string`, `std::array`, `std::valarray`, and - `std::initializer_list`. Furthermore, C-style arrays can be used with - `std::begin()`/`std::end()`. User-defined containers can be used as long - as they implement random-access iterators and a contiguous storage. - - @pre The iterator range is contiguous. Violating this precondition yields - undefined behavior. **This precondition is enforced with an assertion.** - @pre Each element in the range has a size of 1 byte. Violating this - precondition yields undefined behavior. **This precondition is enforced - with a static assertion.** - - @warning There is no way to enforce all preconditions at compile-time. If - the function is called with noncompliant iterators and with - assertions switched off, the behavior is undefined and will most - likely yield segmentation violation. - - @tparam IteratorType iterator of container with contiguous storage - @param[in] first begin of the range to parse (included) - @param[in] last end of the range to parse (excluded) - @param[in] cb a parser callback function of type @ref parser_callback_t - which is used to control the deserialization by filtering unwanted values - (optional) - @param[in] allow_exceptions whether to throw exceptions in case of a - parse error (optional, true by default) - - @return deserialized JSON value; in case of a parse error and - @a allow_exceptions set to `false`, the return value will be - value_t::discarded. - - @throw parse_error.101 in case of an unexpected token - @throw parse_error.102 if to_unicode fails or surrogate error - @throw parse_error.103 if to_unicode fails - - @complexity Linear in the length of the input. The parser is a predictive - LL(1) parser. The complexity can be higher if the parser callback function - @a cb has a super-linear complexity. - - @note A UTF-8 byte order mark is silently ignored. - - @liveexample{The example below demonstrates the `parse()` function reading - from an iterator range.,parse__iteratortype__parser_callback_t} - - @since version 2.0.3 - */ - template::iterator_category>::value, int>::type = 0> - static basic_json parse(IteratorType first, IteratorType last, - const parser_callback_t cb = nullptr, - const bool allow_exceptions = true) - { - basic_json result; - parser(detail::input_adapter(first, last), cb, allow_exceptions).parse(true, result); - return result; + ? parser(std::move(ia)).sax_parse(sax, strict) + : detail::binary_reader(std::move(ia)).sax_parse(format, sax, strict); } - template::iterator_category>::value, int>::type = 0> - static bool accept(IteratorType first, IteratorType last) + template + JSON_HEDLEY_NON_NULL(3) + static bool sax_parse(IteratorType first, IteratorType last, SAX* sax, + input_format_t format = input_format_t::json, + const bool strict = true) { - return parser(detail::input_adapter(first, last)).accept(true); + auto ia = detail::input_adapter(std::move(first), std::move(last)); + return format == input_format_t::json + ? parser(std::move(ia)).sax_parse(sax, strict) + : detail::binary_reader(std::move(ia)).sax_parse(format, sax, strict); } - template::iterator_category>::value, int>::type = 0> - static bool sax_parse(IteratorType first, IteratorType last, SAX* sax) + template + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, sax_parse(ptr, ptr + len, ...)) + JSON_HEDLEY_NON_NULL(2) + static bool sax_parse(detail::span_input_adapter&& i, SAX* sax, + input_format_t format = input_format_t::json, + const bool strict = true) { - return parser(detail::input_adapter(first, last)).sax_parse(sax); + auto ia = i.get(); + return format == input_format_t::json + ? parser(std::move(ia)).sax_parse(sax, strict) + : detail::binary_reader(std::move(ia)).sax_parse(format, sax, strict); } /*! @@ -19022,7 +22559,7 @@ class basic_json instead; that is, replace calls like `j << i;` with `i >> j;`. @since version 1.0.0; deprecated since version 3.0.0 */ - JSON_DEPRECATED + JSON_HEDLEY_DEPRECATED_FOR(3.0.0, operator>>(std::istream&, basic_json&)) friend std::istream& operator<<(basic_json& j, std::istream& i) { return operator>>(i, j); @@ -19080,6 +22617,7 @@ class basic_json number | `"number"` (for all number types) object | `"object"` array | `"array"` + binary | `"binary"` discarded | `"discarded"` @exceptionsafety No-throw guarantee: this function never throws exceptions. @@ -19095,6 +22633,7 @@ class basic_json @since version 1.0.0, public since 2.1.0, `const char*` and `noexcept` since 3.0.0 */ + JSON_HEDLEY_RETURNS_NON_NULL const char* type_name() const noexcept { { @@ -19110,6 +22649,8 @@ class basic_json return "string"; case value_t::boolean: return "boolean"; + case value_t::binary: + return "binary"; case value_t::discarded: return "discarded"; default: @@ -19169,7 +22710,8 @@ class basic_json number_unsigned | 256..65535 | Unsigned integer (2 bytes follow) | 0x19 number_unsigned | 65536..4294967295 | Unsigned integer (4 bytes follow) | 0x1A number_unsigned | 4294967296..18446744073709551615 | Unsigned integer (8 bytes follow) | 0x1B - number_float | *any value* | Double-Precision Float | 0xFB + number_float | *any value representable by a float* | Single-Precision Float | 0xFA + number_float | *any value NOT representable by a float* | Double-Precision Float | 0xFB string | *length*: 0..23 | UTF-8 string | 0x60..0x77 string | *length*: 23..255 | UTF-8 string (1 byte follow) | 0x78 string | *length*: 256..65535 | UTF-8 string (2 bytes follow) | 0x79 @@ -19185,6 +22727,11 @@ class basic_json object | *size*: 256..65535 | map (2 bytes follow) | 0xB9 object | *size*: 65536..4294967295 | map (4 bytes follow) | 0xBA object | *size*: 4294967296..18446744073709551615 | map (8 bytes follow) | 0xBB + binary | *size*: 0..23 | byte string | 0x40..0x57 + binary | *size*: 23..255 | byte string (1 byte follow) | 0x58 + binary | *size*: 256..65535 | byte string (2 bytes follow) | 0x59 + binary | *size*: 65536..4294967295 | byte string (4 bytes follow) | 0x5A + binary | *size*: 4294967296..18446744073709551615 | byte string (8 bytes follow) | 0x5B @note The mapping is **complete** in the sense that any JSON value type can be converted to a CBOR value. @@ -19194,10 +22741,10 @@ class basic_json function which serializes NaN or Infinity to `null`. @note The following CBOR types are not used in the conversion: - - byte strings (0x40..0x5F) - UTF-8 strings terminated by "break" (0x7F) - arrays terminated by "break" (0x9F) - maps terminated by "break" (0xBF) + - byte strings terminated by "break" (0x5F) - date/time (0xC0..0xC1) - bignum (0xC2..0xC3) - decimal fraction (0xC4) @@ -19206,11 +22753,11 @@ class basic_json - expected conversions (0xD5..0xD7) - simple values (0xE0..0xF3, 0xF8) - undefined (0xF7) - - half and single-precision floats (0xF9-0xFA) + - half-precision floats (0xF9) - break (0xFF) @param[in] j JSON value to serialize - @return MessagePack serialization as byte vector + @return CBOR serialization as byte vector @complexity Linear in the size of the JSON value @a j. @@ -19224,7 +22771,8 @@ class basic_json @sa @ref to_ubjson(const basic_json&, const bool, const bool) for the related UBJSON format - @since version 2.0.9 + @since version 2.0.9; compact representation of floating-point numbers + since version 3.8.0 */ static std::vector to_cbor(const basic_json& j) { @@ -19284,20 +22832,21 @@ class basic_json object | *size*: 0..15 | fix map | 0x80..0x8F object | *size*: 16..65535 | map 16 | 0xDE object | *size*: 65536..4294967295 | map 32 | 0xDF + binary | *size*: 0..255 | bin 8 | 0xC4 + binary | *size*: 256..65535 | bin 16 | 0xC5 + binary | *size*: 65536..4294967295 | bin 32 | 0xC6 @note The mapping is **complete** in the sense that any JSON value type can be converted to a MessagePack value. @note The following values can **not** be converted to a MessagePack value: - strings with more than 4294967295 bytes + - byte strings with more than 4294967295 bytes - arrays with more than 4294967295 elements - objects with more than 4294967295 elements @note The following MessagePack types are not used in the conversion: - - bin 8 - bin 32 (0xC4..0xC6) - - ext 8 - ext 32 (0xC7..0xC9) - float 32 (0xCA) - - fixext 1 - fixext 16 (0xD4..0xD8) @note Any MessagePack output created @ref to_msgpack can be successfully parsed by @ref from_msgpack. @@ -19400,6 +22949,12 @@ class basic_json the benefit of this parameter is that the receiving side is immediately informed on the number of elements of the container. + @note If the JSON data contains the binary type, the value stored is a list + of integers, as suggested by the UBJSON documentation. In particular, + this means that serialization and the deserialization of a JSON + containing binary values into UBJSON and back will result in a + different JSON object. + @param[in] j JSON value to serialize @param[in] use_size whether to add size annotations to container types @param[in] use_type whether to add type annotations to container types @@ -19464,6 +23019,7 @@ class basic_json string | *any value* | string | 0x02 array | *any value* | document | 0x04 object | *any value* | document | 0x03 + binary | *any value* | binary | 0x05 @warning The mapping is **incomplete**, since only JSON-objects (and things contained therein) can be serialized to BSON. @@ -19545,7 +23101,11 @@ class basic_json Negative integer | number_integer | 0x39 Negative integer | number_integer | 0x3A Negative integer | number_integer | 0x3B - Negative integer | number_integer | 0x40..0x57 + Byte string | binary | 0x40..0x57 + Byte string | binary | 0x58 + Byte string | binary | 0x59 + Byte string | binary | 0x5A + Byte string | binary | 0x5B UTF-8 string | string | 0x60..0x77 UTF-8 string | string | 0x78 UTF-8 string | string | 0x79 @@ -19574,7 +23134,6 @@ class basic_json @warning The mapping is **incomplete** in the sense that not all CBOR types can be converted to a JSON value. The following CBOR types are not supported and will yield parse errors (parse_error.112): - - byte strings (0x40..0x5F) - date/time (0xC0..0xC1) - bignum (0xC2..0xC3) - decimal fraction (0xC4) @@ -19624,30 +23183,56 @@ class basic_json @a strict parameter since 3.0.0; added @a allow_exceptions parameter since 3.2.0 */ - JSON_NODISCARD - static basic_json from_cbor(detail::input_adapter&& i, + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_cbor(InputType&& i, const bool strict = true, const bool allow_exceptions = true) { basic_json result; detail::json_sax_dom_parser sdp(result, allow_exceptions); - const bool res = binary_reader(detail::input_adapter(i)).sax_parse(input_format_t::cbor, &sdp, strict); + auto ia = detail::input_adapter(std::forward(i)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::cbor, &sdp, strict); return res ? result : basic_json(value_t::discarded); } /*! @copydoc from_cbor(detail::input_adapter&&, const bool, const bool) */ - template::value, int> = 0> - JSON_NODISCARD - static basic_json from_cbor(A1 && a1, A2 && a2, + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_cbor(IteratorType first, IteratorType last, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = detail::input_adapter(std::move(first), std::move(last)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::cbor, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + + template + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_cbor(ptr, ptr + len)) + static basic_json from_cbor(const T* ptr, std::size_t len, + const bool strict = true, + const bool allow_exceptions = true) + { + return from_cbor(ptr, ptr + len, strict, allow_exceptions); + } + + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_cbor(ptr, ptr + len)) + static basic_json from_cbor(detail::span_input_adapter&& i, const bool strict = true, const bool allow_exceptions = true) { basic_json result; detail::json_sax_dom_parser sdp(result, allow_exceptions); - const bool res = binary_reader(detail::input_adapter(std::forward(a1), std::forward(a2))).sax_parse(input_format_t::cbor, &sdp, strict); + auto ia = i.get(); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::cbor, &sdp, strict); return res ? result : basic_json(value_t::discarded); } @@ -19685,15 +23270,19 @@ class basic_json array 32 | array | 0xDD map 16 | object | 0xDE map 32 | object | 0xDF + bin 8 | binary | 0xC4 + bin 16 | binary | 0xC5 + bin 32 | binary | 0xC6 + ext 8 | binary | 0xC7 + ext 16 | binary | 0xC8 + ext 32 | binary | 0xC9 + fixext 1 | binary | 0xD4 + fixext 2 | binary | 0xD5 + fixext 4 | binary | 0xD6 + fixext 8 | binary | 0xD7 + fixext 16 | binary | 0xD8 negative fixint | number_integer | 0xE0-0xFF - @warning The mapping is **incomplete** in the sense that not all - MessagePack types can be converted to a JSON value. The following - MessagePack types are not supported and will yield parse errors: - - bin 8 - bin 32 (0xC4..0xC6) - - ext 8 - ext 32 (0xC7..0xC9) - - fixext 1 - fixext 16 (0xD4..0xD8) - @note Any MessagePack output created @ref to_msgpack can be successfully parsed by @ref from_msgpack. @@ -19733,33 +23322,60 @@ class basic_json @a strict parameter since 3.0.0; added @a allow_exceptions parameter since 3.2.0 */ - JSON_NODISCARD - static basic_json from_msgpack(detail::input_adapter&& i, + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_msgpack(InputType&& i, const bool strict = true, const bool allow_exceptions = true) { basic_json result; detail::json_sax_dom_parser sdp(result, allow_exceptions); - const bool res = binary_reader(detail::input_adapter(i)).sax_parse(input_format_t::msgpack, &sdp, strict); + auto ia = detail::input_adapter(std::forward(i)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::msgpack, &sdp, strict); return res ? result : basic_json(value_t::discarded); } /*! @copydoc from_msgpack(detail::input_adapter&&, const bool, const bool) */ - template::value, int> = 0> - JSON_NODISCARD - static basic_json from_msgpack(A1 && a1, A2 && a2, + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_msgpack(IteratorType first, IteratorType last, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = detail::input_adapter(std::move(first), std::move(last)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::msgpack, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + + + template + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_msgpack(ptr, ptr + len)) + static basic_json from_msgpack(const T* ptr, std::size_t len, + const bool strict = true, + const bool allow_exceptions = true) + { + return from_msgpack(ptr, ptr + len, strict, allow_exceptions); + } + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_msgpack(ptr, ptr + len)) + static basic_json from_msgpack(detail::span_input_adapter&& i, const bool strict = true, const bool allow_exceptions = true) { basic_json result; detail::json_sax_dom_parser sdp(result, allow_exceptions); - const bool res = binary_reader(detail::input_adapter(std::forward(a1), std::forward(a2))).sax_parse(input_format_t::msgpack, &sdp, strict); + auto ia = i.get(); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::msgpack, &sdp, strict); return res ? result : basic_json(value_t::discarded); } + /*! @brief create a JSON value from an input in UBJSON format @@ -19821,33 +23437,59 @@ class basic_json @since version 3.1.0; added @a allow_exceptions parameter since 3.2.0 */ - JSON_NODISCARD - static basic_json from_ubjson(detail::input_adapter&& i, + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_ubjson(InputType&& i, const bool strict = true, const bool allow_exceptions = true) { basic_json result; detail::json_sax_dom_parser sdp(result, allow_exceptions); - const bool res = binary_reader(detail::input_adapter(i)).sax_parse(input_format_t::ubjson, &sdp, strict); + auto ia = detail::input_adapter(std::forward(i)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::ubjson, &sdp, strict); return res ? result : basic_json(value_t::discarded); } /*! @copydoc from_ubjson(detail::input_adapter&&, const bool, const bool) */ - template::value, int> = 0> - JSON_NODISCARD - static basic_json from_ubjson(A1 && a1, A2 && a2, + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_ubjson(IteratorType first, IteratorType last, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = detail::input_adapter(std::move(first), std::move(last)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::ubjson, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } + + template + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_ubjson(ptr, ptr + len)) + static basic_json from_ubjson(const T* ptr, std::size_t len, + const bool strict = true, + const bool allow_exceptions = true) + { + return from_ubjson(ptr, ptr + len, strict, allow_exceptions); + } + + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_ubjson(ptr, ptr + len)) + static basic_json from_ubjson(detail::span_input_adapter&& i, const bool strict = true, const bool allow_exceptions = true) { basic_json result; detail::json_sax_dom_parser sdp(result, allow_exceptions); - const bool res = binary_reader(detail::input_adapter(std::forward(a1), std::forward(a2))).sax_parse(input_format_t::ubjson, &sdp, strict); + auto ia = i.get(); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::ubjson, &sdp, strict); return res ? result : basic_json(value_t::discarded); } + /*! @brief Create a JSON value from an input in BSON format @@ -19908,35 +23550,57 @@ class basic_json @sa @ref from_ubjson(detail::input_adapter&&, const bool, const bool) for the related UBJSON format */ - JSON_NODISCARD - static basic_json from_bson(detail::input_adapter&& i, + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_bson(InputType&& i, const bool strict = true, const bool allow_exceptions = true) { basic_json result; detail::json_sax_dom_parser sdp(result, allow_exceptions); - const bool res = binary_reader(detail::input_adapter(i)).sax_parse(input_format_t::bson, &sdp, strict); + auto ia = detail::input_adapter(std::forward(i)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::bson, &sdp, strict); return res ? result : basic_json(value_t::discarded); } /*! @copydoc from_bson(detail::input_adapter&&, const bool, const bool) */ - template::value, int> = 0> - JSON_NODISCARD - static basic_json from_bson(A1 && a1, A2 && a2, + template + JSON_HEDLEY_WARN_UNUSED_RESULT + static basic_json from_bson(IteratorType first, IteratorType last, const bool strict = true, const bool allow_exceptions = true) { basic_json result; detail::json_sax_dom_parser sdp(result, allow_exceptions); - const bool res = binary_reader(detail::input_adapter(std::forward(a1), std::forward(a2))).sax_parse(input_format_t::bson, &sdp, strict); + auto ia = detail::input_adapter(std::move(first), std::move(last)); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::bson, &sdp, strict); return res ? result : basic_json(value_t::discarded); } + template + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_bson(ptr, ptr + len)) + static basic_json from_bson(const T* ptr, std::size_t len, + const bool strict = true, + const bool allow_exceptions = true) + { + return from_bson(ptr, ptr + len, strict, allow_exceptions); + } - + JSON_HEDLEY_WARN_UNUSED_RESULT + JSON_HEDLEY_DEPRECATED_FOR(3.8.0, from_bson(ptr, ptr + len)) + static basic_json from_bson(detail::span_input_adapter&& i, + const bool strict = true, + const bool allow_exceptions = true) + { + basic_json result; + detail::json_sax_dom_parser sdp(result, allow_exceptions); + auto ia = i.get(); + const bool res = binary_reader(std::move(ia)).sax_parse(input_format_t::bson, &sdp, strict); + return res ? result : basic_json(value_t::discarded); + } /// @} ////////////////////////// @@ -19989,7 +23653,7 @@ class basic_json Uses a JSON pointer to retrieve a reference to the respective JSON value. No bound checking is performed. The function does not change the JSON - value; no `null` values are created. In particular, the the special value + value; no `null` values are created. In particular, the special value `-` yields an exception. @param[in] ptr JSON pointer to the desired element @@ -20298,7 +23962,7 @@ class basic_json else { const auto idx = json_pointer::array_index(last_path); - if (JSON_UNLIKELY(static_cast(idx) > parent.size())) + if (JSON_HEDLEY_UNLIKELY(static_cast(idx) > parent.size())) { // avoid undefined behavior JSON_THROW(out_of_range::create(401, "array index " + std::to_string(idx) + " is out of range")); @@ -20329,7 +23993,7 @@ class basic_json { // perform range check auto it = parent.find(last_path); - if (JSON_LIKELY(it != parent.end())) + if (JSON_HEDLEY_LIKELY(it != parent.end())) { parent.erase(it); } @@ -20346,7 +24010,7 @@ class basic_json }; // type check: top level value must be an array - if (JSON_UNLIKELY(not json_patch.is_array())) + if (JSON_HEDLEY_UNLIKELY(not json_patch.is_array())) { JSON_THROW(parse_error::create(104, 0, "JSON patch must be an array of objects")); } @@ -20366,13 +24030,13 @@ class basic_json const auto error_msg = (op == "op") ? "operation" : "operation '" + op + "'"; // check if desired value is present - if (JSON_UNLIKELY(it == val.m_value.object->end())) + if (JSON_HEDLEY_UNLIKELY(it == val.m_value.object->end())) { JSON_THROW(parse_error::create(105, 0, error_msg + " must have member '" + member + "'")); } // check if result is of type string - if (JSON_UNLIKELY(string_type and not it->second.is_string())) + if (JSON_HEDLEY_UNLIKELY(string_type and not it->second.is_string())) { JSON_THROW(parse_error::create(105, 0, error_msg + " must have string member '" + member + "'")); } @@ -20382,7 +24046,7 @@ class basic_json }; // type check: every element of the array must be an object - if (JSON_UNLIKELY(not val.is_object())) + if (JSON_HEDLEY_UNLIKELY(not val.is_object())) { JSON_THROW(parse_error::create(104, 0, "JSON patch must be an array of objects")); } @@ -20460,7 +24124,7 @@ class basic_json } // throw an exception if test fails - if (JSON_UNLIKELY(not success)) + if (JSON_HEDLEY_UNLIKELY(not success)) { JSON_THROW(other_error::create(501, "unsuccessful: " + val.dump())); } @@ -20513,7 +24177,7 @@ class basic_json @since version 2.0.0 */ - JSON_NODISCARD + JSON_HEDLEY_WARN_UNUSED_RESULT static basic_json diff(const basic_json& source, const basic_json& target, const std::string& path = "") { @@ -20573,7 +24237,7 @@ class basic_json result.push_back( { {"op", "add"}, - {"path", path + "/" + std::to_string(i)}, + {"path", path + "/-"}, {"value", target[i]} }); ++i; @@ -20717,6 +24381,21 @@ class basic_json /// @} }; + +/*! +@brief user-defined to_string function for JSON values + +This function implements a user-defined to_string for JSON objects. + +@param[in] j a JSON object +@return a std::string object +*/ + +NLOHMANN_BASIC_JSON_TPL_DECLARATION +std::string to_string(const NLOHMANN_BASIC_JSON_TPL& j) +{ + return j.dump(); +} } // namespace nlohmann /////////////////////// @@ -20748,7 +24427,7 @@ struct hash /// @note: do not remove the space after '<', /// see https://github.com/nlohmann/json/pull/679 template<> -struct less< ::nlohmann::detail::value_t> +struct less<::nlohmann::detail::value_t> { /*! @brief compare two value_t enum values @@ -20790,6 +24469,7 @@ if no parse error occurred. @since version 1.0.0 */ +JSON_HEDLEY_NON_NULL(1) inline nlohmann::json operator "" _json(const char* s, std::size_t n) { return nlohmann::json::parse(s, s + n); @@ -20808,6 +24488,7 @@ object if no parse error occurred. @since version 2.0.0 */ +JSON_HEDLEY_NON_NULL(1) inline nlohmann::json::json_pointer operator "" _json_pointer(const char* s, std::size_t n) { return nlohmann::json::json_pointer(std::string(s, n)); @@ -20829,14 +24510,156 @@ inline nlohmann::json::json_pointer operator "" _json_pointer(const char* s, std #undef JSON_CATCH #undef JSON_THROW #undef JSON_TRY -#undef JSON_LIKELY -#undef JSON_UNLIKELY -#undef JSON_DEPRECATED -#undef JSON_NODISCARD #undef JSON_HAS_CPP_14 #undef JSON_HAS_CPP_17 #undef NLOHMANN_BASIC_JSON_TPL_DECLARATION #undef NLOHMANN_BASIC_JSON_TPL +// #include +#undef JSON_HEDLEY_ALWAYS_INLINE +#undef JSON_HEDLEY_ARM_VERSION +#undef JSON_HEDLEY_ARM_VERSION_CHECK +#undef JSON_HEDLEY_ARRAY_PARAM +#undef JSON_HEDLEY_ASSUME +#undef JSON_HEDLEY_BEGIN_C_DECLS +#undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE +#undef JSON_HEDLEY_CLANG_HAS_BUILTIN +#undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE +#undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE +#undef JSON_HEDLEY_CLANG_HAS_EXTENSION +#undef JSON_HEDLEY_CLANG_HAS_FEATURE +#undef JSON_HEDLEY_CLANG_HAS_WARNING +#undef JSON_HEDLEY_COMPCERT_VERSION +#undef JSON_HEDLEY_COMPCERT_VERSION_CHECK +#undef JSON_HEDLEY_CONCAT +#undef JSON_HEDLEY_CONCAT3 +#undef JSON_HEDLEY_CONCAT3_EX +#undef JSON_HEDLEY_CONCAT_EX +#undef JSON_HEDLEY_CONST +#undef JSON_HEDLEY_CONSTEXPR +#undef JSON_HEDLEY_CONST_CAST +#undef JSON_HEDLEY_CPP_CAST +#undef JSON_HEDLEY_CRAY_VERSION +#undef JSON_HEDLEY_CRAY_VERSION_CHECK +#undef JSON_HEDLEY_C_DECL +#undef JSON_HEDLEY_DEPRECATED +#undef JSON_HEDLEY_DEPRECATED_FOR +#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ +#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#undef JSON_HEDLEY_DIAGNOSTIC_POP +#undef JSON_HEDLEY_DIAGNOSTIC_PUSH +#undef JSON_HEDLEY_DMC_VERSION +#undef JSON_HEDLEY_DMC_VERSION_CHECK +#undef JSON_HEDLEY_EMPTY_BASES +#undef JSON_HEDLEY_EMSCRIPTEN_VERSION +#undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK +#undef JSON_HEDLEY_END_C_DECLS +#undef JSON_HEDLEY_FLAGS +#undef JSON_HEDLEY_FLAGS_CAST +#undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE +#undef JSON_HEDLEY_GCC_HAS_BUILTIN +#undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE +#undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE +#undef JSON_HEDLEY_GCC_HAS_EXTENSION +#undef JSON_HEDLEY_GCC_HAS_FEATURE +#undef JSON_HEDLEY_GCC_HAS_WARNING +#undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK +#undef JSON_HEDLEY_GCC_VERSION +#undef JSON_HEDLEY_GCC_VERSION_CHECK +#undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE +#undef JSON_HEDLEY_GNUC_HAS_BUILTIN +#undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE +#undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE +#undef JSON_HEDLEY_GNUC_HAS_EXTENSION +#undef JSON_HEDLEY_GNUC_HAS_FEATURE +#undef JSON_HEDLEY_GNUC_HAS_WARNING +#undef JSON_HEDLEY_GNUC_VERSION +#undef JSON_HEDLEY_GNUC_VERSION_CHECK +#undef JSON_HEDLEY_HAS_ATTRIBUTE +#undef JSON_HEDLEY_HAS_BUILTIN +#undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE +#undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS +#undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE +#undef JSON_HEDLEY_HAS_EXTENSION +#undef JSON_HEDLEY_HAS_FEATURE +#undef JSON_HEDLEY_HAS_WARNING +#undef JSON_HEDLEY_IAR_VERSION +#undef JSON_HEDLEY_IAR_VERSION_CHECK +#undef JSON_HEDLEY_IBM_VERSION +#undef JSON_HEDLEY_IBM_VERSION_CHECK +#undef JSON_HEDLEY_IMPORT +#undef JSON_HEDLEY_INLINE +#undef JSON_HEDLEY_INTEL_VERSION +#undef JSON_HEDLEY_INTEL_VERSION_CHECK +#undef JSON_HEDLEY_IS_CONSTANT +#undef JSON_HEDLEY_IS_CONSTEXPR_ +#undef JSON_HEDLEY_LIKELY +#undef JSON_HEDLEY_MALLOC +#undef JSON_HEDLEY_MESSAGE +#undef JSON_HEDLEY_MSVC_VERSION +#undef JSON_HEDLEY_MSVC_VERSION_CHECK +#undef JSON_HEDLEY_NEVER_INLINE +#undef JSON_HEDLEY_NON_NULL +#undef JSON_HEDLEY_NO_ESCAPE +#undef JSON_HEDLEY_NO_RETURN +#undef JSON_HEDLEY_NO_THROW +#undef JSON_HEDLEY_NULL +#undef JSON_HEDLEY_PELLES_VERSION +#undef JSON_HEDLEY_PELLES_VERSION_CHECK +#undef JSON_HEDLEY_PGI_VERSION +#undef JSON_HEDLEY_PGI_VERSION_CHECK +#undef JSON_HEDLEY_PREDICT +#undef JSON_HEDLEY_PRINTF_FORMAT +#undef JSON_HEDLEY_PRIVATE +#undef JSON_HEDLEY_PUBLIC +#undef JSON_HEDLEY_PURE +#undef JSON_HEDLEY_REINTERPRET_CAST +#undef JSON_HEDLEY_REQUIRE +#undef JSON_HEDLEY_REQUIRE_CONSTEXPR +#undef JSON_HEDLEY_REQUIRE_MSG +#undef JSON_HEDLEY_RESTRICT +#undef JSON_HEDLEY_RETURNS_NON_NULL +#undef JSON_HEDLEY_SENTINEL +#undef JSON_HEDLEY_STATIC_ASSERT +#undef JSON_HEDLEY_STATIC_CAST +#undef JSON_HEDLEY_STRINGIFY +#undef JSON_HEDLEY_STRINGIFY_EX +#undef JSON_HEDLEY_SUNPRO_VERSION +#undef JSON_HEDLEY_SUNPRO_VERSION_CHECK +#undef JSON_HEDLEY_TINYC_VERSION +#undef JSON_HEDLEY_TINYC_VERSION_CHECK +#undef JSON_HEDLEY_TI_ARMCL_VERSION +#undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK +#undef JSON_HEDLEY_TI_CL2000_VERSION +#undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK +#undef JSON_HEDLEY_TI_CL430_VERSION +#undef JSON_HEDLEY_TI_CL430_VERSION_CHECK +#undef JSON_HEDLEY_TI_CL6X_VERSION +#undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK +#undef JSON_HEDLEY_TI_CL7X_VERSION +#undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK +#undef JSON_HEDLEY_TI_CLPRU_VERSION +#undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK +#undef JSON_HEDLEY_TI_VERSION +#undef JSON_HEDLEY_TI_VERSION_CHECK +#undef JSON_HEDLEY_UNAVAILABLE +#undef JSON_HEDLEY_UNLIKELY +#undef JSON_HEDLEY_UNPREDICTABLE +#undef JSON_HEDLEY_UNREACHABLE +#undef JSON_HEDLEY_UNREACHABLE_RETURN +#undef JSON_HEDLEY_VERSION +#undef JSON_HEDLEY_VERSION_DECODE_MAJOR +#undef JSON_HEDLEY_VERSION_DECODE_MINOR +#undef JSON_HEDLEY_VERSION_DECODE_REVISION +#undef JSON_HEDLEY_VERSION_ENCODE +#undef JSON_HEDLEY_WARNING +#undef JSON_HEDLEY_WARN_UNUSED_RESULT +#undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG +#undef JSON_HEDLEY_FALL_THROUGH + + #endif // INCLUDE_NLOHMANN_JSON_HPP_ -- cgit v1.2.3 From 00cbfe2e138c842d9c0bce4e1848d3eaa88a39b8 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 31 Aug 2020 13:36:26 -0400 Subject: Trainer frontpics to png --- Makefile | 42 +-- files/poketool/trgra/trfgra/.gitignore | 2 + files/poketool/trgra/trfgra/.knarcignore | 1 + files/poketool/trgra/trfgra/narc_0000.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0000.png | Bin 0 -> 760 bytes files/poketool/trgra/trfgra/narc_0000.png.key | 1 + files/poketool/trgra/trfgra/narc_0001.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0002.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0002.png | Bin 0 -> 817 bytes files/poketool/trgra/trfgra/narc_0002.png.key | 1 + files/poketool/trgra/trfgra/narc_0003.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0004.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0004.png | Bin 0 -> 662 bytes files/poketool/trgra/trfgra/narc_0004.png.key | 1 + files/poketool/trgra/trfgra/narc_0005.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0006.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0006.png | Bin 0 -> 728 bytes files/poketool/trgra/trfgra/narc_0006.png.key | 1 + files/poketool/trgra/trfgra/narc_0007.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0008.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0008.png | Bin 0 -> 677 bytes files/poketool/trgra/trfgra/narc_0008.png.key | 1 + files/poketool/trgra/trfgra/narc_0009.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0010.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0010.png | Bin 0 -> 621 bytes files/poketool/trgra/trfgra/narc_0010.png.key | 1 + files/poketool/trgra/trfgra/narc_0011.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0012.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0012.png | Bin 0 -> 922 bytes files/poketool/trgra/trfgra/narc_0012.png.key | 1 + files/poketool/trgra/trfgra/narc_0013.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0014.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0014.png | Bin 0 -> 790 bytes files/poketool/trgra/trfgra/narc_0014.png.key | 1 + files/poketool/trgra/trfgra/narc_0015.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0016.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0016.png | Bin 0 -> 869 bytes files/poketool/trgra/trfgra/narc_0016.png.key | 1 + files/poketool/trgra/trfgra/narc_0017.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0018.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0018.png | Bin 0 -> 1120 bytes files/poketool/trgra/trfgra/narc_0018.png.key | 1 + files/poketool/trgra/trfgra/narc_0019.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0020.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0020.png | Bin 0 -> 776 bytes files/poketool/trgra/trfgra/narc_0020.png.key | Bin 0 -> 4 bytes files/poketool/trgra/trfgra/narc_0021.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0022.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0022.png | Bin 0 -> 1147 bytes files/poketool/trgra/trfgra/narc_0022.png.key | 1 + files/poketool/trgra/trfgra/narc_0023.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0024.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0024.png | Bin 0 -> 1021 bytes files/poketool/trgra/trfgra/narc_0024.png.key | 1 + files/poketool/trgra/trfgra/narc_0025.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0026.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0026.png | Bin 0 -> 1062 bytes files/poketool/trgra/trfgra/narc_0026.png.key | 1 + files/poketool/trgra/trfgra/narc_0027.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0028.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0028.png | Bin 0 -> 1015 bytes files/poketool/trgra/trfgra/narc_0028.png.key | 1 + files/poketool/trgra/trfgra/narc_0029.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0030.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0030.png | Bin 0 -> 953 bytes files/poketool/trgra/trfgra/narc_0030.png.key | 1 + files/poketool/trgra/trfgra/narc_0031.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0032.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0032.png | Bin 0 -> 866 bytes files/poketool/trgra/trfgra/narc_0032.png.key | 1 + files/poketool/trgra/trfgra/narc_0033.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0034.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0034.png | Bin 0 -> 760 bytes files/poketool/trgra/trfgra/narc_0034.png.key | 1 + files/poketool/trgra/trfgra/narc_0035.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0036.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0036.png | Bin 0 -> 848 bytes files/poketool/trgra/trfgra/narc_0036.png.key | 1 + files/poketool/trgra/trfgra/narc_0037.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0038.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0038.png | Bin 0 -> 754 bytes files/poketool/trgra/trfgra/narc_0038.png.key | 1 + files/poketool/trgra/trfgra/narc_0039.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0040.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0040.png | Bin 0 -> 842 bytes files/poketool/trgra/trfgra/narc_0040.png.key | 1 + files/poketool/trgra/trfgra/narc_0041.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0042.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0042.png | Bin 0 -> 881 bytes files/poketool/trgra/trfgra/narc_0042.png.key | 1 + files/poketool/trgra/trfgra/narc_0043.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0044.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0044.png | Bin 0 -> 641 bytes files/poketool/trgra/trfgra/narc_0044.png.key | 1 + files/poketool/trgra/trfgra/narc_0045.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0046.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0046.png | Bin 0 -> 1063 bytes files/poketool/trgra/trfgra/narc_0046.png.key | 1 + files/poketool/trgra/trfgra/narc_0047.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0048.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0048.png | Bin 0 -> 723 bytes files/poketool/trgra/trfgra/narc_0048.png.key | 1 + files/poketool/trgra/trfgra/narc_0049.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0050.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0050.png | Bin 0 -> 752 bytes files/poketool/trgra/trfgra/narc_0050.png.key | 1 + files/poketool/trgra/trfgra/narc_0051.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0052.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0052.png | Bin 0 -> 802 bytes files/poketool/trgra/trfgra/narc_0052.png.key | Bin 0 -> 4 bytes files/poketool/trgra/trfgra/narc_0053.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0054.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0054.png | Bin 0 -> 818 bytes files/poketool/trgra/trfgra/narc_0054.png.key | 1 + files/poketool/trgra/trfgra/narc_0055.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0056.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0056.png | Bin 0 -> 652 bytes files/poketool/trgra/trfgra/narc_0056.png.key | 1 + files/poketool/trgra/trfgra/narc_0057.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0058.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0058.png | Bin 0 -> 808 bytes files/poketool/trgra/trfgra/narc_0058.png.key | 1 + files/poketool/trgra/trfgra/narc_0059.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0060.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0060.png | Bin 0 -> 872 bytes files/poketool/trgra/trfgra/narc_0060.png.key | 1 + files/poketool/trgra/trfgra/narc_0061.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0062.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0062.png | Bin 0 -> 1239 bytes files/poketool/trgra/trfgra/narc_0062.png.key | 1 + files/poketool/trgra/trfgra/narc_0063.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0064.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0064.png | Bin 0 -> 641 bytes files/poketool/trgra/trfgra/narc_0064.png.key | 1 + files/poketool/trgra/trfgra/narc_0065.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0066.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0066.png | Bin 0 -> 898 bytes files/poketool/trgra/trfgra/narc_0066.png.key | 1 + files/poketool/trgra/trfgra/narc_0067.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0068.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0068.png | Bin 0 -> 1039 bytes files/poketool/trgra/trfgra/narc_0068.png.key | 1 + files/poketool/trgra/trfgra/narc_0069.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0070.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0070.png | Bin 0 -> 684 bytes files/poketool/trgra/trfgra/narc_0070.png.key | 1 + files/poketool/trgra/trfgra/narc_0071.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0072.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0072.png | Bin 0 -> 879 bytes files/poketool/trgra/trfgra/narc_0072.png.key | 1 + files/poketool/trgra/trfgra/narc_0073.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0074.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0074.png | Bin 0 -> 916 bytes files/poketool/trgra/trfgra/narc_0074.png.key | 1 + files/poketool/trgra/trfgra/narc_0075.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0076.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0076.png | Bin 0 -> 754 bytes files/poketool/trgra/trfgra/narc_0076.png.key | 1 + files/poketool/trgra/trfgra/narc_0077.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0078.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0078.png | Bin 0 -> 772 bytes files/poketool/trgra/trfgra/narc_0078.png.key | 1 + files/poketool/trgra/trfgra/narc_0079.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0080.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0080.png | Bin 0 -> 788 bytes files/poketool/trgra/trfgra/narc_0080.png.key | 1 + files/poketool/trgra/trfgra/narc_0081.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0082.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0082.png | Bin 0 -> 898 bytes files/poketool/trgra/trfgra/narc_0082.png.key | 1 + files/poketool/trgra/trfgra/narc_0083.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0084.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0084.png | Bin 0 -> 670 bytes files/poketool/trgra/trfgra/narc_0084.png.key | 1 + files/poketool/trgra/trfgra/narc_0085.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0086.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0086.png | Bin 0 -> 719 bytes files/poketool/trgra/trfgra/narc_0086.png.key | 1 + files/poketool/trgra/trfgra/narc_0087.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0088.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0088.png | Bin 0 -> 602 bytes files/poketool/trgra/trfgra/narc_0088.png.key | 1 + files/poketool/trgra/trfgra/narc_0089.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0090.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0090.png | Bin 0 -> 614 bytes files/poketool/trgra/trfgra/narc_0090.png.key | 1 + files/poketool/trgra/trfgra/narc_0091.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0092.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0092.png | Bin 0 -> 771 bytes files/poketool/trgra/trfgra/narc_0092.png.key | 1 + files/poketool/trgra/trfgra/narc_0093.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0094.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0094.png | Bin 0 -> 1079 bytes files/poketool/trgra/trfgra/narc_0094.png.key | 1 + files/poketool/trgra/trfgra/narc_0095.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0096.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0096.png | Bin 0 -> 957 bytes files/poketool/trgra/trfgra/narc_0096.png.key | 1 + files/poketool/trgra/trfgra/narc_0097.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0098.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0098.png | Bin 0 -> 922 bytes files/poketool/trgra/trfgra/narc_0098.png.key | 1 + files/poketool/trgra/trfgra/narc_0099.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0100.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0100.png | Bin 0 -> 916 bytes files/poketool/trgra/trfgra/narc_0100.png.key | 1 + files/poketool/trgra/trfgra/narc_0101.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0102.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0102.png | Bin 0 -> 796 bytes files/poketool/trgra/trfgra/narc_0102.png.key | 1 + files/poketool/trgra/trfgra/narc_0103.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0104.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0104.png | Bin 0 -> 1041 bytes files/poketool/trgra/trfgra/narc_0104.png.key | 1 + files/poketool/trgra/trfgra/narc_0105.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0106.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0106.png | Bin 0 -> 816 bytes files/poketool/trgra/trfgra/narc_0106.png.key | 1 + files/poketool/trgra/trfgra/narc_0107.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0108.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0108.png | Bin 0 -> 855 bytes files/poketool/trgra/trfgra/narc_0108.png.key | 1 + files/poketool/trgra/trfgra/narc_0109.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0110.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0110.png | Bin 0 -> 934 bytes files/poketool/trgra/trfgra/narc_0110.png.key | Bin 0 -> 4 bytes files/poketool/trgra/trfgra/narc_0111.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0112.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0112.png | Bin 0 -> 956 bytes files/poketool/trgra/trfgra/narc_0112.png.key | 1 + files/poketool/trgra/trfgra/narc_0113.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0114.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0114.png | Bin 0 -> 1052 bytes files/poketool/trgra/trfgra/narc_0114.png.key | 1 + files/poketool/trgra/trfgra/narc_0115.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0116.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0116.png | Bin 0 -> 995 bytes files/poketool/trgra/trfgra/narc_0116.png.key | 1 + files/poketool/trgra/trfgra/narc_0117.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0118.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0118.png | Bin 0 -> 790 bytes files/poketool/trgra/trfgra/narc_0118.png.key | 1 + files/poketool/trgra/trfgra/narc_0119.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0120.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0120.png | Bin 0 -> 611 bytes files/poketool/trgra/trfgra/narc_0120.png.key | 1 + files/poketool/trgra/trfgra/narc_0121.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0122.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0122.png | Bin 0 -> 594 bytes files/poketool/trgra/trfgra/narc_0122.png.key | 1 + files/poketool/trgra/trfgra/narc_0123.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0124.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0124.png | Bin 0 -> 920 bytes files/poketool/trgra/trfgra/narc_0124.png.key | 1 + files/poketool/trgra/trfgra/narc_0125.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0126.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0126.png | Bin 0 -> 822 bytes files/poketool/trgra/trfgra/narc_0126.png.key | 1 + files/poketool/trgra/trfgra/narc_0127.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0128.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0128.png | Bin 0 -> 916 bytes files/poketool/trgra/trfgra/narc_0128.png.key | 1 + files/poketool/trgra/trfgra/narc_0129.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0130.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0130.png | Bin 0 -> 757 bytes files/poketool/trgra/trfgra/narc_0130.png.key | 1 + files/poketool/trgra/trfgra/narc_0131.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0132.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0132.png | Bin 0 -> 676 bytes files/poketool/trgra/trfgra/narc_0132.png.key | 1 + files/poketool/trgra/trfgra/narc_0133.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0134.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0134.png | Bin 0 -> 822 bytes files/poketool/trgra/trfgra/narc_0134.png.key | 1 + files/poketool/trgra/trfgra/narc_0135.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0136.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0136.png | Bin 0 -> 598 bytes files/poketool/trgra/trfgra/narc_0136.png.key | 1 + files/poketool/trgra/trfgra/narc_0137.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0138.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0138.png | Bin 0 -> 810 bytes files/poketool/trgra/trfgra/narc_0138.png.key | 1 + files/poketool/trgra/trfgra/narc_0139.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0140.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0140.png | Bin 0 -> 1399 bytes files/poketool/trgra/trfgra/narc_0140.png.key | 1 + files/poketool/trgra/trfgra/narc_0141.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0142.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0142.png | Bin 0 -> 904 bytes files/poketool/trgra/trfgra/narc_0142.png.key | 1 + files/poketool/trgra/trfgra/narc_0143.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0144.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0144.png | Bin 0 -> 739 bytes files/poketool/trgra/trfgra/narc_0144.png.key | 1 + files/poketool/trgra/trfgra/narc_0145.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0146.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0146.png | Bin 0 -> 799 bytes files/poketool/trgra/trfgra/narc_0146.png.key | 1 + files/poketool/trgra/trfgra/narc_0147.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0148.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0148.png | Bin 0 -> 863 bytes files/poketool/trgra/trfgra/narc_0148.png.key | 1 + files/poketool/trgra/trfgra/narc_0149.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0150.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0150.png | Bin 0 -> 1142 bytes files/poketool/trgra/trfgra/narc_0150.png.key | 1 + files/poketool/trgra/trfgra/narc_0151.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0152.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0152.png | Bin 0 -> 776 bytes files/poketool/trgra/trfgra/narc_0152.png.key | 1 + files/poketool/trgra/trfgra/narc_0153.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0154.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0154.png | Bin 0 -> 1017 bytes files/poketool/trgra/trfgra/narc_0154.png.key | 1 + files/poketool/trgra/trfgra/narc_0155.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0156.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0156.png | Bin 0 -> 990 bytes files/poketool/trgra/trfgra/narc_0156.png.key | 1 + files/poketool/trgra/trfgra/narc_0157.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0158.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0158.png | Bin 0 -> 751 bytes files/poketool/trgra/trfgra/narc_0158.png.key | 1 + files/poketool/trgra/trfgra/narc_0159.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0160.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0160.png | Bin 0 -> 834 bytes files/poketool/trgra/trfgra/narc_0160.png.key | 1 + files/poketool/trgra/trfgra/narc_0161.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0162.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0162.png | Bin 0 -> 750 bytes files/poketool/trgra/trfgra/narc_0162.png.key | 1 + files/poketool/trgra/trfgra/narc_0163.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0164.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0164.png | Bin 0 -> 1390 bytes files/poketool/trgra/trfgra/narc_0164.png.key | 1 + files/poketool/trgra/trfgra/narc_0165.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0166.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0166.png | Bin 0 -> 908 bytes files/poketool/trgra/trfgra/narc_0166.png.key | 1 + files/poketool/trgra/trfgra/narc_0167.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0168.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0168.png | Bin 0 -> 707 bytes files/poketool/trgra/trfgra/narc_0168.png.key | 1 + files/poketool/trgra/trfgra/narc_0169.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0170.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0170.png | Bin 0 -> 831 bytes files/poketool/trgra/trfgra/narc_0170.png.key | 1 + files/poketool/trgra/trfgra/narc_0171.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0172.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0172.png | Bin 0 -> 891 bytes files/poketool/trgra/trfgra/narc_0172.png.key | 1 + files/poketool/trgra/trfgra/narc_0173.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0174.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0174.png | Bin 0 -> 762 bytes files/poketool/trgra/trfgra/narc_0174.png.key | 1 + files/poketool/trgra/trfgra/narc_0175.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0176.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0176.png | Bin 0 -> 802 bytes files/poketool/trgra/trfgra/narc_0176.png.key | 1 + files/poketool/trgra/trfgra/narc_0177.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0178.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0178.png | Bin 0 -> 835 bytes files/poketool/trgra/trfgra/narc_0178.png.key | 1 + files/poketool/trgra/trfgra/narc_0179.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0180.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0180.png | Bin 0 -> 779 bytes files/poketool/trgra/trfgra/narc_0180.png.key | 1 + files/poketool/trgra/trfgra/narc_0181.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0182.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0182.png | Bin 0 -> 642 bytes files/poketool/trgra/trfgra/narc_0182.png.key | 1 + files/poketool/trgra/trfgra/narc_0183.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0184.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0184.png | Bin 0 -> 634 bytes files/poketool/trgra/trfgra/narc_0184.png.key | 1 + files/poketool/trgra/trfgra/narc_0185.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0186.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0186.png | Bin 0 -> 656 bytes files/poketool/trgra/trfgra/narc_0186.png.key | 1 + files/poketool/trgra/trfgra/narc_0187.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0188.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0188.png | Bin 0 -> 628 bytes files/poketool/trgra/trfgra/narc_0188.png.key | 1 + files/poketool/trgra/trfgra/narc_0189.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0190.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0190.png | Bin 0 -> 760 bytes files/poketool/trgra/trfgra/narc_0190.png.key | 1 + files/poketool/trgra/trfgra/narc_0191.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0192.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0192.png | Bin 0 -> 817 bytes files/poketool/trgra/trfgra/narc_0192.png.key | 1 + files/poketool/trgra/trfgra/narc_0193.NCLR | Bin 72 -> 0 bytes files/poketool/trgra/trfgra/narc_0194.NCGR | Bin 6448 -> 0 bytes files/poketool/trgra/trfgra/narc_0194.png | Bin 0 -> 1000 bytes files/poketool/trgra/trfgra/narc_0194.png.key | 1 + files/poketool/trgra/trfgra/narc_0195.NCLR | Bin 72 -> 0 bytes filesystem.mk | 198 +++++++++++++ graphics_rules.mk | 400 +++++++++++++++++++++++++- 397 files changed, 705 insertions(+), 33 deletions(-) create mode 100644 files/poketool/trgra/trfgra/.gitignore delete mode 100644 files/poketool/trgra/trfgra/narc_0000.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0000.png create mode 100644 files/poketool/trgra/trfgra/narc_0000.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0001.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0002.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0002.png create mode 100644 files/poketool/trgra/trfgra/narc_0002.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0003.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0004.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0004.png create mode 100644 files/poketool/trgra/trfgra/narc_0004.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0005.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0006.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0006.png create mode 100644 files/poketool/trgra/trfgra/narc_0006.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0007.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0008.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0008.png create mode 100644 files/poketool/trgra/trfgra/narc_0008.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0009.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0010.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0010.png create mode 100644 files/poketool/trgra/trfgra/narc_0010.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0011.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0012.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0012.png create mode 100644 files/poketool/trgra/trfgra/narc_0012.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0013.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0014.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0014.png create mode 100644 files/poketool/trgra/trfgra/narc_0014.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0015.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0016.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0016.png create mode 100644 files/poketool/trgra/trfgra/narc_0016.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0017.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0018.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0018.png create mode 100644 files/poketool/trgra/trfgra/narc_0018.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0019.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0020.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0020.png create mode 100644 files/poketool/trgra/trfgra/narc_0020.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0021.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0022.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0022.png create mode 100644 files/poketool/trgra/trfgra/narc_0022.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0023.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0024.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0024.png create mode 100644 files/poketool/trgra/trfgra/narc_0024.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0025.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0026.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0026.png create mode 100644 files/poketool/trgra/trfgra/narc_0026.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0027.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0028.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0028.png create mode 100644 files/poketool/trgra/trfgra/narc_0028.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0029.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0030.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0030.png create mode 100644 files/poketool/trgra/trfgra/narc_0030.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0031.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0032.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0032.png create mode 100644 files/poketool/trgra/trfgra/narc_0032.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0033.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0034.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0034.png create mode 100644 files/poketool/trgra/trfgra/narc_0034.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0035.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0036.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0036.png create mode 100644 files/poketool/trgra/trfgra/narc_0036.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0037.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0038.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0038.png create mode 100644 files/poketool/trgra/trfgra/narc_0038.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0039.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0040.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0040.png create mode 100644 files/poketool/trgra/trfgra/narc_0040.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0041.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0042.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0042.png create mode 100644 files/poketool/trgra/trfgra/narc_0042.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0043.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0044.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0044.png create mode 100644 files/poketool/trgra/trfgra/narc_0044.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0045.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0046.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0046.png create mode 100644 files/poketool/trgra/trfgra/narc_0046.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0047.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0048.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0048.png create mode 100644 files/poketool/trgra/trfgra/narc_0048.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0049.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0050.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0050.png create mode 100644 files/poketool/trgra/trfgra/narc_0050.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0051.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0052.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0052.png create mode 100644 files/poketool/trgra/trfgra/narc_0052.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0053.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0054.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0054.png create mode 100644 files/poketool/trgra/trfgra/narc_0054.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0055.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0056.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0056.png create mode 100644 files/poketool/trgra/trfgra/narc_0056.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0057.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0058.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0058.png create mode 100644 files/poketool/trgra/trfgra/narc_0058.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0059.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0060.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0060.png create mode 100644 files/poketool/trgra/trfgra/narc_0060.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0061.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0062.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0062.png create mode 100644 files/poketool/trgra/trfgra/narc_0062.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0063.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0064.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0064.png create mode 100644 files/poketool/trgra/trfgra/narc_0064.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0065.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0066.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0066.png create mode 100644 files/poketool/trgra/trfgra/narc_0066.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0067.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0068.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0068.png create mode 100644 files/poketool/trgra/trfgra/narc_0068.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0069.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0070.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0070.png create mode 100644 files/poketool/trgra/trfgra/narc_0070.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0071.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0072.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0072.png create mode 100644 files/poketool/trgra/trfgra/narc_0072.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0073.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0074.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0074.png create mode 100644 files/poketool/trgra/trfgra/narc_0074.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0075.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0076.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0076.png create mode 100644 files/poketool/trgra/trfgra/narc_0076.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0077.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0078.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0078.png create mode 100644 files/poketool/trgra/trfgra/narc_0078.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0079.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0080.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0080.png create mode 100644 files/poketool/trgra/trfgra/narc_0080.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0081.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0082.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0082.png create mode 100644 files/poketool/trgra/trfgra/narc_0082.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0083.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0084.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0084.png create mode 100644 files/poketool/trgra/trfgra/narc_0084.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0085.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0086.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0086.png create mode 100644 files/poketool/trgra/trfgra/narc_0086.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0087.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0088.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0088.png create mode 100644 files/poketool/trgra/trfgra/narc_0088.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0089.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0090.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0090.png create mode 100644 files/poketool/trgra/trfgra/narc_0090.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0091.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0092.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0092.png create mode 100644 files/poketool/trgra/trfgra/narc_0092.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0093.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0094.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0094.png create mode 100644 files/poketool/trgra/trfgra/narc_0094.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0095.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0096.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0096.png create mode 100644 files/poketool/trgra/trfgra/narc_0096.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0097.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0098.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0098.png create mode 100644 files/poketool/trgra/trfgra/narc_0098.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0099.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0100.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0100.png create mode 100644 files/poketool/trgra/trfgra/narc_0100.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0101.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0102.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0102.png create mode 100644 files/poketool/trgra/trfgra/narc_0102.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0103.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0104.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0104.png create mode 100644 files/poketool/trgra/trfgra/narc_0104.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0105.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0106.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0106.png create mode 100644 files/poketool/trgra/trfgra/narc_0106.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0107.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0108.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0108.png create mode 100644 files/poketool/trgra/trfgra/narc_0108.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0109.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0110.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0110.png create mode 100644 files/poketool/trgra/trfgra/narc_0110.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0111.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0112.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0112.png create mode 100644 files/poketool/trgra/trfgra/narc_0112.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0113.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0114.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0114.png create mode 100644 files/poketool/trgra/trfgra/narc_0114.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0115.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0116.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0116.png create mode 100644 files/poketool/trgra/trfgra/narc_0116.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0117.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0118.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0118.png create mode 100644 files/poketool/trgra/trfgra/narc_0118.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0119.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0120.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0120.png create mode 100644 files/poketool/trgra/trfgra/narc_0120.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0121.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0122.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0122.png create mode 100644 files/poketool/trgra/trfgra/narc_0122.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0123.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0124.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0124.png create mode 100644 files/poketool/trgra/trfgra/narc_0124.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0125.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0126.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0126.png create mode 100644 files/poketool/trgra/trfgra/narc_0126.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0127.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0128.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0128.png create mode 100644 files/poketool/trgra/trfgra/narc_0128.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0129.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0130.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0130.png create mode 100644 files/poketool/trgra/trfgra/narc_0130.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0131.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0132.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0132.png create mode 100644 files/poketool/trgra/trfgra/narc_0132.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0133.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0134.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0134.png create mode 100644 files/poketool/trgra/trfgra/narc_0134.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0135.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0136.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0136.png create mode 100644 files/poketool/trgra/trfgra/narc_0136.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0137.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0138.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0138.png create mode 100644 files/poketool/trgra/trfgra/narc_0138.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0139.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0140.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0140.png create mode 100644 files/poketool/trgra/trfgra/narc_0140.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0141.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0142.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0142.png create mode 100644 files/poketool/trgra/trfgra/narc_0142.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0143.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0144.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0144.png create mode 100644 files/poketool/trgra/trfgra/narc_0144.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0145.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0146.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0146.png create mode 100644 files/poketool/trgra/trfgra/narc_0146.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0147.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0148.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0148.png create mode 100644 files/poketool/trgra/trfgra/narc_0148.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0149.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0150.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0150.png create mode 100644 files/poketool/trgra/trfgra/narc_0150.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0151.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0152.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0152.png create mode 100644 files/poketool/trgra/trfgra/narc_0152.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0153.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0154.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0154.png create mode 100644 files/poketool/trgra/trfgra/narc_0154.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0155.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0156.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0156.png create mode 100644 files/poketool/trgra/trfgra/narc_0156.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0157.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0158.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0158.png create mode 100644 files/poketool/trgra/trfgra/narc_0158.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0159.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0160.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0160.png create mode 100644 files/poketool/trgra/trfgra/narc_0160.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0161.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0162.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0162.png create mode 100644 files/poketool/trgra/trfgra/narc_0162.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0163.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0164.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0164.png create mode 100644 files/poketool/trgra/trfgra/narc_0164.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0165.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0166.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0166.png create mode 100644 files/poketool/trgra/trfgra/narc_0166.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0167.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0168.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0168.png create mode 100644 files/poketool/trgra/trfgra/narc_0168.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0169.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0170.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0170.png create mode 100644 files/poketool/trgra/trfgra/narc_0170.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0171.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0172.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0172.png create mode 100644 files/poketool/trgra/trfgra/narc_0172.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0173.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0174.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0174.png create mode 100644 files/poketool/trgra/trfgra/narc_0174.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0175.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0176.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0176.png create mode 100644 files/poketool/trgra/trfgra/narc_0176.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0177.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0178.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0178.png create mode 100644 files/poketool/trgra/trfgra/narc_0178.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0179.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0180.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0180.png create mode 100644 files/poketool/trgra/trfgra/narc_0180.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0181.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0182.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0182.png create mode 100644 files/poketool/trgra/trfgra/narc_0182.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0183.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0184.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0184.png create mode 100644 files/poketool/trgra/trfgra/narc_0184.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0185.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0186.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0186.png create mode 100644 files/poketool/trgra/trfgra/narc_0186.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0187.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0188.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0188.png create mode 100644 files/poketool/trgra/trfgra/narc_0188.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0189.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0190.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0190.png create mode 100644 files/poketool/trgra/trfgra/narc_0190.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0191.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0192.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0192.png create mode 100644 files/poketool/trgra/trfgra/narc_0192.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0193.NCLR delete mode 100644 files/poketool/trgra/trfgra/narc_0194.NCGR create mode 100644 files/poketool/trgra/trfgra/narc_0194.png create mode 100644 files/poketool/trgra/trfgra/narc_0194.png.key delete mode 100644 files/poketool/trgra/trfgra/narc_0195.NCLR diff --git a/Makefile b/Makefile index 37095e69..881aa3a1 100644 --- a/Makefile +++ b/Makefile @@ -247,41 +247,25 @@ PADDED_LZ_FILES := $(addsuffix .lz,$(wildcard \ $(PADDED_LZ_FILES): %.lz: % $(NTRCOMP) -l2 -s -A4 -o $@ $< -%.NCGR: %.png - $(GFX) $< $@ - -$(CLOBBER_SIZE_NCGR_FILES): %.NCGR: %.png - $(GFX) $< $@ -clobbersize +$(CLOBBER_SIZE_NCGR_FILES): GFX_FLAGS = -clobbersize +$(CLOBBER_SIZE_VERSION101_NCGR_FILES): GFX_FLAGS = -clobbersize -version101 +$(VERSION101_SOPC_8BPP_NCGR_FILES): GFX_FLAGS = -version101 -sopc -bitdepth 8 +$(VERSION101_SOPC_NCGR_FILES): GFX_FLAGS = -version101 -sopc +$(SCANNED_NCGR_FILES): GFX_FLAGS = -scanned -$(CLOBBER_SIZE_VERSION101_NCGR_FILES): %.NCGR: %.png - $(GFX) $< $@ -clobbersize -version101 +$(IR_NCLR_FILES): GFX_FLAGS = -ir +$(4BPP_NCLR_FILES): GFX_FLAGS = -bitdepth 4 +$(8BPP_COMP10_NOPAD_NCLR_PNG_FILES): GFX_FLAGS = -bitdepth 8 -nopad -comp 10 +$(8BPP_COMP10_NOPAD_NCLR_PAL_FILES): GFX_FLAGS = -bitdepth 8 -nopad -comp 10 -$(VERSION101_SOPC_8BPP_NCGR_FILES): %.NCGR: %.png - $(GFX) $< $@ -version101 -sopc -bitdepth 8 - -$(VERSION101_SOPC_NCGR_FILES): %.NCGR: %.png - $(GFX) $< $@ -version101 -sopc - -$(SCANNED_NCGR_FILES): %.NCGR: %.png - $(GFX) $< $@ -scanned +%.NCGR: %.png + $(GFX) $< $@ $(GFX_FLAGS) %.NCLR: %.png - $(GFX) $< $@ + $(GFX) $< $@ $(GFX_FLAGS) %.NCLR: %.pal - $(GFX) $< $@ - -$(IR_NCLR_FILES): %.NCLR: %.pal - $(GFX) $< $@ -ir - -$(4BPP_NCLR_FILES): %.NCLR: %.pal - $(GFX) $< $@ -bitdepth 4 - -$(8BPP_COMP10_NOPAD_NCLR_PNG_FILES): %.NCLR: %.png - $(GFX) $< $@ -bitdepth 8 -nopad -comp 10 - -$(8BPP_COMP10_NOPAD_NCLR_PAL_FILES): %.NCLR: %.pal - $(GFX) $< $@ -bitdepth 8 -nopad -comp 10 + $(GFX) $< $@ $(GFX_FLAGS) %.png: ; %.pal: ; diff --git a/files/poketool/trgra/trfgra/.gitignore b/files/poketool/trgra/trfgra/.gitignore new file mode 100644 index 00000000..574e26f1 --- /dev/null +++ b/files/poketool/trgra/trfgra/.gitignore @@ -0,0 +1,2 @@ +*.NCGR +*.NCLR diff --git a/files/poketool/trgra/trfgra/.knarcignore b/files/poketool/trgra/trfgra/.knarcignore index 2856080a..e2f57de1 100644 --- a/files/poketool/trgra/trfgra/.knarcignore +++ b/files/poketool/trgra/trfgra/.knarcignore @@ -1,2 +1,3 @@ *.png *.pal +*.key diff --git a/files/poketool/trgra/trfgra/narc_0000.NCGR b/files/poketool/trgra/trfgra/narc_0000.NCGR deleted file mode 100644 index 27106bd8..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0000.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0000.png b/files/poketool/trgra/trfgra/narc_0000.png new file mode 100644 index 00000000..a3697191 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0000.png differ diff --git a/files/poketool/trgra/trfgra/narc_0000.png.key b/files/poketool/trgra/trfgra/narc_0000.png.key new file mode 100644 index 00000000..27f3bc60 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0000.png.key @@ -0,0 +1 @@ +U–iM \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0001.NCLR b/files/poketool/trgra/trfgra/narc_0001.NCLR deleted file mode 100644 index 39767f84..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0001.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0002.NCGR b/files/poketool/trgra/trfgra/narc_0002.NCGR deleted file mode 100644 index 79fdc9f8..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0002.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0002.png b/files/poketool/trgra/trfgra/narc_0002.png new file mode 100644 index 00000000..d3884147 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0002.png differ diff --git a/files/poketool/trgra/trfgra/narc_0002.png.key b/files/poketool/trgra/trfgra/narc_0002.png.key new file mode 100644 index 00000000..8edc6ad8 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0002.png.key @@ -0,0 +1 @@ +³”#Q \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0003.NCLR b/files/poketool/trgra/trfgra/narc_0003.NCLR deleted file mode 100644 index 1b7a99d8..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0003.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0004.NCGR b/files/poketool/trgra/trfgra/narc_0004.NCGR deleted file mode 100644 index cb4d5f1a..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0004.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0004.png b/files/poketool/trgra/trfgra/narc_0004.png new file mode 100644 index 00000000..384e427b Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0004.png differ diff --git a/files/poketool/trgra/trfgra/narc_0004.png.key b/files/poketool/trgra/trfgra/narc_0004.png.key new file mode 100644 index 00000000..452177ee --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0004.png.key @@ -0,0 +1 @@ +±5… \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0005.NCLR b/files/poketool/trgra/trfgra/narc_0005.NCLR deleted file mode 100644 index bd6f1842..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0005.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0006.NCGR b/files/poketool/trgra/trfgra/narc_0006.NCGR deleted file mode 100644 index e949c790..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0006.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0006.png b/files/poketool/trgra/trfgra/narc_0006.png new file mode 100644 index 00000000..4e85a9d8 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0006.png differ diff --git a/files/poketool/trgra/trfgra/narc_0006.png.key b/files/poketool/trgra/trfgra/narc_0006.png.key new file mode 100644 index 00000000..1beebfd4 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0006.png.key @@ -0,0 +1 @@ +DÆ[ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0007.NCLR b/files/poketool/trgra/trfgra/narc_0007.NCLR deleted file mode 100644 index 271185bb..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0007.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0008.NCGR b/files/poketool/trgra/trfgra/narc_0008.NCGR deleted file mode 100644 index 9257ad95..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0008.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0008.png b/files/poketool/trgra/trfgra/narc_0008.png new file mode 100644 index 00000000..89692564 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0008.png differ diff --git a/files/poketool/trgra/trfgra/narc_0008.png.key b/files/poketool/trgra/trfgra/narc_0008.png.key new file mode 100644 index 00000000..7b12bb1e --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0008.png.key @@ -0,0 +1 @@ +¸¾‡´ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0009.NCLR b/files/poketool/trgra/trfgra/narc_0009.NCLR deleted file mode 100644 index 19e2d3e0..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0009.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0010.NCGR b/files/poketool/trgra/trfgra/narc_0010.NCGR deleted file mode 100644 index 03c61e09..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0010.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0010.png b/files/poketool/trgra/trfgra/narc_0010.png new file mode 100644 index 00000000..677d27e1 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0010.png differ diff --git a/files/poketool/trgra/trfgra/narc_0010.png.key b/files/poketool/trgra/trfgra/narc_0010.png.key new file mode 100644 index 00000000..47f75e91 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0010.png.key @@ -0,0 +1 @@ +®†øi \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0011.NCLR b/files/poketool/trgra/trfgra/narc_0011.NCLR deleted file mode 100644 index 19e2d3e0..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0011.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0012.NCGR b/files/poketool/trgra/trfgra/narc_0012.NCGR deleted file mode 100644 index 16fa29bc..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0012.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0012.png b/files/poketool/trgra/trfgra/narc_0012.png new file mode 100644 index 00000000..64a754c9 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0012.png differ diff --git a/files/poketool/trgra/trfgra/narc_0012.png.key b/files/poketool/trgra/trfgra/narc_0012.png.key new file mode 100644 index 00000000..9f3103d4 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0012.png.key @@ -0,0 +1 @@ +ŽíJ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0013.NCLR b/files/poketool/trgra/trfgra/narc_0013.NCLR deleted file mode 100644 index a181bb3b..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0013.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0014.NCGR b/files/poketool/trgra/trfgra/narc_0014.NCGR deleted file mode 100644 index effa7cab..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0014.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0014.png b/files/poketool/trgra/trfgra/narc_0014.png new file mode 100644 index 00000000..44776c80 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0014.png differ diff --git a/files/poketool/trgra/trfgra/narc_0014.png.key b/files/poketool/trgra/trfgra/narc_0014.png.key new file mode 100644 index 00000000..d3e47553 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0014.png.key @@ -0,0 +1 @@ +(áó \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0015.NCLR b/files/poketool/trgra/trfgra/narc_0015.NCLR deleted file mode 100644 index 58a5f134..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0015.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0016.NCGR b/files/poketool/trgra/trfgra/narc_0016.NCGR deleted file mode 100644 index 35a838ce..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0016.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0016.png b/files/poketool/trgra/trfgra/narc_0016.png new file mode 100644 index 00000000..00d4d114 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0016.png differ diff --git a/files/poketool/trgra/trfgra/narc_0016.png.key b/files/poketool/trgra/trfgra/narc_0016.png.key new file mode 100644 index 00000000..0752801c --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0016.png.key @@ -0,0 +1 @@ +Âhú@ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0017.NCLR b/files/poketool/trgra/trfgra/narc_0017.NCLR deleted file mode 100644 index 15479773..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0017.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0018.NCGR b/files/poketool/trgra/trfgra/narc_0018.NCGR deleted file mode 100644 index cd722711..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0018.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0018.png b/files/poketool/trgra/trfgra/narc_0018.png new file mode 100644 index 00000000..08d15ae1 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0018.png differ diff --git a/files/poketool/trgra/trfgra/narc_0018.png.key b/files/poketool/trgra/trfgra/narc_0018.png.key new file mode 100644 index 00000000..bd29cf8f --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0018.png.key @@ -0,0 +1 @@ +òiD² \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0019.NCLR b/files/poketool/trgra/trfgra/narc_0019.NCLR deleted file mode 100644 index 035cc760..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0019.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0020.NCGR b/files/poketool/trgra/trfgra/narc_0020.NCGR deleted file mode 100644 index d162af3f..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0020.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0020.png b/files/poketool/trgra/trfgra/narc_0020.png new file mode 100644 index 00000000..959dc417 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0020.png differ diff --git a/files/poketool/trgra/trfgra/narc_0020.png.key b/files/poketool/trgra/trfgra/narc_0020.png.key new file mode 100644 index 00000000..cc72787a Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0020.png.key differ diff --git a/files/poketool/trgra/trfgra/narc_0021.NCLR b/files/poketool/trgra/trfgra/narc_0021.NCLR deleted file mode 100644 index 374b174f..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0021.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0022.NCGR b/files/poketool/trgra/trfgra/narc_0022.NCGR deleted file mode 100644 index abc34775..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0022.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0022.png b/files/poketool/trgra/trfgra/narc_0022.png new file mode 100644 index 00000000..944de430 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0022.png differ diff --git a/files/poketool/trgra/trfgra/narc_0022.png.key b/files/poketool/trgra/trfgra/narc_0022.png.key new file mode 100644 index 00000000..b25d83bf --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0022.png.key @@ -0,0 +1 @@ +Èßá( \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0023.NCLR b/files/poketool/trgra/trfgra/narc_0023.NCLR deleted file mode 100644 index 51e77730..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0023.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0024.NCGR b/files/poketool/trgra/trfgra/narc_0024.NCGR deleted file mode 100644 index 862c7235..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0024.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0024.png b/files/poketool/trgra/trfgra/narc_0024.png new file mode 100644 index 00000000..459114e0 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0024.png differ diff --git a/files/poketool/trgra/trfgra/narc_0024.png.key b/files/poketool/trgra/trfgra/narc_0024.png.key new file mode 100644 index 00000000..e26189d0 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0024.png.key @@ -0,0 +1 @@ +Ôü‘ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0025.NCLR b/files/poketool/trgra/trfgra/narc_0025.NCLR deleted file mode 100644 index 72c9b00a..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0025.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0026.NCGR b/files/poketool/trgra/trfgra/narc_0026.NCGR deleted file mode 100644 index 03d50e17..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0026.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0026.png b/files/poketool/trgra/trfgra/narc_0026.png new file mode 100644 index 00000000..8aa5ec86 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0026.png differ diff --git a/files/poketool/trgra/trfgra/narc_0026.png.key b/files/poketool/trgra/trfgra/narc_0026.png.key new file mode 100644 index 00000000..72fe7eb5 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0026.png.key @@ -0,0 +1 @@ +þBi† \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0027.NCLR b/files/poketool/trgra/trfgra/narc_0027.NCLR deleted file mode 100644 index 95d7bead..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0027.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0028.NCGR b/files/poketool/trgra/trfgra/narc_0028.NCGR deleted file mode 100644 index 19600e1f..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0028.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0028.png b/files/poketool/trgra/trfgra/narc_0028.png new file mode 100644 index 00000000..e5eb68dc Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0028.png differ diff --git a/files/poketool/trgra/trfgra/narc_0028.png.key b/files/poketool/trgra/trfgra/narc_0028.png.key new file mode 100644 index 00000000..5b23c46c --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0028.png.key @@ -0,0 +1 @@ +µºB= \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0029.NCLR b/files/poketool/trgra/trfgra/narc_0029.NCLR deleted file mode 100644 index 04876afa..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0029.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0030.NCGR b/files/poketool/trgra/trfgra/narc_0030.NCGR deleted file mode 100644 index 8879be33..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0030.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0030.png b/files/poketool/trgra/trfgra/narc_0030.png new file mode 100644 index 00000000..0baaa549 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0030.png differ diff --git a/files/poketool/trgra/trfgra/narc_0030.png.key b/files/poketool/trgra/trfgra/narc_0030.png.key new file mode 100644 index 00000000..34217f31 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0030.png.key @@ -0,0 +1 @@ +Nù¹ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0031.NCLR b/files/poketool/trgra/trfgra/narc_0031.NCLR deleted file mode 100644 index 942313bb..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0031.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0032.NCGR b/files/poketool/trgra/trfgra/narc_0032.NCGR deleted file mode 100644 index aca48984..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0032.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0032.png b/files/poketool/trgra/trfgra/narc_0032.png new file mode 100644 index 00000000..0befdd00 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0032.png differ diff --git a/files/poketool/trgra/trfgra/narc_0032.png.key b/files/poketool/trgra/trfgra/narc_0032.png.key new file mode 100644 index 00000000..4c6d727a --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0032.png.key @@ -0,0 +1 @@ +IP \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0033.NCLR b/files/poketool/trgra/trfgra/narc_0033.NCLR deleted file mode 100644 index 7e35f20a..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0033.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0034.NCGR b/files/poketool/trgra/trfgra/narc_0034.NCGR deleted file mode 100644 index 17143772..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0034.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0034.png b/files/poketool/trgra/trfgra/narc_0034.png new file mode 100644 index 00000000..4e047065 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0034.png differ diff --git a/files/poketool/trgra/trfgra/narc_0034.png.key b/files/poketool/trgra/trfgra/narc_0034.png.key new file mode 100644 index 00000000..7d4709de --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0034.png.key @@ -0,0 +1 @@ +гû$ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0035.NCLR b/files/poketool/trgra/trfgra/narc_0035.NCLR deleted file mode 100644 index 7e35f20a..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0035.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0036.NCGR b/files/poketool/trgra/trfgra/narc_0036.NCGR deleted file mode 100644 index 469cc58f..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0036.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0036.png b/files/poketool/trgra/trfgra/narc_0036.png new file mode 100644 index 00000000..6ad45920 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0036.png differ diff --git a/files/poketool/trgra/trfgra/narc_0036.png.key b/files/poketool/trgra/trfgra/narc_0036.png.key new file mode 100644 index 00000000..60024060 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0036.png.key @@ -0,0 +1 @@ +ÏÍŸ diff --git a/files/poketool/trgra/trfgra/narc_0037.NCLR b/files/poketool/trgra/trfgra/narc_0037.NCLR deleted file mode 100644 index ccd7932a..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0037.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0038.NCGR b/files/poketool/trgra/trfgra/narc_0038.NCGR deleted file mode 100644 index 6e209160..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0038.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0038.png b/files/poketool/trgra/trfgra/narc_0038.png new file mode 100644 index 00000000..d6b7af72 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0038.png differ diff --git a/files/poketool/trgra/trfgra/narc_0038.png.key b/files/poketool/trgra/trfgra/narc_0038.png.key new file mode 100644 index 00000000..e13bfd3a --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0038.png.key @@ -0,0 +1 @@ +­€‚ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0039.NCLR b/files/poketool/trgra/trfgra/narc_0039.NCLR deleted file mode 100644 index e01c24d8..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0039.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0040.NCGR b/files/poketool/trgra/trfgra/narc_0040.NCGR deleted file mode 100644 index 5640ef45..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0040.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0040.png b/files/poketool/trgra/trfgra/narc_0040.png new file mode 100644 index 00000000..4d3412bd Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0040.png differ diff --git a/files/poketool/trgra/trfgra/narc_0040.png.key b/files/poketool/trgra/trfgra/narc_0040.png.key new file mode 100644 index 00000000..3302d961 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0040.png.key @@ -0,0 +1 @@ + 6”¢ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0041.NCLR b/files/poketool/trgra/trfgra/narc_0041.NCLR deleted file mode 100644 index d206e05d..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0041.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0042.NCGR b/files/poketool/trgra/trfgra/narc_0042.NCGR deleted file mode 100644 index 53cf9e9a..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0042.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0042.png b/files/poketool/trgra/trfgra/narc_0042.png new file mode 100644 index 00000000..06b3f610 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0042.png differ diff --git a/files/poketool/trgra/trfgra/narc_0042.png.key b/files/poketool/trgra/trfgra/narc_0042.png.key new file mode 100644 index 00000000..ddc4a060 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0042.png.key @@ -0,0 +1 @@ +Þv • \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0043.NCLR b/files/poketool/trgra/trfgra/narc_0043.NCLR deleted file mode 100644 index f93659ef..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0043.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0044.NCGR b/files/poketool/trgra/trfgra/narc_0044.NCGR deleted file mode 100644 index ae754e4f..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0044.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0044.png b/files/poketool/trgra/trfgra/narc_0044.png new file mode 100644 index 00000000..b0a032e2 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0044.png differ diff --git a/files/poketool/trgra/trfgra/narc_0044.png.key b/files/poketool/trgra/trfgra/narc_0044.png.key new file mode 100644 index 00000000..c66824a4 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0044.png.key @@ -0,0 +1 @@ +#%d \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0045.NCLR b/files/poketool/trgra/trfgra/narc_0045.NCLR deleted file mode 100644 index 265abe70..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0045.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0046.NCGR b/files/poketool/trgra/trfgra/narc_0046.NCGR deleted file mode 100644 index 62fe95bd..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0046.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0046.png b/files/poketool/trgra/trfgra/narc_0046.png new file mode 100644 index 00000000..06b42835 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0046.png differ diff --git a/files/poketool/trgra/trfgra/narc_0046.png.key b/files/poketool/trgra/trfgra/narc_0046.png.key new file mode 100644 index 00000000..ce29ce8d --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0046.png.key @@ -0,0 +1 @@ +fÇÕ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0047.NCLR b/files/poketool/trgra/trfgra/narc_0047.NCLR deleted file mode 100644 index 3550d1d4..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0047.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0048.NCGR b/files/poketool/trgra/trfgra/narc_0048.NCGR deleted file mode 100644 index 95b9510d..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0048.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0048.png b/files/poketool/trgra/trfgra/narc_0048.png new file mode 100644 index 00000000..da0956dd Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0048.png differ diff --git a/files/poketool/trgra/trfgra/narc_0048.png.key b/files/poketool/trgra/trfgra/narc_0048.png.key new file mode 100644 index 00000000..91d2dc55 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0048.png.key @@ -0,0 +1 @@ +QÖCX \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0049.NCLR b/files/poketool/trgra/trfgra/narc_0049.NCLR deleted file mode 100644 index 051c4dda..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0049.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0050.NCGR b/files/poketool/trgra/trfgra/narc_0050.NCGR deleted file mode 100644 index 904b2cec..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0050.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0050.png b/files/poketool/trgra/trfgra/narc_0050.png new file mode 100644 index 00000000..e982ba42 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0050.png differ diff --git a/files/poketool/trgra/trfgra/narc_0050.png.key b/files/poketool/trgra/trfgra/narc_0050.png.key new file mode 100644 index 00000000..317c54ee --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0050.png.key @@ -0,0 +1 @@ +cùtR \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0051.NCLR b/files/poketool/trgra/trfgra/narc_0051.NCLR deleted file mode 100644 index 051c4dda..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0051.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0052.NCGR b/files/poketool/trgra/trfgra/narc_0052.NCGR deleted file mode 100644 index ecefa7d1..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0052.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0052.png b/files/poketool/trgra/trfgra/narc_0052.png new file mode 100644 index 00000000..c2ec9802 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0052.png differ diff --git a/files/poketool/trgra/trfgra/narc_0052.png.key b/files/poketool/trgra/trfgra/narc_0052.png.key new file mode 100644 index 00000000..3542eb7d Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0052.png.key differ diff --git a/files/poketool/trgra/trfgra/narc_0053.NCLR b/files/poketool/trgra/trfgra/narc_0053.NCLR deleted file mode 100644 index 770f2374..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0053.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0054.NCGR b/files/poketool/trgra/trfgra/narc_0054.NCGR deleted file mode 100644 index 115e4e30..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0054.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0054.png b/files/poketool/trgra/trfgra/narc_0054.png new file mode 100644 index 00000000..4ddb1e0f Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0054.png differ diff --git a/files/poketool/trgra/trfgra/narc_0054.png.key b/files/poketool/trgra/trfgra/narc_0054.png.key new file mode 100644 index 00000000..b498a45e --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0054.png.key @@ -0,0 +1 @@ +kUyX \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0055.NCLR b/files/poketool/trgra/trfgra/narc_0055.NCLR deleted file mode 100644 index 9085fbff..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0055.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0056.NCGR b/files/poketool/trgra/trfgra/narc_0056.NCGR deleted file mode 100644 index e829f881..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0056.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0056.png b/files/poketool/trgra/trfgra/narc_0056.png new file mode 100644 index 00000000..600b10fb Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0056.png differ diff --git a/files/poketool/trgra/trfgra/narc_0056.png.key b/files/poketool/trgra/trfgra/narc_0056.png.key new file mode 100644 index 00000000..e5607918 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0056.png.key @@ -0,0 +1 @@ +Žv¨ä \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0057.NCLR b/files/poketool/trgra/trfgra/narc_0057.NCLR deleted file mode 100644 index 948b7cb5..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0057.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0058.NCGR b/files/poketool/trgra/trfgra/narc_0058.NCGR deleted file mode 100644 index 9629d039..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0058.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0058.png b/files/poketool/trgra/trfgra/narc_0058.png new file mode 100644 index 00000000..809a5f3a Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0058.png differ diff --git a/files/poketool/trgra/trfgra/narc_0058.png.key b/files/poketool/trgra/trfgra/narc_0058.png.key new file mode 100644 index 00000000..ed2dd31a --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0058.png.key @@ -0,0 +1 @@ +î÷º \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0059.NCLR b/files/poketool/trgra/trfgra/narc_0059.NCLR deleted file mode 100644 index 0d74038d..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0059.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0060.NCGR b/files/poketool/trgra/trfgra/narc_0060.NCGR deleted file mode 100644 index 8cd4f655..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0060.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0060.png b/files/poketool/trgra/trfgra/narc_0060.png new file mode 100644 index 00000000..ab4a3955 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0060.png differ diff --git a/files/poketool/trgra/trfgra/narc_0060.png.key b/files/poketool/trgra/trfgra/narc_0060.png.key new file mode 100644 index 00000000..cd302f5d --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0060.png.key @@ -0,0 +1 @@ +G¯VS \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0061.NCLR b/files/poketool/trgra/trfgra/narc_0061.NCLR deleted file mode 100644 index f6a6429d..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0061.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0062.NCGR b/files/poketool/trgra/trfgra/narc_0062.NCGR deleted file mode 100644 index d36a76e3..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0062.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0062.png b/files/poketool/trgra/trfgra/narc_0062.png new file mode 100644 index 00000000..99b03a45 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0062.png differ diff --git a/files/poketool/trgra/trfgra/narc_0062.png.key b/files/poketool/trgra/trfgra/narc_0062.png.key new file mode 100644 index 00000000..86aa7970 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0062.png.key @@ -0,0 +1 @@ +íJw… \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0063.NCLR b/files/poketool/trgra/trfgra/narc_0063.NCLR deleted file mode 100644 index 051c4dda..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0063.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0064.NCGR b/files/poketool/trgra/trfgra/narc_0064.NCGR deleted file mode 100644 index 2162ac1c..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0064.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0064.png b/files/poketool/trgra/trfgra/narc_0064.png new file mode 100644 index 00000000..a3c15ec4 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0064.png differ diff --git a/files/poketool/trgra/trfgra/narc_0064.png.key b/files/poketool/trgra/trfgra/narc_0064.png.key new file mode 100644 index 00000000..0d10d767 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0064.png.key @@ -0,0 +1 @@ +çÝ£ä \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0065.NCLR b/files/poketool/trgra/trfgra/narc_0065.NCLR deleted file mode 100644 index 21acbb13..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0065.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0066.NCGR b/files/poketool/trgra/trfgra/narc_0066.NCGR deleted file mode 100644 index df884ef1..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0066.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0066.png b/files/poketool/trgra/trfgra/narc_0066.png new file mode 100644 index 00000000..65fd1a5e Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0066.png differ diff --git a/files/poketool/trgra/trfgra/narc_0066.png.key b/files/poketool/trgra/trfgra/narc_0066.png.key new file mode 100644 index 00000000..0123d39f --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0066.png.key @@ -0,0 +1 @@ +?‰¾f \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0067.NCLR b/files/poketool/trgra/trfgra/narc_0067.NCLR deleted file mode 100644 index 21acbb13..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0067.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0068.NCGR b/files/poketool/trgra/trfgra/narc_0068.NCGR deleted file mode 100644 index fa941f1d..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0068.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0068.png b/files/poketool/trgra/trfgra/narc_0068.png new file mode 100644 index 00000000..51e71a5a Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0068.png differ diff --git a/files/poketool/trgra/trfgra/narc_0068.png.key b/files/poketool/trgra/trfgra/narc_0068.png.key new file mode 100644 index 00000000..d0c44e3e --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0068.png.key @@ -0,0 +1 @@ +ÀÖê \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0069.NCLR b/files/poketool/trgra/trfgra/narc_0069.NCLR deleted file mode 100644 index d36b2095..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0069.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0070.NCGR b/files/poketool/trgra/trfgra/narc_0070.NCGR deleted file mode 100644 index dbd36211..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0070.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0070.png b/files/poketool/trgra/trfgra/narc_0070.png new file mode 100644 index 00000000..79d2779d Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0070.png differ diff --git a/files/poketool/trgra/trfgra/narc_0070.png.key b/files/poketool/trgra/trfgra/narc_0070.png.key new file mode 100644 index 00000000..58084ff9 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0070.png.key @@ -0,0 +1 @@ + ¾¢0 \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0071.NCLR b/files/poketool/trgra/trfgra/narc_0071.NCLR deleted file mode 100644 index 7d585d28..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0071.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0072.NCGR b/files/poketool/trgra/trfgra/narc_0072.NCGR deleted file mode 100644 index 626fb596..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0072.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0072.png b/files/poketool/trgra/trfgra/narc_0072.png new file mode 100644 index 00000000..f8f854ed Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0072.png differ diff --git a/files/poketool/trgra/trfgra/narc_0072.png.key b/files/poketool/trgra/trfgra/narc_0072.png.key new file mode 100644 index 00000000..8137cea7 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0072.png.key @@ -0,0 +1 @@ +Uû³ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0073.NCLR b/files/poketool/trgra/trfgra/narc_0073.NCLR deleted file mode 100644 index 50a61a7b..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0073.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0074.NCGR b/files/poketool/trgra/trfgra/narc_0074.NCGR deleted file mode 100644 index f371712e..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0074.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0074.png b/files/poketool/trgra/trfgra/narc_0074.png new file mode 100644 index 00000000..f852ec6b Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0074.png differ diff --git a/files/poketool/trgra/trfgra/narc_0074.png.key b/files/poketool/trgra/trfgra/narc_0074.png.key new file mode 100644 index 00000000..92ca7f70 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0074.png.key @@ -0,0 +1 @@ +%êI8 \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0075.NCLR b/files/poketool/trgra/trfgra/narc_0075.NCLR deleted file mode 100644 index f30527a5..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0075.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0076.NCGR b/files/poketool/trgra/trfgra/narc_0076.NCGR deleted file mode 100644 index 8777c8ba..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0076.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0076.png b/files/poketool/trgra/trfgra/narc_0076.png new file mode 100644 index 00000000..cc986e83 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0076.png differ diff --git a/files/poketool/trgra/trfgra/narc_0076.png.key b/files/poketool/trgra/trfgra/narc_0076.png.key new file mode 100644 index 00000000..ebb8cc6b --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0076.png.key @@ -0,0 +1 @@ +(¾-¥ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0077.NCLR b/files/poketool/trgra/trfgra/narc_0077.NCLR deleted file mode 100644 index 4e51e7b2..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0077.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0078.NCGR b/files/poketool/trgra/trfgra/narc_0078.NCGR deleted file mode 100644 index a3d4d2fb..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0078.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0078.png b/files/poketool/trgra/trfgra/narc_0078.png new file mode 100644 index 00000000..db0239b4 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0078.png differ diff --git a/files/poketool/trgra/trfgra/narc_0078.png.key b/files/poketool/trgra/trfgra/narc_0078.png.key new file mode 100644 index 00000000..cc8e78ef --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0078.png.key @@ -0,0 +1 @@ +ÁÔh] \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0079.NCLR b/files/poketool/trgra/trfgra/narc_0079.NCLR deleted file mode 100644 index 1674181a..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0079.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0080.NCGR b/files/poketool/trgra/trfgra/narc_0080.NCGR deleted file mode 100644 index dabef01e..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0080.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0080.png b/files/poketool/trgra/trfgra/narc_0080.png new file mode 100644 index 00000000..24448da2 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0080.png differ diff --git a/files/poketool/trgra/trfgra/narc_0080.png.key b/files/poketool/trgra/trfgra/narc_0080.png.key new file mode 100644 index 00000000..302ff9c5 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0080.png.key @@ -0,0 +1 @@ +òw`¯ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0081.NCLR b/files/poketool/trgra/trfgra/narc_0081.NCLR deleted file mode 100644 index 1674181a..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0081.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0082.NCGR b/files/poketool/trgra/trfgra/narc_0082.NCGR deleted file mode 100644 index f6e1960b..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0082.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0082.png b/files/poketool/trgra/trfgra/narc_0082.png new file mode 100644 index 00000000..99abb984 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0082.png differ diff --git a/files/poketool/trgra/trfgra/narc_0082.png.key b/files/poketool/trgra/trfgra/narc_0082.png.key new file mode 100644 index 00000000..1407d70c --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0082.png.key @@ -0,0 +1 @@ +äOKç \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0083.NCLR b/files/poketool/trgra/trfgra/narc_0083.NCLR deleted file mode 100644 index db48f74d..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0083.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0084.NCGR b/files/poketool/trgra/trfgra/narc_0084.NCGR deleted file mode 100644 index 363af02c..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0084.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0084.png b/files/poketool/trgra/trfgra/narc_0084.png new file mode 100644 index 00000000..65b23406 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0084.png differ diff --git a/files/poketool/trgra/trfgra/narc_0084.png.key b/files/poketool/trgra/trfgra/narc_0084.png.key new file mode 100644 index 00000000..d5475448 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0084.png.key @@ -0,0 +1 @@ +wTéë \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0085.NCLR b/files/poketool/trgra/trfgra/narc_0085.NCLR deleted file mode 100644 index 02dfa286..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0085.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0086.NCGR b/files/poketool/trgra/trfgra/narc_0086.NCGR deleted file mode 100644 index 18d81872..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0086.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0086.png b/files/poketool/trgra/trfgra/narc_0086.png new file mode 100644 index 00000000..b6d9f4d7 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0086.png differ diff --git a/files/poketool/trgra/trfgra/narc_0086.png.key b/files/poketool/trgra/trfgra/narc_0086.png.key new file mode 100644 index 00000000..5ea24341 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0086.png.key @@ -0,0 +1 @@ +ެ| \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0087.NCLR b/files/poketool/trgra/trfgra/narc_0087.NCLR deleted file mode 100644 index 1cb4427b..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0087.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0088.NCGR b/files/poketool/trgra/trfgra/narc_0088.NCGR deleted file mode 100644 index 718da8a3..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0088.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0088.png b/files/poketool/trgra/trfgra/narc_0088.png new file mode 100644 index 00000000..80a5e390 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0088.png differ diff --git a/files/poketool/trgra/trfgra/narc_0088.png.key b/files/poketool/trgra/trfgra/narc_0088.png.key new file mode 100644 index 00000000..a5b0455c --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0088.png.key @@ -0,0 +1 @@ +Èðà \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0089.NCLR b/files/poketool/trgra/trfgra/narc_0089.NCLR deleted file mode 100644 index 0735090a..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0089.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0090.NCGR b/files/poketool/trgra/trfgra/narc_0090.NCGR deleted file mode 100644 index b0ce6781..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0090.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0090.png b/files/poketool/trgra/trfgra/narc_0090.png new file mode 100644 index 00000000..ae518f3e Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0090.png differ diff --git a/files/poketool/trgra/trfgra/narc_0090.png.key b/files/poketool/trgra/trfgra/narc_0090.png.key new file mode 100644 index 00000000..203f0ebd --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0090.png.key @@ -0,0 +1 @@ +GZ-y \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0091.NCLR b/files/poketool/trgra/trfgra/narc_0091.NCLR deleted file mode 100644 index e8bd9b49..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0091.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0092.NCGR b/files/poketool/trgra/trfgra/narc_0092.NCGR deleted file mode 100644 index 19e34ae3..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0092.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0092.png b/files/poketool/trgra/trfgra/narc_0092.png new file mode 100644 index 00000000..64dece43 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0092.png differ diff --git a/files/poketool/trgra/trfgra/narc_0092.png.key b/files/poketool/trgra/trfgra/narc_0092.png.key new file mode 100644 index 00000000..3aeb3c83 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0092.png.key @@ -0,0 +1 @@ + ö \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0093.NCLR b/files/poketool/trgra/trfgra/narc_0093.NCLR deleted file mode 100644 index 15e25651..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0093.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0094.NCGR b/files/poketool/trgra/trfgra/narc_0094.NCGR deleted file mode 100644 index 285b69a9..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0094.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0094.png b/files/poketool/trgra/trfgra/narc_0094.png new file mode 100644 index 00000000..4a7fc118 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0094.png differ diff --git a/files/poketool/trgra/trfgra/narc_0094.png.key b/files/poketool/trgra/trfgra/narc_0094.png.key new file mode 100644 index 00000000..30d16de4 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0094.png.key @@ -0,0 +1 @@ +^ þ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0095.NCLR b/files/poketool/trgra/trfgra/narc_0095.NCLR deleted file mode 100644 index 02dfa286..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0095.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0096.NCGR b/files/poketool/trgra/trfgra/narc_0096.NCGR deleted file mode 100644 index 96d88b79..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0096.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0096.png b/files/poketool/trgra/trfgra/narc_0096.png new file mode 100644 index 00000000..2b4e4cb4 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0096.png differ diff --git a/files/poketool/trgra/trfgra/narc_0096.png.key b/files/poketool/trgra/trfgra/narc_0096.png.key new file mode 100644 index 00000000..fce9fde2 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0096.png.key @@ -0,0 +1 @@ +xòŽ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0097.NCLR b/files/poketool/trgra/trfgra/narc_0097.NCLR deleted file mode 100644 index 68734880..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0097.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0098.NCGR b/files/poketool/trgra/trfgra/narc_0098.NCGR deleted file mode 100644 index b3ce98d0..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0098.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0098.png b/files/poketool/trgra/trfgra/narc_0098.png new file mode 100644 index 00000000..25acd449 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0098.png differ diff --git a/files/poketool/trgra/trfgra/narc_0098.png.key b/files/poketool/trgra/trfgra/narc_0098.png.key new file mode 100644 index 00000000..fad10498 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0098.png.key @@ -0,0 +1 @@ +›Àk \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0099.NCLR b/files/poketool/trgra/trfgra/narc_0099.NCLR deleted file mode 100644 index 88933a74..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0099.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0100.NCGR b/files/poketool/trgra/trfgra/narc_0100.NCGR deleted file mode 100644 index 552ae7fe..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0100.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0100.png b/files/poketool/trgra/trfgra/narc_0100.png new file mode 100644 index 00000000..89793875 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0100.png differ diff --git a/files/poketool/trgra/trfgra/narc_0100.png.key b/files/poketool/trgra/trfgra/narc_0100.png.key new file mode 100644 index 00000000..62528b9a --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0100.png.key @@ -0,0 +1 @@ +-Óç \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0101.NCLR b/files/poketool/trgra/trfgra/narc_0101.NCLR deleted file mode 100644 index 88933a74..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0101.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0102.NCGR b/files/poketool/trgra/trfgra/narc_0102.NCGR deleted file mode 100644 index dfd47116..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0102.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0102.png b/files/poketool/trgra/trfgra/narc_0102.png new file mode 100644 index 00000000..f8519a31 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0102.png differ diff --git a/files/poketool/trgra/trfgra/narc_0102.png.key b/files/poketool/trgra/trfgra/narc_0102.png.key new file mode 100644 index 00000000..340d73e1 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0102.png.key @@ -0,0 +1 @@ +õØÞl \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0103.NCLR b/files/poketool/trgra/trfgra/narc_0103.NCLR deleted file mode 100644 index 32c5f4c2..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0103.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0104.NCGR b/files/poketool/trgra/trfgra/narc_0104.NCGR deleted file mode 100644 index 20c5c0a0..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0104.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0104.png b/files/poketool/trgra/trfgra/narc_0104.png new file mode 100644 index 00000000..100e5a92 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0104.png differ diff --git a/files/poketool/trgra/trfgra/narc_0104.png.key b/files/poketool/trgra/trfgra/narc_0104.png.key new file mode 100644 index 00000000..d51bb41b --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0104.png.key @@ -0,0 +1 @@ +v+®Í \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0105.NCLR b/files/poketool/trgra/trfgra/narc_0105.NCLR deleted file mode 100644 index 1390fbff..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0105.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0106.NCGR b/files/poketool/trgra/trfgra/narc_0106.NCGR deleted file mode 100644 index 0b4fb099..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0106.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0106.png b/files/poketool/trgra/trfgra/narc_0106.png new file mode 100644 index 00000000..7b21d535 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0106.png differ diff --git a/files/poketool/trgra/trfgra/narc_0106.png.key b/files/poketool/trgra/trfgra/narc_0106.png.key new file mode 100644 index 00000000..79292afb --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0106.png.key @@ -0,0 +1 @@ +Úy€ˆ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0107.NCLR b/files/poketool/trgra/trfgra/narc_0107.NCLR deleted file mode 100644 index 75100bd4..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0107.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0108.NCGR b/files/poketool/trgra/trfgra/narc_0108.NCGR deleted file mode 100644 index 9aba3288..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0108.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0108.png b/files/poketool/trgra/trfgra/narc_0108.png new file mode 100644 index 00000000..7b99ebaf Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0108.png differ diff --git a/files/poketool/trgra/trfgra/narc_0108.png.key b/files/poketool/trgra/trfgra/narc_0108.png.key new file mode 100644 index 00000000..2aff56fe --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0108.png.key @@ -0,0 +1 @@ +kº \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0109.NCLR b/files/poketool/trgra/trfgra/narc_0109.NCLR deleted file mode 100644 index 75100bd4..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0109.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0110.NCGR b/files/poketool/trgra/trfgra/narc_0110.NCGR deleted file mode 100644 index 26ecb3a2..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0110.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0110.png b/files/poketool/trgra/trfgra/narc_0110.png new file mode 100644 index 00000000..aacf71bc Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0110.png differ diff --git a/files/poketool/trgra/trfgra/narc_0110.png.key b/files/poketool/trgra/trfgra/narc_0110.png.key new file mode 100644 index 00000000..d56b9783 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0110.png.key differ diff --git a/files/poketool/trgra/trfgra/narc_0111.NCLR b/files/poketool/trgra/trfgra/narc_0111.NCLR deleted file mode 100644 index c9627206..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0111.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0112.NCGR b/files/poketool/trgra/trfgra/narc_0112.NCGR deleted file mode 100644 index 9a07fc2b..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0112.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0112.png b/files/poketool/trgra/trfgra/narc_0112.png new file mode 100644 index 00000000..0e707037 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0112.png differ diff --git a/files/poketool/trgra/trfgra/narc_0112.png.key b/files/poketool/trgra/trfgra/narc_0112.png.key new file mode 100644 index 00000000..362966cd --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0112.png.key @@ -0,0 +1 @@ +‹Ü7Å \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0113.NCLR b/files/poketool/trgra/trfgra/narc_0113.NCLR deleted file mode 100644 index 6ca50fc5..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0113.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0114.NCGR b/files/poketool/trgra/trfgra/narc_0114.NCGR deleted file mode 100644 index b47f7cb0..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0114.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0114.png b/files/poketool/trgra/trfgra/narc_0114.png new file mode 100644 index 00000000..eda17700 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0114.png differ diff --git a/files/poketool/trgra/trfgra/narc_0114.png.key b/files/poketool/trgra/trfgra/narc_0114.png.key new file mode 100644 index 00000000..511d31fc --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0114.png.key @@ -0,0 +1 @@ +ž½G \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0115.NCLR b/files/poketool/trgra/trfgra/narc_0115.NCLR deleted file mode 100644 index ce59bffb..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0115.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0116.NCGR b/files/poketool/trgra/trfgra/narc_0116.NCGR deleted file mode 100644 index 145a3cb0..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0116.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0116.png b/files/poketool/trgra/trfgra/narc_0116.png new file mode 100644 index 00000000..c0969fd0 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0116.png differ diff --git a/files/poketool/trgra/trfgra/narc_0116.png.key b/files/poketool/trgra/trfgra/narc_0116.png.key new file mode 100644 index 00000000..b24d47ef --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0116.png.key @@ -0,0 +1 @@ +·>_ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0117.NCLR b/files/poketool/trgra/trfgra/narc_0117.NCLR deleted file mode 100644 index 4ba1abd4..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0117.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0118.NCGR b/files/poketool/trgra/trfgra/narc_0118.NCGR deleted file mode 100644 index d994283d..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0118.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0118.png b/files/poketool/trgra/trfgra/narc_0118.png new file mode 100644 index 00000000..46254918 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0118.png differ diff --git a/files/poketool/trgra/trfgra/narc_0118.png.key b/files/poketool/trgra/trfgra/narc_0118.png.key new file mode 100644 index 00000000..65da082e --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0118.png.key @@ -0,0 +1 @@ +6"» \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0119.NCLR b/files/poketool/trgra/trfgra/narc_0119.NCLR deleted file mode 100644 index 2ba10607..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0119.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0120.NCGR b/files/poketool/trgra/trfgra/narc_0120.NCGR deleted file mode 100644 index fe8c7cff..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0120.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0120.png b/files/poketool/trgra/trfgra/narc_0120.png new file mode 100644 index 00000000..17b39780 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0120.png differ diff --git a/files/poketool/trgra/trfgra/narc_0120.png.key b/files/poketool/trgra/trfgra/narc_0120.png.key new file mode 100644 index 00000000..cb351a25 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0120.png.key @@ -0,0 +1 @@ +Ówš \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0121.NCLR b/files/poketool/trgra/trfgra/narc_0121.NCLR deleted file mode 100644 index cb318ce6..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0121.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0122.NCGR b/files/poketool/trgra/trfgra/narc_0122.NCGR deleted file mode 100644 index d64e17c5..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0122.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0122.png b/files/poketool/trgra/trfgra/narc_0122.png new file mode 100644 index 00000000..2d479c0a Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0122.png differ diff --git a/files/poketool/trgra/trfgra/narc_0122.png.key b/files/poketool/trgra/trfgra/narc_0122.png.key new file mode 100644 index 00000000..906d4eb2 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0122.png.key @@ -0,0 +1 @@ +¨¯Qó \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0123.NCLR b/files/poketool/trgra/trfgra/narc_0123.NCLR deleted file mode 100644 index 36779d7d..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0123.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0124.NCGR b/files/poketool/trgra/trfgra/narc_0124.NCGR deleted file mode 100644 index 72e6e8aa..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0124.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0124.png b/files/poketool/trgra/trfgra/narc_0124.png new file mode 100644 index 00000000..debfab77 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0124.png differ diff --git a/files/poketool/trgra/trfgra/narc_0124.png.key b/files/poketool/trgra/trfgra/narc_0124.png.key new file mode 100644 index 00000000..5cf615fc --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0124.png.key @@ -0,0 +1 @@ +‹œ·d \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0125.NCLR b/files/poketool/trgra/trfgra/narc_0125.NCLR deleted file mode 100644 index 586fc38f..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0125.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0126.NCGR b/files/poketool/trgra/trfgra/narc_0126.NCGR deleted file mode 100644 index 76ba8f6d..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0126.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0126.png b/files/poketool/trgra/trfgra/narc_0126.png new file mode 100644 index 00000000..d623f26d Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0126.png differ diff --git a/files/poketool/trgra/trfgra/narc_0126.png.key b/files/poketool/trgra/trfgra/narc_0126.png.key new file mode 100644 index 00000000..62d4dfac --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0126.png.key @@ -0,0 +1 @@ + Éw® \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0127.NCLR b/files/poketool/trgra/trfgra/narc_0127.NCLR deleted file mode 100644 index 721af9f4..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0127.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0128.NCGR b/files/poketool/trgra/trfgra/narc_0128.NCGR deleted file mode 100644 index 2afc728f..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0128.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0128.png b/files/poketool/trgra/trfgra/narc_0128.png new file mode 100644 index 00000000..db2cd7b1 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0128.png differ diff --git a/files/poketool/trgra/trfgra/narc_0128.png.key b/files/poketool/trgra/trfgra/narc_0128.png.key new file mode 100644 index 00000000..2dfd458b --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0128.png.key @@ -0,0 +1 @@ +Kîú› \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0129.NCLR b/files/poketool/trgra/trfgra/narc_0129.NCLR deleted file mode 100644 index e33c7b5f..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0129.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0130.NCGR b/files/poketool/trgra/trfgra/narc_0130.NCGR deleted file mode 100644 index d2c201ae..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0130.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0130.png b/files/poketool/trgra/trfgra/narc_0130.png new file mode 100644 index 00000000..dcd5c7df Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0130.png differ diff --git a/files/poketool/trgra/trfgra/narc_0130.png.key b/files/poketool/trgra/trfgra/narc_0130.png.key new file mode 100644 index 00000000..5e946d61 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0130.png.key @@ -0,0 +1 @@ +ó3O \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0131.NCLR b/files/poketool/trgra/trfgra/narc_0131.NCLR deleted file mode 100644 index 58f5cbeb..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0131.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0132.NCGR b/files/poketool/trgra/trfgra/narc_0132.NCGR deleted file mode 100644 index ee359481..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0132.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0132.png b/files/poketool/trgra/trfgra/narc_0132.png new file mode 100644 index 00000000..0a85e8ae Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0132.png differ diff --git a/files/poketool/trgra/trfgra/narc_0132.png.key b/files/poketool/trgra/trfgra/narc_0132.png.key new file mode 100644 index 00000000..843167b5 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0132.png.key @@ -0,0 +1 @@ +– ó \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0133.NCLR b/files/poketool/trgra/trfgra/narc_0133.NCLR deleted file mode 100644 index 5df0d372..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0133.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0134.NCGR b/files/poketool/trgra/trfgra/narc_0134.NCGR deleted file mode 100644 index a201f100..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0134.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0134.png b/files/poketool/trgra/trfgra/narc_0134.png new file mode 100644 index 00000000..5625ad76 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0134.png differ diff --git a/files/poketool/trgra/trfgra/narc_0134.png.key b/files/poketool/trgra/trfgra/narc_0134.png.key new file mode 100644 index 00000000..099bebd5 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0134.png.key @@ -0,0 +1 @@ +ß<–Ü \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0135.NCLR b/files/poketool/trgra/trfgra/narc_0135.NCLR deleted file mode 100644 index c6fda897..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0135.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0136.NCGR b/files/poketool/trgra/trfgra/narc_0136.NCGR deleted file mode 100644 index 7403c289..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0136.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0136.png b/files/poketool/trgra/trfgra/narc_0136.png new file mode 100644 index 00000000..ddd6c1e3 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0136.png differ diff --git a/files/poketool/trgra/trfgra/narc_0136.png.key b/files/poketool/trgra/trfgra/narc_0136.png.key new file mode 100644 index 00000000..8cdc10c5 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0136.png.key @@ -0,0 +1 @@ +4÷ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0137.NCLR b/files/poketool/trgra/trfgra/narc_0137.NCLR deleted file mode 100644 index 072ff248..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0137.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0138.NCGR b/files/poketool/trgra/trfgra/narc_0138.NCGR deleted file mode 100644 index fa8be424..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0138.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0138.png b/files/poketool/trgra/trfgra/narc_0138.png new file mode 100644 index 00000000..8d76dda4 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0138.png differ diff --git a/files/poketool/trgra/trfgra/narc_0138.png.key b/files/poketool/trgra/trfgra/narc_0138.png.key new file mode 100644 index 00000000..ffae14e8 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0138.png.key @@ -0,0 +1 @@ +Uí—„ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0139.NCLR b/files/poketool/trgra/trfgra/narc_0139.NCLR deleted file mode 100644 index 372c1289..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0139.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0140.NCGR b/files/poketool/trgra/trfgra/narc_0140.NCGR deleted file mode 100644 index ef2a9378..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0140.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0140.png b/files/poketool/trgra/trfgra/narc_0140.png new file mode 100644 index 00000000..fb71ab7a Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0140.png differ diff --git a/files/poketool/trgra/trfgra/narc_0140.png.key b/files/poketool/trgra/trfgra/narc_0140.png.key new file mode 100644 index 00000000..546114af --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0140.png.key @@ -0,0 +1 @@ +ïy(K \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0141.NCLR b/files/poketool/trgra/trfgra/narc_0141.NCLR deleted file mode 100644 index ccd7932a..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0141.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0142.NCGR b/files/poketool/trgra/trfgra/narc_0142.NCGR deleted file mode 100644 index 1ba8fa5d..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0142.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0142.png b/files/poketool/trgra/trfgra/narc_0142.png new file mode 100644 index 00000000..a7c23e6d Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0142.png differ diff --git a/files/poketool/trgra/trfgra/narc_0142.png.key b/files/poketool/trgra/trfgra/narc_0142.png.key new file mode 100644 index 00000000..f4bac4d9 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0142.png.key @@ -0,0 +1 @@ +A,b \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0143.NCLR b/files/poketool/trgra/trfgra/narc_0143.NCLR deleted file mode 100644 index ccd7932a..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0143.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0144.NCGR b/files/poketool/trgra/trfgra/narc_0144.NCGR deleted file mode 100644 index 7293eddc..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0144.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0144.png b/files/poketool/trgra/trfgra/narc_0144.png new file mode 100644 index 00000000..300b779d Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0144.png differ diff --git a/files/poketool/trgra/trfgra/narc_0144.png.key b/files/poketool/trgra/trfgra/narc_0144.png.key new file mode 100644 index 00000000..e06987fa --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0144.png.key @@ -0,0 +1 @@ +ûdpP \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0145.NCLR b/files/poketool/trgra/trfgra/narc_0145.NCLR deleted file mode 100644 index 0351ab10..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0145.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0146.NCGR b/files/poketool/trgra/trfgra/narc_0146.NCGR deleted file mode 100644 index 0c6f6709..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0146.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0146.png b/files/poketool/trgra/trfgra/narc_0146.png new file mode 100644 index 00000000..10f6e2b1 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0146.png differ diff --git a/files/poketool/trgra/trfgra/narc_0146.png.key b/files/poketool/trgra/trfgra/narc_0146.png.key new file mode 100644 index 00000000..9462a5ac --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0146.png.key @@ -0,0 +1 @@ +5Ê¡Þ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0147.NCLR b/files/poketool/trgra/trfgra/narc_0147.NCLR deleted file mode 100644 index a452af25..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0147.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0148.NCGR b/files/poketool/trgra/trfgra/narc_0148.NCGR deleted file mode 100644 index e5a555c5..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0148.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0148.png b/files/poketool/trgra/trfgra/narc_0148.png new file mode 100644 index 00000000..1b889c10 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0148.png differ diff --git a/files/poketool/trgra/trfgra/narc_0148.png.key b/files/poketool/trgra/trfgra/narc_0148.png.key new file mode 100644 index 00000000..1212bfff --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0148.png.key @@ -0,0 +1 @@ +ìš­§ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0149.NCLR b/files/poketool/trgra/trfgra/narc_0149.NCLR deleted file mode 100644 index a7491cb0..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0149.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0150.NCGR b/files/poketool/trgra/trfgra/narc_0150.NCGR deleted file mode 100644 index 09915daa..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0150.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0150.png b/files/poketool/trgra/trfgra/narc_0150.png new file mode 100644 index 00000000..a438f376 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0150.png differ diff --git a/files/poketool/trgra/trfgra/narc_0150.png.key b/files/poketool/trgra/trfgra/narc_0150.png.key new file mode 100644 index 00000000..8c0681c3 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0150.png.key @@ -0,0 +1 @@ +}„– \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0151.NCLR b/files/poketool/trgra/trfgra/narc_0151.NCLR deleted file mode 100644 index 4a8be5f6..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0151.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0152.NCGR b/files/poketool/trgra/trfgra/narc_0152.NCGR deleted file mode 100644 index cef762d4..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0152.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0152.png b/files/poketool/trgra/trfgra/narc_0152.png new file mode 100644 index 00000000..09bf1b13 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0152.png differ diff --git a/files/poketool/trgra/trfgra/narc_0152.png.key b/files/poketool/trgra/trfgra/narc_0152.png.key new file mode 100644 index 00000000..fc29cf08 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0152.png.key @@ -0,0 +1 @@ +lƒ>š \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0153.NCLR b/files/poketool/trgra/trfgra/narc_0153.NCLR deleted file mode 100644 index bfe0aeae..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0153.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0154.NCGR b/files/poketool/trgra/trfgra/narc_0154.NCGR deleted file mode 100644 index f82f9788..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0154.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0154.png b/files/poketool/trgra/trfgra/narc_0154.png new file mode 100644 index 00000000..3d09183b Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0154.png differ diff --git a/files/poketool/trgra/trfgra/narc_0154.png.key b/files/poketool/trgra/trfgra/narc_0154.png.key new file mode 100644 index 00000000..45338477 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0154.png.key @@ -0,0 +1 @@ +ñÚ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0155.NCLR b/files/poketool/trgra/trfgra/narc_0155.NCLR deleted file mode 100644 index 7833d753..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0155.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0156.NCGR b/files/poketool/trgra/trfgra/narc_0156.NCGR deleted file mode 100644 index 7673ec71..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0156.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0156.png b/files/poketool/trgra/trfgra/narc_0156.png new file mode 100644 index 00000000..7cb298f1 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0156.png differ diff --git a/files/poketool/trgra/trfgra/narc_0156.png.key b/files/poketool/trgra/trfgra/narc_0156.png.key new file mode 100644 index 00000000..36423d35 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0156.png.key @@ -0,0 +1 @@ +{oEÎ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0157.NCLR b/files/poketool/trgra/trfgra/narc_0157.NCLR deleted file mode 100644 index ccddf13a..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0157.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0158.NCGR b/files/poketool/trgra/trfgra/narc_0158.NCGR deleted file mode 100644 index 313b6b63..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0158.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0158.png b/files/poketool/trgra/trfgra/narc_0158.png new file mode 100644 index 00000000..a8ac3f6a Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0158.png differ diff --git a/files/poketool/trgra/trfgra/narc_0158.png.key b/files/poketool/trgra/trfgra/narc_0158.png.key new file mode 100644 index 00000000..4ae115b3 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0158.png.key @@ -0,0 +1 @@ +^lË \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0159.NCLR b/files/poketool/trgra/trfgra/narc_0159.NCLR deleted file mode 100644 index c51fcf87..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0159.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0160.NCGR b/files/poketool/trgra/trfgra/narc_0160.NCGR deleted file mode 100644 index 9cc39cce..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0160.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0160.png b/files/poketool/trgra/trfgra/narc_0160.png new file mode 100644 index 00000000..1f7c390c Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0160.png differ diff --git a/files/poketool/trgra/trfgra/narc_0160.png.key b/files/poketool/trgra/trfgra/narc_0160.png.key new file mode 100644 index 00000000..b867124a --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0160.png.key @@ -0,0 +1 @@ +’ä)Æ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0161.NCLR b/files/poketool/trgra/trfgra/narc_0161.NCLR deleted file mode 100644 index 1b32690d..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0161.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0162.NCGR b/files/poketool/trgra/trfgra/narc_0162.NCGR deleted file mode 100644 index 1cbfce90..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0162.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0162.png b/files/poketool/trgra/trfgra/narc_0162.png new file mode 100644 index 00000000..452f3532 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0162.png differ diff --git a/files/poketool/trgra/trfgra/narc_0162.png.key b/files/poketool/trgra/trfgra/narc_0162.png.key new file mode 100644 index 00000000..0a736b81 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0162.png.key @@ -0,0 +1 @@ +î«"˜ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0163.NCLR b/files/poketool/trgra/trfgra/narc_0163.NCLR deleted file mode 100644 index 29093637..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0163.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0164.NCGR b/files/poketool/trgra/trfgra/narc_0164.NCGR deleted file mode 100644 index 6811556d..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0164.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0164.png b/files/poketool/trgra/trfgra/narc_0164.png new file mode 100644 index 00000000..d8be1b0e Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0164.png differ diff --git a/files/poketool/trgra/trfgra/narc_0164.png.key b/files/poketool/trgra/trfgra/narc_0164.png.key new file mode 100644 index 00000000..a0e0e2ad --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0164.png.key @@ -0,0 +1 @@ +þ_#î \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0165.NCLR b/files/poketool/trgra/trfgra/narc_0165.NCLR deleted file mode 100644 index 16e2a985..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0165.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0166.NCGR b/files/poketool/trgra/trfgra/narc_0166.NCGR deleted file mode 100644 index b56f810b..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0166.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0166.png b/files/poketool/trgra/trfgra/narc_0166.png new file mode 100644 index 00000000..c33344ae Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0166.png differ diff --git a/files/poketool/trgra/trfgra/narc_0166.png.key b/files/poketool/trgra/trfgra/narc_0166.png.key new file mode 100644 index 00000000..c73dffa7 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0166.png.key @@ -0,0 +1 @@ +¨oÑ’ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0167.NCLR b/files/poketool/trgra/trfgra/narc_0167.NCLR deleted file mode 100644 index fe26c66f..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0167.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0168.NCGR b/files/poketool/trgra/trfgra/narc_0168.NCGR deleted file mode 100644 index 1ca3c0a0..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0168.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0168.png b/files/poketool/trgra/trfgra/narc_0168.png new file mode 100644 index 00000000..fdf6f6c7 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0168.png differ diff --git a/files/poketool/trgra/trfgra/narc_0168.png.key b/files/poketool/trgra/trfgra/narc_0168.png.key new file mode 100644 index 00000000..d00c6150 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0168.png.key @@ -0,0 +1 @@ +WØÀ3 \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0169.NCLR b/files/poketool/trgra/trfgra/narc_0169.NCLR deleted file mode 100644 index fe26c66f..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0169.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0170.NCGR b/files/poketool/trgra/trfgra/narc_0170.NCGR deleted file mode 100644 index c86dd7ba..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0170.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0170.png b/files/poketool/trgra/trfgra/narc_0170.png new file mode 100644 index 00000000..bcdb5ccb Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0170.png differ diff --git a/files/poketool/trgra/trfgra/narc_0170.png.key b/files/poketool/trgra/trfgra/narc_0170.png.key new file mode 100644 index 00000000..584d6307 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0170.png.key @@ -0,0 +1 @@ +'¬ ] \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0171.NCLR b/files/poketool/trgra/trfgra/narc_0171.NCLR deleted file mode 100644 index 37d222f6..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0171.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0172.NCGR b/files/poketool/trgra/trfgra/narc_0172.NCGR deleted file mode 100644 index 48f1f012..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0172.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0172.png b/files/poketool/trgra/trfgra/narc_0172.png new file mode 100644 index 00000000..a4fae35f Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0172.png differ diff --git a/files/poketool/trgra/trfgra/narc_0172.png.key b/files/poketool/trgra/trfgra/narc_0172.png.key new file mode 100644 index 00000000..fa3f3815 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0172.png.key @@ -0,0 +1 @@ +‡õBŸ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0173.NCLR b/files/poketool/trgra/trfgra/narc_0173.NCLR deleted file mode 100644 index c10d7bd8..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0173.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0174.NCGR b/files/poketool/trgra/trfgra/narc_0174.NCGR deleted file mode 100644 index 4bc62dd1..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0174.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0174.png b/files/poketool/trgra/trfgra/narc_0174.png new file mode 100644 index 00000000..a08cd4fa Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0174.png differ diff --git a/files/poketool/trgra/trfgra/narc_0174.png.key b/files/poketool/trgra/trfgra/narc_0174.png.key new file mode 100644 index 00000000..853d6fe9 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0174.png.key @@ -0,0 +1 @@ +Iì# \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0175.NCLR b/files/poketool/trgra/trfgra/narc_0175.NCLR deleted file mode 100644 index 15369322..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0175.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0176.NCGR b/files/poketool/trgra/trfgra/narc_0176.NCGR deleted file mode 100644 index 4485236f..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0176.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0176.png b/files/poketool/trgra/trfgra/narc_0176.png new file mode 100644 index 00000000..51e2ac44 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0176.png differ diff --git a/files/poketool/trgra/trfgra/narc_0176.png.key b/files/poketool/trgra/trfgra/narc_0176.png.key new file mode 100644 index 00000000..04176521 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0176.png.key @@ -0,0 +1 @@ +5¬b \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0177.NCLR b/files/poketool/trgra/trfgra/narc_0177.NCLR deleted file mode 100644 index 3c38c03d..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0177.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0178.NCGR b/files/poketool/trgra/trfgra/narc_0178.NCGR deleted file mode 100644 index d7e2ec1f..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0178.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0178.png b/files/poketool/trgra/trfgra/narc_0178.png new file mode 100644 index 00000000..d889d4b5 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0178.png differ diff --git a/files/poketool/trgra/trfgra/narc_0178.png.key b/files/poketool/trgra/trfgra/narc_0178.png.key new file mode 100644 index 00000000..a3e7211b --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0178.png.key @@ -0,0 +1 @@ +à‡† \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0179.NCLR b/files/poketool/trgra/trfgra/narc_0179.NCLR deleted file mode 100644 index a452af25..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0179.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0180.NCGR b/files/poketool/trgra/trfgra/narc_0180.NCGR deleted file mode 100644 index 99e64739..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0180.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0180.png b/files/poketool/trgra/trfgra/narc_0180.png new file mode 100644 index 00000000..2cfeb088 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0180.png differ diff --git a/files/poketool/trgra/trfgra/narc_0180.png.key b/files/poketool/trgra/trfgra/narc_0180.png.key new file mode 100644 index 00000000..58ba34a7 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0180.png.key @@ -0,0 +1 @@ +‰b‹ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0181.NCLR b/files/poketool/trgra/trfgra/narc_0181.NCLR deleted file mode 100644 index 15382bf5..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0181.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0182.NCGR b/files/poketool/trgra/trfgra/narc_0182.NCGR deleted file mode 100644 index a0e24358..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0182.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0182.png b/files/poketool/trgra/trfgra/narc_0182.png new file mode 100644 index 00000000..95ab4f4d Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0182.png differ diff --git a/files/poketool/trgra/trfgra/narc_0182.png.key b/files/poketool/trgra/trfgra/narc_0182.png.key new file mode 100644 index 00000000..e73ff6b5 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0182.png.key @@ -0,0 +1 @@ +Ž}6ã \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0183.NCLR b/files/poketool/trgra/trfgra/narc_0183.NCLR deleted file mode 100644 index 051286e3..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0183.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0184.NCGR b/files/poketool/trgra/trfgra/narc_0184.NCGR deleted file mode 100644 index 1fe67b05..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0184.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0184.png b/files/poketool/trgra/trfgra/narc_0184.png new file mode 100644 index 00000000..5510418b Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0184.png differ diff --git a/files/poketool/trgra/trfgra/narc_0184.png.key b/files/poketool/trgra/trfgra/narc_0184.png.key new file mode 100644 index 00000000..a1933bbd --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0184.png.key @@ -0,0 +1 @@ +q‘j \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0185.NCLR b/files/poketool/trgra/trfgra/narc_0185.NCLR deleted file mode 100644 index 19e2d3e0..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0185.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0186.NCGR b/files/poketool/trgra/trfgra/narc_0186.NCGR deleted file mode 100644 index dce6e17c..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0186.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0186.png b/files/poketool/trgra/trfgra/narc_0186.png new file mode 100644 index 00000000..eff5735d Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0186.png differ diff --git a/files/poketool/trgra/trfgra/narc_0186.png.key b/files/poketool/trgra/trfgra/narc_0186.png.key new file mode 100644 index 00000000..81ddec9b --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0186.png.key @@ -0,0 +1 @@ +,–„` \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0187.NCLR b/files/poketool/trgra/trfgra/narc_0187.NCLR deleted file mode 100644 index 19e2d3e0..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0187.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0188.NCGR b/files/poketool/trgra/trfgra/narc_0188.NCGR deleted file mode 100644 index f9405906..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0188.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0188.png b/files/poketool/trgra/trfgra/narc_0188.png new file mode 100644 index 00000000..adcaf3cb Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0188.png differ diff --git a/files/poketool/trgra/trfgra/narc_0188.png.key b/files/poketool/trgra/trfgra/narc_0188.png.key new file mode 100644 index 00000000..4c1fc52d --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0188.png.key @@ -0,0 +1 @@ +æµ \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0189.NCLR b/files/poketool/trgra/trfgra/narc_0189.NCLR deleted file mode 100644 index 62db58b9..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0189.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0190.NCGR b/files/poketool/trgra/trfgra/narc_0190.NCGR deleted file mode 100644 index 27106bd8..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0190.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0190.png b/files/poketool/trgra/trfgra/narc_0190.png new file mode 100644 index 00000000..a3697191 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0190.png differ diff --git a/files/poketool/trgra/trfgra/narc_0190.png.key b/files/poketool/trgra/trfgra/narc_0190.png.key new file mode 100644 index 00000000..27f3bc60 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0190.png.key @@ -0,0 +1 @@ +U–iM \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0191.NCLR b/files/poketool/trgra/trfgra/narc_0191.NCLR deleted file mode 100644 index 39767f84..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0191.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0192.NCGR b/files/poketool/trgra/trfgra/narc_0192.NCGR deleted file mode 100644 index 79fdc9f8..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0192.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0192.png b/files/poketool/trgra/trfgra/narc_0192.png new file mode 100644 index 00000000..d3884147 Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0192.png differ diff --git a/files/poketool/trgra/trfgra/narc_0192.png.key b/files/poketool/trgra/trfgra/narc_0192.png.key new file mode 100644 index 00000000..8edc6ad8 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0192.png.key @@ -0,0 +1 @@ +³”#Q \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0193.NCLR b/files/poketool/trgra/trfgra/narc_0193.NCLR deleted file mode 100644 index 1b7a99d8..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0193.NCLR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0194.NCGR b/files/poketool/trgra/trfgra/narc_0194.NCGR deleted file mode 100644 index 0e2b1d3e..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0194.NCGR and /dev/null differ diff --git a/files/poketool/trgra/trfgra/narc_0194.png b/files/poketool/trgra/trfgra/narc_0194.png new file mode 100644 index 00000000..cc7c2d7f Binary files /dev/null and b/files/poketool/trgra/trfgra/narc_0194.png differ diff --git a/files/poketool/trgra/trfgra/narc_0194.png.key b/files/poketool/trgra/trfgra/narc_0194.png.key new file mode 100644 index 00000000..90f32e49 --- /dev/null +++ b/files/poketool/trgra/trfgra/narc_0194.png.key @@ -0,0 +1 @@ +Ɔd \ No newline at end of file diff --git a/files/poketool/trgra/trfgra/narc_0195.NCLR b/files/poketool/trgra/trfgra/narc_0195.NCLR deleted file mode 100644 index 451aeeec..00000000 Binary files a/files/poketool/trgra/trfgra/narc_0195.NCLR and /dev/null differ diff --git a/filesystem.mk b/filesystem.mk index 33d82c23..96eafc4b 100644 --- a/filesystem.mk +++ b/filesystem.mk @@ -2299,6 +2299,204 @@ files/poketool/trgra/trbgra.narc: \ files/poketool/trgra/trbgra/narc_0014.NCGR \ files/poketool/trgra/trbgra/narc_0014.NCLR +files/poketool/trgra/trfgra.narc: \ + files/poketool/trgra/trfgra/narc_0000.NCGR \ + files/poketool/trgra/trfgra/narc_0000.NCLR \ + files/poketool/trgra/trfgra/narc_0002.NCGR \ + files/poketool/trgra/trfgra/narc_0002.NCLR \ + files/poketool/trgra/trfgra/narc_0004.NCGR \ + files/poketool/trgra/trfgra/narc_0004.NCLR \ + files/poketool/trgra/trfgra/narc_0006.NCGR \ + files/poketool/trgra/trfgra/narc_0006.NCLR \ + files/poketool/trgra/trfgra/narc_0008.NCGR \ + files/poketool/trgra/trfgra/narc_0008.NCLR \ + files/poketool/trgra/trfgra/narc_0010.NCGR \ + files/poketool/trgra/trfgra/narc_0010.NCLR \ + files/poketool/trgra/trfgra/narc_0012.NCGR \ + files/poketool/trgra/trfgra/narc_0012.NCLR \ + files/poketool/trgra/trfgra/narc_0014.NCGR \ + files/poketool/trgra/trfgra/narc_0014.NCLR \ + files/poketool/trgra/trfgra/narc_0016.NCGR \ + files/poketool/trgra/trfgra/narc_0016.NCLR \ + files/poketool/trgra/trfgra/narc_0018.NCGR \ + files/poketool/trgra/trfgra/narc_0018.NCLR \ + files/poketool/trgra/trfgra/narc_0020.NCGR \ + files/poketool/trgra/trfgra/narc_0020.NCLR \ + files/poketool/trgra/trfgra/narc_0022.NCGR \ + files/poketool/trgra/trfgra/narc_0022.NCLR \ + files/poketool/trgra/trfgra/narc_0024.NCGR \ + files/poketool/trgra/trfgra/narc_0024.NCLR \ + files/poketool/trgra/trfgra/narc_0026.NCGR \ + files/poketool/trgra/trfgra/narc_0026.NCLR \ + files/poketool/trgra/trfgra/narc_0028.NCGR \ + files/poketool/trgra/trfgra/narc_0028.NCLR \ + files/poketool/trgra/trfgra/narc_0030.NCGR \ + files/poketool/trgra/trfgra/narc_0030.NCLR \ + files/poketool/trgra/trfgra/narc_0032.NCGR \ + files/poketool/trgra/trfgra/narc_0032.NCLR \ + files/poketool/trgra/trfgra/narc_0034.NCGR \ + files/poketool/trgra/trfgra/narc_0034.NCLR \ + files/poketool/trgra/trfgra/narc_0036.NCGR \ + files/poketool/trgra/trfgra/narc_0036.NCLR \ + files/poketool/trgra/trfgra/narc_0038.NCGR \ + files/poketool/trgra/trfgra/narc_0038.NCLR \ + files/poketool/trgra/trfgra/narc_0040.NCGR \ + files/poketool/trgra/trfgra/narc_0040.NCLR \ + files/poketool/trgra/trfgra/narc_0042.NCGR \ + files/poketool/trgra/trfgra/narc_0042.NCLR \ + files/poketool/trgra/trfgra/narc_0044.NCGR \ + files/poketool/trgra/trfgra/narc_0044.NCLR \ + files/poketool/trgra/trfgra/narc_0046.NCGR \ + files/poketool/trgra/trfgra/narc_0046.NCLR \ + files/poketool/trgra/trfgra/narc_0048.NCGR \ + files/poketool/trgra/trfgra/narc_0048.NCLR \ + files/poketool/trgra/trfgra/narc_0050.NCGR \ + files/poketool/trgra/trfgra/narc_0050.NCLR \ + files/poketool/trgra/trfgra/narc_0052.NCGR \ + files/poketool/trgra/trfgra/narc_0052.NCLR \ + files/poketool/trgra/trfgra/narc_0054.NCGR \ + files/poketool/trgra/trfgra/narc_0054.NCLR \ + files/poketool/trgra/trfgra/narc_0056.NCGR \ + files/poketool/trgra/trfgra/narc_0056.NCLR \ + files/poketool/trgra/trfgra/narc_0058.NCGR \ + files/poketool/trgra/trfgra/narc_0058.NCLR \ + files/poketool/trgra/trfgra/narc_0060.NCGR \ + files/poketool/trgra/trfgra/narc_0060.NCLR \ + files/poketool/trgra/trfgra/narc_0062.NCGR \ + files/poketool/trgra/trfgra/narc_0062.NCLR \ + files/poketool/trgra/trfgra/narc_0064.NCGR \ + files/poketool/trgra/trfgra/narc_0064.NCLR \ + files/poketool/trgra/trfgra/narc_0066.NCGR \ + files/poketool/trgra/trfgra/narc_0066.NCLR \ + files/poketool/trgra/trfgra/narc_0068.NCGR \ + files/poketool/trgra/trfgra/narc_0068.NCLR \ + files/poketool/trgra/trfgra/narc_0070.NCGR \ + files/poketool/trgra/trfgra/narc_0070.NCLR \ + files/poketool/trgra/trfgra/narc_0072.NCGR \ + files/poketool/trgra/trfgra/narc_0072.NCLR \ + files/poketool/trgra/trfgra/narc_0074.NCGR \ + files/poketool/trgra/trfgra/narc_0074.NCLR \ + files/poketool/trgra/trfgra/narc_0076.NCGR \ + files/poketool/trgra/trfgra/narc_0076.NCLR \ + files/poketool/trgra/trfgra/narc_0078.NCGR \ + files/poketool/trgra/trfgra/narc_0078.NCLR \ + files/poketool/trgra/trfgra/narc_0080.NCGR \ + files/poketool/trgra/trfgra/narc_0080.NCLR \ + files/poketool/trgra/trfgra/narc_0082.NCGR \ + files/poketool/trgra/trfgra/narc_0082.NCLR \ + files/poketool/trgra/trfgra/narc_0084.NCGR \ + files/poketool/trgra/trfgra/narc_0084.NCLR \ + files/poketool/trgra/trfgra/narc_0086.NCGR \ + files/poketool/trgra/trfgra/narc_0086.NCLR \ + files/poketool/trgra/trfgra/narc_0088.NCGR \ + files/poketool/trgra/trfgra/narc_0088.NCLR \ + files/poketool/trgra/trfgra/narc_0090.NCGR \ + files/poketool/trgra/trfgra/narc_0090.NCLR \ + files/poketool/trgra/trfgra/narc_0092.NCGR \ + files/poketool/trgra/trfgra/narc_0092.NCLR \ + files/poketool/trgra/trfgra/narc_0094.NCGR \ + files/poketool/trgra/trfgra/narc_0094.NCLR \ + files/poketool/trgra/trfgra/narc_0096.NCGR \ + files/poketool/trgra/trfgra/narc_0096.NCLR \ + files/poketool/trgra/trfgra/narc_0098.NCGR \ + files/poketool/trgra/trfgra/narc_0098.NCLR \ + files/poketool/trgra/trfgra/narc_0100.NCGR \ + files/poketool/trgra/trfgra/narc_0100.NCLR \ + files/poketool/trgra/trfgra/narc_0102.NCGR \ + files/poketool/trgra/trfgra/narc_0102.NCLR \ + files/poketool/trgra/trfgra/narc_0104.NCGR \ + files/poketool/trgra/trfgra/narc_0104.NCLR \ + files/poketool/trgra/trfgra/narc_0106.NCGR \ + files/poketool/trgra/trfgra/narc_0106.NCLR \ + files/poketool/trgra/trfgra/narc_0108.NCGR \ + files/poketool/trgra/trfgra/narc_0108.NCLR \ + files/poketool/trgra/trfgra/narc_0110.NCGR \ + files/poketool/trgra/trfgra/narc_0110.NCLR \ + files/poketool/trgra/trfgra/narc_0112.NCGR \ + files/poketool/trgra/trfgra/narc_0112.NCLR \ + files/poketool/trgra/trfgra/narc_0114.NCGR \ + files/poketool/trgra/trfgra/narc_0114.NCLR \ + files/poketool/trgra/trfgra/narc_0116.NCGR \ + files/poketool/trgra/trfgra/narc_0116.NCLR \ + files/poketool/trgra/trfgra/narc_0118.NCGR \ + files/poketool/trgra/trfgra/narc_0118.NCLR \ + files/poketool/trgra/trfgra/narc_0120.NCGR \ + files/poketool/trgra/trfgra/narc_0120.NCLR \ + files/poketool/trgra/trfgra/narc_0122.NCGR \ + files/poketool/trgra/trfgra/narc_0122.NCLR \ + files/poketool/trgra/trfgra/narc_0124.NCGR \ + files/poketool/trgra/trfgra/narc_0124.NCLR \ + files/poketool/trgra/trfgra/narc_0126.NCGR \ + files/poketool/trgra/trfgra/narc_0126.NCLR \ + files/poketool/trgra/trfgra/narc_0128.NCGR \ + files/poketool/trgra/trfgra/narc_0128.NCLR \ + files/poketool/trgra/trfgra/narc_0130.NCGR \ + files/poketool/trgra/trfgra/narc_0130.NCLR \ + files/poketool/trgra/trfgra/narc_0132.NCGR \ + files/poketool/trgra/trfgra/narc_0132.NCLR \ + files/poketool/trgra/trfgra/narc_0134.NCGR \ + files/poketool/trgra/trfgra/narc_0134.NCLR \ + files/poketool/trgra/trfgra/narc_0136.NCGR \ + files/poketool/trgra/trfgra/narc_0136.NCLR \ + files/poketool/trgra/trfgra/narc_0138.NCGR \ + files/poketool/trgra/trfgra/narc_0138.NCLR \ + files/poketool/trgra/trfgra/narc_0140.NCGR \ + files/poketool/trgra/trfgra/narc_0140.NCLR \ + files/poketool/trgra/trfgra/narc_0142.NCGR \ + files/poketool/trgra/trfgra/narc_0142.NCLR \ + files/poketool/trgra/trfgra/narc_0144.NCGR \ + files/poketool/trgra/trfgra/narc_0144.NCLR \ + files/poketool/trgra/trfgra/narc_0146.NCGR \ + files/poketool/trgra/trfgra/narc_0146.NCLR \ + files/poketool/trgra/trfgra/narc_0148.NCGR \ + files/poketool/trgra/trfgra/narc_0148.NCLR \ + files/poketool/trgra/trfgra/narc_0150.NCGR \ + files/poketool/trgra/trfgra/narc_0150.NCLR \ + files/poketool/trgra/trfgra/narc_0152.NCGR \ + files/poketool/trgra/trfgra/narc_0152.NCLR \ + files/poketool/trgra/trfgra/narc_0154.NCGR \ + files/poketool/trgra/trfgra/narc_0154.NCLR \ + files/poketool/trgra/trfgra/narc_0156.NCGR \ + files/poketool/trgra/trfgra/narc_0156.NCLR \ + files/poketool/trgra/trfgra/narc_0158.NCGR \ + files/poketool/trgra/trfgra/narc_0158.NCLR \ + files/poketool/trgra/trfgra/narc_0160.NCGR \ + files/poketool/trgra/trfgra/narc_0160.NCLR \ + files/poketool/trgra/trfgra/narc_0162.NCGR \ + files/poketool/trgra/trfgra/narc_0162.NCLR \ + files/poketool/trgra/trfgra/narc_0164.NCGR \ + files/poketool/trgra/trfgra/narc_0164.NCLR \ + files/poketool/trgra/trfgra/narc_0166.NCGR \ + files/poketool/trgra/trfgra/narc_0166.NCLR \ + files/poketool/trgra/trfgra/narc_0168.NCGR \ + files/poketool/trgra/trfgra/narc_0168.NCLR \ + files/poketool/trgra/trfgra/narc_0170.NCGR \ + files/poketool/trgra/trfgra/narc_0170.NCLR \ + files/poketool/trgra/trfgra/narc_0172.NCGR \ + files/poketool/trgra/trfgra/narc_0172.NCLR \ + files/poketool/trgra/trfgra/narc_0174.NCGR \ + files/poketool/trgra/trfgra/narc_0174.NCLR \ + files/poketool/trgra/trfgra/narc_0176.NCGR \ + files/poketool/trgra/trfgra/narc_0176.NCLR \ + files/poketool/trgra/trfgra/narc_0178.NCGR \ + files/poketool/trgra/trfgra/narc_0178.NCLR \ + files/poketool/trgra/trfgra/narc_0180.NCGR \ + files/poketool/trgra/trfgra/narc_0180.NCLR \ + files/poketool/trgra/trfgra/narc_0182.NCGR \ + files/poketool/trgra/trfgra/narc_0182.NCLR \ + files/poketool/trgra/trfgra/narc_0184.NCGR \ + files/poketool/trgra/trfgra/narc_0184.NCLR \ + files/poketool/trgra/trfgra/narc_0186.NCGR \ + files/poketool/trgra/trfgra/narc_0186.NCLR \ + files/poketool/trgra/trfgra/narc_0188.NCGR \ + files/poketool/trgra/trfgra/narc_0188.NCLR \ + files/poketool/trgra/trfgra/narc_0190.NCGR \ + files/poketool/trgra/trfgra/narc_0190.NCLR \ + files/poketool/trgra/trfgra/narc_0192.NCGR \ + files/poketool/trgra/trfgra/narc_0192.NCLR \ + files/poketool/trgra/trfgra/narc_0194.NCGR \ + files/poketool/trgra/trfgra/narc_0194.NCLR \ + files/poketool/pokegra/pokegra.narc: \ files/poketool/pokegra/pokegra/narc_0006.NCGR \ files/poketool/pokegra/pokegra/narc_0007.NCGR \ diff --git a/graphics_rules.mk b/graphics_rules.mk index 3dfef9b1..89c0397c 100644 --- a/graphics_rules.mk +++ b/graphics_rules.mk @@ -123,7 +123,105 @@ VERSION101_SOPC_NCGR_FILES := files/demo/title/titledemo/narc_0007.NCGR \ files/poketool/trgra/trbgra/narc_0008.NCLR \ files/poketool/trgra/trbgra/narc_0010.NCLR \ files/poketool/trgra/trbgra/narc_0012.NCLR \ - files/poketool/trgra/trbgra/narc_0014.NCLR + files/poketool/trgra/trbgra/narc_0014.NCLR \ + files/poketool/trgra/trfgra/narc_0000.NCLR \ + files/poketool/trgra/trfgra/narc_0002.NCLR \ + files/poketool/trgra/trfgra/narc_0004.NCLR \ + files/poketool/trgra/trfgra/narc_0006.NCLR \ + files/poketool/trgra/trfgra/narc_0008.NCLR \ + files/poketool/trgra/trfgra/narc_0010.NCLR \ + files/poketool/trgra/trfgra/narc_0012.NCLR \ + files/poketool/trgra/trfgra/narc_0014.NCLR \ + files/poketool/trgra/trfgra/narc_0016.NCLR \ + files/poketool/trgra/trfgra/narc_0018.NCLR \ + files/poketool/trgra/trfgra/narc_0020.NCLR \ + files/poketool/trgra/trfgra/narc_0022.NCLR \ + files/poketool/trgra/trfgra/narc_0024.NCLR \ + files/poketool/trgra/trfgra/narc_0026.NCLR \ + files/poketool/trgra/trfgra/narc_0028.NCLR \ + files/poketool/trgra/trfgra/narc_0030.NCLR \ + files/poketool/trgra/trfgra/narc_0032.NCLR \ + files/poketool/trgra/trfgra/narc_0034.NCLR \ + files/poketool/trgra/trfgra/narc_0036.NCLR \ + files/poketool/trgra/trfgra/narc_0038.NCLR \ + files/poketool/trgra/trfgra/narc_0040.NCLR \ + files/poketool/trgra/trfgra/narc_0042.NCLR \ + files/poketool/trgra/trfgra/narc_0044.NCLR \ + files/poketool/trgra/trfgra/narc_0046.NCLR \ + files/poketool/trgra/trfgra/narc_0048.NCLR \ + files/poketool/trgra/trfgra/narc_0050.NCLR \ + files/poketool/trgra/trfgra/narc_0052.NCLR \ + files/poketool/trgra/trfgra/narc_0054.NCLR \ + files/poketool/trgra/trfgra/narc_0056.NCLR \ + files/poketool/trgra/trfgra/narc_0058.NCLR \ + files/poketool/trgra/trfgra/narc_0060.NCLR \ + files/poketool/trgra/trfgra/narc_0062.NCLR \ + files/poketool/trgra/trfgra/narc_0064.NCLR \ + files/poketool/trgra/trfgra/narc_0066.NCLR \ + files/poketool/trgra/trfgra/narc_0068.NCLR \ + files/poketool/trgra/trfgra/narc_0070.NCLR \ + files/poketool/trgra/trfgra/narc_0072.NCLR \ + files/poketool/trgra/trfgra/narc_0074.NCLR \ + files/poketool/trgra/trfgra/narc_0076.NCLR \ + files/poketool/trgra/trfgra/narc_0078.NCLR \ + files/poketool/trgra/trfgra/narc_0080.NCLR \ + files/poketool/trgra/trfgra/narc_0082.NCLR \ + files/poketool/trgra/trfgra/narc_0084.NCLR \ + files/poketool/trgra/trfgra/narc_0086.NCLR \ + files/poketool/trgra/trfgra/narc_0088.NCLR \ + files/poketool/trgra/trfgra/narc_0090.NCLR \ + files/poketool/trgra/trfgra/narc_0092.NCLR \ + files/poketool/trgra/trfgra/narc_0094.NCLR \ + files/poketool/trgra/trfgra/narc_0096.NCLR \ + files/poketool/trgra/trfgra/narc_0098.NCLR \ + files/poketool/trgra/trfgra/narc_0100.NCLR \ + files/poketool/trgra/trfgra/narc_0102.NCLR \ + files/poketool/trgra/trfgra/narc_0104.NCLR \ + files/poketool/trgra/trfgra/narc_0106.NCLR \ + files/poketool/trgra/trfgra/narc_0108.NCLR \ + files/poketool/trgra/trfgra/narc_0110.NCLR \ + files/poketool/trgra/trfgra/narc_0112.NCLR \ + files/poketool/trgra/trfgra/narc_0114.NCLR \ + files/poketool/trgra/trfgra/narc_0116.NCLR \ + files/poketool/trgra/trfgra/narc_0118.NCLR \ + files/poketool/trgra/trfgra/narc_0120.NCLR \ + files/poketool/trgra/trfgra/narc_0122.NCLR \ + files/poketool/trgra/trfgra/narc_0124.NCLR \ + files/poketool/trgra/trfgra/narc_0126.NCLR \ + files/poketool/trgra/trfgra/narc_0128.NCLR \ + files/poketool/trgra/trfgra/narc_0130.NCLR \ + files/poketool/trgra/trfgra/narc_0132.NCLR \ + files/poketool/trgra/trfgra/narc_0134.NCLR \ + files/poketool/trgra/trfgra/narc_0136.NCLR \ + files/poketool/trgra/trfgra/narc_0138.NCLR \ + files/poketool/trgra/trfgra/narc_0140.NCLR \ + files/poketool/trgra/trfgra/narc_0142.NCLR \ + files/poketool/trgra/trfgra/narc_0144.NCLR \ + files/poketool/trgra/trfgra/narc_0146.NCLR \ + files/poketool/trgra/trfgra/narc_0148.NCLR \ + files/poketool/trgra/trfgra/narc_0150.NCLR \ + files/poketool/trgra/trfgra/narc_0152.NCLR \ + files/poketool/trgra/trfgra/narc_0154.NCLR \ + files/poketool/trgra/trfgra/narc_0156.NCLR \ + files/poketool/trgra/trfgra/narc_0158.NCLR \ + files/poketool/trgra/trfgra/narc_0160.NCLR \ + files/poketool/trgra/trfgra/narc_0162.NCLR \ + files/poketool/trgra/trfgra/narc_0164.NCLR \ + files/poketool/trgra/trfgra/narc_0166.NCLR \ + files/poketool/trgra/trfgra/narc_0168.NCLR \ + files/poketool/trgra/trfgra/narc_0170.NCLR \ + files/poketool/trgra/trfgra/narc_0172.NCLR \ + files/poketool/trgra/trfgra/narc_0174.NCLR \ + files/poketool/trgra/trfgra/narc_0176.NCLR \ + files/poketool/trgra/trfgra/narc_0178.NCLR \ + files/poketool/trgra/trfgra/narc_0180.NCLR \ + files/poketool/trgra/trfgra/narc_0182.NCLR \ + files/poketool/trgra/trfgra/narc_0184.NCLR \ + files/poketool/trgra/trfgra/narc_0186.NCLR \ + files/poketool/trgra/trfgra/narc_0188.NCLR \ + files/poketool/trgra/trfgra/narc_0190.NCLR \ + files/poketool/trgra/trfgra/narc_0192.NCLR \ + files/poketool/trgra/trfgra/narc_0194.NCLR \ 8BPP_COMP10_NOPAD_NCLR_PAL_FILES := files/poketool/pokegra/pokegra/narc_0010.NCLR \ files/poketool/pokegra/pokegra/narc_0011.NCLR \ @@ -169,7 +267,105 @@ SCANNED_NCGR_FILES := files/poketool/pokegra/pokegra/narc_0006.NCGR \ files/poketool/trgra/trbgra/narc_0008.NCGR \ files/poketool/trgra/trbgra/narc_0010.NCGR \ files/poketool/trgra/trbgra/narc_0012.NCGR \ - files/poketool/trgra/trbgra/narc_0014.NCGR + files/poketool/trgra/trbgra/narc_0014.NCGR \ + files/poketool/trgra/trfgra/narc_0000.NCGR \ + files/poketool/trgra/trfgra/narc_0002.NCGR \ + files/poketool/trgra/trfgra/narc_0004.NCGR \ + files/poketool/trgra/trfgra/narc_0006.NCGR \ + files/poketool/trgra/trfgra/narc_0008.NCGR \ + files/poketool/trgra/trfgra/narc_0010.NCGR \ + files/poketool/trgra/trfgra/narc_0012.NCGR \ + files/poketool/trgra/trfgra/narc_0014.NCGR \ + files/poketool/trgra/trfgra/narc_0016.NCGR \ + files/poketool/trgra/trfgra/narc_0018.NCGR \ + files/poketool/trgra/trfgra/narc_0020.NCGR \ + files/poketool/trgra/trfgra/narc_0022.NCGR \ + files/poketool/trgra/trfgra/narc_0024.NCGR \ + files/poketool/trgra/trfgra/narc_0026.NCGR \ + files/poketool/trgra/trfgra/narc_0028.NCGR \ + files/poketool/trgra/trfgra/narc_0030.NCGR \ + files/poketool/trgra/trfgra/narc_0032.NCGR \ + files/poketool/trgra/trfgra/narc_0034.NCGR \ + files/poketool/trgra/trfgra/narc_0036.NCGR \ + files/poketool/trgra/trfgra/narc_0038.NCGR \ + files/poketool/trgra/trfgra/narc_0040.NCGR \ + files/poketool/trgra/trfgra/narc_0042.NCGR \ + files/poketool/trgra/trfgra/narc_0044.NCGR \ + files/poketool/trgra/trfgra/narc_0046.NCGR \ + files/poketool/trgra/trfgra/narc_0048.NCGR \ + files/poketool/trgra/trfgra/narc_0050.NCGR \ + files/poketool/trgra/trfgra/narc_0052.NCGR \ + files/poketool/trgra/trfgra/narc_0054.NCGR \ + files/poketool/trgra/trfgra/narc_0056.NCGR \ + files/poketool/trgra/trfgra/narc_0058.NCGR \ + files/poketool/trgra/trfgra/narc_0060.NCGR \ + files/poketool/trgra/trfgra/narc_0062.NCGR \ + files/poketool/trgra/trfgra/narc_0064.NCGR \ + files/poketool/trgra/trfgra/narc_0066.NCGR \ + files/poketool/trgra/trfgra/narc_0068.NCGR \ + files/poketool/trgra/trfgra/narc_0070.NCGR \ + files/poketool/trgra/trfgra/narc_0072.NCGR \ + files/poketool/trgra/trfgra/narc_0074.NCGR \ + files/poketool/trgra/trfgra/narc_0076.NCGR \ + files/poketool/trgra/trfgra/narc_0078.NCGR \ + files/poketool/trgra/trfgra/narc_0080.NCGR \ + files/poketool/trgra/trfgra/narc_0082.NCGR \ + files/poketool/trgra/trfgra/narc_0084.NCGR \ + files/poketool/trgra/trfgra/narc_0086.NCGR \ + files/poketool/trgra/trfgra/narc_0088.NCGR \ + files/poketool/trgra/trfgra/narc_0090.NCGR \ + files/poketool/trgra/trfgra/narc_0092.NCGR \ + files/poketool/trgra/trfgra/narc_0094.NCGR \ + files/poketool/trgra/trfgra/narc_0096.NCGR \ + files/poketool/trgra/trfgra/narc_0098.NCGR \ + files/poketool/trgra/trfgra/narc_0100.NCGR \ + files/poketool/trgra/trfgra/narc_0102.NCGR \ + files/poketool/trgra/trfgra/narc_0104.NCGR \ + files/poketool/trgra/trfgra/narc_0106.NCGR \ + files/poketool/trgra/trfgra/narc_0108.NCGR \ + files/poketool/trgra/trfgra/narc_0110.NCGR \ + files/poketool/trgra/trfgra/narc_0112.NCGR \ + files/poketool/trgra/trfgra/narc_0114.NCGR \ + files/poketool/trgra/trfgra/narc_0116.NCGR \ + files/poketool/trgra/trfgra/narc_0118.NCGR \ + files/poketool/trgra/trfgra/narc_0120.NCGR \ + files/poketool/trgra/trfgra/narc_0122.NCGR \ + files/poketool/trgra/trfgra/narc_0124.NCGR \ + files/poketool/trgra/trfgra/narc_0126.NCGR \ + files/poketool/trgra/trfgra/narc_0128.NCGR \ + files/poketool/trgra/trfgra/narc_0130.NCGR \ + files/poketool/trgra/trfgra/narc_0132.NCGR \ + files/poketool/trgra/trfgra/narc_0134.NCGR \ + files/poketool/trgra/trfgra/narc_0136.NCGR \ + files/poketool/trgra/trfgra/narc_0138.NCGR \ + files/poketool/trgra/trfgra/narc_0140.NCGR \ + files/poketool/trgra/trfgra/narc_0142.NCGR \ + files/poketool/trgra/trfgra/narc_0144.NCGR \ + files/poketool/trgra/trfgra/narc_0146.NCGR \ + files/poketool/trgra/trfgra/narc_0148.NCGR \ + files/poketool/trgra/trfgra/narc_0150.NCGR \ + files/poketool/trgra/trfgra/narc_0152.NCGR \ + files/poketool/trgra/trfgra/narc_0154.NCGR \ + files/poketool/trgra/trfgra/narc_0156.NCGR \ + files/poketool/trgra/trfgra/narc_0158.NCGR \ + files/poketool/trgra/trfgra/narc_0160.NCGR \ + files/poketool/trgra/trfgra/narc_0162.NCGR \ + files/poketool/trgra/trfgra/narc_0164.NCGR \ + files/poketool/trgra/trfgra/narc_0166.NCGR \ + files/poketool/trgra/trfgra/narc_0168.NCGR \ + files/poketool/trgra/trfgra/narc_0170.NCGR \ + files/poketool/trgra/trfgra/narc_0172.NCGR \ + files/poketool/trgra/trfgra/narc_0174.NCGR \ + files/poketool/trgra/trfgra/narc_0176.NCGR \ + files/poketool/trgra/trfgra/narc_0178.NCGR \ + files/poketool/trgra/trfgra/narc_0180.NCGR \ + files/poketool/trgra/trfgra/narc_0182.NCGR \ + files/poketool/trgra/trfgra/narc_0184.NCGR \ + files/poketool/trgra/trfgra/narc_0186.NCGR \ + files/poketool/trgra/trfgra/narc_0188.NCGR \ + files/poketool/trgra/trfgra/narc_0190.NCGR \ + files/poketool/trgra/trfgra/narc_0192.NCGR \ + files/poketool/trgra/trfgra/narc_0194.NCGR \ NCGR_CLEAN_LIST := files/data/cell0.NCGR \ files/demo/title/titledemo/narc_0001.NCGR \ @@ -279,7 +475,105 @@ NCGR_CLEAN_LIST := files/data/cell0.NCGR \ files/poketool/trgra/trbgra/narc_0008.NCGR \ files/poketool/trgra/trbgra/narc_0010.NCGR \ files/poketool/trgra/trbgra/narc_0012.NCGR \ - files/poketool/trgra/trbgra/narc_0014.NCGR + files/poketool/trgra/trbgra/narc_0014.NCGR \ + files/poketool/trgra/trfgra/narc_0000.NCGR \ + files/poketool/trgra/trfgra/narc_0002.NCGR \ + files/poketool/trgra/trfgra/narc_0004.NCGR \ + files/poketool/trgra/trfgra/narc_0006.NCGR \ + files/poketool/trgra/trfgra/narc_0008.NCGR \ + files/poketool/trgra/trfgra/narc_0010.NCGR \ + files/poketool/trgra/trfgra/narc_0012.NCGR \ + files/poketool/trgra/trfgra/narc_0014.NCGR \ + files/poketool/trgra/trfgra/narc_0016.NCGR \ + files/poketool/trgra/trfgra/narc_0018.NCGR \ + files/poketool/trgra/trfgra/narc_0020.NCGR \ + files/poketool/trgra/trfgra/narc_0022.NCGR \ + files/poketool/trgra/trfgra/narc_0024.NCGR \ + files/poketool/trgra/trfgra/narc_0026.NCGR \ + files/poketool/trgra/trfgra/narc_0028.NCGR \ + files/poketool/trgra/trfgra/narc_0030.NCGR \ + files/poketool/trgra/trfgra/narc_0032.NCGR \ + files/poketool/trgra/trfgra/narc_0034.NCGR \ + files/poketool/trgra/trfgra/narc_0036.NCGR \ + files/poketool/trgra/trfgra/narc_0038.NCGR \ + files/poketool/trgra/trfgra/narc_0040.NCGR \ + files/poketool/trgra/trfgra/narc_0042.NCGR \ + files/poketool/trgra/trfgra/narc_0044.NCGR \ + files/poketool/trgra/trfgra/narc_0046.NCGR \ + files/poketool/trgra/trfgra/narc_0048.NCGR \ + files/poketool/trgra/trfgra/narc_0050.NCGR \ + files/poketool/trgra/trfgra/narc_0052.NCGR \ + files/poketool/trgra/trfgra/narc_0054.NCGR \ + files/poketool/trgra/trfgra/narc_0056.NCGR \ + files/poketool/trgra/trfgra/narc_0058.NCGR \ + files/poketool/trgra/trfgra/narc_0060.NCGR \ + files/poketool/trgra/trfgra/narc_0062.NCGR \ + files/poketool/trgra/trfgra/narc_0064.NCGR \ + files/poketool/trgra/trfgra/narc_0066.NCGR \ + files/poketool/trgra/trfgra/narc_0068.NCGR \ + files/poketool/trgra/trfgra/narc_0070.NCGR \ + files/poketool/trgra/trfgra/narc_0072.NCGR \ + files/poketool/trgra/trfgra/narc_0074.NCGR \ + files/poketool/trgra/trfgra/narc_0076.NCGR \ + files/poketool/trgra/trfgra/narc_0078.NCGR \ + files/poketool/trgra/trfgra/narc_0080.NCGR \ + files/poketool/trgra/trfgra/narc_0082.NCGR \ + files/poketool/trgra/trfgra/narc_0084.NCGR \ + files/poketool/trgra/trfgra/narc_0086.NCGR \ + files/poketool/trgra/trfgra/narc_0088.NCGR \ + files/poketool/trgra/trfgra/narc_0090.NCGR \ + files/poketool/trgra/trfgra/narc_0092.NCGR \ + files/poketool/trgra/trfgra/narc_0094.NCGR \ + files/poketool/trgra/trfgra/narc_0096.NCGR \ + files/poketool/trgra/trfgra/narc_0098.NCGR \ + files/poketool/trgra/trfgra/narc_0100.NCGR \ + files/poketool/trgra/trfgra/narc_0102.NCGR \ + files/poketool/trgra/trfgra/narc_0104.NCGR \ + files/poketool/trgra/trfgra/narc_0106.NCGR \ + files/poketool/trgra/trfgra/narc_0108.NCGR \ + files/poketool/trgra/trfgra/narc_0110.NCGR \ + files/poketool/trgra/trfgra/narc_0112.NCGR \ + files/poketool/trgra/trfgra/narc_0114.NCGR \ + files/poketool/trgra/trfgra/narc_0116.NCGR \ + files/poketool/trgra/trfgra/narc_0118.NCGR \ + files/poketool/trgra/trfgra/narc_0120.NCGR \ + files/poketool/trgra/trfgra/narc_0122.NCGR \ + files/poketool/trgra/trfgra/narc_0124.NCGR \ + files/poketool/trgra/trfgra/narc_0126.NCGR \ + files/poketool/trgra/trfgra/narc_0128.NCGR \ + files/poketool/trgra/trfgra/narc_0130.NCGR \ + files/poketool/trgra/trfgra/narc_0132.NCGR \ + files/poketool/trgra/trfgra/narc_0134.NCGR \ + files/poketool/trgra/trfgra/narc_0136.NCGR \ + files/poketool/trgra/trfgra/narc_0138.NCGR \ + files/poketool/trgra/trfgra/narc_0140.NCGR \ + files/poketool/trgra/trfgra/narc_0142.NCGR \ + files/poketool/trgra/trfgra/narc_0144.NCGR \ + files/poketool/trgra/trfgra/narc_0146.NCGR \ + files/poketool/trgra/trfgra/narc_0148.NCGR \ + files/poketool/trgra/trfgra/narc_0150.NCGR \ + files/poketool/trgra/trfgra/narc_0152.NCGR \ + files/poketool/trgra/trfgra/narc_0154.NCGR \ + files/poketool/trgra/trfgra/narc_0156.NCGR \ + files/poketool/trgra/trfgra/narc_0158.NCGR \ + files/poketool/trgra/trfgra/narc_0160.NCGR \ + files/poketool/trgra/trfgra/narc_0162.NCGR \ + files/poketool/trgra/trfgra/narc_0164.NCGR \ + files/poketool/trgra/trfgra/narc_0166.NCGR \ + files/poketool/trgra/trfgra/narc_0168.NCGR \ + files/poketool/trgra/trfgra/narc_0170.NCGR \ + files/poketool/trgra/trfgra/narc_0172.NCGR \ + files/poketool/trgra/trfgra/narc_0174.NCGR \ + files/poketool/trgra/trfgra/narc_0176.NCGR \ + files/poketool/trgra/trfgra/narc_0178.NCGR \ + files/poketool/trgra/trfgra/narc_0180.NCGR \ + files/poketool/trgra/trfgra/narc_0182.NCGR \ + files/poketool/trgra/trfgra/narc_0184.NCGR \ + files/poketool/trgra/trfgra/narc_0186.NCGR \ + files/poketool/trgra/trfgra/narc_0188.NCGR \ + files/poketool/trgra/trfgra/narc_0190.NCGR \ + files/poketool/trgra/trfgra/narc_0192.NCGR \ + files/poketool/trgra/trfgra/narc_0194.NCGR \ NCLR_CLEAN_LIST := files/data/cell0.NCLR \ @@ -397,4 +691,102 @@ NCLR_CLEAN_LIST := files/data/cell0.NCLR \ files/poketool/trgra/trbgra/narc_0008.NCLR \ files/poketool/trgra/trbgra/narc_0010.NCLR \ files/poketool/trgra/trbgra/narc_0012.NCLR \ - files/poketool/trgra/trbgra/narc_0014.NCLR + files/poketool/trgra/trbgra/narc_0014.NCLR \ + files/poketool/trgra/trfgra/narc_0000.NCLR \ + files/poketool/trgra/trfgra/narc_0002.NCLR \ + files/poketool/trgra/trfgra/narc_0004.NCLR \ + files/poketool/trgra/trfgra/narc_0006.NCLR \ + files/poketool/trgra/trfgra/narc_0008.NCLR \ + files/poketool/trgra/trfgra/narc_0010.NCLR \ + files/poketool/trgra/trfgra/narc_0012.NCLR \ + files/poketool/trgra/trfgra/narc_0014.NCLR \ + files/poketool/trgra/trfgra/narc_0016.NCLR \ + files/poketool/trgra/trfgra/narc_0018.NCLR \ + files/poketool/trgra/trfgra/narc_0020.NCLR \ + files/poketool/trgra/trfgra/narc_0022.NCLR \ + files/poketool/trgra/trfgra/narc_0024.NCLR \ + files/poketool/trgra/trfgra/narc_0026.NCLR \ + files/poketool/trgra/trfgra/narc_0028.NCLR \ + files/poketool/trgra/trfgra/narc_0030.NCLR \ + files/poketool/trgra/trfgra/narc_0032.NCLR \ + files/poketool/trgra/trfgra/narc_0034.NCLR \ + files/poketool/trgra/trfgra/narc_0036.NCLR \ + files/poketool/trgra/trfgra/narc_0038.NCLR \ + files/poketool/trgra/trfgra/narc_0040.NCLR \ + files/poketool/trgra/trfgra/narc_0042.NCLR \ + files/poketool/trgra/trfgra/narc_0044.NCLR \ + files/poketool/trgra/trfgra/narc_0046.NCLR \ + files/poketool/trgra/trfgra/narc_0048.NCLR \ + files/poketool/trgra/trfgra/narc_0050.NCLR \ + files/poketool/trgra/trfgra/narc_0052.NCLR \ + files/poketool/trgra/trfgra/narc_0054.NCLR \ + files/poketool/trgra/trfgra/narc_0056.NCLR \ + files/poketool/trgra/trfgra/narc_0058.NCLR \ + files/poketool/trgra/trfgra/narc_0060.NCLR \ + files/poketool/trgra/trfgra/narc_0062.NCLR \ + files/poketool/trgra/trfgra/narc_0064.NCLR \ + files/poketool/trgra/trfgra/narc_0066.NCLR \ + files/poketool/trgra/trfgra/narc_0068.NCLR \ + files/poketool/trgra/trfgra/narc_0070.NCLR \ + files/poketool/trgra/trfgra/narc_0072.NCLR \ + files/poketool/trgra/trfgra/narc_0074.NCLR \ + files/poketool/trgra/trfgra/narc_0076.NCLR \ + files/poketool/trgra/trfgra/narc_0078.NCLR \ + files/poketool/trgra/trfgra/narc_0080.NCLR \ + files/poketool/trgra/trfgra/narc_0082.NCLR \ + files/poketool/trgra/trfgra/narc_0084.NCLR \ + files/poketool/trgra/trfgra/narc_0086.NCLR \ + files/poketool/trgra/trfgra/narc_0088.NCLR \ + files/poketool/trgra/trfgra/narc_0090.NCLR \ + files/poketool/trgra/trfgra/narc_0092.NCLR \ + files/poketool/trgra/trfgra/narc_0094.NCLR \ + files/poketool/trgra/trfgra/narc_0096.NCLR \ + files/poketool/trgra/trfgra/narc_0098.NCLR \ + files/poketool/trgra/trfgra/narc_0100.NCLR \ + files/poketool/trgra/trfgra/narc_0102.NCLR \ + files/poketool/trgra/trfgra/narc_0104.NCLR \ + files/poketool/trgra/trfgra/narc_0106.NCLR \ + files/poketool/trgra/trfgra/narc_0108.NCLR \ + files/poketool/trgra/trfgra/narc_0110.NCLR \ + files/poketool/trgra/trfgra/narc_0112.NCLR \ + files/poketool/trgra/trfgra/narc_0114.NCLR \ + files/poketool/trgra/trfgra/narc_0116.NCLR \ + files/poketool/trgra/trfgra/narc_0118.NCLR \ + files/poketool/trgra/trfgra/narc_0120.NCLR \ + files/poketool/trgra/trfgra/narc_0122.NCLR \ + files/poketool/trgra/trfgra/narc_0124.NCLR \ + files/poketool/trgra/trfgra/narc_0126.NCLR \ + files/poketool/trgra/trfgra/narc_0128.NCLR \ + files/poketool/trgra/trfgra/narc_0130.NCLR \ + files/poketool/trgra/trfgra/narc_0132.NCLR \ + files/poketool/trgra/trfgra/narc_0134.NCLR \ + files/poketool/trgra/trfgra/narc_0136.NCLR \ + files/poketool/trgra/trfgra/narc_0138.NCLR \ + files/poketool/trgra/trfgra/narc_0140.NCLR \ + files/poketool/trgra/trfgra/narc_0142.NCLR \ + files/poketool/trgra/trfgra/narc_0144.NCLR \ + files/poketool/trgra/trfgra/narc_0146.NCLR \ + files/poketool/trgra/trfgra/narc_0148.NCLR \ + files/poketool/trgra/trfgra/narc_0150.NCLR \ + files/poketool/trgra/trfgra/narc_0152.NCLR \ + files/poketool/trgra/trfgra/narc_0154.NCLR \ + files/poketool/trgra/trfgra/narc_0156.NCLR \ + files/poketool/trgra/trfgra/narc_0158.NCLR \ + files/poketool/trgra/trfgra/narc_0160.NCLR \ + files/poketool/trgra/trfgra/narc_0162.NCLR \ + files/poketool/trgra/trfgra/narc_0164.NCLR \ + files/poketool/trgra/trfgra/narc_0166.NCLR \ + files/poketool/trgra/trfgra/narc_0168.NCLR \ + files/poketool/trgra/trfgra/narc_0170.NCLR \ + files/poketool/trgra/trfgra/narc_0172.NCLR \ + files/poketool/trgra/trfgra/narc_0174.NCLR \ + files/poketool/trgra/trfgra/narc_0176.NCLR \ + files/poketool/trgra/trfgra/narc_0178.NCLR \ + files/poketool/trgra/trfgra/narc_0180.NCLR \ + files/poketool/trgra/trfgra/narc_0182.NCLR \ + files/poketool/trgra/trfgra/narc_0184.NCLR \ + files/poketool/trgra/trfgra/narc_0186.NCLR \ + files/poketool/trgra/trfgra/narc_0188.NCLR \ + files/poketool/trgra/trfgra/narc_0190.NCLR \ + files/poketool/trgra/trfgra/narc_0192.NCLR \ + files/poketool/trgra/trfgra/narc_0194.NCLR \ -- cgit v1.2.3 From 392f50eea4375637f23a4abc8643f525ba98f469 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 31 Aug 2020 16:47:15 -0400 Subject: constants/trainer_classes.h --- arm9/asm/unk_0206ABC4.s | 14 +- arm9/src/pokemon.c | 19 +- files/poketool/trainer/trdata.json | 1698 ++++++++++++++++---------------- files/poketool/trainer/trdata.json.txt | 1 + include/constants/trainer_classes.h | 103 ++ include/trainer_data.h | 13 +- 6 files changed, 981 insertions(+), 867 deletions(-) create mode 100644 include/constants/trainer_classes.h diff --git a/arm9/asm/unk_0206ABC4.s b/arm9/asm/unk_0206ABC4.s index 7ea69ce1..b4b3d88e 100644 --- a/arm9/asm/unk_0206ABC4.s +++ b/arm9/asm/unk_0206ABC4.s @@ -5,13 +5,13 @@ .global UNK_020F8010 UNK_020F8010: ; 0x020F8010 - .byte 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00 - .byte 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x02, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02 - .byte 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02 - .byte 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00 - .byte 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00 - .byte 0x01, 0x00, 0x02, 0x00, 0x01, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00 - .byte 0x01, 0x00, 0x00, 0x00 + .byte 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0 + .byte 0, 1, 1, 0, 0, 1, 1, 2, 0, 1, 1, 0, 0, 0, 1, 2 + .byte 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 2 + .byte 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0 + .byte 0, 0, 1, 0, 0, 1, 2, 0, 1, 0, 1, 0, 1, 1, 1, 0 + .byte 1, 0, 2, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0 + .byte 1, 0, 0, 0 .text diff --git a/arm9/src/pokemon.c b/arm9/src/pokemon.c index fb1ad894..48b1a225 100644 --- a/arm9/src/pokemon.c +++ b/arm9/src/pokemon.c @@ -17,6 +17,7 @@ #include "constants/items.h" #include "constants/moves.h" #include "constants/sinnoh_dex.h" +#include "constants/trainer_classes.h" #pragma thumb on @@ -3701,21 +3702,21 @@ int FUN_0206AA30(int x) { switch (x) { - case 63: + case TRAINER_CLASS_PKMN_TRAINER_BARRY: return 2; - case 90: - case 91: - case 92: - case 93: - case 94: - return x - 87; + case TRAINER_CLASS_PKMN_TRAINER_AROMA_LADY: + case TRAINER_CLASS_PKMN_TRAINER_RICH_BOY: + case TRAINER_CLASS_PKMN_TRAINER_PICNICKER: + case TRAINER_CLASS_PKMN_TRAINER_CAMPER: + case TRAINER_CLASS_PKMN_TRAINER_POKEKID: + return x - TRAINER_CLASS_COMMANDER_JUPITER; default: if (FUN_0206AE00(x) == 1) return 1; else return 0; - case 0: - case 1: + case TRAINER_CLASS_PKMN_TRAINER_M: + case TRAINER_CLASS_PKMN_TRAINER_F: return x; } } diff --git a/files/poketool/trainer/trdata.json b/files/poketool/trainer/trdata.json index 2f2877a9..81b05ddd 100644 --- a/files/poketool/trainer/trdata.json +++ b/files/poketool/trainer/trdata.json @@ -3,7 +3,7 @@ { "index": 1, "type": 0, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -19,7 +19,7 @@ { "index": 2, "type": 0, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -35,7 +35,7 @@ { "index": 3, "type": 0, - "class": 3, + "class": "TRAINER_CLASS_LASS", "unk2": 0, "items": [], "unkC": 1, @@ -56,7 +56,7 @@ { "index": 4, "type": 0, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -77,7 +77,7 @@ { "index": 5, "type": 0, - "class": 4, + "class": "TRAINER_CLASS_CAMPER", "unk2": 0, "items": [], "unkC": 1, @@ -93,7 +93,7 @@ { "index": 6, "type": 0, - "class": 4, + "class": "TRAINER_CLASS_CAMPER", "unk2": 0, "items": [], "unkC": 1, @@ -109,7 +109,7 @@ { "index": 7, "type": 0, - "class": 5, + "class": "TRAINER_CLASS_PICNICKER", "unk2": 0, "items": [], "unkC": 1, @@ -125,7 +125,7 @@ { "index": 8, "type": 0, - "class": 5, + "class": "TRAINER_CLASS_PICNICKER", "unk2": 0, "items": [], "unkC": 1, @@ -141,7 +141,7 @@ { "index": 9, "type": 0, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -157,7 +157,7 @@ { "index": 10, "type": 0, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -178,7 +178,7 @@ { "index": 11, "type": 0, - "class": 3, + "class": "TRAINER_CLASS_LASS", "unk2": 0, "items": [], "unkC": 1, @@ -194,7 +194,7 @@ { "index": 12, "type": 0, - "class": 3, + "class": "TRAINER_CLASS_LASS", "unk2": 0, "items": [], "unkC": 1, @@ -210,7 +210,7 @@ { "index": 13, "type": 0, - "class": 6, + "class": "TRAINER_CLASS_BUG_CATCHER", "unk2": 0, "items": [], "unkC": 1, @@ -231,7 +231,7 @@ { "index": 14, "type": 0, - "class": 7, + "class": "TRAINER_CLASS_AROMA_LADY", "unk2": 0, "items": [], "unkC": 1, @@ -252,7 +252,7 @@ { "index": 15, "type": 0, - "class": 8, + "class": "TRAINER_CLASS_TWINS", "unk2": 0, "items": [], "unkC": 1, @@ -273,7 +273,7 @@ { "index": 16, "type": 1, - "class": 4, + "class": "TRAINER_CLASS_CAMPER", "unk2": 0, "items": [], "unkC": 1, @@ -293,7 +293,7 @@ { "index": 17, "type": 1, - "class": 5, + "class": "TRAINER_CLASS_PICNICKER", "unk2": 0, "items": [], "unkC": 1, @@ -323,7 +323,7 @@ { "index": 18, "type": 0, - "class": 9, + "class": "TRAINER_CLASS_HIKER", "unk2": 0, "items": [], "unkC": 1, @@ -354,7 +354,7 @@ { "index": 19, "type": 0, - "class": 9, + "class": "TRAINER_CLASS_HIKER", "unk2": 0, "items": [], "unkC": 1, @@ -370,7 +370,7 @@ { "index": 20, "type": 0, - "class": 10, + "class": "TRAINER_CLASS_BATTLE_GIRL", "unk2": 0, "items": [], "unkC": 1, @@ -386,7 +386,7 @@ { "index": 21, "type": 0, - "class": 7, + "class": "TRAINER_CLASS_AROMA_LADY", "unk2": 0, "items": [], "unkC": 1, @@ -402,7 +402,7 @@ { "index": 22, "type": 0, - "class": 11, + "class": "TRAINER_CLASS_FISHERMAN", "unk2": 0, "items": [], "unkC": 1, @@ -443,7 +443,7 @@ { "index": 23, "type": 0, - "class": 11, + "class": "TRAINER_CLASS_FISHERMAN", "unk2": 0, "items": [], "unkC": 1, @@ -459,7 +459,7 @@ { "index": 24, "type": 0, - "class": 11, + "class": "TRAINER_CLASS_FISHERMAN", "unk2": 0, "items": [], "unkC": 1, @@ -485,7 +485,7 @@ { "index": 25, "type": 0, - "class": 12, + "class": "TRAINER_CLASS_CYCLIST_M", "unk2": 0, "items": [], "unkC": 1, @@ -501,7 +501,7 @@ { "index": 26, "type": 0, - "class": 12, + "class": "TRAINER_CLASS_CYCLIST_M", "unk2": 0, "items": [], "unkC": 1, @@ -517,7 +517,7 @@ { "index": 27, "type": 0, - "class": 12, + "class": "TRAINER_CLASS_CYCLIST_M", "unk2": 0, "items": [], "unkC": 1, @@ -538,7 +538,7 @@ { "index": 28, "type": 0, - "class": 12, + "class": "TRAINER_CLASS_CYCLIST_M", "unk2": 0, "items": [], "unkC": 1, @@ -554,7 +554,7 @@ { "index": 29, "type": 0, - "class": 13, + "class": "TRAINER_CLASS_CYCLIST_F", "unk2": 0, "items": [], "unkC": 1, @@ -570,7 +570,7 @@ { "index": 30, "type": 0, - "class": 13, + "class": "TRAINER_CLASS_CYCLIST_F", "unk2": 0, "items": [], "unkC": 1, @@ -591,7 +591,7 @@ { "index": 31, "type": 0, - "class": 13, + "class": "TRAINER_CLASS_CYCLIST_F", "unk2": 0, "items": [], "unkC": 1, @@ -607,7 +607,7 @@ { "index": 32, "type": 0, - "class": 13, + "class": "TRAINER_CLASS_CYCLIST_F", "unk2": 0, "items": [], "unkC": 1, @@ -628,7 +628,7 @@ { "index": 33, "type": 0, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -654,7 +654,7 @@ { "index": 34, "type": 1, - "class": 4, + "class": "TRAINER_CLASS_CAMPER", "unk2": 0, "items": [], "unkC": 1, @@ -675,7 +675,7 @@ { "index": 35, "type": 1, - "class": 5, + "class": "TRAINER_CLASS_PICNICKER", "unk2": 0, "items": [], "unkC": 1, @@ -696,7 +696,7 @@ { "index": 36, "type": 0, - "class": 9, + "class": "TRAINER_CLASS_HIKER", "unk2": 0, "items": [], "unkC": 1, @@ -727,7 +727,7 @@ { "index": 37, "type": 0, - "class": 9, + "class": "TRAINER_CLASS_HIKER", "unk2": 0, "items": [], "unkC": 1, @@ -748,7 +748,7 @@ { "index": 38, "type": 0, - "class": 10, + "class": "TRAINER_CLASS_BATTLE_GIRL", "unk2": 0, "items": [], "unkC": 1, @@ -769,7 +769,7 @@ { "index": 39, "type": 0, - "class": 9, + "class": "TRAINER_CLASS_HIKER", "unk2": 0, "items": [], "unkC": 1, @@ -790,7 +790,7 @@ { "index": 40, "type": 0, - "class": 9, + "class": "TRAINER_CLASS_HIKER", "unk2": 0, "items": [], "unkC": 1, @@ -816,7 +816,7 @@ { "index": 41, "type": 0, - "class": 9, + "class": "TRAINER_CLASS_HIKER", "unk2": 0, "items": [], "unkC": 1, @@ -832,7 +832,7 @@ { "index": 42, "type": 0, - "class": 14, + "class": "TRAINER_CLASS_BLACK_BELT", "unk2": 0, "items": [], "unkC": 1, @@ -848,7 +848,7 @@ { "index": 43, "type": 0, - "class": 11, + "class": "TRAINER_CLASS_FISHERMAN", "unk2": 0, "items": [], "unkC": 1, @@ -869,7 +869,7 @@ { "index": 44, "type": 0, - "class": 7, + "class": "TRAINER_CLASS_AROMA_LADY", "unk2": 0, "items": [], "unkC": 1, @@ -890,7 +890,7 @@ { "index": 45, "type": 0, - "class": 15, + "class": "TRAINER_CLASS_ARTIST", "unk2": 0, "items": [], "unkC": 1, @@ -911,7 +911,7 @@ { "index": 46, "type": 0, - "class": 16, + "class": "TRAINER_CLASS_PKMN_BREEDER_M", "unk2": 0, "items": [], "unkC": 1, @@ -937,7 +937,7 @@ { "index": 47, "type": 0, - "class": 17, + "class": "TRAINER_CLASS_PKMN_BREEDER_F", "unk2": 0, "items": [], "unkC": 1, @@ -963,7 +963,7 @@ { "index": 48, "type": 0, - "class": 18, + "class": "TRAINER_CLASS_COWGIRL", "unk2": 0, "items": [], "unkC": 1, @@ -999,7 +999,7 @@ { "index": 49, "type": 0, - "class": 19, + "class": "TRAINER_CLASS_JOGGER", "unk2": 0, "items": [], "unkC": 1, @@ -1015,7 +1015,7 @@ { "index": 50, "type": 0, - "class": 20, + "class": "TRAINER_CLASS_POKEFAN_M", "unk2": 0, "items": [], "unkC": 1, @@ -1031,7 +1031,7 @@ { "index": 51, "type": 0, - "class": 21, + "class": "TRAINER_CLASS_POKEFAN_F", "unk2": 0, "items": [], "unkC": 1, @@ -1047,7 +1047,7 @@ { "index": 52, "type": 0, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -1063,7 +1063,7 @@ { "index": 53, "type": 0, - "class": 22, + "class": "TRAINER_CLASS_POKE_KID", "unk2": 0, "items": [], "unkC": 1, @@ -1079,7 +1079,7 @@ { "index": 54, "type": 0, - "class": 11, + "class": "TRAINER_CLASS_FISHERMAN", "unk2": 0, "items": [], "unkC": 1, @@ -1095,7 +1095,7 @@ { "index": 55, "type": 0, - "class": 23, + "class": "TRAINER_CLASS_YOUNG_COUPLE", "unk2": 0, "items": [], "unkC": 1, @@ -1116,7 +1116,7 @@ { "index": 56, "type": 0, - "class": 16, + "class": "TRAINER_CLASS_PKMN_BREEDER_M", "unk2": 0, "items": [], "unkC": 1, @@ -1142,7 +1142,7 @@ { "index": 57, "type": 0, - "class": 17, + "class": "TRAINER_CLASS_PKMN_BREEDER_F", "unk2": 0, "items": [], "unkC": 1, @@ -1168,7 +1168,7 @@ { "index": 58, "type": 0, - "class": 18, + "class": "TRAINER_CLASS_COWGIRL", "unk2": 0, "items": [], "unkC": 1, @@ -1184,7 +1184,7 @@ { "index": 59, "type": 0, - "class": 19, + "class": "TRAINER_CLASS_JOGGER", "unk2": 0, "items": [], "unkC": 1, @@ -1200,7 +1200,7 @@ { "index": 60, "type": 0, - "class": 20, + "class": "TRAINER_CLASS_POKEFAN_M", "unk2": 0, "items": [], "unkC": 1, @@ -1216,7 +1216,7 @@ { "index": 61, "type": 0, - "class": 21, + "class": "TRAINER_CLASS_POKEFAN_F", "unk2": 0, "items": [], "unkC": 1, @@ -1232,7 +1232,7 @@ { "index": 62, "type": 0, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 1, @@ -1248,7 +1248,7 @@ { "index": 63, "type": 0, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -1264,7 +1264,7 @@ { "index": 64, "type": 0, - "class": 26, + "class": "TRAINER_CLASS_WAITRESS", "unk2": 0, "items": [], "unkC": 1, @@ -1280,7 +1280,7 @@ { "index": 65, "type": 0, - "class": 8, + "class": "TRAINER_CLASS_TWINS", "unk2": 0, "items": [], "unkC": 1, @@ -1301,7 +1301,7 @@ { "index": 66, "type": 1, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 1, @@ -1343,7 +1343,7 @@ { "index": 67, "type": 1, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -1374,7 +1374,7 @@ { "index": 68, "type": 1, - "class": 27, + "class": "TRAINER_CLASS_VETERAN", "unk2": 0, "items": [], "unkC": 1, @@ -1417,7 +1417,7 @@ { "index": 69, "type": 0, - "class": 14, + "class": "TRAINER_CLASS_BLACK_BELT", "unk2": 0, "items": [], "unkC": 1, @@ -1433,7 +1433,7 @@ { "index": 70, "type": 0, - "class": 28, + "class": "TRAINER_CLASS_NINJA_BOY", "unk2": 0, "items": [], "unkC": 1, @@ -1464,7 +1464,7 @@ { "index": 71, "type": 0, - "class": 28, + "class": "TRAINER_CLASS_NINJA_BOY", "unk2": 0, "items": [], "unkC": 1, @@ -1485,7 +1485,7 @@ { "index": 72, "type": 0, - "class": 28, + "class": "TRAINER_CLASS_NINJA_BOY", "unk2": 0, "items": [], "unkC": 1, @@ -1501,7 +1501,7 @@ { "index": 73, "type": 0, - "class": 29, + "class": "TRAINER_CLASS_DRAGON_TAMER", "unk2": 0, "items": [], "unkC": 1, @@ -1517,7 +1517,7 @@ { "index": 74, "type": 0, - "class": 30, + "class": "TRAINER_CLASS_BIRD_KEEPER", "unk2": 0, "items": [], "unkC": 1, @@ -1538,7 +1538,7 @@ { "index": 75, "type": 0, - "class": 31, + "class": "TRAINER_CLASS_DOUBLE_TEAM", "unk2": 0, "items": [], "unkC": 1, @@ -1559,7 +1559,7 @@ { "index": 76, "type": 0, - "class": 30, + "class": "TRAINER_CLASS_BIRD_KEEPER", "unk2": 0, "items": [], "unkC": 1, @@ -1575,7 +1575,7 @@ { "index": 77, "type": 0, - "class": 10, + "class": "TRAINER_CLASS_BATTLE_GIRL", "unk2": 0, "items": [], "unkC": 1, @@ -1591,7 +1591,7 @@ { "index": 78, "type": 0, - "class": 28, + "class": "TRAINER_CLASS_NINJA_BOY", "unk2": 0, "items": [], "unkC": 1, @@ -1617,7 +1617,7 @@ { "index": 79, "type": 0, - "class": 14, + "class": "TRAINER_CLASS_BLACK_BELT", "unk2": 0, "items": [], "unkC": 1, @@ -1643,7 +1643,7 @@ { "index": 80, "type": 0, - "class": 28, + "class": "TRAINER_CLASS_NINJA_BOY", "unk2": 0, "items": [], "unkC": 1, @@ -1664,7 +1664,7 @@ { "index": 81, "type": 0, - "class": 30, + "class": "TRAINER_CLASS_BIRD_KEEPER", "unk2": 0, "items": [], "unkC": 1, @@ -1680,7 +1680,7 @@ { "index": 82, "type": 0, - "class": 32, + "class": "TRAINER_CLASS_RICH_BOY", "unk2": 0, "items": [ "ITEM_FULL_RESTORE" @@ -1698,7 +1698,7 @@ { "index": 83, "type": 0, - "class": 33, + "class": "TRAINER_CLASS_LADY", "unk2": 0, "items": [ "ITEM_FULL_RESTORE" @@ -1716,7 +1716,7 @@ { "index": 84, "type": 0, - "class": 34, + "class": "TRAINER_CLASS_GENTLEMAN", "unk2": 0, "items": [ "ITEM_FULL_RESTORE" @@ -1734,7 +1734,7 @@ { "index": 85, "type": 0, - "class": 35, + "class": "TRAINER_CLASS_SOCIALITE", "unk2": 0, "items": [ "ITEM_FULL_RESTORE" @@ -1752,7 +1752,7 @@ { "index": 86, "type": 0, - "class": 36, + "class": "TRAINER_CLASS_BEAUTY", "unk2": 0, "items": [], "unkC": 1, @@ -1768,7 +1768,7 @@ { "index": 87, "type": 0, - "class": 37, + "class": "TRAINER_CLASS_COLLECTOR", "unk2": 0, "items": [], "unkC": 1, @@ -1784,7 +1784,7 @@ { "index": 88, "type": 0, - "class": 38, + "class": "TRAINER_CLASS_POLICEMAN", "unk2": 0, "items": [], "unkC": 1, @@ -1805,7 +1805,7 @@ { "index": 89, "type": 0, - "class": 38, + "class": "TRAINER_CLASS_POLICEMAN", "unk2": 0, "items": [], "unkC": 1, @@ -1826,7 +1826,7 @@ { "index": 90, "type": 0, - "class": 38, + "class": "TRAINER_CLASS_POLICEMAN", "unk2": 0, "items": [], "unkC": 1, @@ -1847,7 +1847,7 @@ { "index": 91, "type": 0, - "class": 11, + "class": "TRAINER_CLASS_FISHERMAN", "unk2": 0, "items": [], "unkC": 1, @@ -1863,7 +1863,7 @@ { "index": 92, "type": 0, - "class": 11, + "class": "TRAINER_CLASS_FISHERMAN", "unk2": 0, "items": [], "unkC": 1, @@ -1884,7 +1884,7 @@ { "index": 93, "type": 0, - "class": 11, + "class": "TRAINER_CLASS_FISHERMAN", "unk2": 0, "items": [], "unkC": 1, @@ -1915,7 +1915,7 @@ { "index": 94, "type": 0, - "class": 39, + "class": "TRAINER_CLASS_PKMN_RANGER_M", "unk2": 0, "items": [], "unkC": 1, @@ -1936,7 +1936,7 @@ { "index": 95, "type": 0, - "class": 39, + "class": "TRAINER_CLASS_PKMN_RANGER_M", "unk2": 0, "items": [], "unkC": 1, @@ -1957,7 +1957,7 @@ { "index": 96, "type": 0, - "class": 40, + "class": "TRAINER_CLASS_PKMN_RANGER_F", "unk2": 0, "items": [], "unkC": 0, @@ -1978,7 +1978,7 @@ { "index": 97, "type": 0, - "class": 40, + "class": "TRAINER_CLASS_PKMN_RANGER_F", "unk2": 0, "items": [], "unkC": 1, @@ -1994,7 +1994,7 @@ { "index": 98, "type": 0, - "class": 41, + "class": "TRAINER_CLASS_SCIENTIST", "unk2": 0, "items": [], "unkC": 1, @@ -2010,7 +2010,7 @@ { "index": 99, "type": 1, - "class": 41, + "class": "TRAINER_CLASS_SCIENTIST", "unk2": 0, "items": [], "unkC": 1, @@ -2032,7 +2032,7 @@ { "index": 100, "type": 0, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -2048,7 +2048,7 @@ { "index": 101, "type": 0, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -2064,7 +2064,7 @@ { "index": 102, "type": 0, - "class": 38, + "class": "TRAINER_CLASS_POLICEMAN", "unk2": 0, "items": [], "unkC": 1, @@ -2085,7 +2085,7 @@ { "index": 103, "type": 0, - "class": 42, + "class": "TRAINER_CLASS_SWIMMER_M", "unk2": 0, "items": [], "unkC": 1, @@ -2111,7 +2111,7 @@ { "index": 104, "type": 0, - "class": 42, + "class": "TRAINER_CLASS_SWIMMER_M", "unk2": 0, "items": [], "unkC": 1, @@ -2132,7 +2132,7 @@ { "index": 105, "type": 0, - "class": 43, + "class": "TRAINER_CLASS_SWIMMER_F", "unk2": 0, "items": [], "unkC": 1, @@ -2153,7 +2153,7 @@ { "index": 106, "type": 0, - "class": 43, + "class": "TRAINER_CLASS_SWIMMER_F", "unk2": 0, "items": [], "unkC": 1, @@ -2174,7 +2174,7 @@ { "index": 107, "type": 0, - "class": 44, + "class": "TRAINER_CLASS_TUBER_M", "unk2": 0, "items": [], "unkC": 1, @@ -2200,7 +2200,7 @@ { "index": 108, "type": 1, - "class": 45, + "class": "TRAINER_CLASS_TUBER_F", "unk2": 0, "items": [], "unkC": 1, @@ -2222,7 +2222,7 @@ { "index": 109, "type": 0, - "class": 10, + "class": "TRAINER_CLASS_BATTLE_GIRL", "unk2": 0, "items": [], "unkC": 1, @@ -2238,7 +2238,7 @@ { "index": 110, "type": 0, - "class": 46, + "class": "TRAINER_CLASS_SAILOR", "unk2": 0, "items": [], "unkC": 1, @@ -2259,7 +2259,7 @@ { "index": 111, "type": 0, - "class": 11, + "class": "TRAINER_CLASS_FISHERMAN", "unk2": 0, "items": [], "unkC": 1, @@ -2285,7 +2285,7 @@ { "index": 112, "type": 0, - "class": 47, + "class": "TRAINER_CLASS_SIS_AND_BRO", "unk2": 0, "items": [], "unkC": 1, @@ -2306,7 +2306,7 @@ { "index": 113, "type": 0, - "class": 48, + "class": "TRAINER_CLASS_RUIN_MANIAC", "unk2": 0, "items": [], "unkC": 1, @@ -2332,7 +2332,7 @@ { "index": 114, "type": 0, - "class": 48, + "class": "TRAINER_CLASS_RUIN_MANIAC", "unk2": 0, "items": [], "unkC": 1, @@ -2348,7 +2348,7 @@ { "index": 115, "type": 0, - "class": 9, + "class": "TRAINER_CLASS_HIKER", "unk2": 0, "items": [], "unkC": 1, @@ -2364,7 +2364,7 @@ { "index": 116, "type": 0, - "class": 27, + "class": "TRAINER_CLASS_VETERAN", "unk2": 0, "items": [], "unkC": 1, @@ -2380,7 +2380,7 @@ { "index": 117, "type": 0, - "class": 4, + "class": "TRAINER_CLASS_CAMPER", "unk2": 0, "items": [], "unkC": 1, @@ -2396,7 +2396,7 @@ { "index": 118, "type": 0, - "class": 5, + "class": "TRAINER_CLASS_PICNICKER", "unk2": 0, "items": [], "unkC": 1, @@ -2412,7 +2412,7 @@ { "index": 119, "type": 0, - "class": 49, + "class": "TRAINER_CLASS_PSYCHIC_M", "unk2": 0, "items": [], "unkC": 1, @@ -2433,7 +2433,7 @@ { "index": 120, "type": 0, - "class": 50, + "class": "TRAINER_CLASS_PSYCHIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -2459,7 +2459,7 @@ { "index": 121, "type": 1, - "class": 51, + "class": "TRAINER_CLASS_PI", "unk2": 0, "items": [], "unkC": 1, @@ -2497,7 +2497,7 @@ { "index": 122, "type": 0, - "class": 52, + "class": "TRAINER_CLASS_GUITARIST", "unk2": 0, "items": [], "unkC": 1, @@ -2513,7 +2513,7 @@ { "index": 123, "type": 0, - "class": 51, + "class": "TRAINER_CLASS_PI", "unk2": 0, "items": [], "unkC": 1, @@ -2529,7 +2529,7 @@ { "index": 124, "type": 0, - "class": 36, + "class": "TRAINER_CLASS_BEAUTY", "unk2": 0, "items": [], "unkC": 1, @@ -2545,7 +2545,7 @@ { "index": 125, "type": 0, - "class": 36, + "class": "TRAINER_CLASS_BEAUTY", "unk2": 0, "items": [], "unkC": 1, @@ -2561,7 +2561,7 @@ { "index": 126, "type": 0, - "class": 14, + "class": "TRAINER_CLASS_BLACK_BELT", "unk2": 0, "items": [], "unkC": 1, @@ -2577,7 +2577,7 @@ { "index": 127, "type": 0, - "class": 14, + "class": "TRAINER_CLASS_BLACK_BELT", "unk2": 0, "items": [], "unkC": 1, @@ -2603,7 +2603,7 @@ { "index": 128, "type": 0, - "class": 14, + "class": "TRAINER_CLASS_BLACK_BELT", "unk2": 0, "items": [], "unkC": 1, @@ -2619,7 +2619,7 @@ { "index": 129, "type": 0, - "class": 14, + "class": "TRAINER_CLASS_BLACK_BELT", "unk2": 0, "items": [], "unkC": 1, @@ -2645,7 +2645,7 @@ { "index": 130, "type": 0, - "class": 19, + "class": "TRAINER_CLASS_JOGGER", "unk2": 0, "items": [], "unkC": 1, @@ -2661,7 +2661,7 @@ { "index": 131, "type": 0, - "class": 30, + "class": "TRAINER_CLASS_BIRD_KEEPER", "unk2": 0, "items": [], "unkC": 1, @@ -2677,7 +2677,7 @@ { "index": 132, "type": 1, - "class": 53, + "class": "TRAINER_CLASS_ACE_TRAINER_SNOW_M", "unk2": 0, "items": [], "unkC": 1, @@ -2710,7 +2710,7 @@ { "index": 133, "type": 1, - "class": 53, + "class": "TRAINER_CLASS_ACE_TRAINER_SNOW_M", "unk2": 0, "items": [], "unkC": 1, @@ -2754,7 +2754,7 @@ { "index": 134, "type": 1, - "class": 54, + "class": "TRAINER_CLASS_ACE_TRAINER_SNOW_F", "unk2": 0, "items": [], "unkC": 1, @@ -2776,7 +2776,7 @@ { "index": 135, "type": 1, - "class": 54, + "class": "TRAINER_CLASS_ACE_TRAINER_SNOW_F", "unk2": 0, "items": [], "unkC": 1, @@ -2820,7 +2820,7 @@ { "index": 136, "type": 0, - "class": 55, + "class": "TRAINER_CLASS_SKIER_M", "unk2": 0, "items": [], "unkC": 1, @@ -2846,7 +2846,7 @@ { "index": 137, "type": 0, - "class": 55, + "class": "TRAINER_CLASS_SKIER_M", "unk2": 0, "items": [], "unkC": 1, @@ -2862,7 +2862,7 @@ { "index": 138, "type": 0, - "class": 56, + "class": "TRAINER_CLASS_SKIER_F", "unk2": 0, "items": [], "unkC": 1, @@ -2883,7 +2883,7 @@ { "index": 139, "type": 0, - "class": 56, + "class": "TRAINER_CLASS_SKIER_F", "unk2": 0, "items": [], "unkC": 1, @@ -2899,7 +2899,7 @@ { "index": 140, "type": 1, - "class": 53, + "class": "TRAINER_CLASS_ACE_TRAINER_SNOW_M", "unk2": 0, "items": [], "unkC": 1, @@ -2943,7 +2943,7 @@ { "index": 141, "type": 1, - "class": 54, + "class": "TRAINER_CLASS_ACE_TRAINER_SNOW_F", "unk2": 0, "items": [], "unkC": 1, @@ -2976,7 +2976,7 @@ { "index": 142, "type": 0, - "class": 55, + "class": "TRAINER_CLASS_SKIER_M", "unk2": 0, "items": [], "unkC": 1, @@ -3007,7 +3007,7 @@ { "index": 143, "type": 0, - "class": 55, + "class": "TRAINER_CLASS_SKIER_M", "unk2": 0, "items": [], "unkC": 1, @@ -3028,7 +3028,7 @@ { "index": 144, "type": 0, - "class": 56, + "class": "TRAINER_CLASS_SKIER_F", "unk2": 0, "items": [], "unkC": 1, @@ -3049,7 +3049,7 @@ { "index": 145, "type": 0, - "class": 56, + "class": "TRAINER_CLASS_SKIER_F", "unk2": 0, "items": [], "unkC": 1, @@ -3065,7 +3065,7 @@ { "index": 146, "type": 0, - "class": 28, + "class": "TRAINER_CLASS_NINJA_BOY", "unk2": 0, "items": [], "unkC": 1, @@ -3096,7 +3096,7 @@ { "index": 147, "type": 0, - "class": 28, + "class": "TRAINER_CLASS_NINJA_BOY", "unk2": 0, "items": [], "unkC": 1, @@ -3117,7 +3117,7 @@ { "index": 148, "type": 0, - "class": 14, + "class": "TRAINER_CLASS_BLACK_BELT", "unk2": 0, "items": [], "unkC": 1, @@ -3143,7 +3143,7 @@ { "index": 149, "type": 0, - "class": 42, + "class": "TRAINER_CLASS_SWIMMER_M", "unk2": 0, "items": [], "unkC": 1, @@ -3159,7 +3159,7 @@ { "index": 150, "type": 0, - "class": 42, + "class": "TRAINER_CLASS_SWIMMER_M", "unk2": 0, "items": [], "unkC": 1, @@ -3175,7 +3175,7 @@ { "index": 151, "type": 0, - "class": 43, + "class": "TRAINER_CLASS_SWIMMER_F", "unk2": 0, "items": [], "unkC": 1, @@ -3191,7 +3191,7 @@ { "index": 152, "type": 0, - "class": 43, + "class": "TRAINER_CLASS_SWIMMER_F", "unk2": 0, "items": [], "unkC": 1, @@ -3207,7 +3207,7 @@ { "index": 153, "type": 0, - "class": 11, + "class": "TRAINER_CLASS_FISHERMAN", "unk2": 0, "items": [], "unkC": 1, @@ -3228,7 +3228,7 @@ { "index": 154, "type": 0, - "class": 11, + "class": "TRAINER_CLASS_FISHERMAN", "unk2": 0, "items": [], "unkC": 1, @@ -3264,7 +3264,7 @@ { "index": 155, "type": 0, - "class": 47, + "class": "TRAINER_CLASS_SIS_AND_BRO", "unk2": 0, "items": [], "unkC": 1, @@ -3285,7 +3285,7 @@ { "index": 156, "type": 0, - "class": 42, + "class": "TRAINER_CLASS_SWIMMER_M", "unk2": 0, "items": [], "unkC": 1, @@ -3301,7 +3301,7 @@ { "index": 157, "type": 0, - "class": 42, + "class": "TRAINER_CLASS_SWIMMER_M", "unk2": 0, "items": [], "unkC": 1, @@ -3317,7 +3317,7 @@ { "index": 158, "type": 0, - "class": 43, + "class": "TRAINER_CLASS_SWIMMER_F", "unk2": 0, "items": [], "unkC": 1, @@ -3333,7 +3333,7 @@ { "index": 159, "type": 0, - "class": 42, + "class": "TRAINER_CLASS_SWIMMER_M", "unk2": 0, "items": [], "unkC": 1, @@ -3359,7 +3359,7 @@ { "index": 160, "type": 0, - "class": 42, + "class": "TRAINER_CLASS_SWIMMER_M", "unk2": 0, "items": [], "unkC": 1, @@ -3375,7 +3375,7 @@ { "index": 161, "type": 0, - "class": 42, + "class": "TRAINER_CLASS_SWIMMER_M", "unk2": 0, "items": [], "unkC": 1, @@ -3396,7 +3396,7 @@ { "index": 162, "type": 0, - "class": 43, + "class": "TRAINER_CLASS_SWIMMER_F", "unk2": 0, "items": [], "unkC": 1, @@ -3427,7 +3427,7 @@ { "index": 163, "type": 0, - "class": 43, + "class": "TRAINER_CLASS_SWIMMER_F", "unk2": 0, "items": [], "unkC": 1, @@ -3448,7 +3448,7 @@ { "index": 164, "type": 1, - "class": 43, + "class": "TRAINER_CLASS_SWIMMER_F", "unk2": 0, "items": [], "unkC": 1, @@ -3492,7 +3492,7 @@ { "index": 165, "type": 0, - "class": 47, + "class": "TRAINER_CLASS_SIS_AND_BRO", "unk2": 0, "items": [], "unkC": 1, @@ -3513,7 +3513,7 @@ { "index": 166, "type": 0, - "class": 42, + "class": "TRAINER_CLASS_SWIMMER_M", "unk2": 0, "items": [], "unkC": 1, @@ -3534,7 +3534,7 @@ { "index": 167, "type": 0, - "class": 43, + "class": "TRAINER_CLASS_SWIMMER_F", "unk2": 0, "items": [], "unkC": 1, @@ -3550,7 +3550,7 @@ { "index": 168, "type": 0, - "class": 11, + "class": "TRAINER_CLASS_FISHERMAN", "unk2": 0, "items": [], "unkC": 1, @@ -3576,7 +3576,7 @@ { "index": 169, "type": 0, - "class": 48, + "class": "TRAINER_CLASS_RUIN_MANIAC", "unk2": 0, "items": [], "unkC": 1, @@ -3592,7 +3592,7 @@ { "index": 170, "type": 1, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 1, @@ -3624,7 +3624,7 @@ { "index": 171, "type": 1, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -3665,7 +3665,7 @@ { "index": 172, "type": 0, - "class": 11, + "class": "TRAINER_CLASS_FISHERMAN", "unk2": 0, "items": [], "unkC": 1, @@ -3691,7 +3691,7 @@ { "index": 173, "type": 0, - "class": 11, + "class": "TRAINER_CLASS_FISHERMAN", "unk2": 0, "items": [], "unkC": 1, @@ -3712,7 +3712,7 @@ { "index": 174, "type": 0, - "class": 11, + "class": "TRAINER_CLASS_FISHERMAN", "unk2": 0, "items": [], "unkC": 1, @@ -3743,7 +3743,7 @@ { "index": 175, "type": 0, - "class": 11, + "class": "TRAINER_CLASS_FISHERMAN", "unk2": 0, "items": [], "unkC": 1, @@ -3769,7 +3769,7 @@ { "index": 176, "type": 0, - "class": 57, + "class": "TRAINER_CLASS_ROUGHNECK", "unk2": 0, "items": [], "unkC": 1, @@ -3785,7 +3785,7 @@ { "index": 177, "type": 0, - "class": 57, + "class": "TRAINER_CLASS_ROUGHNECK", "unk2": 0, "items": [], "unkC": 1, @@ -3801,7 +3801,7 @@ { "index": 178, "type": 0, - "class": 52, + "class": "TRAINER_CLASS_GUITARIST", "unk2": 0, "items": [], "unkC": 1, @@ -3817,7 +3817,7 @@ { "index": 179, "type": 0, - "class": 58, + "class": "TRAINER_CLASS_CLOWN", "unk2": 0, "items": [], "unkC": 1, @@ -3833,7 +3833,7 @@ { "index": 180, "type": 0, - "class": 46, + "class": "TRAINER_CLASS_SAILOR", "unk2": 0, "items": [], "unkC": 1, @@ -3859,7 +3859,7 @@ { "index": 181, "type": 0, - "class": 15, + "class": "TRAINER_CLASS_ARTIST", "unk2": 0, "items": [], "unkC": 1, @@ -3875,7 +3875,7 @@ { "index": 182, "type": 0, - "class": 23, + "class": "TRAINER_CLASS_YOUNG_COUPLE", "unk2": 0, "items": [], "unkC": 1, @@ -3896,7 +3896,7 @@ { "index": 183, "type": 0, - "class": 42, + "class": "TRAINER_CLASS_SWIMMER_M", "unk2": 0, "items": [], "unkC": 1, @@ -3917,7 +3917,7 @@ { "index": 184, "type": 0, - "class": 42, + "class": "TRAINER_CLASS_SWIMMER_M", "unk2": 0, "items": [], "unkC": 1, @@ -3933,7 +3933,7 @@ { "index": 185, "type": 0, - "class": 42, + "class": "TRAINER_CLASS_SWIMMER_M", "unk2": 0, "items": [], "unkC": 1, @@ -3954,7 +3954,7 @@ { "index": 186, "type": 0, - "class": 42, + "class": "TRAINER_CLASS_SWIMMER_M", "unk2": 0, "items": [], "unkC": 1, @@ -3980,7 +3980,7 @@ { "index": 187, "type": 0, - "class": 42, + "class": "TRAINER_CLASS_SWIMMER_M", "unk2": 0, "items": [], "unkC": 1, @@ -3996,7 +3996,7 @@ { "index": 188, "type": 0, - "class": 42, + "class": "TRAINER_CLASS_SWIMMER_M", "unk2": 0, "items": [], "unkC": 1, @@ -4022,7 +4022,7 @@ { "index": 189, "type": 0, - "class": 43, + "class": "TRAINER_CLASS_SWIMMER_F", "unk2": 0, "items": [], "unkC": 1, @@ -4038,7 +4038,7 @@ { "index": 190, "type": 0, - "class": 43, + "class": "TRAINER_CLASS_SWIMMER_F", "unk2": 0, "items": [], "unkC": 1, @@ -4059,7 +4059,7 @@ { "index": 191, "type": 0, - "class": 43, + "class": "TRAINER_CLASS_SWIMMER_F", "unk2": 0, "items": [], "unkC": 1, @@ -4085,7 +4085,7 @@ { "index": 192, "type": 0, - "class": 43, + "class": "TRAINER_CLASS_SWIMMER_F", "unk2": 0, "items": [], "unkC": 1, @@ -4106,7 +4106,7 @@ { "index": 193, "type": 0, - "class": 43, + "class": "TRAINER_CLASS_SWIMMER_F", "unk2": 0, "items": [], "unkC": 1, @@ -4127,7 +4127,7 @@ { "index": 194, "type": 0, - "class": 43, + "class": "TRAINER_CLASS_SWIMMER_F", "unk2": 0, "items": [], "unkC": 1, @@ -4143,7 +4143,7 @@ { "index": 195, "type": 1, - "class": 59, + "class": "TRAINER_CLASS_WORKER", "unk2": 0, "items": [], "unkC": 1, @@ -4174,7 +4174,7 @@ { "index": 196, "type": 1, - "class": 59, + "class": "TRAINER_CLASS_WORKER", "unk2": 0, "items": [], "unkC": 1, @@ -4194,7 +4194,7 @@ { "index": 197, "type": 0, - "class": 59, + "class": "TRAINER_CLASS_WORKER", "unk2": 0, "items": [], "unkC": 1, @@ -4210,7 +4210,7 @@ { "index": 198, "type": 0, - "class": 41, + "class": "TRAINER_CLASS_SCIENTIST", "unk2": 0, "items": [], "unkC": 1, @@ -4226,7 +4226,7 @@ { "index": 199, "type": 0, - "class": 41, + "class": "TRAINER_CLASS_SCIENTIST", "unk2": 0, "items": [], "unkC": 1, @@ -4242,7 +4242,7 @@ { "index": 200, "type": 0, - "class": 41, + "class": "TRAINER_CLASS_SCIENTIST", "unk2": 0, "items": [], "unkC": 1, @@ -4258,7 +4258,7 @@ { "index": 201, "type": 0, - "class": 6, + "class": "TRAINER_CLASS_BUG_CATCHER", "unk2": 0, "items": [], "unkC": 1, @@ -4284,7 +4284,7 @@ { "index": 202, "type": 0, - "class": 6, + "class": "TRAINER_CLASS_BUG_CATCHER", "unk2": 0, "items": [], "unkC": 1, @@ -4310,7 +4310,7 @@ { "index": 203, "type": 0, - "class": 6, + "class": "TRAINER_CLASS_BUG_CATCHER", "unk2": 0, "items": [], "unkC": 1, @@ -4331,7 +4331,7 @@ { "index": 204, "type": 0, - "class": 3, + "class": "TRAINER_CLASS_LASS", "unk2": 0, "items": [], "unkC": 1, @@ -4347,7 +4347,7 @@ { "index": 205, "type": 1, - "class": 49, + "class": "TRAINER_CLASS_PSYCHIC_M", "unk2": 0, "items": [], "unkC": 1, @@ -4366,7 +4366,7 @@ { "index": 206, "type": 1, - "class": 50, + "class": "TRAINER_CLASS_PSYCHIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -4385,7 +4385,7 @@ { "index": 207, "type": 0, - "class": 23, + "class": "TRAINER_CLASS_YOUNG_COUPLE", "unk2": 0, "items": [], "unkC": 1, @@ -4406,7 +4406,7 @@ { "index": 208, "type": 0, - "class": 59, + "class": "TRAINER_CLASS_WORKER", "unk2": 0, "items": [], "unkC": 1, @@ -4422,7 +4422,7 @@ { "index": 209, "type": 0, - "class": 59, + "class": "TRAINER_CLASS_WORKER", "unk2": 0, "items": [], "unkC": 1, @@ -4438,7 +4438,7 @@ { "index": 210, "type": 0, - "class": 59, + "class": "TRAINER_CLASS_WORKER", "unk2": 0, "items": [], "unkC": 1, @@ -4454,7 +4454,7 @@ { "index": 211, "type": 0, - "class": 53, + "class": "TRAINER_CLASS_ACE_TRAINER_SNOW_M", "unk2": 0, "items": [], "unkC": 1, @@ -4470,7 +4470,7 @@ { "index": 212, "type": 0, - "class": 53, + "class": "TRAINER_CLASS_ACE_TRAINER_SNOW_M", "unk2": 0, "items": [], "unkC": 1, @@ -4486,7 +4486,7 @@ { "index": 213, "type": 0, - "class": 54, + "class": "TRAINER_CLASS_ACE_TRAINER_SNOW_F", "unk2": 0, "items": [], "unkC": 1, @@ -4502,7 +4502,7 @@ { "index": 214, "type": 0, - "class": 54, + "class": "TRAINER_CLASS_ACE_TRAINER_SNOW_F", "unk2": 0, "items": [], "unkC": 1, @@ -4518,7 +4518,7 @@ { "index": 215, "type": 0, - "class": 27, + "class": "TRAINER_CLASS_VETERAN", "unk2": 0, "items": [], "unkC": 1, @@ -4534,7 +4534,7 @@ { "index": 216, "type": 0, - "class": 27, + "class": "TRAINER_CLASS_VETERAN", "unk2": 0, "items": [], "unkC": 1, @@ -4550,7 +4550,7 @@ { "index": 217, "type": 0, - "class": 49, + "class": "TRAINER_CLASS_PSYCHIC_M", "unk2": 0, "items": [], "unkC": 1, @@ -4566,7 +4566,7 @@ { "index": 218, "type": 0, - "class": 50, + "class": "TRAINER_CLASS_PSYCHIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -4582,7 +4582,7 @@ { "index": 219, "type": 0, - "class": 29, + "class": "TRAINER_CLASS_DRAGON_TAMER", "unk2": 0, "items": [], "unkC": 1, @@ -4598,7 +4598,7 @@ { "index": 220, "type": 0, - "class": 46, + "class": "TRAINER_CLASS_SAILOR", "unk2": 0, "items": [], "unkC": 1, @@ -4614,7 +4614,7 @@ { "index": 221, "type": 0, - "class": 60, + "class": "TRAINER_CLASS_SCHOOL_KID_M", "unk2": 0, "items": [], "unkC": 1, @@ -4630,7 +4630,7 @@ { "index": 222, "type": 0, - "class": 61, + "class": "TRAINER_CLASS_SCHOOL_KID_F", "unk2": 0, "items": [], "unkC": 1, @@ -4646,7 +4646,7 @@ { "index": 223, "type": 0, - "class": 23, + "class": "TRAINER_CLASS_YOUNG_COUPLE", "unk2": 0, "items": [], "unkC": 1, @@ -4667,7 +4667,7 @@ { "index": 224, "type": 1, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 1, @@ -4711,7 +4711,7 @@ { "index": 225, "type": 1, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 1, @@ -4733,7 +4733,7 @@ { "index": 226, "type": 1, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -4766,7 +4766,7 @@ { "index": 227, "type": 1, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -4799,7 +4799,7 @@ { "index": 228, "type": 1, - "class": 27, + "class": "TRAINER_CLASS_VETERAN", "unk2": 0, "items": [], "unkC": 1, @@ -4843,7 +4843,7 @@ { "index": 229, "type": 1, - "class": 27, + "class": "TRAINER_CLASS_VETERAN", "unk2": 0, "items": [], "unkC": 1, @@ -4876,7 +4876,7 @@ { "index": 230, "type": 0, - "class": 29, + "class": "TRAINER_CLASS_DRAGON_TAMER", "unk2": 0, "items": [], "unkC": 1, @@ -4892,7 +4892,7 @@ { "index": 231, "type": 0, - "class": 29, + "class": "TRAINER_CLASS_DRAGON_TAMER", "unk2": 0, "items": [], "unkC": 1, @@ -4918,7 +4918,7 @@ { "index": 232, "type": 1, - "class": 14, + "class": "TRAINER_CLASS_BLACK_BELT", "unk2": 0, "items": [], "unkC": 1, @@ -4951,7 +4951,7 @@ { "index": 233, "type": 0, - "class": 30, + "class": "TRAINER_CLASS_BIRD_KEEPER", "unk2": 0, "items": [], "unkC": 1, @@ -4972,7 +4972,7 @@ { "index": 234, "type": 0, - "class": 49, + "class": "TRAINER_CLASS_PSYCHIC_M", "unk2": 0, "items": [], "unkC": 1, @@ -4998,7 +4998,7 @@ { "index": 235, "type": 0, - "class": 50, + "class": "TRAINER_CLASS_PSYCHIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -5019,7 +5019,7 @@ { "index": 236, "type": 0, - "class": 31, + "class": "TRAINER_CLASS_DOUBLE_TEAM", "unk2": 0, "items": [], "unkC": 1, @@ -5040,7 +5040,7 @@ { "index": 237, "type": 0, - "class": 31, + "class": "TRAINER_CLASS_DOUBLE_TEAM", "unk2": 0, "items": [], "unkC": 1, @@ -5061,7 +5061,7 @@ { "index": 238, "type": 0, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -5077,7 +5077,7 @@ { "index": 239, "type": 0, - "class": 3, + "class": "TRAINER_CLASS_LASS", "unk2": 0, "items": [], "unkC": 1, @@ -5093,7 +5093,7 @@ { "index": 240, "type": 1, - "class": 27, + "class": "TRAINER_CLASS_VETERAN", "unk2": 0, "items": [], "unkC": 1, @@ -5137,7 +5137,7 @@ { "index": 241, "type": 0, - "class": 11, + "class": "TRAINER_CLASS_FISHERMAN", "unk2": 0, "items": [], "unkC": 1, @@ -5153,7 +5153,7 @@ { "index": 242, "type": 0, - "class": 46, + "class": "TRAINER_CLASS_SAILOR", "unk2": 0, "items": [], "unkC": 1, @@ -5169,7 +5169,7 @@ { "index": 243, "type": 0, - "class": 36, + "class": "TRAINER_CLASS_BEAUTY", "unk2": 0, "items": [], "unkC": 1, @@ -5185,7 +5185,7 @@ { "index": 244, "type": 1, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -5205,7 +5205,7 @@ { "index": 245, "type": 1, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -5235,7 +5235,7 @@ { "index": 246, "type": 1, - "class": 62, + "class": "TRAINER_CLASS_LEADER_ROARK", "unk2": 0, "items": [ "ITEM_POTION", @@ -5278,7 +5278,7 @@ { "index": 247, "type": 1, - "class": 63, + "class": "TRAINER_CLASS_PKMN_TRAINER_BARRY", "unk2": 0, "items": [], "unkC": 1, @@ -5307,7 +5307,7 @@ { "index": 248, "type": 1, - "class": 63, + "class": "TRAINER_CLASS_PKMN_TRAINER_BARRY", "unk2": 0, "items": [], "unkC": 1, @@ -5336,7 +5336,7 @@ { "index": 249, "type": 1, - "class": 63, + "class": "TRAINER_CLASS_PKMN_TRAINER_BARRY", "unk2": 0, "items": [], "unkC": 1, @@ -5365,7 +5365,7 @@ { "index": 250, "type": 3, - "class": 64, + "class": "TRAINER_CLASS_LEADER_BYRON", "unk2": 0, "items": [ "ITEM_HYPER_POTION", @@ -5415,7 +5415,7 @@ { "index": 251, "type": 0, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -5431,7 +5431,7 @@ { "index": 252, "type": 0, - "class": 4, + "class": "TRAINER_CLASS_CAMPER", "unk2": 0, "items": [], "unkC": 1, @@ -5447,7 +5447,7 @@ { "index": 253, "type": 0, - "class": 4, + "class": "TRAINER_CLASS_CAMPER", "unk2": 0, "items": [], "unkC": 1, @@ -5463,7 +5463,7 @@ { "index": 254, "type": 0, - "class": 4, + "class": "TRAINER_CLASS_CAMPER", "unk2": 0, "items": [], "unkC": 1, @@ -5479,7 +5479,7 @@ { "index": 255, "type": 0, - "class": 4, + "class": "TRAINER_CLASS_CAMPER", "unk2": 0, "items": [], "unkC": 1, @@ -5495,7 +5495,7 @@ { "index": 256, "type": 1, - "class": 59, + "class": "TRAINER_CLASS_WORKER", "unk2": 0, "items": [], "unkC": 1, @@ -5536,7 +5536,7 @@ { "index": 257, "type": 1, - "class": 59, + "class": "TRAINER_CLASS_WORKER", "unk2": 0, "items": [], "unkC": 1, @@ -5557,7 +5557,7 @@ { "index": 258, "type": 0, - "class": 14, + "class": "TRAINER_CLASS_BLACK_BELT", "unk2": 0, "items": [], "unkC": 1, @@ -5573,7 +5573,7 @@ { "index": 259, "type": 1, - "class": 7, + "class": "TRAINER_CLASS_AROMA_LADY", "unk2": 0, "items": [], "unkC": 1, @@ -5614,7 +5614,7 @@ { "index": 260, "type": 1, - "class": 7, + "class": "TRAINER_CLASS_AROMA_LADY", "unk2": 0, "items": [], "unkC": 1, @@ -5634,7 +5634,7 @@ { "index": 261, "type": 3, - "class": 65, + "class": "TRAINER_CLASS_ELITE_FOUR_AARON", "unk2": 0, "items": [ "ITEM_FULL_RESTORE", @@ -5708,7 +5708,7 @@ { "index": 262, "type": 3, - "class": 66, + "class": "TRAINER_CLASS_ELITE_FOUR_BERTHA", "unk2": 0, "items": [ "ITEM_FULL_RESTORE", @@ -5782,7 +5782,7 @@ { "index": 263, "type": 3, - "class": 67, + "class": "TRAINER_CLASS_ELITE_FOUR_FLINT", "unk2": 0, "items": [ "ITEM_FULL_RESTORE", @@ -5856,7 +5856,7 @@ { "index": 264, "type": 3, - "class": 68, + "class": "TRAINER_CLASS_ELITE_FOUR_LUCIEN", "unk2": 0, "items": [ "ITEM_FULL_RESTORE", @@ -5930,7 +5930,7 @@ { "index": 265, "type": 0, - "class": 4, + "class": "TRAINER_CLASS_CAMPER", "unk2": 0, "items": [], "unkC": 1, @@ -5946,7 +5946,7 @@ { "index": 266, "type": 1, - "class": 4, + "class": "TRAINER_CLASS_CAMPER", "unk2": 0, "items": [], "unkC": 1, @@ -5987,7 +5987,7 @@ { "index": 267, "type": 3, - "class": 69, + "class": "TRAINER_CLASS_CHAMPION", "unk2": 0, "items": [ "ITEM_FULL_RESTORE", @@ -6075,7 +6075,7 @@ { "index": 268, "type": 1, - "class": 53, + "class": "TRAINER_CLASS_ACE_TRAINER_SNOW_M", "unk2": 0, "items": [], "unkC": 1, @@ -6108,7 +6108,7 @@ { "index": 269, "type": 1, - "class": 53, + "class": "TRAINER_CLASS_ACE_TRAINER_SNOW_M", "unk2": 0, "items": [], "unkC": 1, @@ -6130,7 +6130,7 @@ { "index": 270, "type": 1, - "class": 54, + "class": "TRAINER_CLASS_ACE_TRAINER_SNOW_F", "unk2": 0, "items": [], "unkC": 1, @@ -6174,7 +6174,7 @@ { "index": 271, "type": 1, - "class": 54, + "class": "TRAINER_CLASS_ACE_TRAINER_SNOW_F", "unk2": 0, "items": [], "unkC": 1, @@ -6206,7 +6206,7 @@ { "index": 272, "type": 0, - "class": 37, + "class": "TRAINER_CLASS_COLLECTOR", "unk2": 0, "items": [], "unkC": 1, @@ -6232,7 +6232,7 @@ { "index": 273, "type": 0, - "class": 37, + "class": "TRAINER_CLASS_COLLECTOR", "unk2": 0, "items": [], "unkC": 1, @@ -6258,7 +6258,7 @@ { "index": 274, "type": 0, - "class": 37, + "class": "TRAINER_CLASS_COLLECTOR", "unk2": 0, "items": [], "unkC": 1, @@ -6284,7 +6284,7 @@ { "index": 275, "type": 0, - "class": 37, + "class": "TRAINER_CLASS_COLLECTOR", "unk2": 0, "items": [], "unkC": 1, @@ -6310,7 +6310,7 @@ { "index": 276, "type": 0, - "class": 37, + "class": "TRAINER_CLASS_COLLECTOR", "unk2": 0, "items": [], "unkC": 1, @@ -6336,7 +6336,7 @@ { "index": 277, "type": 0, - "class": 29, + "class": "TRAINER_CLASS_DRAGON_TAMER", "unk2": 0, "items": [], "unkC": 1, @@ -6357,7 +6357,7 @@ { "index": 278, "type": 1, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 1, @@ -6388,7 +6388,7 @@ { "index": 279, "type": 1, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 1, @@ -6421,7 +6421,7 @@ { "index": 280, "type": 1, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 1, @@ -6465,7 +6465,7 @@ { "index": 281, "type": 1, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 1, @@ -6497,7 +6497,7 @@ { "index": 282, "type": 1, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 1, @@ -6529,7 +6529,7 @@ { "index": 283, "type": 1, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -6551,7 +6551,7 @@ { "index": 284, "type": 1, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -6584,7 +6584,7 @@ { "index": 285, "type": 1, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -6617,7 +6617,7 @@ { "index": 286, "type": 1, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -6639,7 +6639,7 @@ { "index": 287, "type": 1, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -6671,7 +6671,7 @@ { "index": 288, "type": 0, - "class": 49, + "class": "TRAINER_CLASS_PSYCHIC_M", "unk2": 0, "items": [], "unkC": 1, @@ -6692,7 +6692,7 @@ { "index": 289, "type": 0, - "class": 50, + "class": "TRAINER_CLASS_PSYCHIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -6713,7 +6713,7 @@ { "index": 290, "type": 0, - "class": 70, + "class": "TRAINER_CLASS_BELLE__PA", "unk2": 0, "items": [], "unkC": 1, @@ -6734,7 +6734,7 @@ { "index": 291, "type": 0, - "class": 71, + "class": "TRAINER_CLASS_RANCHER", "unk2": 0, "items": [], "unkC": 1, @@ -6750,7 +6750,7 @@ { "index": 292, "type": 0, - "class": 71, + "class": "TRAINER_CLASS_RANCHER", "unk2": 0, "items": [], "unkC": 1, @@ -6776,7 +6776,7 @@ { "index": 293, "type": 1, - "class": 11, + "class": "TRAINER_CLASS_FISHERMAN", "unk2": 0, "items": [], "unkC": 1, @@ -6817,7 +6817,7 @@ { "index": 294, "type": 0, - "class": 8, + "class": "TRAINER_CLASS_TWINS", "unk2": 0, "items": [], "unkC": 1, @@ -6838,7 +6838,7 @@ { "index": 295, "type": 3, - "class": 72, + "class": "TRAINER_CLASS_COMMANDER_MARS", "unk2": 0, "items": [], "unkC": 1, @@ -6871,7 +6871,7 @@ { "index": 296, "type": 1, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -6900,7 +6900,7 @@ { "index": 297, "type": 1, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -6920,7 +6920,7 @@ { "index": 298, "type": 1, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -6941,7 +6941,7 @@ { "index": 299, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -6962,7 +6962,7 @@ { "index": 300, "type": 0, - "class": 52, + "class": "TRAINER_CLASS_GUITARIST", "unk2": 0, "items": [], "unkC": 1, @@ -6978,7 +6978,7 @@ { "index": 301, "type": 1, - "class": 52, + "class": "TRAINER_CLASS_GUITARIST", "unk2": 0, "items": [], "unkC": 1, @@ -6999,7 +6999,7 @@ { "index": 302, "type": 1, - "class": 52, + "class": "TRAINER_CLASS_GUITARIST", "unk2": 0, "items": [], "unkC": 1, @@ -7031,7 +7031,7 @@ { "index": 303, "type": 1, - "class": 52, + "class": "TRAINER_CLASS_GUITARIST", "unk2": 0, "items": [], "unkC": 1, @@ -7053,7 +7053,7 @@ { "index": 304, "type": 0, - "class": 48, + "class": "TRAINER_CLASS_RUIN_MANIAC", "unk2": 0, "items": [], "unkC": 1, @@ -7074,7 +7074,7 @@ { "index": 305, "type": 0, - "class": 48, + "class": "TRAINER_CLASS_RUIN_MANIAC", "unk2": 0, "items": [], "unkC": 1, @@ -7090,7 +7090,7 @@ { "index": 306, "type": 0, - "class": 19, + "class": "TRAINER_CLASS_JOGGER", "unk2": 0, "items": [], "unkC": 1, @@ -7106,7 +7106,7 @@ { "index": 307, "type": 0, - "class": 19, + "class": "TRAINER_CLASS_JOGGER", "unk2": 0, "items": [], "unkC": 1, @@ -7132,7 +7132,7 @@ { "index": 308, "type": 0, - "class": 19, + "class": "TRAINER_CLASS_JOGGER", "unk2": 0, "items": [], "unkC": 1, @@ -7148,7 +7148,7 @@ { "index": 309, "type": 1, - "class": 14, + "class": "TRAINER_CLASS_BLACK_BELT", "unk2": 0, "items": [], "unkC": 1, @@ -7186,7 +7186,7 @@ { "index": 310, "type": 1, - "class": 14, + "class": "TRAINER_CLASS_BLACK_BELT", "unk2": 0, "items": [], "unkC": 1, @@ -7224,7 +7224,7 @@ { "index": 311, "type": 1, - "class": 14, + "class": "TRAINER_CLASS_BLACK_BELT", "unk2": 0, "items": [], "unkC": 1, @@ -7246,7 +7246,7 @@ { "index": 312, "type": 1, - "class": 14, + "class": "TRAINER_CLASS_BLACK_BELT", "unk2": 0, "items": [], "unkC": 1, @@ -7277,7 +7277,7 @@ { "index": 313, "type": 0, - "class": 14, + "class": "TRAINER_CLASS_BLACK_BELT", "unk2": 0, "items": [], "unkC": 1, @@ -7298,7 +7298,7 @@ { "index": 314, "type": 1, - "class": 14, + "class": "TRAINER_CLASS_BLACK_BELT", "unk2": 0, "items": [], "unkC": 1, @@ -7320,7 +7320,7 @@ { "index": 315, "type": 3, - "class": 74, + "class": "TRAINER_CLASS_LEADER_GARDENIA", "unk2": 0, "items": [ "ITEM_SUPER_POTION", @@ -7370,7 +7370,7 @@ { "index": 316, "type": 3, - "class": 75, + "class": "TRAINER_CLASS_LEADER_WAKE", "unk2": 0, "items": [ "ITEM_SUPER_POTION", @@ -7420,7 +7420,7 @@ { "index": 317, "type": 3, - "class": 76, + "class": "TRAINER_CLASS_LEADER_MAYLENE", "unk2": 0, "items": [ "ITEM_HYPER_POTION", @@ -7470,7 +7470,7 @@ { "index": 318, "type": 3, - "class": 77, + "class": "TRAINER_CLASS_LEADER_FANTINA", "unk2": 0, "items": [ "ITEM_HYPER_POTION", @@ -7520,7 +7520,7 @@ { "index": 319, "type": 3, - "class": 78, + "class": "TRAINER_CLASS_LEADER_CANDICE", "unk2": 0, "items": [ "ITEM_HYPER_POTION", @@ -7582,7 +7582,7 @@ { "index": 320, "type": 3, - "class": 79, + "class": "TRAINER_CLASS_LEADER_VOLKNER", "unk2": 0, "items": [ "ITEM_HYPER_POTION", @@ -7644,7 +7644,7 @@ { "index": 321, "type": 0, - "class": 3, + "class": "TRAINER_CLASS_LASS", "unk2": 0, "items": [], "unkC": 1, @@ -7660,7 +7660,7 @@ { "index": 322, "type": 0, - "class": 3, + "class": "TRAINER_CLASS_LASS", "unk2": 0, "items": [], "unkC": 1, @@ -7681,7 +7681,7 @@ { "index": 323, "type": 0, - "class": 3, + "class": "TRAINER_CLASS_LASS", "unk2": 0, "items": [], "unkC": 1, @@ -7707,7 +7707,7 @@ { "index": 324, "type": 1, - "class": 3, + "class": "TRAINER_CLASS_LASS", "unk2": 0, "items": [], "unkC": 1, @@ -7737,7 +7737,7 @@ { "index": 325, "type": 1, - "class": 3, + "class": "TRAINER_CLASS_LASS", "unk2": 0, "items": [], "unkC": 1, @@ -7758,7 +7758,7 @@ { "index": 326, "type": 0, - "class": 9, + "class": "TRAINER_CLASS_HIKER", "unk2": 0, "items": [], "unkC": 1, @@ -7779,7 +7779,7 @@ { "index": 327, "type": 0, - "class": 80, + "class": "TRAINER_CLASS_PARASOL_LADY", "unk2": 0, "items": [], "unkC": 1, @@ -7800,7 +7800,7 @@ { "index": 328, "type": 0, - "class": 80, + "class": "TRAINER_CLASS_PARASOL_LADY", "unk2": 0, "items": [], "unkC": 1, @@ -7816,7 +7816,7 @@ { "index": 329, "type": 1, - "class": 5, + "class": "TRAINER_CLASS_PICNICKER", "unk2": 0, "items": [], "unkC": 1, @@ -7846,7 +7846,7 @@ { "index": 330, "type": 1, - "class": 5, + "class": "TRAINER_CLASS_PICNICKER", "unk2": 0, "items": [], "unkC": 1, @@ -7877,7 +7877,7 @@ { "index": 331, "type": 0, - "class": 22, + "class": "TRAINER_CLASS_POKE_KID", "unk2": 0, "items": [], "unkC": 1, @@ -7908,7 +7908,7 @@ { "index": 332, "type": 0, - "class": 38, + "class": "TRAINER_CLASS_POLICEMAN", "unk2": 0, "items": [], "unkC": 1, @@ -7929,7 +7929,7 @@ { "index": 333, "type": 0, - "class": 38, + "class": "TRAINER_CLASS_POLICEMAN", "unk2": 0, "items": [], "unkC": 1, @@ -7950,7 +7950,7 @@ { "index": 334, "type": 0, - "class": 32, + "class": "TRAINER_CLASS_RICH_BOY", "unk2": 0, "items": [], "unkC": 1, @@ -7966,7 +7966,7 @@ { "index": 335, "type": 0, - "class": 32, + "class": "TRAINER_CLASS_RICH_BOY", "unk2": 0, "items": [], "unkC": 1, @@ -7982,7 +7982,7 @@ { "index": 336, "type": 0, - "class": 33, + "class": "TRAINER_CLASS_LADY", "unk2": 0, "items": [], "unkC": 1, @@ -7998,7 +7998,7 @@ { "index": 337, "type": 0, - "class": 46, + "class": "TRAINER_CLASS_SAILOR", "unk2": 0, "items": [], "unkC": 1, @@ -8014,7 +8014,7 @@ { "index": 338, "type": 0, - "class": 46, + "class": "TRAINER_CLASS_SAILOR", "unk2": 0, "items": [], "unkC": 1, @@ -8035,7 +8035,7 @@ { "index": 339, "type": 1, - "class": 46, + "class": "TRAINER_CLASS_SAILOR", "unk2": 0, "items": [], "unkC": 1, @@ -8066,7 +8066,7 @@ { "index": 340, "type": 1, - "class": 60, + "class": "TRAINER_CLASS_SCHOOL_KID_M", "unk2": 0, "items": [], "unkC": 1, @@ -8088,7 +8088,7 @@ { "index": 341, "type": 1, - "class": 60, + "class": "TRAINER_CLASS_SCHOOL_KID_M", "unk2": 0, "items": [], "unkC": 1, @@ -8110,7 +8110,7 @@ { "index": 342, "type": 1, - "class": 60, + "class": "TRAINER_CLASS_SCHOOL_KID_M", "unk2": 0, "items": [], "unkC": 1, @@ -8129,7 +8129,7 @@ { "index": 343, "type": 1, - "class": 61, + "class": "TRAINER_CLASS_SCHOOL_KID_F", "unk2": 0, "items": [], "unkC": 1, @@ -8161,7 +8161,7 @@ { "index": 344, "type": 1, - "class": 61, + "class": "TRAINER_CLASS_SCHOOL_KID_F", "unk2": 0, "items": [], "unkC": 1, @@ -8183,7 +8183,7 @@ { "index": 345, "type": 1, - "class": 61, + "class": "TRAINER_CLASS_SCHOOL_KID_F", "unk2": 0, "items": [], "unkC": 1, @@ -8202,7 +8202,7 @@ { "index": 346, "type": 0, - "class": 36, + "class": "TRAINER_CLASS_BEAUTY", "unk2": 0, "items": [], "unkC": 1, @@ -8218,7 +8218,7 @@ { "index": 347, "type": 0, - "class": 36, + "class": "TRAINER_CLASS_BEAUTY", "unk2": 0, "items": [], "unkC": 1, @@ -8234,7 +8234,7 @@ { "index": 348, "type": 1, - "class": 36, + "class": "TRAINER_CLASS_BEAUTY", "unk2": 0, "items": [], "unkC": 1, @@ -8255,7 +8255,7 @@ { "index": 349, "type": 0, - "class": 55, + "class": "TRAINER_CLASS_SKIER_M", "unk2": 0, "items": [], "unkC": 1, @@ -8271,7 +8271,7 @@ { "index": 350, "type": 0, - "class": 56, + "class": "TRAINER_CLASS_SKIER_F", "unk2": 0, "items": [], "unkC": 1, @@ -8287,7 +8287,7 @@ { "index": 351, "type": 0, - "class": 42, + "class": "TRAINER_CLASS_SWIMMER_M", "unk2": 0, "items": [], "unkC": 1, @@ -8303,7 +8303,7 @@ { "index": 352, "type": 0, - "class": 42, + "class": "TRAINER_CLASS_SWIMMER_M", "unk2": 0, "items": [], "unkC": 1, @@ -8319,7 +8319,7 @@ { "index": 353, "type": 0, - "class": 43, + "class": "TRAINER_CLASS_SWIMMER_F", "unk2": 0, "items": [], "unkC": 1, @@ -8335,7 +8335,7 @@ { "index": 354, "type": 0, - "class": 43, + "class": "TRAINER_CLASS_SWIMMER_F", "unk2": 0, "items": [], "unkC": 1, @@ -8351,7 +8351,7 @@ { "index": 355, "type": 0, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -8367,7 +8367,7 @@ { "index": 356, "type": 1, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -8387,7 +8387,7 @@ { "index": 357, "type": 1, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -8420,7 +8420,7 @@ { "index": 358, "type": 0, - "class": 44, + "class": "TRAINER_CLASS_TUBER_M", "unk2": 0, "items": [], "unkC": 1, @@ -8441,7 +8441,7 @@ { "index": 359, "type": 0, - "class": 44, + "class": "TRAINER_CLASS_TUBER_M", "unk2": 0, "items": [], "unkC": 1, @@ -8457,7 +8457,7 @@ { "index": 360, "type": 0, - "class": 45, + "class": "TRAINER_CLASS_TUBER_F", "unk2": 0, "items": [], "unkC": 1, @@ -8478,7 +8478,7 @@ { "index": 361, "type": 0, - "class": 45, + "class": "TRAINER_CLASS_TUBER_F", "unk2": 0, "items": [], "unkC": 1, @@ -8494,7 +8494,7 @@ { "index": 362, "type": 1, - "class": 27, + "class": "TRAINER_CLASS_VETERAN", "unk2": 0, "items": [], "unkC": 1, @@ -8538,7 +8538,7 @@ { "index": 363, "type": 0, - "class": 81, + "class": "TRAINER_CLASS_WAITER", "unk2": 0, "items": [], "unkC": 1, @@ -8554,7 +8554,7 @@ { "index": 364, "type": 0, - "class": 81, + "class": "TRAINER_CLASS_WAITER", "unk2": 0, "items": [], "unkC": 1, @@ -8570,7 +8570,7 @@ { "index": 365, "type": 0, - "class": 81, + "class": "TRAINER_CLASS_WAITER", "unk2": 0, "items": [], "unkC": 1, @@ -8586,7 +8586,7 @@ { "index": 366, "type": 0, - "class": 26, + "class": "TRAINER_CLASS_WAITRESS", "unk2": 0, "items": [], "unkC": 1, @@ -8602,7 +8602,7 @@ { "index": 367, "type": 1, - "class": 59, + "class": "TRAINER_CLASS_WORKER", "unk2": 0, "items": [], "unkC": 1, @@ -8633,7 +8633,7 @@ { "index": 368, "type": 0, - "class": 82, + "class": "TRAINER_CLASS_INTERVIEWERS", "unk2": 0, "items": [], "unkC": 1, @@ -8654,7 +8654,7 @@ { "index": 369, "type": 0, - "class": 83, + "class": "TRAINER_CLASS_CAMERAMAN", "unk2": 0, "items": [], "unkC": 1, @@ -8670,7 +8670,7 @@ { "index": 370, "type": 0, - "class": 84, + "class": "TRAINER_CLASS_REPORTER", "unk2": 0, "items": [], "unkC": 1, @@ -8686,7 +8686,7 @@ { "index": 371, "type": 0, - "class": 85, + "class": "TRAINER_CLASS_IDOL", "unk2": 0, "items": [], "unkC": 1, @@ -8707,7 +8707,7 @@ { "index": 372, "type": 0, - "class": 10, + "class": "TRAINER_CLASS_BATTLE_GIRL", "unk2": 0, "items": [], "unkC": 1, @@ -8723,7 +8723,7 @@ { "index": 373, "type": 0, - "class": 30, + "class": "TRAINER_CLASS_BIRD_KEEPER", "unk2": 0, "items": [], "unkC": 1, @@ -8744,7 +8744,7 @@ { "index": 374, "type": 0, - "class": 16, + "class": "TRAINER_CLASS_PKMN_BREEDER_M", "unk2": 0, "items": [], "unkC": 1, @@ -8760,7 +8760,7 @@ { "index": 375, "type": 0, - "class": 17, + "class": "TRAINER_CLASS_PKMN_BREEDER_F", "unk2": 0, "items": [], "unkC": 1, @@ -8776,7 +8776,7 @@ { "index": 376, "type": 0, - "class": 83, + "class": "TRAINER_CLASS_CAMERAMAN", "unk2": 0, "items": [], "unkC": 1, @@ -8792,7 +8792,7 @@ { "index": 377, "type": 1, - "class": 4, + "class": "TRAINER_CLASS_CAMPER", "unk2": 0, "items": [], "unkC": 1, @@ -8812,7 +8812,7 @@ { "index": 378, "type": 1, - "class": 4, + "class": "TRAINER_CLASS_CAMPER", "unk2": 0, "items": [], "unkC": 1, @@ -8844,7 +8844,7 @@ { "index": 379, "type": 1, - "class": 4, + "class": "TRAINER_CLASS_CAMPER", "unk2": 0, "items": [], "unkC": 1, @@ -8874,7 +8874,7 @@ { "index": 380, "type": 1, - "class": 4, + "class": "TRAINER_CLASS_CAMPER", "unk2": 0, "items": [], "unkC": 1, @@ -8904,7 +8904,7 @@ { "index": 381, "type": 0, - "class": 37, + "class": "TRAINER_CLASS_COLLECTOR", "unk2": 0, "items": [], "unkC": 1, @@ -8930,7 +8930,7 @@ { "index": 382, "type": 0, - "class": 37, + "class": "TRAINER_CLASS_COLLECTOR", "unk2": 0, "items": [], "unkC": 1, @@ -8956,7 +8956,7 @@ { "index": 383, "type": 0, - "class": 37, + "class": "TRAINER_CLASS_COLLECTOR", "unk2": 0, "items": [], "unkC": 1, @@ -8982,7 +8982,7 @@ { "index": 384, "type": 0, - "class": 20, + "class": "TRAINER_CLASS_POKEFAN_M", "unk2": 0, "items": [], "unkC": 1, @@ -8998,7 +8998,7 @@ { "index": 385, "type": 0, - "class": 21, + "class": "TRAINER_CLASS_POKEFAN_F", "unk2": 0, "items": [], "unkC": 1, @@ -9014,7 +9014,7 @@ { "index": 386, "type": 0, - "class": 29, + "class": "TRAINER_CLASS_DRAGON_TAMER", "unk2": 0, "items": [], "unkC": 1, @@ -9035,7 +9035,7 @@ { "index": 387, "type": 0, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 1, @@ -9051,7 +9051,7 @@ { "index": 388, "type": 1, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 1, @@ -9095,7 +9095,7 @@ { "index": 389, "type": 1, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 1, @@ -9139,7 +9139,7 @@ { "index": 390, "type": 1, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 1, @@ -9172,7 +9172,7 @@ { "index": 391, "type": 0, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -9188,7 +9188,7 @@ { "index": 392, "type": 1, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -9221,7 +9221,7 @@ { "index": 393, "type": 1, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -9265,7 +9265,7 @@ { "index": 394, "type": 1, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -9309,7 +9309,7 @@ { "index": 395, "type": 0, - "class": 49, + "class": "TRAINER_CLASS_PSYCHIC_M", "unk2": 0, "items": [], "unkC": 1, @@ -9325,7 +9325,7 @@ { "index": 396, "type": 0, - "class": 49, + "class": "TRAINER_CLASS_PSYCHIC_M", "unk2": 0, "items": [], "unkC": 1, @@ -9341,7 +9341,7 @@ { "index": 397, "type": 0, - "class": 49, + "class": "TRAINER_CLASS_PSYCHIC_M", "unk2": 0, "items": [], "unkC": 1, @@ -9357,7 +9357,7 @@ { "index": 398, "type": 1, - "class": 50, + "class": "TRAINER_CLASS_PSYCHIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -9378,7 +9378,7 @@ { "index": 399, "type": 0, - "class": 50, + "class": "TRAINER_CLASS_PSYCHIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -9399,7 +9399,7 @@ { "index": 400, "type": 0, - "class": 50, + "class": "TRAINER_CLASS_PSYCHIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -9420,7 +9420,7 @@ { "index": 401, "type": 1, - "class": 11, + "class": "TRAINER_CLASS_FISHERMAN", "unk2": 0, "items": [], "unkC": 1, @@ -9441,7 +9441,7 @@ { "index": 402, "type": 0, - "class": 34, + "class": "TRAINER_CLASS_GENTLEMAN", "unk2": 0, "items": [], "unkC": 1, @@ -9457,7 +9457,7 @@ { "index": 403, "type": 3, - "class": 86, + "class": "TRAINER_CLASS_GALACTIC_BOSS", "unk2": 0, "items": [ "ITEM_SUPER_POTION", @@ -9507,7 +9507,7 @@ { "index": 404, "type": 3, - "class": 86, + "class": "TRAINER_CLASS_GALACTIC_BOSS", "unk2": 0, "items": [ "ITEM_SUPER_POTION", @@ -9569,7 +9569,7 @@ { "index": 405, "type": 3, - "class": 72, + "class": "TRAINER_CLASS_COMMANDER_MARS", "unk2": 0, "items": [], "unkC": 1, @@ -9616,7 +9616,7 @@ { "index": 406, "type": 3, - "class": 87, + "class": "TRAINER_CLASS_COMMANDER_JUPITER", "unk2": 0, "items": [], "unkC": 1, @@ -9650,7 +9650,7 @@ { "index": 407, "type": 3, - "class": 87, + "class": "TRAINER_CLASS_COMMANDER_JUPITER", "unk2": 0, "items": [], "unkC": 1, @@ -9697,7 +9697,7 @@ { "index": 408, "type": 3, - "class": 88, + "class": "TRAINER_CLASS_COMMANDER_SATURN", "unk2": 0, "items": [], "unkC": 1, @@ -9744,7 +9744,7 @@ { "index": 409, "type": 3, - "class": 88, + "class": "TRAINER_CLASS_COMMANDER_SATURN", "unk2": 0, "items": [], "unkC": 1, @@ -9791,7 +9791,7 @@ { "index": 410, "type": 1, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -9822,7 +9822,7 @@ { "index": 411, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -9838,7 +9838,7 @@ { "index": 412, "type": 1, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -9868,7 +9868,7 @@ { "index": 413, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -9884,7 +9884,7 @@ { "index": 414, "type": 1, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -9904,7 +9904,7 @@ { "index": 415, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -9920,7 +9920,7 @@ { "index": 416, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -9941,7 +9941,7 @@ { "index": 417, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -9962,7 +9962,7 @@ { "index": 418, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -9988,7 +9988,7 @@ { "index": 419, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -10004,7 +10004,7 @@ { "index": 420, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -10025,7 +10025,7 @@ { "index": 421, "type": 0, - "class": 89, + "class": "TRAINER_CLASS_GALACTIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -10046,7 +10046,7 @@ { "index": 422, "type": 1, - "class": 89, + "class": "TRAINER_CLASS_GALACTIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -10067,7 +10067,7 @@ { "index": 423, "type": 1, - "class": 89, + "class": "TRAINER_CLASS_GALACTIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -10107,7 +10107,7 @@ { "index": 424, "type": 0, - "class": 89, + "class": "TRAINER_CLASS_GALACTIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -10123,7 +10123,7 @@ { "index": 425, "type": 0, - "class": 89, + "class": "TRAINER_CLASS_GALACTIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -10144,7 +10144,7 @@ { "index": 426, "type": 1, - "class": 89, + "class": "TRAINER_CLASS_GALACTIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -10187,7 +10187,7 @@ { "index": 427, "type": 0, - "class": 89, + "class": "TRAINER_CLASS_GALACTIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -10208,7 +10208,7 @@ { "index": 428, "type": 0, - "class": 89, + "class": "TRAINER_CLASS_GALACTIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -10224,7 +10224,7 @@ { "index": 429, "type": 0, - "class": 89, + "class": "TRAINER_CLASS_GALACTIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -10240,7 +10240,7 @@ { "index": 430, "type": 0, - "class": 89, + "class": "TRAINER_CLASS_GALACTIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -10261,7 +10261,7 @@ { "index": 431, "type": 0, - "class": 52, + "class": "TRAINER_CLASS_GUITARIST", "unk2": 0, "items": [], "unkC": 1, @@ -10282,7 +10282,7 @@ { "index": 432, "type": 0, - "class": 52, + "class": "TRAINER_CLASS_GUITARIST", "unk2": 0, "items": [], "unkC": 1, @@ -10298,7 +10298,7 @@ { "index": 433, "type": 0, - "class": 52, + "class": "TRAINER_CLASS_GUITARIST", "unk2": 0, "items": [], "unkC": 1, @@ -10314,7 +10314,7 @@ { "index": 434, "type": 0, - "class": 52, + "class": "TRAINER_CLASS_GUITARIST", "unk2": 0, "items": [], "unkC": 1, @@ -10330,7 +10330,7 @@ { "index": 435, "type": 0, - "class": 52, + "class": "TRAINER_CLASS_GUITARIST", "unk2": 0, "items": [], "unkC": 1, @@ -10346,7 +10346,7 @@ { "index": 436, "type": 0, - "class": 52, + "class": "TRAINER_CLASS_GUITARIST", "unk2": 0, "items": [], "unkC": 1, @@ -10362,7 +10362,7 @@ { "index": 437, "type": 0, - "class": 85, + "class": "TRAINER_CLASS_IDOL", "unk2": 0, "items": [], "unkC": 1, @@ -10378,7 +10378,7 @@ { "index": 438, "type": 0, - "class": 85, + "class": "TRAINER_CLASS_IDOL", "unk2": 0, "items": [], "unkC": 1, @@ -10394,7 +10394,7 @@ { "index": 439, "type": 0, - "class": 85, + "class": "TRAINER_CLASS_IDOL", "unk2": 0, "items": [], "unkC": 1, @@ -10410,7 +10410,7 @@ { "index": 440, "type": 0, - "class": 85, + "class": "TRAINER_CLASS_IDOL", "unk2": 0, "items": [], "unkC": 1, @@ -10426,7 +10426,7 @@ { "index": 441, "type": 0, - "class": 48, + "class": "TRAINER_CLASS_RUIN_MANIAC", "unk2": 0, "items": [], "unkC": 1, @@ -10442,7 +10442,7 @@ { "index": 442, "type": 0, - "class": 48, + "class": "TRAINER_CLASS_RUIN_MANIAC", "unk2": 0, "items": [], "unkC": 1, @@ -10458,7 +10458,7 @@ { "index": 443, "type": 0, - "class": 48, + "class": "TRAINER_CLASS_RUIN_MANIAC", "unk2": 0, "items": [], "unkC": 1, @@ -10479,7 +10479,7 @@ { "index": 444, "type": 0, - "class": 14, + "class": "TRAINER_CLASS_BLACK_BELT", "unk2": 0, "items": [], "unkC": 1, @@ -10495,7 +10495,7 @@ { "index": 445, "type": 0, - "class": 14, + "class": "TRAINER_CLASS_BLACK_BELT", "unk2": 0, "items": [], "unkC": 1, @@ -10511,7 +10511,7 @@ { "index": 446, "type": 0, - "class": 14, + "class": "TRAINER_CLASS_BLACK_BELT", "unk2": 0, "items": [], "unkC": 1, @@ -10532,7 +10532,7 @@ { "index": 447, "type": 0, - "class": 14, + "class": "TRAINER_CLASS_BLACK_BELT", "unk2": 0, "items": [], "unkC": 1, @@ -10553,7 +10553,7 @@ { "index": 448, "type": 0, - "class": 35, + "class": "TRAINER_CLASS_SOCIALITE", "unk2": 0, "items": [], "unkC": 1, @@ -10569,7 +10569,7 @@ { "index": 449, "type": 0, - "class": 3, + "class": "TRAINER_CLASS_LASS", "unk2": 0, "items": [], "unkC": 1, @@ -10585,7 +10585,7 @@ { "index": 450, "type": 0, - "class": 3, + "class": "TRAINER_CLASS_LASS", "unk2": 0, "items": [], "unkC": 1, @@ -10601,7 +10601,7 @@ { "index": 451, "type": 0, - "class": 9, + "class": "TRAINER_CLASS_HIKER", "unk2": 0, "items": [], "unkC": 1, @@ -10622,7 +10622,7 @@ { "index": 452, "type": 0, - "class": 9, + "class": "TRAINER_CLASS_HIKER", "unk2": 0, "items": [], "unkC": 1, @@ -10648,7 +10648,7 @@ { "index": 453, "type": 0, - "class": 9, + "class": "TRAINER_CLASS_HIKER", "unk2": 0, "items": [], "unkC": 1, @@ -10669,7 +10669,7 @@ { "index": 454, "type": 0, - "class": 9, + "class": "TRAINER_CLASS_HIKER", "unk2": 0, "items": [], "unkC": 1, @@ -10690,7 +10690,7 @@ { "index": 455, "type": 0, - "class": 9, + "class": "TRAINER_CLASS_HIKER", "unk2": 0, "items": [], "unkC": 1, @@ -10706,7 +10706,7 @@ { "index": 456, "type": 1, - "class": 5, + "class": "TRAINER_CLASS_PICNICKER", "unk2": 0, "items": [], "unkC": 1, @@ -10726,7 +10726,7 @@ { "index": 457, "type": 1, - "class": 5, + "class": "TRAINER_CLASS_PICNICKER", "unk2": 0, "items": [], "unkC": 1, @@ -10758,7 +10758,7 @@ { "index": 458, "type": 1, - "class": 5, + "class": "TRAINER_CLASS_PICNICKER", "unk2": 0, "items": [], "unkC": 1, @@ -10788,7 +10788,7 @@ { "index": 459, "type": 1, - "class": 5, + "class": "TRAINER_CLASS_PICNICKER", "unk2": 0, "items": [], "unkC": 1, @@ -10808,7 +10808,7 @@ { "index": 460, "type": 0, - "class": 58, + "class": "TRAINER_CLASS_CLOWN", "unk2": 0, "items": [], "unkC": 1, @@ -10824,7 +10824,7 @@ { "index": 461, "type": 0, - "class": 58, + "class": "TRAINER_CLASS_CLOWN", "unk2": 0, "items": [], "unkC": 1, @@ -10840,7 +10840,7 @@ { "index": 462, "type": 0, - "class": 58, + "class": "TRAINER_CLASS_CLOWN", "unk2": 0, "items": [], "unkC": 1, @@ -10856,7 +10856,7 @@ { "index": 463, "type": 0, - "class": 58, + "class": "TRAINER_CLASS_CLOWN", "unk2": 0, "items": [], "unkC": 1, @@ -10872,7 +10872,7 @@ { "index": 464, "type": 0, - "class": 58, + "class": "TRAINER_CLASS_CLOWN", "unk2": 0, "items": [], "unkC": 1, @@ -10888,7 +10888,7 @@ { "index": 465, "type": 0, - "class": 22, + "class": "TRAINER_CLASS_POKE_KID", "unk2": 0, "items": [], "unkC": 1, @@ -10909,7 +10909,7 @@ { "index": 466, "type": 0, - "class": 38, + "class": "TRAINER_CLASS_POLICEMAN", "unk2": 0, "items": [], "unkC": 1, @@ -10925,7 +10925,7 @@ { "index": 467, "type": 0, - "class": 32, + "class": "TRAINER_CLASS_RICH_BOY", "unk2": 0, "items": [], "unkC": 1, @@ -10941,7 +10941,7 @@ { "index": 468, "type": 0, - "class": 32, + "class": "TRAINER_CLASS_RICH_BOY", "unk2": 0, "items": [], "unkC": 1, @@ -10957,7 +10957,7 @@ { "index": 469, "type": 0, - "class": 33, + "class": "TRAINER_CLASS_LADY", "unk2": 0, "items": [], "unkC": 1, @@ -10973,7 +10973,7 @@ { "index": 470, "type": 1, - "class": 63, + "class": "TRAINER_CLASS_PKMN_TRAINER_BARRY", "unk2": 0, "items": [], "unkC": 1, @@ -11028,7 +11028,7 @@ { "index": 471, "type": 1, - "class": 63, + "class": "TRAINER_CLASS_PKMN_TRAINER_BARRY", "unk2": 0, "items": [], "unkC": 1, @@ -11083,7 +11083,7 @@ { "index": 472, "type": 1, - "class": 63, + "class": "TRAINER_CLASS_PKMN_TRAINER_BARRY", "unk2": 0, "items": [], "unkC": 1, @@ -11138,7 +11138,7 @@ { "index": 473, "type": 1, - "class": 63, + "class": "TRAINER_CLASS_PKMN_TRAINER_BARRY", "unk2": 0, "items": [], "unkC": 1, @@ -11193,7 +11193,7 @@ { "index": 474, "type": 1, - "class": 63, + "class": "TRAINER_CLASS_PKMN_TRAINER_BARRY", "unk2": 0, "items": [], "unkC": 1, @@ -11248,7 +11248,7 @@ { "index": 475, "type": 1, - "class": 63, + "class": "TRAINER_CLASS_PKMN_TRAINER_BARRY", "unk2": 0, "items": [], "unkC": 1, @@ -11303,7 +11303,7 @@ { "index": 476, "type": 1, - "class": 63, + "class": "TRAINER_CLASS_PKMN_TRAINER_BARRY", "unk2": 0, "items": [], "unkC": 1, @@ -11369,7 +11369,7 @@ { "index": 477, "type": 1, - "class": 63, + "class": "TRAINER_CLASS_PKMN_TRAINER_BARRY", "unk2": 0, "items": [], "unkC": 1, @@ -11435,7 +11435,7 @@ { "index": 478, "type": 1, - "class": 63, + "class": "TRAINER_CLASS_PKMN_TRAINER_BARRY", "unk2": 0, "items": [], "unkC": 1, @@ -11501,7 +11501,7 @@ { "index": 479, "type": 1, - "class": 63, + "class": "TRAINER_CLASS_PKMN_TRAINER_BARRY", "unk2": 0, "items": [], "unkC": 1, @@ -11578,7 +11578,7 @@ { "index": 480, "type": 1, - "class": 63, + "class": "TRAINER_CLASS_PKMN_TRAINER_BARRY", "unk2": 0, "items": [], "unkC": 1, @@ -11655,7 +11655,7 @@ { "index": 481, "type": 1, - "class": 63, + "class": "TRAINER_CLASS_PKMN_TRAINER_BARRY", "unk2": 0, "items": [], "unkC": 1, @@ -11732,7 +11732,7 @@ { "index": 482, "type": 0, - "class": 46, + "class": "TRAINER_CLASS_SAILOR", "unk2": 0, "items": [], "unkC": 1, @@ -11758,7 +11758,7 @@ { "index": 483, "type": 1, - "class": 46, + "class": "TRAINER_CLASS_SAILOR", "unk2": 0, "items": [], "unkC": 1, @@ -11799,7 +11799,7 @@ { "index": 484, "type": 0, - "class": 60, + "class": "TRAINER_CLASS_SCHOOL_KID_M", "unk2": 0, "items": [], "unkC": 1, @@ -11815,7 +11815,7 @@ { "index": 485, "type": 0, - "class": 61, + "class": "TRAINER_CLASS_SCHOOL_KID_F", "unk2": 0, "items": [], "unkC": 1, @@ -11831,7 +11831,7 @@ { "index": 486, "type": 1, - "class": 41, + "class": "TRAINER_CLASS_SCIENTIST", "unk2": 0, "items": [], "unkC": 1, @@ -11861,7 +11861,7 @@ { "index": 487, "type": 0, - "class": 41, + "class": "TRAINER_CLASS_SCIENTIST", "unk2": 0, "items": [], "unkC": 1, @@ -11877,7 +11877,7 @@ { "index": 488, "type": 0, - "class": 28, + "class": "TRAINER_CLASS_NINJA_BOY", "unk2": 0, "items": [], "unkC": 1, @@ -11903,7 +11903,7 @@ { "index": 489, "type": 0, - "class": 28, + "class": "TRAINER_CLASS_NINJA_BOY", "unk2": 0, "items": [], "unkC": 1, @@ -11924,7 +11924,7 @@ { "index": 490, "type": 0, - "class": 28, + "class": "TRAINER_CLASS_NINJA_BOY", "unk2": 0, "items": [], "unkC": 1, @@ -11940,7 +11940,7 @@ { "index": 491, "type": 0, - "class": 36, + "class": "TRAINER_CLASS_BEAUTY", "unk2": 0, "items": [], "unkC": 1, @@ -11956,7 +11956,7 @@ { "index": 492, "type": 0, - "class": 36, + "class": "TRAINER_CLASS_BEAUTY", "unk2": 0, "items": [], "unkC": 1, @@ -11972,7 +11972,7 @@ { "index": 493, "type": 0, - "class": 42, + "class": "TRAINER_CLASS_SWIMMER_M", "unk2": 0, "items": [], "unkC": 1, @@ -11988,7 +11988,7 @@ { "index": 494, "type": 0, - "class": 43, + "class": "TRAINER_CLASS_SWIMMER_F", "unk2": 0, "items": [], "unkC": 1, @@ -12004,7 +12004,7 @@ { "index": 495, "type": 0, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -12020,7 +12020,7 @@ { "index": 496, "type": 0, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -12046,7 +12046,7 @@ { "index": 497, "type": 1, - "class": 44, + "class": "TRAINER_CLASS_TUBER_M", "unk2": 0, "items": [], "unkC": 1, @@ -12068,7 +12068,7 @@ { "index": 498, "type": 1, - "class": 45, + "class": "TRAINER_CLASS_TUBER_F", "unk2": 0, "items": [], "unkC": 1, @@ -12100,7 +12100,7 @@ { "index": 499, "type": 1, - "class": 27, + "class": "TRAINER_CLASS_VETERAN", "unk2": 0, "items": [], "unkC": 1, @@ -12144,7 +12144,7 @@ { "index": 500, "type": 1, - "class": 27, + "class": "TRAINER_CLASS_VETERAN", "unk2": 0, "items": [], "unkC": 1, @@ -12188,7 +12188,7 @@ { "index": 501, "type": 0, - "class": 81, + "class": "TRAINER_CLASS_WAITER", "unk2": 0, "items": [], "unkC": 1, @@ -12204,7 +12204,7 @@ { "index": 502, "type": 0, - "class": 59, + "class": "TRAINER_CLASS_WORKER", "unk2": 0, "items": [], "unkC": 1, @@ -12220,7 +12220,7 @@ { "index": 503, "type": 0, - "class": 59, + "class": "TRAINER_CLASS_WORKER", "unk2": 0, "items": [], "unkC": 1, @@ -12241,7 +12241,7 @@ { "index": 504, "type": 0, - "class": 59, + "class": "TRAINER_CLASS_WORKER", "unk2": 0, "items": [], "unkC": 1, @@ -12257,7 +12257,7 @@ { "index": 505, "type": 0, - "class": 59, + "class": "TRAINER_CLASS_WORKER", "unk2": 0, "items": [], "unkC": 1, @@ -12278,7 +12278,7 @@ { "index": 506, "type": 0, - "class": 59, + "class": "TRAINER_CLASS_WORKER", "unk2": 0, "items": [], "unkC": 1, @@ -12304,7 +12304,7 @@ { "index": 507, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -12320,7 +12320,7 @@ { "index": 508, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -12341,7 +12341,7 @@ { "index": 509, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -12357,7 +12357,7 @@ { "index": 510, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -12383,7 +12383,7 @@ { "index": 511, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -12399,7 +12399,7 @@ { "index": 512, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -12420,7 +12420,7 @@ { "index": 513, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -12441,7 +12441,7 @@ { "index": 514, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -12462,7 +12462,7 @@ { "index": 515, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -12478,7 +12478,7 @@ { "index": 516, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -12504,7 +12504,7 @@ { "index": 517, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -12525,7 +12525,7 @@ { "index": 518, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -12551,7 +12551,7 @@ { "index": 519, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -12567,7 +12567,7 @@ { "index": 520, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -12588,7 +12588,7 @@ { "index": 521, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -12609,7 +12609,7 @@ { "index": 522, "type": 0, - "class": 89, + "class": "TRAINER_CLASS_GALACTIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -12635,7 +12635,7 @@ { "index": 523, "type": 0, - "class": 89, + "class": "TRAINER_CLASS_GALACTIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -12651,7 +12651,7 @@ { "index": 524, "type": 0, - "class": 89, + "class": "TRAINER_CLASS_GALACTIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -12677,7 +12677,7 @@ { "index": 525, "type": 0, - "class": 89, + "class": "TRAINER_CLASS_GALACTIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -12698,7 +12698,7 @@ { "index": 526, "type": 0, - "class": 89, + "class": "TRAINER_CLASS_GALACTIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -12724,7 +12724,7 @@ { "index": 527, "type": 0, - "class": 89, + "class": "TRAINER_CLASS_GALACTIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -12745,7 +12745,7 @@ { "index": 528, "type": 3, - "class": 72, + "class": "TRAINER_CLASS_COMMANDER_MARS", "unk2": 0, "items": [], "unkC": 1, @@ -12792,7 +12792,7 @@ { "index": 529, "type": 0, - "class": 57, + "class": "TRAINER_CLASS_ROUGHNECK", "unk2": 0, "items": [], "unkC": 1, @@ -12808,7 +12808,7 @@ { "index": 530, "type": 0, - "class": 20, + "class": "TRAINER_CLASS_POKEFAN_M", "unk2": 0, "items": [], "unkC": 1, @@ -12834,7 +12834,7 @@ { "index": 531, "type": 0, - "class": 21, + "class": "TRAINER_CLASS_POKEFAN_F", "unk2": 0, "items": [], "unkC": 1, @@ -12850,7 +12850,7 @@ { "index": 532, "type": 0, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -12876,7 +12876,7 @@ { "index": 533, "type": 0, - "class": 70, + "class": "TRAINER_CLASS_BELLE__PA", "unk2": 0, "items": [], "unkC": 1, @@ -12897,7 +12897,7 @@ { "index": 534, "type": 0, - "class": 23, + "class": "TRAINER_CLASS_YOUNG_COUPLE", "unk2": 0, "items": [], "unkC": 1, @@ -12918,7 +12918,7 @@ { "index": 535, "type": 0, - "class": 7, + "class": "TRAINER_CLASS_AROMA_LADY", "unk2": 0, "items": [], "unkC": 1, @@ -12934,7 +12934,7 @@ { "index": 536, "type": 0, - "class": 15, + "class": "TRAINER_CLASS_ARTIST", "unk2": 0, "items": [], "unkC": 1, @@ -12950,7 +12950,7 @@ { "index": 537, "type": 0, - "class": 17, + "class": "TRAINER_CLASS_PKMN_BREEDER_F", "unk2": 0, "items": [], "unkC": 1, @@ -12971,7 +12971,7 @@ { "index": 538, "type": 0, - "class": 83, + "class": "TRAINER_CLASS_CAMERAMAN", "unk2": 0, "items": [], "unkC": 1, @@ -12992,7 +12992,7 @@ { "index": 539, "type": 0, - "class": 37, + "class": "TRAINER_CLASS_COLLECTOR", "unk2": 0, "items": [], "unkC": 1, @@ -13018,7 +13018,7 @@ { "index": 540, "type": 0, - "class": 21, + "class": "TRAINER_CLASS_POKEFAN_F", "unk2": 0, "items": [], "unkC": 1, @@ -13039,7 +13039,7 @@ { "index": 541, "type": 1, - "class": 51, + "class": "TRAINER_CLASS_PI", "unk2": 0, "items": [], "unkC": 1, @@ -13068,7 +13068,7 @@ { "index": 542, "type": 0, - "class": 34, + "class": "TRAINER_CLASS_GENTLEMAN", "unk2": 0, "items": [], "unkC": 1, @@ -13089,7 +13089,7 @@ { "index": 543, "type": 0, - "class": 35, + "class": "TRAINER_CLASS_SOCIALITE", "unk2": 0, "items": [ "ITEM_FULL_RESTORE" @@ -13112,7 +13112,7 @@ { "index": 544, "type": 0, - "class": 3, + "class": "TRAINER_CLASS_LASS", "unk2": 0, "items": [], "unkC": 1, @@ -13133,7 +13133,7 @@ { "index": 545, "type": 0, - "class": 32, + "class": "TRAINER_CLASS_RICH_BOY", "unk2": 0, "items": [], "unkC": 1, @@ -13149,7 +13149,7 @@ { "index": 546, "type": 0, - "class": 33, + "class": "TRAINER_CLASS_LADY", "unk2": 0, "items": [], "unkC": 1, @@ -13170,7 +13170,7 @@ { "index": 547, "type": 0, - "class": 84, + "class": "TRAINER_CLASS_REPORTER", "unk2": 0, "items": [], "unkC": 1, @@ -13186,7 +13186,7 @@ { "index": 548, "type": 1, - "class": 60, + "class": "TRAINER_CLASS_SCHOOL_KID_M", "unk2": 0, "items": [], "unkC": 1, @@ -13208,7 +13208,7 @@ { "index": 549, "type": 0, - "class": 41, + "class": "TRAINER_CLASS_SCIENTIST", "unk2": 0, "items": [], "unkC": 1, @@ -13224,7 +13224,7 @@ { "index": 550, "type": 0, - "class": 36, + "class": "TRAINER_CLASS_BEAUTY", "unk2": 0, "items": [], "unkC": 1, @@ -13240,7 +13240,7 @@ { "index": 551, "type": 0, - "class": 36, + "class": "TRAINER_CLASS_BEAUTY", "unk2": 0, "items": [], "unkC": 1, @@ -13256,7 +13256,7 @@ { "index": 552, "type": 1, - "class": 27, + "class": "TRAINER_CLASS_VETERAN", "unk2": 0, "items": [], "unkC": 1, @@ -13287,7 +13287,7 @@ { "index": 553, "type": 0, - "class": 48, + "class": "TRAINER_CLASS_RUIN_MANIAC", "unk2": 0, "items": [], "unkC": 1, @@ -13313,7 +13313,7 @@ { "index": 554, "type": 0, - "class": 30, + "class": "TRAINER_CLASS_BIRD_KEEPER", "unk2": 0, "items": [], "unkC": 1, @@ -13334,7 +13334,7 @@ { "index": 555, "type": 0, - "class": 30, + "class": "TRAINER_CLASS_BIRD_KEEPER", "unk2": 0, "items": [], "unkC": 1, @@ -13355,7 +13355,7 @@ { "index": 556, "type": 0, - "class": 30, + "class": "TRAINER_CLASS_BIRD_KEEPER", "unk2": 0, "items": [], "unkC": 1, @@ -13381,7 +13381,7 @@ { "index": 557, "type": 0, - "class": 29, + "class": "TRAINER_CLASS_DRAGON_TAMER", "unk2": 0, "items": [], "unkC": 1, @@ -13402,7 +13402,7 @@ { "index": 558, "type": 0, - "class": 29, + "class": "TRAINER_CLASS_DRAGON_TAMER", "unk2": 0, "items": [], "unkC": 1, @@ -13418,7 +13418,7 @@ { "index": 559, "type": 0, - "class": 29, + "class": "TRAINER_CLASS_DRAGON_TAMER", "unk2": 0, "items": [], "unkC": 1, @@ -13434,7 +13434,7 @@ { "index": 560, "type": 0, - "class": 29, + "class": "TRAINER_CLASS_DRAGON_TAMER", "unk2": 0, "items": [], "unkC": 1, @@ -13455,7 +13455,7 @@ { "index": 561, "type": 0, - "class": 29, + "class": "TRAINER_CLASS_DRAGON_TAMER", "unk2": 0, "items": [], "unkC": 1, @@ -13481,7 +13481,7 @@ { "index": 562, "type": 0, - "class": 29, + "class": "TRAINER_CLASS_DRAGON_TAMER", "unk2": 0, "items": [], "unkC": 1, @@ -13502,7 +13502,7 @@ { "index": 563, "type": 1, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 1, @@ -13535,7 +13535,7 @@ { "index": 564, "type": 1, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 1, @@ -13557,7 +13557,7 @@ { "index": 565, "type": 1, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 1, @@ -13590,7 +13590,7 @@ { "index": 566, "type": 1, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 1, @@ -13623,7 +13623,7 @@ { "index": 567, "type": 1, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 1, @@ -13656,7 +13656,7 @@ { "index": 568, "type": 1, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 1, @@ -13678,7 +13678,7 @@ { "index": 569, "type": 1, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 1, @@ -13711,7 +13711,7 @@ { "index": 570, "type": 1, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 1, @@ -13744,7 +13744,7 @@ { "index": 571, "type": 1, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 1, @@ -13777,7 +13777,7 @@ { "index": 572, "type": 1, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 1, @@ -13799,7 +13799,7 @@ { "index": 573, "type": 1, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -13832,7 +13832,7 @@ { "index": 574, "type": 1, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -13876,7 +13876,7 @@ { "index": 575, "type": 1, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -13909,7 +13909,7 @@ { "index": 576, "type": 1, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -13953,7 +13953,7 @@ { "index": 577, "type": 1, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -13986,7 +13986,7 @@ { "index": 578, "type": 1, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -14008,7 +14008,7 @@ { "index": 579, "type": 1, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -14041,7 +14041,7 @@ { "index": 580, "type": 1, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -14063,7 +14063,7 @@ { "index": 581, "type": 1, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -14107,7 +14107,7 @@ { "index": 582, "type": 1, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -14140,7 +14140,7 @@ { "index": 583, "type": 0, - "class": 49, + "class": "TRAINER_CLASS_PSYCHIC_M", "unk2": 0, "items": [], "unkC": 1, @@ -14161,7 +14161,7 @@ { "index": 584, "type": 0, - "class": 49, + "class": "TRAINER_CLASS_PSYCHIC_M", "unk2": 0, "items": [], "unkC": 1, @@ -14182,7 +14182,7 @@ { "index": 585, "type": 0, - "class": 50, + "class": "TRAINER_CLASS_PSYCHIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -14203,7 +14203,7 @@ { "index": 586, "type": 0, - "class": 50, + "class": "TRAINER_CLASS_PSYCHIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -14224,7 +14224,7 @@ { "index": 587, "type": 0, - "class": 14, + "class": "TRAINER_CLASS_BLACK_BELT", "unk2": 0, "items": [], "unkC": 1, @@ -14250,7 +14250,7 @@ { "index": 588, "type": 0, - "class": 14, + "class": "TRAINER_CLASS_BLACK_BELT", "unk2": 0, "items": [], "unkC": 1, @@ -14271,7 +14271,7 @@ { "index": 589, "type": 0, - "class": 14, + "class": "TRAINER_CLASS_BLACK_BELT", "unk2": 0, "items": [], "unkC": 1, @@ -14297,7 +14297,7 @@ { "index": 590, "type": 0, - "class": 14, + "class": "TRAINER_CLASS_BLACK_BELT", "unk2": 0, "items": [], "unkC": 1, @@ -14313,7 +14313,7 @@ { "index": 591, "type": 0, - "class": 39, + "class": "TRAINER_CLASS_PKMN_RANGER_M", "unk2": 0, "items": [], "unkC": 1, @@ -14334,7 +14334,7 @@ { "index": 592, "type": 0, - "class": 39, + "class": "TRAINER_CLASS_PKMN_RANGER_M", "unk2": 0, "items": [], "unkC": 1, @@ -14355,7 +14355,7 @@ { "index": 593, "type": 0, - "class": 39, + "class": "TRAINER_CLASS_PKMN_RANGER_M", "unk2": 0, "items": [], "unkC": 1, @@ -14371,7 +14371,7 @@ { "index": 594, "type": 0, - "class": 40, + "class": "TRAINER_CLASS_PKMN_RANGER_F", "unk2": 0, "items": [], "unkC": 1, @@ -14392,7 +14392,7 @@ { "index": 595, "type": 0, - "class": 40, + "class": "TRAINER_CLASS_PKMN_RANGER_F", "unk2": 0, "items": [], "unkC": 1, @@ -14413,7 +14413,7 @@ { "index": 596, "type": 0, - "class": 40, + "class": "TRAINER_CLASS_PKMN_RANGER_F", "unk2": 0, "items": [], "unkC": 1, @@ -14434,7 +14434,7 @@ { "index": 597, "type": 0, - "class": 42, + "class": "TRAINER_CLASS_SWIMMER_M", "unk2": 0, "items": [], "unkC": 1, @@ -14455,7 +14455,7 @@ { "index": 598, "type": 0, - "class": 42, + "class": "TRAINER_CLASS_SWIMMER_M", "unk2": 0, "items": [], "unkC": 1, @@ -14471,7 +14471,7 @@ { "index": 599, "type": 0, - "class": 42, + "class": "TRAINER_CLASS_SWIMMER_M", "unk2": 0, "items": [], "unkC": 1, @@ -14492,7 +14492,7 @@ { "index": 600, "type": 0, - "class": 42, + "class": "TRAINER_CLASS_SWIMMER_M", "unk2": 0, "items": [], "unkC": 1, @@ -14518,7 +14518,7 @@ { "index": 601, "type": 0, - "class": 43, + "class": "TRAINER_CLASS_SWIMMER_F", "unk2": 0, "items": [], "unkC": 1, @@ -14539,7 +14539,7 @@ { "index": 602, "type": 0, - "class": 43, + "class": "TRAINER_CLASS_SWIMMER_F", "unk2": 0, "items": [], "unkC": 1, @@ -14560,7 +14560,7 @@ { "index": 603, "type": 0, - "class": 43, + "class": "TRAINER_CLASS_SWIMMER_F", "unk2": 0, "items": [], "unkC": 1, @@ -14581,7 +14581,7 @@ { "index": 604, "type": 0, - "class": 43, + "class": "TRAINER_CLASS_SWIMMER_F", "unk2": 0, "items": [], "unkC": 1, @@ -14607,7 +14607,7 @@ { "index": 605, "type": 0, - "class": 27, + "class": "TRAINER_CLASS_VETERAN", "unk2": 0, "items": [], "unkC": 1, @@ -14623,7 +14623,7 @@ { "index": 606, "type": 1, - "class": 27, + "class": "TRAINER_CLASS_VETERAN", "unk2": 0, "items": [], "unkC": 1, @@ -14667,7 +14667,7 @@ { "index": 607, "type": 1, - "class": 63, + "class": "TRAINER_CLASS_PKMN_TRAINER_BARRY", "unk2": 0, "items": [], "unkC": 1, @@ -14744,7 +14744,7 @@ { "index": 608, "type": 1, - "class": 90, + "class": "TRAINER_CLASS_PKMN_TRAINER_AROMA_LADY", "unk2": 0, "items": [], "unkC": 1, @@ -14765,7 +14765,7 @@ { "index": 609, "type": 1, - "class": 91, + "class": "TRAINER_CLASS_PKMN_TRAINER_RICH_BOY", "unk2": 0, "items": [], "unkC": 1, @@ -14787,7 +14787,7 @@ { "index": 610, "type": 1, - "class": 92, + "class": "TRAINER_CLASS_PKMN_TRAINER_PICNICKER", "unk2": 0, "items": [], "unkC": 1, @@ -14809,7 +14809,7 @@ { "index": 611, "type": 1, - "class": 93, + "class": "TRAINER_CLASS_PKMN_TRAINER_CAMPER", "unk2": 0, "items": [], "unkC": 1, @@ -14831,7 +14831,7 @@ { "index": 612, "type": 1, - "class": 94, + "class": "TRAINER_CLASS_PKMN_TRAINER_POKEKID", "unk2": 0, "items": [], "unkC": 1, @@ -14853,7 +14853,7 @@ { "index": 613, "type": 1, - "class": 95, + "class": "TRAINER_CLASS_PKMN_TRAINER_LUCAS", "unk2": 0, "items": [], "unkC": 1, @@ -14873,7 +14873,7 @@ { "index": 614, "type": 1, - "class": 95, + "class": "TRAINER_CLASS_PKMN_TRAINER_LUCAS", "unk2": 0, "items": [], "unkC": 1, @@ -14893,7 +14893,7 @@ { "index": 615, "type": 1, - "class": 95, + "class": "TRAINER_CLASS_PKMN_TRAINER_LUCAS", "unk2": 0, "items": [], "unkC": 1, @@ -14913,7 +14913,7 @@ { "index": 616, "type": 1, - "class": 96, + "class": "TRAINER_CLASS_PKMN_TRAINER_DAWN", "unk2": 0, "items": [], "unkC": 1, @@ -14933,7 +14933,7 @@ { "index": 617, "type": 1, - "class": 96, + "class": "TRAINER_CLASS_PKMN_TRAINER_DAWN", "unk2": 0, "items": [], "unkC": 1, @@ -14953,7 +14953,7 @@ { "index": 618, "type": 1, - "class": 96, + "class": "TRAINER_CLASS_PKMN_TRAINER_DAWN", "unk2": 0, "items": [], "unkC": 1, @@ -14973,7 +14973,7 @@ { "index": 619, "type": 1, - "class": 63, + "class": "TRAINER_CLASS_PKMN_TRAINER_BARRY", "unk2": 0, "items": [], "unkC": 1, @@ -15050,7 +15050,7 @@ { "index": 620, "type": 1, - "class": 63, + "class": "TRAINER_CLASS_PKMN_TRAINER_BARRY", "unk2": 0, "items": [], "unkC": 1, @@ -15127,7 +15127,7 @@ { "index": 621, "type": 1, - "class": 95, + "class": "TRAINER_CLASS_PKMN_TRAINER_LUCAS", "unk2": 0, "items": [], "unkC": 1, @@ -15171,7 +15171,7 @@ { "index": 622, "type": 1, - "class": 95, + "class": "TRAINER_CLASS_PKMN_TRAINER_LUCAS", "unk2": 0, "items": [], "unkC": 1, @@ -15215,7 +15215,7 @@ { "index": 623, "type": 1, - "class": 95, + "class": "TRAINER_CLASS_PKMN_TRAINER_LUCAS", "unk2": 0, "items": [], "unkC": 1, @@ -15259,7 +15259,7 @@ { "index": 624, "type": 1, - "class": 96, + "class": "TRAINER_CLASS_PKMN_TRAINER_DAWN", "unk2": 0, "items": [], "unkC": 1, @@ -15303,7 +15303,7 @@ { "index": 625, "type": 1, - "class": 96, + "class": "TRAINER_CLASS_PKMN_TRAINER_DAWN", "unk2": 0, "items": [], "unkC": 1, @@ -15347,7 +15347,7 @@ { "index": 626, "type": 1, - "class": 96, + "class": "TRAINER_CLASS_PKMN_TRAINER_DAWN", "unk2": 0, "items": [], "unkC": 1, @@ -15391,7 +15391,7 @@ { "index": 627, "type": 0, - "class": 7, + "class": "TRAINER_CLASS_AROMA_LADY", "unk2": 0, "items": [], "unkC": 1, @@ -15407,7 +15407,7 @@ { "index": 628, "type": 0, - "class": 7, + "class": "TRAINER_CLASS_AROMA_LADY", "unk2": 0, "items": [], "unkC": 1, @@ -15423,7 +15423,7 @@ { "index": 629, "type": 0, - "class": 7, + "class": "TRAINER_CLASS_AROMA_LADY", "unk2": 0, "items": [], "unkC": 1, @@ -15439,7 +15439,7 @@ { "index": 630, "type": 0, - "class": 15, + "class": "TRAINER_CLASS_ARTIST", "unk2": 0, "items": [], "unkC": 1, @@ -15460,7 +15460,7 @@ { "index": 631, "type": 0, - "class": 15, + "class": "TRAINER_CLASS_ARTIST", "unk2": 0, "items": [], "unkC": 1, @@ -15481,7 +15481,7 @@ { "index": 632, "type": 0, - "class": 15, + "class": "TRAINER_CLASS_ARTIST", "unk2": 0, "items": [], "unkC": 1, @@ -15502,7 +15502,7 @@ { "index": 633, "type": 0, - "class": 10, + "class": "TRAINER_CLASS_BATTLE_GIRL", "unk2": 0, "items": [], "unkC": 1, @@ -15523,7 +15523,7 @@ { "index": 634, "type": 0, - "class": 10, + "class": "TRAINER_CLASS_BATTLE_GIRL", "unk2": 0, "items": [], "unkC": 1, @@ -15544,7 +15544,7 @@ { "index": 635, "type": 0, - "class": 10, + "class": "TRAINER_CLASS_BATTLE_GIRL", "unk2": 0, "items": [], "unkC": 1, @@ -15565,7 +15565,7 @@ { "index": 636, "type": 0, - "class": 30, + "class": "TRAINER_CLASS_BIRD_KEEPER", "unk2": 0, "items": [], "unkC": 1, @@ -15586,7 +15586,7 @@ { "index": 637, "type": 0, - "class": 30, + "class": "TRAINER_CLASS_BIRD_KEEPER", "unk2": 0, "items": [], "unkC": 1, @@ -15607,7 +15607,7 @@ { "index": 638, "type": 0, - "class": 30, + "class": "TRAINER_CLASS_BIRD_KEEPER", "unk2": 0, "items": [], "unkC": 1, @@ -15628,7 +15628,7 @@ { "index": 639, "type": 0, - "class": 16, + "class": "TRAINER_CLASS_PKMN_BREEDER_M", "unk2": 0, "items": [], "unkC": 1, @@ -15654,7 +15654,7 @@ { "index": 640, "type": 0, - "class": 16, + "class": "TRAINER_CLASS_PKMN_BREEDER_M", "unk2": 0, "items": [], "unkC": 1, @@ -15680,7 +15680,7 @@ { "index": 641, "type": 0, - "class": 16, + "class": "TRAINER_CLASS_PKMN_BREEDER_M", "unk2": 0, "items": [], "unkC": 1, @@ -15706,7 +15706,7 @@ { "index": 642, "type": 0, - "class": 17, + "class": "TRAINER_CLASS_PKMN_BREEDER_F", "unk2": 0, "items": [], "unkC": 1, @@ -15732,7 +15732,7 @@ { "index": 643, "type": 0, - "class": 17, + "class": "TRAINER_CLASS_PKMN_BREEDER_F", "unk2": 0, "items": [], "unkC": 1, @@ -15758,7 +15758,7 @@ { "index": 644, "type": 0, - "class": 17, + "class": "TRAINER_CLASS_PKMN_BREEDER_F", "unk2": 0, "items": [], "unkC": 1, @@ -15784,7 +15784,7 @@ { "index": 645, "type": 1, - "class": 4, + "class": "TRAINER_CLASS_CAMPER", "unk2": 0, "items": [], "unkC": 1, @@ -15806,7 +15806,7 @@ { "index": 646, "type": 1, - "class": 4, + "class": "TRAINER_CLASS_CAMPER", "unk2": 0, "items": [], "unkC": 1, @@ -15828,7 +15828,7 @@ { "index": 647, "type": 1, - "class": 4, + "class": "TRAINER_CLASS_CAMPER", "unk2": 0, "items": [], "unkC": 1, @@ -15850,7 +15850,7 @@ { "index": 648, "type": 1, - "class": 53, + "class": "TRAINER_CLASS_ACE_TRAINER_SNOW_M", "unk2": 0, "items": [], "unkC": 1, @@ -15894,7 +15894,7 @@ { "index": 649, "type": 1, - "class": 54, + "class": "TRAINER_CLASS_ACE_TRAINER_SNOW_F", "unk2": 0, "items": [], "unkC": 1, @@ -15927,7 +15927,7 @@ { "index": 650, "type": 0, - "class": 37, + "class": "TRAINER_CLASS_COLLECTOR", "unk2": 0, "items": [], "unkC": 1, @@ -15953,7 +15953,7 @@ { "index": 651, "type": 0, - "class": 18, + "class": "TRAINER_CLASS_COWGIRL", "unk2": 0, "items": [], "unkC": 1, @@ -15969,7 +15969,7 @@ { "index": 652, "type": 0, - "class": 18, + "class": "TRAINER_CLASS_COWGIRL", "unk2": 0, "items": [], "unkC": 1, @@ -15985,7 +15985,7 @@ { "index": 653, "type": 0, - "class": 12, + "class": "TRAINER_CLASS_CYCLIST_M", "unk2": 0, "items": [], "unkC": 1, @@ -16006,7 +16006,7 @@ { "index": 654, "type": 0, - "class": 12, + "class": "TRAINER_CLASS_CYCLIST_M", "unk2": 0, "items": [], "unkC": 1, @@ -16027,7 +16027,7 @@ { "index": 655, "type": 0, - "class": 12, + "class": "TRAINER_CLASS_CYCLIST_M", "unk2": 0, "items": [], "unkC": 1, @@ -16048,7 +16048,7 @@ { "index": 656, "type": 0, - "class": 13, + "class": "TRAINER_CLASS_CYCLIST_F", "unk2": 0, "items": [], "unkC": 1, @@ -16064,7 +16064,7 @@ { "index": 657, "type": 0, - "class": 13, + "class": "TRAINER_CLASS_CYCLIST_F", "unk2": 0, "items": [], "unkC": 1, @@ -16080,7 +16080,7 @@ { "index": 658, "type": 0, - "class": 13, + "class": "TRAINER_CLASS_CYCLIST_F", "unk2": 0, "items": [], "unkC": 1, @@ -16096,7 +16096,7 @@ { "index": 659, "type": 0, - "class": 29, + "class": "TRAINER_CLASS_DRAGON_TAMER", "unk2": 0, "items": [], "unkC": 1, @@ -16112,7 +16112,7 @@ { "index": 660, "type": 0, - "class": 29, + "class": "TRAINER_CLASS_DRAGON_TAMER", "unk2": 0, "items": [], "unkC": 1, @@ -16128,7 +16128,7 @@ { "index": 661, "type": 0, - "class": 29, + "class": "TRAINER_CLASS_DRAGON_TAMER", "unk2": 0, "items": [], "unkC": 1, @@ -16149,7 +16149,7 @@ { "index": 662, "type": 0, - "class": 29, + "class": "TRAINER_CLASS_DRAGON_TAMER", "unk2": 0, "items": [], "unkC": 1, @@ -16170,7 +16170,7 @@ { "index": 663, "type": 1, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 0, @@ -16203,7 +16203,7 @@ { "index": 664, "type": 1, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 1, @@ -16247,7 +16247,7 @@ { "index": 665, "type": 1, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 1, @@ -16291,7 +16291,7 @@ { "index": 666, "type": 1, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 1, @@ -16324,7 +16324,7 @@ { "index": 667, "type": 1, - "class": 24, + "class": "TRAINER_CLASS_ACE_TRAINER_M", "unk2": 0, "items": [], "unkC": 1, @@ -16346,7 +16346,7 @@ { "index": 668, "type": 1, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -16390,7 +16390,7 @@ { "index": 669, "type": 1, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -16423,7 +16423,7 @@ { "index": 670, "type": 1, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -16456,7 +16456,7 @@ { "index": 671, "type": 1, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -16489,7 +16489,7 @@ { "index": 672, "type": 1, - "class": 25, + "class": "TRAINER_CLASS_ACE_TRAINER_F", "unk2": 0, "items": [], "unkC": 1, @@ -16533,7 +16533,7 @@ { "index": 673, "type": 0, - "class": 49, + "class": "TRAINER_CLASS_PSYCHIC_M", "unk2": 0, "items": [], "unkC": 1, @@ -16554,7 +16554,7 @@ { "index": 674, "type": 0, - "class": 49, + "class": "TRAINER_CLASS_PSYCHIC_M", "unk2": 0, "items": [], "unkC": 1, @@ -16575,7 +16575,7 @@ { "index": 675, "type": 0, - "class": 49, + "class": "TRAINER_CLASS_PSYCHIC_M", "unk2": 0, "items": [], "unkC": 1, @@ -16596,7 +16596,7 @@ { "index": 676, "type": 0, - "class": 49, + "class": "TRAINER_CLASS_PSYCHIC_M", "unk2": 0, "items": [], "unkC": 1, @@ -16617,7 +16617,7 @@ { "index": 677, "type": 0, - "class": 50, + "class": "TRAINER_CLASS_PSYCHIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -16643,7 +16643,7 @@ { "index": 678, "type": 0, - "class": 50, + "class": "TRAINER_CLASS_PSYCHIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -16669,7 +16669,7 @@ { "index": 679, "type": 0, - "class": 50, + "class": "TRAINER_CLASS_PSYCHIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -16690,7 +16690,7 @@ { "index": 680, "type": 0, - "class": 50, + "class": "TRAINER_CLASS_PSYCHIC_F", "unk2": 0, "items": [], "unkC": 1, @@ -16711,7 +16711,7 @@ { "index": 681, "type": 0, - "class": 71, + "class": "TRAINER_CLASS_RANCHER", "unk2": 0, "items": [], "unkC": 1, @@ -16737,7 +16737,7 @@ { "index": 682, "type": 0, - "class": 71, + "class": "TRAINER_CLASS_RANCHER", "unk2": 0, "items": [], "unkC": 1, @@ -16763,7 +16763,7 @@ { "index": 683, "type": 0, - "class": 11, + "class": "TRAINER_CLASS_FISHERMAN", "unk2": 0, "items": [], "unkC": 1, @@ -16779,7 +16779,7 @@ { "index": 684, "type": 0, - "class": 11, + "class": "TRAINER_CLASS_FISHERMAN", "unk2": 0, "items": [], "unkC": 1, @@ -16795,7 +16795,7 @@ { "index": 685, "type": 0, - "class": 11, + "class": "TRAINER_CLASS_FISHERMAN", "unk2": 0, "items": [], "unkC": 1, @@ -16816,7 +16816,7 @@ { "index": 686, "type": 0, - "class": 11, + "class": "TRAINER_CLASS_FISHERMAN", "unk2": 0, "items": [], "unkC": 1, @@ -16837,7 +16837,7 @@ { "index": 687, "type": 0, - "class": 8, + "class": "TRAINER_CLASS_TWINS", "unk2": 0, "items": [], "unkC": 1, @@ -16858,7 +16858,7 @@ { "index": 688, "type": 0, - "class": 8, + "class": "TRAINER_CLASS_TWINS", "unk2": 0, "items": [], "unkC": 1, @@ -16879,7 +16879,7 @@ { "index": 689, "type": 1, - "class": 51, + "class": "TRAINER_CLASS_PI", "unk2": 0, "items": [], "unkC": 1, @@ -16917,7 +16917,7 @@ { "index": 690, "type": 1, - "class": 51, + "class": "TRAINER_CLASS_PI", "unk2": 0, "items": [], "unkC": 1, @@ -16955,7 +16955,7 @@ { "index": 691, "type": 0, - "class": 34, + "class": "TRAINER_CLASS_GENTLEMAN", "unk2": 0, "items": [ "ITEM_FULL_RESTORE" @@ -16973,7 +16973,7 @@ { "index": 692, "type": 0, - "class": 34, + "class": "TRAINER_CLASS_GENTLEMAN", "unk2": 0, "items": [ "ITEM_FULL_RESTORE" @@ -16991,7 +16991,7 @@ { "index": 693, "type": 0, - "class": 34, + "class": "TRAINER_CLASS_GENTLEMAN", "unk2": 0, "items": [ "ITEM_FULL_RESTORE" @@ -17009,7 +17009,7 @@ { "index": 694, "type": 0, - "class": 52, + "class": "TRAINER_CLASS_GUITARIST", "unk2": 0, "items": [], "unkC": 1, @@ -17025,7 +17025,7 @@ { "index": 695, "type": 0, - "class": 48, + "class": "TRAINER_CLASS_RUIN_MANIAC", "unk2": 0, "items": [], "unkC": 1, @@ -17041,7 +17041,7 @@ { "index": 696, "type": 0, - "class": 48, + "class": "TRAINER_CLASS_RUIN_MANIAC", "unk2": 0, "items": [], "unkC": 1, @@ -17057,7 +17057,7 @@ { "index": 697, "type": 0, - "class": 19, + "class": "TRAINER_CLASS_JOGGER", "unk2": 0, "items": [], "unkC": 1, @@ -17083,7 +17083,7 @@ { "index": 698, "type": 0, - "class": 19, + "class": "TRAINER_CLASS_JOGGER", "unk2": 0, "items": [], "unkC": 1, @@ -17109,7 +17109,7 @@ { "index": 699, "type": 0, - "class": 14, + "class": "TRAINER_CLASS_BLACK_BELT", "unk2": 0, "items": [], "unkC": 1, @@ -17125,7 +17125,7 @@ { "index": 700, "type": 0, - "class": 14, + "class": "TRAINER_CLASS_BLACK_BELT", "unk2": 0, "items": [], "unkC": 1, @@ -17151,7 +17151,7 @@ { "index": 701, "type": 0, - "class": 35, + "class": "TRAINER_CLASS_SOCIALITE", "unk2": 0, "items": [ "ITEM_FULL_RESTORE" @@ -17169,7 +17169,7 @@ { "index": 702, "type": 0, - "class": 35, + "class": "TRAINER_CLASS_SOCIALITE", "unk2": 0, "items": [ "ITEM_FULL_RESTORE" @@ -17187,7 +17187,7 @@ { "index": 703, "type": 0, - "class": 3, + "class": "TRAINER_CLASS_LASS", "unk2": 0, "items": [], "unkC": 1, @@ -17203,7 +17203,7 @@ { "index": 704, "type": 0, - "class": 3, + "class": "TRAINER_CLASS_LASS", "unk2": 0, "items": [], "unkC": 1, @@ -17219,7 +17219,7 @@ { "index": 705, "type": 0, - "class": 3, + "class": "TRAINER_CLASS_LASS", "unk2": 0, "items": [], "unkC": 1, @@ -17235,7 +17235,7 @@ { "index": 706, "type": 0, - "class": 3, + "class": "TRAINER_CLASS_LASS", "unk2": 0, "items": [], "unkC": 1, @@ -17256,7 +17256,7 @@ { "index": 707, "type": 0, - "class": 3, + "class": "TRAINER_CLASS_LASS", "unk2": 0, "items": [], "unkC": 1, @@ -17277,7 +17277,7 @@ { "index": 708, "type": 0, - "class": 3, + "class": "TRAINER_CLASS_LASS", "unk2": 0, "items": [], "unkC": 1, @@ -17298,7 +17298,7 @@ { "index": 709, "type": 0, - "class": 9, + "class": "TRAINER_CLASS_HIKER", "unk2": 0, "items": [], "unkC": 1, @@ -17319,7 +17319,7 @@ { "index": 710, "type": 0, - "class": 9, + "class": "TRAINER_CLASS_HIKER", "unk2": 0, "items": [], "unkC": 1, @@ -17340,7 +17340,7 @@ { "index": 711, "type": 0, - "class": 9, + "class": "TRAINER_CLASS_HIKER", "unk2": 0, "items": [], "unkC": 1, @@ -17361,7 +17361,7 @@ { "index": 712, "type": 0, - "class": 6, + "class": "TRAINER_CLASS_BUG_CATCHER", "unk2": 0, "items": [], "unkC": 1, @@ -17382,7 +17382,7 @@ { "index": 713, "type": 0, - "class": 6, + "class": "TRAINER_CLASS_BUG_CATCHER", "unk2": 0, "items": [], "unkC": 1, @@ -17403,7 +17403,7 @@ { "index": 714, "type": 0, - "class": 6, + "class": "TRAINER_CLASS_BUG_CATCHER", "unk2": 0, "items": [], "unkC": 1, @@ -17424,7 +17424,7 @@ { "index": 715, "type": 0, - "class": 80, + "class": "TRAINER_CLASS_PARASOL_LADY", "unk2": 0, "items": [], "unkC": 1, @@ -17445,7 +17445,7 @@ { "index": 716, "type": 0, - "class": 80, + "class": "TRAINER_CLASS_PARASOL_LADY", "unk2": 0, "items": [], "unkC": 1, @@ -17466,7 +17466,7 @@ { "index": 717, "type": 0, - "class": 80, + "class": "TRAINER_CLASS_PARASOL_LADY", "unk2": 0, "items": [], "unkC": 1, @@ -17487,7 +17487,7 @@ { "index": 718, "type": 1, - "class": 5, + "class": "TRAINER_CLASS_PICNICKER", "unk2": 0, "items": [], "unkC": 1, @@ -17509,7 +17509,7 @@ { "index": 719, "type": 1, - "class": 5, + "class": "TRAINER_CLASS_PICNICKER", "unk2": 0, "items": [], "unkC": 1, @@ -17531,7 +17531,7 @@ { "index": 720, "type": 1, - "class": 5, + "class": "TRAINER_CLASS_PICNICKER", "unk2": 0, "items": [], "unkC": 0, @@ -17553,7 +17553,7 @@ { "index": 721, "type": 0, - "class": 22, + "class": "TRAINER_CLASS_POKE_KID", "unk2": 0, "items": [], "unkC": 1, @@ -17569,7 +17569,7 @@ { "index": 722, "type": 0, - "class": 22, + "class": "TRAINER_CLASS_POKE_KID", "unk2": 0, "items": [], "unkC": 1, @@ -17585,7 +17585,7 @@ { "index": 723, "type": 0, - "class": 22, + "class": "TRAINER_CLASS_POKE_KID", "unk2": 0, "items": [], "unkC": 1, @@ -17601,7 +17601,7 @@ { "index": 724, "type": 0, - "class": 38, + "class": "TRAINER_CLASS_POLICEMAN", "unk2": 0, "items": [], "unkC": 1, @@ -17622,7 +17622,7 @@ { "index": 725, "type": 0, - "class": 38, + "class": "TRAINER_CLASS_POLICEMAN", "unk2": 0, "items": [], "unkC": 1, @@ -17643,7 +17643,7 @@ { "index": 726, "type": 0, - "class": 38, + "class": "TRAINER_CLASS_POLICEMAN", "unk2": 0, "items": [], "unkC": 1, @@ -17664,7 +17664,7 @@ { "index": 727, "type": 0, - "class": 32, + "class": "TRAINER_CLASS_RICH_BOY", "unk2": 0, "items": [], "unkC": 1, @@ -17680,7 +17680,7 @@ { "index": 728, "type": 0, - "class": 32, + "class": "TRAINER_CLASS_RICH_BOY", "unk2": 0, "items": [], "unkC": 1, @@ -17696,7 +17696,7 @@ { "index": 729, "type": 0, - "class": 33, + "class": "TRAINER_CLASS_LADY", "unk2": 0, "items": [ "ITEM_FULL_RESTORE" @@ -17714,7 +17714,7 @@ { "index": 730, "type": 0, - "class": 33, + "class": "TRAINER_CLASS_LADY", "unk2": 0, "items": [ "ITEM_FULL_RESTORE" @@ -17732,7 +17732,7 @@ { "index": 731, "type": 0, - "class": 33, + "class": "TRAINER_CLASS_LADY", "unk2": 0, "items": [ "ITEM_FULL_RESTORE" @@ -17750,7 +17750,7 @@ { "index": 732, "type": 0, - "class": 39, + "class": "TRAINER_CLASS_PKMN_RANGER_M", "unk2": 0, "items": [], "unkC": 1, @@ -17771,7 +17771,7 @@ { "index": 733, "type": 0, - "class": 39, + "class": "TRAINER_CLASS_PKMN_RANGER_M", "unk2": 0, "items": [], "unkC": 1, @@ -17792,7 +17792,7 @@ { "index": 734, "type": 0, - "class": 39, + "class": "TRAINER_CLASS_PKMN_RANGER_M", "unk2": 0, "items": [], "unkC": 1, @@ -17813,7 +17813,7 @@ { "index": 735, "type": 0, - "class": 39, + "class": "TRAINER_CLASS_PKMN_RANGER_M", "unk2": 0, "items": [], "unkC": 1, @@ -17834,7 +17834,7 @@ { "index": 736, "type": 0, - "class": 40, + "class": "TRAINER_CLASS_PKMN_RANGER_F", "unk2": 0, "items": [], "unkC": 1, @@ -17855,7 +17855,7 @@ { "index": 737, "type": 0, - "class": 40, + "class": "TRAINER_CLASS_PKMN_RANGER_F", "unk2": 0, "items": [], "unkC": 1, @@ -17876,7 +17876,7 @@ { "index": 738, "type": 0, - "class": 40, + "class": "TRAINER_CLASS_PKMN_RANGER_F", "unk2": 0, "items": [], "unkC": 1, @@ -17897,7 +17897,7 @@ { "index": 739, "type": 0, - "class": 40, + "class": "TRAINER_CLASS_PKMN_RANGER_F", "unk2": 0, "items": [], "unkC": 1, @@ -17918,7 +17918,7 @@ { "index": 740, "type": 0, - "class": 46, + "class": "TRAINER_CLASS_SAILOR", "unk2": 0, "items": [], "unkC": 1, @@ -17939,7 +17939,7 @@ { "index": 741, "type": 0, - "class": 46, + "class": "TRAINER_CLASS_SAILOR", "unk2": 0, "items": [], "unkC": 1, @@ -17960,7 +17960,7 @@ { "index": 742, "type": 0, - "class": 46, + "class": "TRAINER_CLASS_SAILOR", "unk2": 0, "items": [], "unkC": 1, @@ -17986,7 +17986,7 @@ { "index": 743, "type": 0, - "class": 41, + "class": "TRAINER_CLASS_SCIENTIST", "unk2": 0, "items": [], "unkC": 1, @@ -18007,7 +18007,7 @@ { "index": 744, "type": 0, - "class": 41, + "class": "TRAINER_CLASS_SCIENTIST", "unk2": 0, "items": [], "unkC": 1, @@ -18028,7 +18028,7 @@ { "index": 745, "type": 0, - "class": 41, + "class": "TRAINER_CLASS_SCIENTIST", "unk2": 0, "items": [], "unkC": 1, @@ -18049,7 +18049,7 @@ { "index": 746, "type": 0, - "class": 28, + "class": "TRAINER_CLASS_NINJA_BOY", "unk2": 0, "items": [], "unkC": 1, @@ -18075,7 +18075,7 @@ { "index": 747, "type": 0, - "class": 28, + "class": "TRAINER_CLASS_NINJA_BOY", "unk2": 0, "items": [], "unkC": 1, @@ -18101,7 +18101,7 @@ { "index": 748, "type": 0, - "class": 28, + "class": "TRAINER_CLASS_NINJA_BOY", "unk2": 0, "items": [], "unkC": 1, @@ -18127,7 +18127,7 @@ { "index": 749, "type": 0, - "class": 36, + "class": "TRAINER_CLASS_BEAUTY", "unk2": 0, "items": [], "unkC": 1, @@ -18143,7 +18143,7 @@ { "index": 750, "type": 0, - "class": 36, + "class": "TRAINER_CLASS_BEAUTY", "unk2": 0, "items": [], "unkC": 1, @@ -18159,7 +18159,7 @@ { "index": 751, "type": 0, - "class": 55, + "class": "TRAINER_CLASS_SKIER_M", "unk2": 0, "items": [], "unkC": 1, @@ -18175,7 +18175,7 @@ { "index": 752, "type": 0, - "class": 55, + "class": "TRAINER_CLASS_SKIER_M", "unk2": 0, "items": [], "unkC": 1, @@ -18191,7 +18191,7 @@ { "index": 753, "type": 0, - "class": 55, + "class": "TRAINER_CLASS_SKIER_M", "unk2": 0, "items": [], "unkC": 1, @@ -18212,7 +18212,7 @@ { "index": 754, "type": 0, - "class": 55, + "class": "TRAINER_CLASS_SKIER_M", "unk2": 0, "items": [], "unkC": 1, @@ -18233,7 +18233,7 @@ { "index": 755, "type": 0, - "class": 56, + "class": "TRAINER_CLASS_SKIER_F", "unk2": 0, "items": [], "unkC": 1, @@ -18249,7 +18249,7 @@ { "index": 756, "type": 0, - "class": 56, + "class": "TRAINER_CLASS_SKIER_F", "unk2": 0, "items": [], "unkC": 1, @@ -18265,7 +18265,7 @@ { "index": 757, "type": 0, - "class": 56, + "class": "TRAINER_CLASS_SKIER_F", "unk2": 0, "items": [], "unkC": 1, @@ -18281,7 +18281,7 @@ { "index": 758, "type": 0, - "class": 56, + "class": "TRAINER_CLASS_SKIER_F", "unk2": 0, "items": [], "unkC": 1, @@ -18297,7 +18297,7 @@ { "index": 759, "type": 0, - "class": 42, + "class": "TRAINER_CLASS_SWIMMER_M", "unk2": 0, "items": [], "unkC": 1, @@ -18318,7 +18318,7 @@ { "index": 760, "type": 0, - "class": 42, + "class": "TRAINER_CLASS_SWIMMER_M", "unk2": 0, "items": [], "unkC": 1, @@ -18339,7 +18339,7 @@ { "index": 761, "type": 0, - "class": 42, + "class": "TRAINER_CLASS_SWIMMER_M", "unk2": 0, "items": [], "unkC": 1, @@ -18360,7 +18360,7 @@ { "index": 762, "type": 0, - "class": 43, + "class": "TRAINER_CLASS_SWIMMER_F", "unk2": 0, "items": [], "unkC": 1, @@ -18376,7 +18376,7 @@ { "index": 763, "type": 0, - "class": 43, + "class": "TRAINER_CLASS_SWIMMER_F", "unk2": 0, "items": [], "unkC": 1, @@ -18397,7 +18397,7 @@ { "index": 764, "type": 0, - "class": 43, + "class": "TRAINER_CLASS_SWIMMER_F", "unk2": 0, "items": [], "unkC": 1, @@ -18418,7 +18418,7 @@ { "index": 765, "type": 0, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -18434,7 +18434,7 @@ { "index": 766, "type": 0, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -18450,7 +18450,7 @@ { "index": 767, "type": 0, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -18466,7 +18466,7 @@ { "index": 768, "type": 0, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -18482,7 +18482,7 @@ { "index": 769, "type": 0, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -18498,7 +18498,7 @@ { "index": 770, "type": 0, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -18514,7 +18514,7 @@ { "index": 771, "type": 0, - "class": 44, + "class": "TRAINER_CLASS_TUBER_M", "unk2": 0, "items": [], "unkC": 1, @@ -18540,7 +18540,7 @@ { "index": 772, "type": 0, - "class": 44, + "class": "TRAINER_CLASS_TUBER_M", "unk2": 0, "items": [], "unkC": 1, @@ -18566,7 +18566,7 @@ { "index": 773, "type": 1, - "class": 45, + "class": "TRAINER_CLASS_TUBER_F", "unk2": 0, "items": [], "unkC": 1, @@ -18588,7 +18588,7 @@ { "index": 774, "type": 1, - "class": 27, + "class": "TRAINER_CLASS_VETERAN", "unk2": 0, "items": [], "unkC": 1, @@ -18632,7 +18632,7 @@ { "index": 775, "type": 1, - "class": 45, + "class": "TRAINER_CLASS_TUBER_F", "unk2": 0, "items": [], "unkC": 1, @@ -18654,7 +18654,7 @@ { "index": 776, "type": 1, - "class": 27, + "class": "TRAINER_CLASS_VETERAN", "unk2": 0, "items": [], "unkC": 1, @@ -18698,7 +18698,7 @@ { "index": 777, "type": 1, - "class": 27, + "class": "TRAINER_CLASS_VETERAN", "unk2": 0, "items": [], "unkC": 1, @@ -18742,7 +18742,7 @@ { "index": 778, "type": 0, - "class": 27, + "class": "TRAINER_CLASS_VETERAN", "unk2": 0, "items": [], "unkC": 1, @@ -18758,7 +18758,7 @@ { "index": 779, "type": 0, - "class": 83, + "class": "TRAINER_CLASS_CAMERAMAN", "unk2": 0, "items": [], "unkC": 1, @@ -18774,7 +18774,7 @@ { "index": 780, "type": 0, - "class": 83, + "class": "TRAINER_CLASS_CAMERAMAN", "unk2": 0, "items": [], "unkC": 1, @@ -18790,7 +18790,7 @@ { "index": 781, "type": 0, - "class": 83, + "class": "TRAINER_CLASS_CAMERAMAN", "unk2": 0, "items": [], "unkC": 1, @@ -18806,7 +18806,7 @@ { "index": 782, "type": 0, - "class": 83, + "class": "TRAINER_CLASS_CAMERAMAN", "unk2": 0, "items": [], "unkC": 1, @@ -18822,7 +18822,7 @@ { "index": 783, "type": 0, - "class": 83, + "class": "TRAINER_CLASS_CAMERAMAN", "unk2": 0, "items": [], "unkC": 1, @@ -18838,7 +18838,7 @@ { "index": 784, "type": 0, - "class": 52, + "class": "TRAINER_CLASS_GUITARIST", "unk2": 0, "items": [], "unkC": 1, @@ -18854,7 +18854,7 @@ { "index": 785, "type": 0, - "class": 52, + "class": "TRAINER_CLASS_GUITARIST", "unk2": 0, "items": [], "unkC": 1, @@ -18870,7 +18870,7 @@ { "index": 786, "type": 0, - "class": 52, + "class": "TRAINER_CLASS_GUITARIST", "unk2": 0, "items": [], "unkC": 1, @@ -18886,7 +18886,7 @@ { "index": 787, "type": 0, - "class": 52, + "class": "TRAINER_CLASS_GUITARIST", "unk2": 0, "items": [], "unkC": 1, @@ -18902,7 +18902,7 @@ { "index": 788, "type": 0, - "class": 52, + "class": "TRAINER_CLASS_GUITARIST", "unk2": 0, "items": [], "unkC": 1, @@ -18918,7 +18918,7 @@ { "index": 789, "type": 0, - "class": 52, + "class": "TRAINER_CLASS_GUITARIST", "unk2": 0, "items": [], "unkC": 1, @@ -18934,7 +18934,7 @@ { "index": 790, "type": 0, - "class": 85, + "class": "TRAINER_CLASS_IDOL", "unk2": 0, "items": [], "unkC": 1, @@ -18950,7 +18950,7 @@ { "index": 791, "type": 0, - "class": 85, + "class": "TRAINER_CLASS_IDOL", "unk2": 0, "items": [], "unkC": 1, @@ -18966,7 +18966,7 @@ { "index": 792, "type": 0, - "class": 85, + "class": "TRAINER_CLASS_IDOL", "unk2": 0, "items": [], "unkC": 1, @@ -18982,7 +18982,7 @@ { "index": 793, "type": 0, - "class": 85, + "class": "TRAINER_CLASS_IDOL", "unk2": 0, "items": [], "unkC": 1, @@ -18998,7 +18998,7 @@ { "index": 794, "type": 0, - "class": 85, + "class": "TRAINER_CLASS_IDOL", "unk2": 0, "items": [], "unkC": 1, @@ -19014,7 +19014,7 @@ { "index": 795, "type": 0, - "class": 82, + "class": "TRAINER_CLASS_INTERVIEWERS", "unk2": 0, "items": [], "unkC": 1, @@ -19035,7 +19035,7 @@ { "index": 796, "type": 0, - "class": 82, + "class": "TRAINER_CLASS_INTERVIEWERS", "unk2": 0, "items": [], "unkC": 1, @@ -19056,7 +19056,7 @@ { "index": 797, "type": 0, - "class": 82, + "class": "TRAINER_CLASS_INTERVIEWERS", "unk2": 0, "items": [], "unkC": 1, @@ -19077,7 +19077,7 @@ { "index": 798, "type": 0, - "class": 82, + "class": "TRAINER_CLASS_INTERVIEWERS", "unk2": 0, "items": [], "unkC": 1, @@ -19098,7 +19098,7 @@ { "index": 799, "type": 0, - "class": 58, + "class": "TRAINER_CLASS_CLOWN", "unk2": 0, "items": [], "unkC": 1, @@ -19114,7 +19114,7 @@ { "index": 800, "type": 0, - "class": 58, + "class": "TRAINER_CLASS_CLOWN", "unk2": 0, "items": [], "unkC": 1, @@ -19130,7 +19130,7 @@ { "index": 801, "type": 0, - "class": 58, + "class": "TRAINER_CLASS_CLOWN", "unk2": 0, "items": [], "unkC": 1, @@ -19146,7 +19146,7 @@ { "index": 802, "type": 0, - "class": 58, + "class": "TRAINER_CLASS_CLOWN", "unk2": 0, "items": [], "unkC": 1, @@ -19162,7 +19162,7 @@ { "index": 803, "type": 0, - "class": 58, + "class": "TRAINER_CLASS_CLOWN", "unk2": 0, "items": [], "unkC": 1, @@ -19178,7 +19178,7 @@ { "index": 804, "type": 0, - "class": 22, + "class": "TRAINER_CLASS_POKE_KID", "unk2": 0, "items": [], "unkC": 1, @@ -19194,7 +19194,7 @@ { "index": 805, "type": 0, - "class": 22, + "class": "TRAINER_CLASS_POKE_KID", "unk2": 0, "items": [], "unkC": 1, @@ -19210,7 +19210,7 @@ { "index": 806, "type": 0, - "class": 22, + "class": "TRAINER_CLASS_POKE_KID", "unk2": 0, "items": [], "unkC": 1, @@ -19226,7 +19226,7 @@ { "index": 807, "type": 0, - "class": 22, + "class": "TRAINER_CLASS_POKE_KID", "unk2": 0, "items": [], "unkC": 1, @@ -19242,7 +19242,7 @@ { "index": 808, "type": 0, - "class": 38, + "class": "TRAINER_CLASS_POLICEMAN", "unk2": 0, "items": [], "unkC": 1, @@ -19258,7 +19258,7 @@ { "index": 809, "type": 0, - "class": 84, + "class": "TRAINER_CLASS_REPORTER", "unk2": 0, "items": [], "unkC": 1, @@ -19274,7 +19274,7 @@ { "index": 810, "type": 0, - "class": 84, + "class": "TRAINER_CLASS_REPORTER", "unk2": 0, "items": [], "unkC": 1, @@ -19290,7 +19290,7 @@ { "index": 811, "type": 0, - "class": 84, + "class": "TRAINER_CLASS_REPORTER", "unk2": 0, "items": [], "unkC": 1, @@ -19306,7 +19306,7 @@ { "index": 812, "type": 0, - "class": 84, + "class": "TRAINER_CLASS_REPORTER", "unk2": 0, "items": [], "unkC": 1, @@ -19322,7 +19322,7 @@ { "index": 813, "type": 0, - "class": 41, + "class": "TRAINER_CLASS_SCIENTIST", "unk2": 0, "items": [], "unkC": 1, @@ -19338,7 +19338,7 @@ { "index": 814, "type": 0, - "class": 42, + "class": "TRAINER_CLASS_SWIMMER_M", "unk2": 0, "items": [], "unkC": 1, @@ -19354,7 +19354,7 @@ { "index": 815, "type": 0, - "class": 81, + "class": "TRAINER_CLASS_WAITER", "unk2": 0, "items": [], "unkC": 1, @@ -19370,7 +19370,7 @@ { "index": 816, "type": 0, - "class": 59, + "class": "TRAINER_CLASS_WORKER", "unk2": 0, "items": [], "unkC": 1, @@ -19386,7 +19386,7 @@ { "index": 817, "type": 0, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -19407,7 +19407,7 @@ { "index": 818, "type": 1, - "class": 3, + "class": "TRAINER_CLASS_LASS", "unk2": 0, "items": [], "unkC": 1, @@ -19437,7 +19437,7 @@ { "index": 819, "type": 0, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -19458,7 +19458,7 @@ { "index": 820, "type": 0, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -19479,7 +19479,7 @@ { "index": 821, "type": 1, - "class": 3, + "class": "TRAINER_CLASS_LASS", "unk2": 0, "items": [], "unkC": 1, @@ -19512,7 +19512,7 @@ { "index": 822, "type": 0, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -19533,7 +19533,7 @@ { "index": 823, "type": 0, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -19554,7 +19554,7 @@ { "index": 824, "type": 0, - "class": 3, + "class": "TRAINER_CLASS_LASS", "unk2": 0, "items": [], "unkC": 1, @@ -19575,7 +19575,7 @@ { "index": 825, "type": 1, - "class": 2, + "class": "TRAINER_CLASS_YOUNGSTER", "unk2": 0, "items": [], "unkC": 1, @@ -19608,7 +19608,7 @@ { "index": 826, "type": 0, - "class": 97, + "class": "TRAINER_CLASS_TOWER_TYCOON", "unk2": 0, "items": [], "unkC": 1, @@ -19624,7 +19624,7 @@ { "index": 827, "type": 1, - "class": 53, + "class": "TRAINER_CLASS_ACE_TRAINER_SNOW_M", "unk2": 0, "items": [], "unkC": 1, @@ -19645,7 +19645,7 @@ { "index": 828, "type": 1, - "class": 54, + "class": "TRAINER_CLASS_ACE_TRAINER_SNOW_F", "unk2": 0, "items": [], "unkC": 1, @@ -19666,7 +19666,7 @@ { "index": 829, "type": 1, - "class": 41, + "class": "TRAINER_CLASS_SCIENTIST", "unk2": 0, "items": [], "unkC": 1, @@ -19687,7 +19687,7 @@ { "index": 830, "type": 1, - "class": 41, + "class": "TRAINER_CLASS_SCIENTIST", "unk2": 0, "items": [], "unkC": 1, @@ -19720,7 +19720,7 @@ { "index": 831, "type": 1, - "class": 41, + "class": "TRAINER_CLASS_SCIENTIST", "unk2": 0, "items": [], "unkC": 1, @@ -19740,7 +19740,7 @@ { "index": 832, "type": 0, - "class": 22, + "class": "TRAINER_CLASS_POKE_KID", "unk2": 0, "items": [], "unkC": 1, @@ -19761,7 +19761,7 @@ { "index": 833, "type": 1, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -19804,7 +19804,7 @@ { "index": 834, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -19830,7 +19830,7 @@ { "index": 835, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -19856,7 +19856,7 @@ { "index": 836, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -19882,7 +19882,7 @@ { "index": 837, "type": 1, - "class": 63, + "class": "TRAINER_CLASS_PKMN_TRAINER_BARRY", "unk2": 0, "items": [], "unkC": 1, @@ -19959,7 +19959,7 @@ { "index": 838, "type": 1, - "class": 63, + "class": "TRAINER_CLASS_PKMN_TRAINER_BARRY", "unk2": 0, "items": [], "unkC": 1, @@ -20036,7 +20036,7 @@ { "index": 839, "type": 1, - "class": 63, + "class": "TRAINER_CLASS_PKMN_TRAINER_BARRY", "unk2": 0, "items": [], "unkC": 1, @@ -20113,7 +20113,7 @@ { "index": 840, "type": 1, - "class": 63, + "class": "TRAINER_CLASS_PKMN_TRAINER_BARRY", "unk2": 0, "items": [], "unkC": 1, @@ -20190,7 +20190,7 @@ { "index": 841, "type": 1, - "class": 63, + "class": "TRAINER_CLASS_PKMN_TRAINER_BARRY", "unk2": 0, "items": [], "unkC": 1, @@ -20267,7 +20267,7 @@ { "index": 842, "type": 1, - "class": 63, + "class": "TRAINER_CLASS_PKMN_TRAINER_BARRY", "unk2": 0, "items": [], "unkC": 1, @@ -20344,7 +20344,7 @@ { "index": 843, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -20360,7 +20360,7 @@ { "index": 844, "type": 0, - "class": 59, + "class": "TRAINER_CLASS_WORKER", "unk2": 0, "items": [], "unkC": 1, @@ -20381,7 +20381,7 @@ { "index": 845, "type": 0, - "class": 59, + "class": "TRAINER_CLASS_WORKER", "unk2": 0, "items": [], "unkC": 1, @@ -20397,7 +20397,7 @@ { "index": 846, "type": 0, - "class": 59, + "class": "TRAINER_CLASS_WORKER", "unk2": 0, "items": [], "unkC": 1, @@ -20413,7 +20413,7 @@ { "index": 847, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -20429,7 +20429,7 @@ { "index": 848, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, @@ -20450,7 +20450,7 @@ { "index": 849, "type": 0, - "class": 73, + "class": "TRAINER_CLASS_GALACTIC", "unk2": 0, "items": [], "unkC": 1, diff --git a/files/poketool/trainer/trdata.json.txt b/files/poketool/trainer/trdata.json.txt index 3c84dc27..c85e80e4 100644 --- a/files/poketool/trainer/trdata.json.txt +++ b/files/poketool/trainer/trdata.json.txt @@ -3,6 +3,7 @@ #include "global.h" #include "trainer_data.h" #include "constants/items.h" +#include "constants/trainer_classes.h" u32 __size = sizeof(struct TrainerData); diff --git a/include/constants/trainer_classes.h b/include/constants/trainer_classes.h new file mode 100644 index 00000000..62355cdf --- /dev/null +++ b/include/constants/trainer_classes.h @@ -0,0 +1,103 @@ +#ifndef POKEDIAMOND_CONSTANTS_TRAINER_CLASSES_H +#define POKEDIAMOND_CONSTANTS_TRAINER_CLASSES_H + +#define TRAINER_CLASS_PKMN_TRAINER_M 0 +#define TRAINER_CLASS_PKMN_TRAINER_F 1 +#define TRAINER_CLASS_YOUNGSTER 2 +#define TRAINER_CLASS_LASS 3 +#define TRAINER_CLASS_CAMPER 4 +#define TRAINER_CLASS_PICNICKER 5 +#define TRAINER_CLASS_BUG_CATCHER 6 +#define TRAINER_CLASS_AROMA_LADY 7 +#define TRAINER_CLASS_TWINS 8 +#define TRAINER_CLASS_HIKER 9 +#define TRAINER_CLASS_BATTLE_GIRL 10 +#define TRAINER_CLASS_FISHERMAN 11 +#define TRAINER_CLASS_CYCLIST_M 12 +#define TRAINER_CLASS_CYCLIST_F 13 +#define TRAINER_CLASS_BLACK_BELT 14 +#define TRAINER_CLASS_ARTIST 15 +#define TRAINER_CLASS_PKMN_BREEDER_M 16 +#define TRAINER_CLASS_PKMN_BREEDER_F 17 +#define TRAINER_CLASS_COWGIRL 18 +#define TRAINER_CLASS_JOGGER 19 +#define TRAINER_CLASS_POKEFAN_M 20 +#define TRAINER_CLASS_POKEFAN_F 21 +#define TRAINER_CLASS_POKE_KID 22 +#define TRAINER_CLASS_YOUNG_COUPLE 23 +#define TRAINER_CLASS_ACE_TRAINER_M 24 +#define TRAINER_CLASS_ACE_TRAINER_F 25 +#define TRAINER_CLASS_WAITRESS 26 +#define TRAINER_CLASS_VETERAN 27 +#define TRAINER_CLASS_NINJA_BOY 28 +#define TRAINER_CLASS_DRAGON_TAMER 29 +#define TRAINER_CLASS_BIRD_KEEPER 30 +#define TRAINER_CLASS_DOUBLE_TEAM 31 +#define TRAINER_CLASS_RICH_BOY 32 +#define TRAINER_CLASS_LADY 33 +#define TRAINER_CLASS_GENTLEMAN 34 +#define TRAINER_CLASS_SOCIALITE 35 +#define TRAINER_CLASS_BEAUTY 36 +#define TRAINER_CLASS_COLLECTOR 37 +#define TRAINER_CLASS_POLICEMAN 38 +#define TRAINER_CLASS_PKMN_RANGER_M 39 +#define TRAINER_CLASS_PKMN_RANGER_F 40 +#define TRAINER_CLASS_SCIENTIST 41 +#define TRAINER_CLASS_SWIMMER_M 42 +#define TRAINER_CLASS_SWIMMER_F 43 +#define TRAINER_CLASS_TUBER_M 44 +#define TRAINER_CLASS_TUBER_F 45 +#define TRAINER_CLASS_SAILOR 46 +#define TRAINER_CLASS_SIS_AND_BRO 47 +#define TRAINER_CLASS_RUIN_MANIAC 48 +#define TRAINER_CLASS_PSYCHIC_M 49 +#define TRAINER_CLASS_PSYCHIC_F 50 +#define TRAINER_CLASS_PI 51 +#define TRAINER_CLASS_GUITARIST 52 +#define TRAINER_CLASS_ACE_TRAINER_SNOW_M 53 +#define TRAINER_CLASS_ACE_TRAINER_SNOW_F 54 +#define TRAINER_CLASS_SKIER_M 55 +#define TRAINER_CLASS_SKIER_F 56 +#define TRAINER_CLASS_ROUGHNECK 57 +#define TRAINER_CLASS_CLOWN 58 +#define TRAINER_CLASS_WORKER 59 +#define TRAINER_CLASS_SCHOOL_KID_M 60 +#define TRAINER_CLASS_SCHOOL_KID_F 61 +#define TRAINER_CLASS_LEADER_ROARK 62 +#define TRAINER_CLASS_PKMN_TRAINER_BARRY 63 +#define TRAINER_CLASS_LEADER_BYRON 64 +#define TRAINER_CLASS_ELITE_FOUR_AARON 65 +#define TRAINER_CLASS_ELITE_FOUR_BERTHA 66 +#define TRAINER_CLASS_ELITE_FOUR_FLINT 67 +#define TRAINER_CLASS_ELITE_FOUR_LUCIEN 68 +#define TRAINER_CLASS_CHAMPION 69 +#define TRAINER_CLASS_BELLE__PA 70 +#define TRAINER_CLASS_RANCHER 71 +#define TRAINER_CLASS_COMMANDER_MARS 72 +#define TRAINER_CLASS_GALACTIC 73 +#define TRAINER_CLASS_LEADER_GARDENIA 74 +#define TRAINER_CLASS_LEADER_WAKE 75 +#define TRAINER_CLASS_LEADER_MAYLENE 76 +#define TRAINER_CLASS_LEADER_FANTINA 77 +#define TRAINER_CLASS_LEADER_CANDICE 78 +#define TRAINER_CLASS_LEADER_VOLKNER 79 +#define TRAINER_CLASS_PARASOL_LADY 80 +#define TRAINER_CLASS_WAITER 81 +#define TRAINER_CLASS_INTERVIEWERS 82 +#define TRAINER_CLASS_CAMERAMAN 83 +#define TRAINER_CLASS_REPORTER 84 +#define TRAINER_CLASS_IDOL 85 +#define TRAINER_CLASS_GALACTIC_BOSS 86 +#define TRAINER_CLASS_COMMANDER_JUPITER 87 +#define TRAINER_CLASS_COMMANDER_SATURN 88 +#define TRAINER_CLASS_GALACTIC_F 89 +#define TRAINER_CLASS_PKMN_TRAINER_AROMA_LADY 90 +#define TRAINER_CLASS_PKMN_TRAINER_RICH_BOY 91 +#define TRAINER_CLASS_PKMN_TRAINER_PICNICKER 92 +#define TRAINER_CLASS_PKMN_TRAINER_CAMPER 93 +#define TRAINER_CLASS_PKMN_TRAINER_POKEKID 94 +#define TRAINER_CLASS_PKMN_TRAINER_LUCAS 95 +#define TRAINER_CLASS_PKMN_TRAINER_DAWN 96 +#define TRAINER_CLASS_TOWER_TYCOON 97 + +#endif //POKEDIAMOND_CONSTANTS_TRAINER_CLASSES_H diff --git a/include/trainer_data.h b/include/trainer_data.h index 3abf9a9f..6a5b69a4 100644 --- a/include/trainer_data.h +++ b/include/trainer_data.h @@ -15,6 +15,7 @@ struct TrainerMonSpeciesMoves { u16 difficulty; u16 level; + u16 species; u16 moves[MON_MOVES]; }; @@ -30,6 +31,7 @@ struct TrainerMonSpeciesItemMoves { u16 difficulty; u16 level; + u16 species; u16 item; u16 moves[MON_MOVES]; }; @@ -58,13 +60,20 @@ struct TrainerData u32 unk_10; }; +struct TrainerDataLoaded +{ + struct TrainerData data; + u16 name[OT_NAME_LENGTH + 1]; + u8 padding[16]; +}; + struct EnemyTrainerSet { u32 flags; struct PlayerParty * parties[4]; - u16 field_14[4]; + u16 field_14[2]; u32 trainer_idxs[4]; - struct TrainerData datas[4]; + struct TrainerDataLoaded datas[4]; }; #endif //POKEDIAMOND_TRAINER_DATA_H -- cgit v1.2.3