├── .babelrc
├── .gitignore
├── Binance_bot.sublime-project
├── Binance_bot.sublime-workspace
├── LICENSE
├── Procfile
├── README.md
├── alert.mp3
├── ichi_cloud.js
├── index.js
├── indicators
├── ichimoku.js
├── ovb.js
├── resistence.js
├── rsi.js
└── support.js
├── package-lock.json
├── package.json
├── pump_detector.js
└── x.low)y
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["env"]
3 | }
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Node build artifacts
2 | node_modules
3 | npm-debug.log
4 |
5 | # Local development
6 | *.env
7 | *.dev
8 |
9 | .DS_Store
10 | *.lock
--------------------------------------------------------------------------------
/Binance_bot.sublime-project:
--------------------------------------------------------------------------------
1 | {
2 | "folders":
3 | [
4 | {
5 | "path": "."
6 | }
7 | ]
8 | }
9 |
--------------------------------------------------------------------------------
/Binance_bot.sublime-workspace:
--------------------------------------------------------------------------------
1 | {
2 | "auto_complete":
3 | {
4 | "selected_items":
5 | [
6 | [
7 | "pa",
8 | "pair_data"
9 | ],
10 | [
11 | "trac",
12 | "tracked_pairs"
13 | ],
14 | [
15 | "long",
16 | "longResistences"
17 | ],
18 | [
19 | "ki",
20 | "kijunSen"
21 | ],
22 | [
23 | "track",
24 | "trackHourlyPrice"
25 | ],
26 | [
27 | "ex",
28 | "extraMessage"
29 | ],
30 | [
31 | "resis",
32 | "resistences"
33 | ],
34 | [
35 | "tra",
36 | "tracked_pairs"
37 | ],
38 | [
39 | "re",
40 | "require"
41 | ],
42 | [
43 | "ee",
44 | "eliminateSupports"
45 | ],
46 | [
47 | "supp",
48 | "supports"
49 | ],
50 | [
51 | "su",
52 | "support"
53 | ],
54 | [
55 | "ele",
56 | "eliminateSupports"
57 | ],
58 | [
59 | "shor",
60 | "shortSupports"
61 | ],
62 | [
63 | "sho",
64 | "shortSupports"
65 | ],
66 | [
67 | "get",
68 | "getLongSupports"
69 | ],
70 | [
71 | "getS",
72 | "getShortSupports"
73 | ],
74 | [
75 | "tenkan",
76 | "tenkanSen"
77 | ],
78 | [
79 | "des",
80 | "decreaseDays"
81 | ],
82 | [
83 | "ins",
84 | "increaseDays"
85 | ],
86 | [
87 | "le",
88 | "length"
89 | ],
90 | [
91 | "calle",
92 | "calledOnce"
93 | ],
94 | [
95 | "padd",
96 | "padding-left"
97 | ],
98 | [
99 | "margi",
100 | "margin-left"
101 | ],
102 | [
103 | "mar",
104 | "margin-bottom"
105 | ],
106 | [
107 | "font",
108 | "font-weight"
109 | ],
110 | [
111 | "is",
112 | "isSeeingFeaturedModels"
113 | ],
114 | [
115 | "show",
116 | "showedVehicles"
117 | ],
118 | [
119 | "trad",
120 | "tradeUpSponsoredVehicleList"
121 | ],
122 | [
123 | "ad",
124 | "adDetails"
125 | ],
126 | [
127 | "getE",
128 | "getElementById"
129 | ],
130 | [
131 | "tr",
132 | "trigger"
133 | ],
134 | [
135 | "call",
136 | "calledOnce"
137 | ],
138 | [
139 | "simila",
140 | "similarVehicleSponsorship"
141 | ],
142 | [
143 | "que",
144 | "querySelectorAll"
145 | ],
146 | [
147 | "vehic",
148 | "vehicle"
149 | ],
150 | [
151 | "remo",
152 | "removeChild"
153 | ],
154 | [
155 | "ve",
156 | "vehicle"
157 | ],
158 | [
159 | "vehi",
160 | "vehicles"
161 | ],
162 | [
163 | "fun",
164 | "function"
165 | ],
166 | [
167 | "se",
168 | "setData"
169 | ],
170 | [
171 | "getEl",
172 | "getElementsByClassName"
173 | ],
174 | [
175 | "add",
176 | "addToTrace"
177 | ],
178 | [
179 | "new",
180 | "newRelic"
181 | ],
182 | [
183 | "send",
184 | "sendToNewRelic"
185 | ],
186 | [
187 | "autoPlay",
188 | "autoplayMuted"
189 | ],
190 | [
191 | "cta-",
192 | "oem-cta-height"
193 | ],
194 | [
195 | "snow",
196 | "snowfallWindow"
197 | ],
198 | [
199 | "fon",
200 | "font-family"
201 | ],
202 | [
203 | "marg",
204 | "margin-left"
205 | ],
206 | [
207 | "wid",
208 | "width"
209 | ],
210 | [
211 | "bo",
212 | "bottom"
213 | ],
214 | [
215 | "margin",
216 | "margin-right"
217 | ],
218 | [
219 | "w",
220 | "width"
221 | ],
222 | [
223 | "text",
224 | "text-align"
225 | ],
226 | [
227 | "inlin",
228 | "inline-block"
229 | ],
230 | [
231 | "color",
232 | "color-white"
233 | ]
234 | ]
235 | },
236 | "buffers":
237 | [
238 | {
239 | "file": "pump_detector.js",
240 | "settings":
241 | {
242 | "buffer_size": 7938,
243 | "encoding": "UTF-8",
244 | "line_ending": "Windows"
245 | }
246 | },
247 | {
248 | "contents": "\nD:\\Projects\\stuffs\\autotrader-bot>node pump_detector.js\nnode-telegram-bot-api deprecated Automatic enabling of cancellation of promises is deprecated.\nIn the future, you will have to enable it yourself.\nSee https://github.com/yagop/node-telegram-bot-api/issues/319. module.js:652:30\n------------ NBT starting -------------\nNBT api accessable on port 80\n------------------------------\n start get_BTC_price\n------------------------------\n------------------------------\nBTC price: $6,482\n------------------------------\n------------------------------\n get_BTC_pairs start\n------------------------------\n357 total pairs\n------------------------------\nTotal BTC pairs: 1\n------------------------------\n------------------------------\n run detector\n------------------------------\nETHBTC got data\n[ { symbol: 'ETHBTC', data: [ [Object], [Object], [Object] ] } ]\npair ETHBTC\ncurrentPair { symbol: 'ETHBTC',\n data:\n [ { date: 'June 17th 2018, 10:18:17 pm',\n timestamp: 1529248697764,\n price: '0.07701500',\n volume: '2127.69400000',\n buyVolume: '1602.12500000',\n usdvolume: 1062199.8730307678 },\n { date: 'June 17th 2018, 10:18:17 pm',\n timestamp: 1529248697765,\n price: '0.07694500',\n volume: '2568.63000000',\n buyVolume: '1809.32200000',\n usdvolume: 1281161.0037534165 },\n { date: 'June 17th 2018, 10:18:17 pm',\n timestamp: 1529248697765,\n price: '0.07689700',\n volume: '1172.49200000',\n buyVolume: '902.75900000',\n usdvolume: 584441.4931064595 } ] }\nticks { t: 1529247600000,\n T: 1529249399999,\n s: 'ETHBTC',\n i: '30m',\n f: 69051724,\n L: 69053174,\n o: '0.07694500',\n c: '0.07689700',\n h: '0.07697900',\n l: '0.07685500',\n v: '1176.59300000',\n n: 1451,\n x: false,\n q: '90.51602562',\n V: '902.75900000',\n Q: '69.45598435',\n B: '0' }\naverageVolumne NaN\npair ETHBTC\ncurrentPair { symbol: 'ETHBTC',\n data:\n [ { date: 'June 17th 2018, 10:18:17 pm',\n timestamp: 1529248697764,\n price: '0.07701500',\n volume: '2127.69400000',\n buyVolume: '1602.12500000',\n usdvolume: 1062199.8730307678 },\n { date: 'June 17th 2018, 10:18:17 pm',\n timestamp: 1529248697765,\n price: '0.07694500',\n volume: '2568.63000000',\n buyVolume: '1809.32200000',\n usdvolume: 1281161.0037534165 },\n { date: 'June 17th 2018, 10:18:17 pm',\n timestamp: 1529248697765,\n price: '0.07689700',\n volume: '1172.49200000',\n buyVolume: '902.75900000',\n usdvolume: 584441.4931064595 } ] }\nticks { t: 1529247600000,\n T: 1529249399999,\n s: 'ETHBTC',\n i: '30m',\n f: 69051724,\n L: 69053175,\n o: '0.07694500',\n c: '0.07689700',\n h: '0.07697900',\n l: '0.07685500',\n v: '1176.59600000',\n n: 1452,\n x: false,\n q: '90.51625631',\n V: '902.75900000',\n Q: '69.45598435',\n B: '0' }\naverageVolumne NaN\npair ETHBTC\ncurrentPair { symbol: 'ETHBTC',\n data:\n [ { date: 'June 17th 2018, 10:18:17 pm',\n timestamp: 1529248697764,\n price: '0.07701500',\n volume: '2127.69400000',\n buyVolume: '1602.12500000',\n usdvolume: 1062199.8730307678 },\n { date: 'June 17th 2018, 10:18:17 pm',\n timestamp: 1529248697765,\n price: '0.07694500',\n volume: '2568.63000000',\n buyVolume: '1809.32200000',\n usdvolume: 1281161.0037534165 },\n { date: 'June 17th 2018, 10:18:17 pm',\n timestamp: 1529248697765,\n price: '0.07689700',\n volume: '1172.49200000',\n buyVolume: '902.75900000',\n usdvolume: 584441.4931064595 } ] }\nticks { t: 1529247600000,\n T: 1529249399999,\n s: 'ETHBTC',\n i: '30m',\n f: 69051724,\n L: 69053180,\n o: '0.07694500',\n c: '0.07689700',\n h: '0.07697900',\n l: '0.07685500',\n v: '1176.63300000',\n n: 1457,\n x: false,\n q: '90.51910148',\n V: '902.75900000',\n Q: '69.45598435',\n B: '0' }\naverageVolumne NaN\npair ETHBTC\ncurrentPair { symbol: 'ETHBTC',\n data:\n [ { date: 'June 17th 2018, 10:18:17 pm',\n timestamp: 1529248697764,\n price: '0.07701500',\n volume: '2127.69400000',\n buyVolume: '1602.12500000',\n usdvolume: 1062199.8730307678 },\n { date: 'June 17th 2018, 10:18:17 pm',\n timestamp: 1529248697765,\n price: '0.07694500',\n volume: '2568.63000000',\n buyVolume: '1809.32200000',\n usdvolume: 1281161.0037534165 },\n { date: 'June 17th 2018, 10:18:17 pm',\n timestamp: 1529248697765,\n price: '0.07689700',\n volume: '1172.49200000',\n buyVolume: '902.75900000',\n usdvolume: 584441.4931064595 } ] }\nticks { t: 1529247600000,\n T: 1529249399999,\n s: 'ETHBTC',\n i: '30m',\n f: 69051724,\n L: 69053183,\n o: '0.07694500',\n c: '0.07689700',\n h: '0.07697900',\n l: '0.07685500',\n v: '1176.70600000',\n n: 1460,\n x: false,\n q: '90.52471495',\n V: '902.75900000',\n Q: '69.45598435',\n B: '0' }\naverageVolumne NaN\npair ETHBTC\ncurrentPair { symbol: 'ETHBTC',\n data:\n [ { date: 'June 17th 2018, 10:18:17 pm',\n timestamp: 1529248697764,\n price: '0.07701500',\n volume: '2127.69400000',\n buyVolume: '1602.12500000',\n usdvolume: 1062199.8730307678 },\n { date: 'June 17th 2018, 10:18:17 pm',\n timestamp: 1529248697765,\n price: '0.07694500',\n volume: '2568.63000000',\n buyVolume: '1809.32200000',\n usdvolume: 1281161.0037534165 },\n { date: 'June 17th 2018, 10:18:17 pm',\n timestamp: 1529248697765,\n price: '0.07689700',\n volume: '1172.49200000',\n buyVolume: '902.75900000',\n usdvolume: 584441.4931064595 } ] }\nticks { t: 1529247600000,\n T: 1529249399999,\n s: 'ETHBTC',\n i: '30m',\n f: 69051724,\n L: 69053189,\n o: '0.07694500',\n c: '0.07689700',\n h: '0.07697900',\n l: '0.07685500',\n v: '1176.75300000',\n n: 1466,\n x: false,\n q: '90.52832908',\n V: '902.75900000',\n Q: '69.45598435',\n B: '0' }\naverageVolumne NaN\npair ETHBTC\ncurrentPair { symbol: 'ETHBTC',\n data:\n [ { date: 'June 17th 2018, 10:18:17 pm',\n timestamp: 1529248697764,\n price: '0.07701500',\n volume: '2127.69400000',\n buyVolume: '1602.12500000',\n usdvolume: 1062199.8730307678 },\n { date: 'June 17th 2018, 10:18:17 pm',\n timestamp: 1529248697765,\n price: '0.07694500',\n volume: '2568.63000000',\n buyVolume: '1809.32200000',\n usdvolume: 1281161.0037534165 },\n { date: 'June 17th 2018, 10:18:17 pm',\n timestamp: 1529248697765,\n price: '0.07689700',\n volume: '1172.49200000',\n buyVolume: '902.75900000',\n usdvolume: 584441.4931064595 } ] }\nticks { t: 1529247600000,\n T: 1529249399999,\n s: 'ETHBTC',\n i: '30m',\n f: 69051724,\n L: 69053193,\n o: '0.07694500',\n c: '0.07689700',\n h: '0.07697900',\n l: '0.07685500',\n v: '1176.79700000',\n n: 1470,\n x: false,\n q: '90.53171253',\n V: '902.75900000',\n Q: '69.45598435',\n B: '0' }\naverageVolumne NaN\npair ETHBTC\ncurrentPair { symbol: 'ETHBTC',\n data:\n [ { date: 'June 17th 2018, 10:18:17 pm',\n timestamp: 1529248697764,\n price: '0.07701500',\n volume: '2127.69400000',\n buyVolume: '1602.12500000',\n usdvolume: 1062199.8730307678 },\n { date: 'June 17th 2018, 10:18:17 pm',\n timestamp: 1529248697765,\n price: '0.07694500',\n volume: '2568.63000000',\n buyVolume: '1809.32200000',\n usdvolume: 1281161.0037534165 },\n { date: 'June 17th 2018, 10:18:17 pm',\n timestamp: 1529248697765,\n price: '0.07689700',\n volume: '1172.49200000',\n buyVolume: '902.75900000',\n usdvolume: 584441.4931064595 } ] }\nticks { t: 1529247600000,\n T: 1529249399999,\n s: 'ETHBTC',\n i: '30m',\n f: 69051724,\n L: 69053195,\n o: '0.07694500',\n c: '0.07689700',\n h: '0.07697900',\n l: '0.07685500',\n v: '1178.02900000',\n n: 1472,\n x: false,\n q: '90.62644963',\n V: '902.75900000',\n Q: '69.45598435',\n B: '0' }\naverageVolumne NaN\npair ETHBTC\ncurrentPair { symbol: 'ETHBTC',\n data:\n [ { date: 'June 17th 2018, 10:18:17 pm',\n timestamp: 1529248697764,\n price: '0.07701500',\n volume: '2127.69400000',\n buyVolume: '1602.12500000',\n usdvolume: 1062199.8730307678 },\n { date: 'June 17th 2018, 10:18:17 pm',\n timestamp: 1529248697765,\n price: '0.07694500',\n volume: '2568.63000000',\n buyVolume: '1809.32200000',\n usdvolume: 1281161.0037534165 },\n { date: 'June 17th 2018, 10:18:17 pm',\n timestamp: 1529248697765,\n price: '0.07689700',\n volume: '1172.49200000',\n buyVolume: '902.75900000',\n usdvolume: 584441.4931064595 } ] }\nticks { t: 1529247600000,\n T: 1529249399999,\n s: 'ETHBTC',\n i: '30m',\n f: 69051724,\n L: 69053199,\n o: '0.07694500',\n c: '0.07687900',\n h: '0.07697900',\n l: '0.07685500',\n v: '1178.84400000',\n n: 1476,\n x: false,\n q: '90.68911729',\n V: '902.75900000',\n Q: '69.45598435',\n B: '0' }\naverageVolumne NaN\npair ETHBTC\ncurrentPair { symbol: 'ETHBTC',\n data:\n [ { date: 'June 17th 2018, 10:18:17 pm',\n timestamp: 1529248697764,\n price: '0.07701500',\n volume: '2127.69400000',\n buyVolume: '1602.12500000',\n usdvolume: 1062199.8730307678 },\n { date: 'June 17th 2018, 10:18:17 pm',\n timestamp: 1529248697765,\n price: '0.07694500',\n volume: '2568.63000000',\n buyVolume: '1809.32200000',\n usdvolume: 1281161.0037534165 },\n { date: 'June 17th 2018, 10:18:17 pm',\n timestamp: 1529248697765,\n price: '0.07689700',\n volume: '1172.49200000',\n buyVolume: '902.75900000',\n usdvolume: 584441.4931064595 } ] }\nticks { t: 1529247600000,\n T: 1529249399999,\n s: 'ETHBTC',\n i: '30m',\n f: 69051724,\n L: 69053200,\n o: '0.07694500',\n c: '0.07687900',\n h: '0.07697900',\n l: '0.07685500',\n v: '1178.84600000',\n n: 1477,\n x: false,\n q: '90.68927104',\n V: '902.75900000',\n Q: '69.45598435',\n B: '0' }\naverageVolumne NaN\n",
249 | "settings":
250 | {
251 | "buffer_size": 9890,
252 | "line_ending": "Windows"
253 | }
254 | },
255 | {
256 | "contents": "\nD:\\Projects\\stuffs\\autotrader-bot>node pump_detector.js\nnode-telegram-bot-api deprecated Automatic enabling of cancellation of promises is deprecated.\nIn the future, you will have to enable it yourself.\nSee https://github.com/yagop/node-telegram-bot-api/issues/319. module.js:652:30\n------------ NBT starting -------------\nNBT api accessable on port 80\n------------------------------\n start get_BTC_price\n------------------------------\n------------------------------\nBTC price: $6,484\n------------------------------\n------------------------------\n get_BTC_pairs start\n------------------------------\n357 total pairs\n------------------------------\nTotal BTC pairs: 1\n------------------------------\n------------------------------\n run detector\n------------------------------\nETHBTC got data\n1529244000000\n1529245800000\n1529247600000\n[ { date: 'June 17th 2018, 10:28:04 pm',\n timestamp: 1529249284361,\n price: '0.07701500',\n volume: '2127.69400000',\n buyVolume: '1602.12500000',\n usdvolume: 1062535.7949552585 },\n { date: 'June 17th 2018, 10:28:04 pm',\n timestamp: 1529249284362,\n price: '0.07694500',\n volume: '2568.63000000',\n buyVolume: '1809.32200000',\n usdvolume: 1281566.172385884 },\n { date: 'June 17th 2018, 10:28:04 pm',\n timestamp: 1529249284362,\n price: '0.07702200',\n volume: '1465.75600000',\n buyVolume: '1114.24100000',\n usdvolume: 732041.2486799597 } ]\n",
257 | "settings":
258 | {
259 | "buffer_size": 1412,
260 | "line_ending": "Windows"
261 | }
262 | },
263 | {
264 | "file": "ichi_cloud.js",
265 | "settings":
266 | {
267 | "buffer_size": 16557,
268 | "line_ending": "Windows"
269 | }
270 | },
271 | {
272 | "file": "indicators/ovb.js",
273 | "settings":
274 | {
275 | "buffer_size": 903,
276 | "encoding": "UTF-8",
277 | "line_ending": "Windows"
278 | }
279 | },
280 | {
281 | "file": "indicators/resistence.js",
282 | "settings":
283 | {
284 | "buffer_size": 1856,
285 | "encoding": "UTF-8",
286 | "line_ending": "Windows"
287 | }
288 | },
289 | {
290 | "file": "indicators/rsi.js",
291 | "settings":
292 | {
293 | "buffer_size": 2683,
294 | "line_ending": "Windows"
295 | }
296 | },
297 | {
298 | "contents": "if (brightcove == undefined) { var brightcove = {};\n brightcove.getExperience = function() { alert(\"Please import APIModules_all.js in order to use the API.\"); }; }\nif (brightcove.experiences == undefined) {\n brightcove.servicesURL = 'http://c.brightcove.com/services';\n brightcove.cdnURL = 'http://admin.brightcove.com';\n brightcove.secureCDNURL = 'https://sadmin.brightcove.com';\n brightcove.secureServicesURL = 'https://secure.brightcove.com/services';\n brightcove.USservicesURL = 'http://c.brightcove.com/services';\n brightcove.UScdnURL = 'http://admin.brightcove.com';\n brightcove.USsecureCDNURL = 'https://sadmin.brightcove.com';\n brightcove.USsecureServicesURL = 'https://secure.brightcove.com/services';\n brightcove.pubHost = 'c.$pubcode$.$zoneprefix$$zone$';\n brightcove.pubSecureHost = 'secure.$pubcode$.$zoneprefix$$zone$';\n brightcove.pubSubdomain = 'ariessaucetown.local';\n brightcove.experiences = {};\n brightcove.experienceObjects = {};\n brightcove.renderExperienceInProcess = false;\n brightcove.createExperiencesQueue = [];\n brightcove.renderExperienceQueue = [];\n brightcove.timeouts = {};\n brightcove.flashTimeoutInterval = 10000;\n brightcove.htmlTimeoutInterval = 10000;\n brightcove.experienceNum = 0;\n brightcove.majorVersion = 9;\n brightcove.majorRevision = 0;\n brightcove.minorRevision = 28;\n brightcove.performCdnUrl = { 'development': '//players.brightcove.net/', 'qa': '//players.qa.brightcove.net/', 'staging': '//players.staging.brightcove.net/', 'production': '//players.brightcove.net/' };\n brightcove.metricsBaseUrl = { 'development': '//data.aws-qa.rnatest.brightcove.com', 'qa': '//data.aws-qa.rnatest.brightcove.com', 'staging': '//data.aws-qa.rnatest.brightcove.com', 'production': '//metrics.brightcove.com/tracker' };\n brightcove.analyticsErrors = { 'BAD_PUBLISHER_ID': -100, 'UNEXPECTED_MAPPING_RESPONSE': -101, 'MAPPINGS_CALL_FAILURE': -102 };\n brightcove.servlet = { AS3: \"federated_f9\", HTML: \"htmlFederated\" };\n brightcove.mappingFileData = {};\n brightcove.isLinkDotBrightcoveURL = window.location.hostname.indexOf('link.brightcove.co.jp') >= 0;\n brightcove.playerType = { FLASH: \"flash\", HTML: \"html\", FLASH_IFRAME: \"flashIFrame\", INSTALLER: \"installer\", NO_SUPPORT: \"nosupport\" };\n brightcove.errorCodes = { UNKNOWN: 0, DOMAIN_RESTRICTED: 1, GEO_RESTRICTED: 2, INVALID_ID: 3, NO_CONTENT: 4, UNAVAILABLE_CONTENT: 5, UPGRADE_REQUIRED_FOR_VIDEO: 6, UPGRADE_REQUIRED_FOR_PLAYER: 7, SERVICE_UNAVAILABLE: 8 };\n brightcove.defaultParam = {};\n brightcove.defaultParam.width = '100%';\n brightcove.defaultParam.height = '100%';\n brightcove.defaultFlashParam = {};\n brightcove.defaultFlashParam.allowScriptAccess = 'always';\n brightcove.defaultFlashParam.allowFullScreen = 'true';\n brightcove.defaultFlashParam.seamlessTabbing = false;\n brightcove.defaultFlashParam.swliveconnect = true;\n brightcove.defaultFlashParam.wmode = 'window';\n brightcove.defaultFlashParam.quality = 'high';\n brightcove.defaultFlashParam.bgcolor = '#999999';\n brightcove.hasActiveX = brightcove.isIE = (window.ActiveXObject != undefined);\n brightcove.userAgent = navigator.userAgent;\n brightcove._queuedAPICalls = [];\n var brightcoveJS = brightcove;\n brightcove.createExperiences = function(pEvent, pElementID) {\n var experiences = [];\n var params;\n var experience;\n var flashSupport = brightcove.checkFlashSupport();\n var htmlSupport = brightcove.checkHtmlSupport();\n if (brightcove.renderExperienceInProcess) {\n function createExperiencesWrapper(pEvent, pElementID) { return function() { brightcove.createExperiences(pEvent, pElementID); } }\n brightcove.createExperiencesQueue.push(createExperiencesWrapper(pEvent, pElementID));\n return;\n }\n if (pElementID != null) { experiences.push(document.getElementById(pElementID)); } else { experiences = brightcove.collectExperiences(); }\n if (brightcove.hasActiveX) { params = document.getElementsByTagName('param'); }\n var urlParams = brightcove.cacheUrlParams();\n var numExperiences = experiences.length;\n for (var i = 0; i < numExperiences; i++) {\n experience = experiences[i];\n experience = brightcove.copyDefaultParams(experience);\n experience = brightcove.copySnippetParams(experience, params);\n experience = brightcove.copyUrlParams(experience, urlParams, numExperiences);\n var playerType = brightcove.determinePlayerType(experience, flashSupport, htmlSupport);\n var secureConnections = false;\n if (playerType == brightcove.playerType.HTML) { secureConnections = experience.params.secureHTMLConnections == \"true\"; } else { secureConnections = experience.params.secureConnections == \"true\"; }\n if (playerType == brightcove.playerType.HTML) { delete experience.params.linkBaseURL; } else {\n if (experience.params.includeAPI && experience.params.templateReadyHandler != null) {\n experience.params.originalTemplateReadyHandler = experience.params.templateReadyHandler;\n var handlerName = \"templateReadyHandler\" + experience.id;\n brightcove[handlerName] = (function(id) {\n return function(event) {\n if (brightcove.internal != null && brightcove.internal._instances[id] != null) { brightcove._addModuleToEvent(id, event); }\n var player = brightcove.experienceObjects[id];\n brightcove.callHandlerForPlayer(player, \"originalTemplateReadyHandler\", event);\n };\n })(experience.id);\n experience.params.templateReadyHandler = 'brightcove[\"' + handlerName + '\"]';\n }\n }\n var file = brightcove.generateRequestUrl(experience, playerType, secureConnections);\n if (document.location.protocol == \"http:\") {\n var event = 'http://goku.brightcove.com/1pix.gif?';\n var gokuParams = [\"dcsuri=/viewer/player_load_req\", \"playerType=\" + playerType, \"playerURL=\" + encodeURIComponent(document.location || \"\")];\n var image = brightcove.createElement('image');\n for (var j in experience.params) { gokuParams.push([encodeURIComponent(j) + \"=\" + encodeURIComponent(experience.params[j])]); }\n event += gokuParams.join('&');\n image.src = event;\n }\n brightcove.renderExperience(experience, file, playerType, secureConnections);\n }\n };\n brightcove.collectExperiences = function() {\n var experiences = [];\n var allObjects = document.getElementsByTagName('object');\n var numObjects = allObjects.length;\n for (var i = 0; i < numObjects; i++) { if (/\\bBrightcoveExperience\\b/.test(allObjects[i].className)) { if (allObjects[i].type != 'application/x-shockwave-flash') { experiences.push(allObjects[i]); } } }\n return experiences;\n };\n brightcove.cacheUrlParams = function() {\n var urlParams = {};\n urlParams.playerKey = decodeURIComponent(brightcove.getParameter(\"bckey\"));\n urlParams.playerID = brightcove.getParameter(\"bcpid\");\n urlParams.titleID = brightcove.getParameter(\"bctid\");\n urlParams.lineupID = brightcove.getParameter(\"bclid\");\n urlParams.autoStart = brightcove.getParameter(\"autoStart\");\n urlParams.debuggerID = brightcove.getParameter(\"debuggerID\");\n urlParams.forceHTML = brightcove.getParameter(\"forceHTML\");\n urlParams.forceFlashIFrame = brightcove.getParameter(\"forceFlashIFrame\");\n urlParams.debug = brightcove.getParameter(\"debug\");\n urlParams.showNoContentMessage = brightcove.getParameter(\"showNoContentMessage\");\n urlParams.htmlDefaultBitrate = brightcove.getParameter(\"htmlDefaultBitrate\");\n urlParams.linkSrc = brightcove.getParameter(\"linkSrc\");\n urlParams.enableMapping = brightcove.getParameter(\"enableMapping\");\n if (brightcove.isLinkDotBrightcoveURL) { urlParams.height = brightcove.getParameter(\"height\");\n urlParams.width = brightcove.getParameter(\"width\"); }\n return urlParams;\n };\n brightcove.copyDefaultParams = function(experience) {\n if (!experience.params) experience.params = {};\n if (!experience.flashParams) experience.flashParams = {};\n for (var i in brightcove.defaultParam) { experience.params[i] = brightcove.defaultParam[i]; }\n for (var j in brightcove.defaultFlashParam) { experience.flashParams[j] = brightcove.defaultFlashParam[j]; }\n if (experience.id.length > 0) { experience.params.flashID = experience.id; } else { experience.id = experience.params.flashID = 'bcExperienceObj' + (brightcove.experienceNum++); }\n experience.params.identifierClassName = 'BrightcoveExperienceID_' + Math.floor(Math.random() * 10000);\n return experience;\n };\n brightcove.copySnippetParams = function(experience, params) {\n if (!brightcove.hasActiveX) { params = experience.getElementsByTagName('param'); }\n var numParams = params.length;\n var param;\n for (var j = 0; j < numParams; j++) {\n param = params[j];\n if (brightcove.hasActiveX && param.parentNode.id != experience.id) { continue; }\n experience.params[param.name] = param.value;\n }\n if (experience.params.bgcolor != undefined) experience.flashParams.bgcolor = experience.params.bgcolor;\n if (experience.params.wmode != undefined) experience.flashParams.wmode = experience.params.wmode;\n if (experience.params.seamlessTabbing != undefined) experience.flashParams.seamlessTabbing = experience.params.seamlessTabbing;\n return experience;\n };\n brightcove.copyUrlParams = function(experience, urlParams) {\n if (experience.params.autoStart == undefined && urlParams.autoStart != undefined) { experience.params.autoStart = urlParams.autoStart; }\n if (urlParams.debuggerID != undefined) { experience.params.debuggerID = urlParams.debuggerID; }\n if (urlParams.forceHTML != undefined && urlParams.forceHTML !== '') { experience.params.forceHTML = urlParams.forceHTML; }\n if (urlParams.forceFlashIFrame != undefined && urlParams.forceFlashIFrame !== '') { experience.params.forceFlashIFrame = urlParams.forceFlashIFrame; }\n if (urlParams.enableMapping != undefined && urlParams.enableMapping !== '') { experience.params.enableMapping = urlParams.enableMapping.toLowerCase() === 'true'; }\n if (urlParams.debug != undefined && urlParams.debug !== '') { experience.params.debug = urlParams.debug; }\n if (urlParams.showNoContentMessage != undefined && urlParams.showNoContentMessage != '') { experience.params.showNoContentMessage = urlParams.showNoContentMessage; }\n if (urlParams.htmlDefaultBitrate != undefined && urlParams.htmlDefaultBitrate !== '') { experience.params.htmlDefaultBitrate = urlParams.htmlDefaultBitrate; }\n if (urlParams.linkSrc != undefined && urlParams.linkSrc != '') { experience.params.linkSrc = urlParams.linkSrc; }\n if (urlParams.height != undefined && urlParams.height != '') { experience.params.height = urlParams.height; }\n if (urlParams.width != undefined && urlParams.width != '') { experience.params.width = urlParams.width; }\n var overrideContent = (urlParams.playerID.length < 1 && urlParams.playerKey.length < 1) || (urlParams.playerID == experience.params.playerID) || (urlParams.playerKey == experience.params.playerKey);\n if (overrideContent) {\n if (urlParams.titleID.length > 0) { experience.params.videoID = urlParams.titleID;\n experience.params[\"@videoPlayer\"] = urlParams.titleID;\n experience.params.autoStart = (experience.params.autoStart != \"false\" && urlParams.autoStart != \"false\"); }\n if (urlParams.lineupID.length > 0) { experience.params.lineupID = urlParams.lineupID; }\n }\n return experience;\n };\n brightcove.determinePlayerType = function(experience, flashSupport, htmlSupport) {\n if (flashSupport == null && htmlSupport == false) { return brightcove.playerType.NO_SUPPORT; }\n if (experience.params.forceHTML) {\n if (window.console) { var message = \"The forceHTML parameter was used for the Brightcove player. This value should ONLY be used for\";\n message += \" development and testing purposes and is not supported in production environments.\";\n console.log(message); }\n return brightcove.playerType.HTML;\n }\n if (experience.params.forceFlashIFrame || (brightcove.isMetroIE() && flashSupport == null)) { return brightcove.playerType.FLASH_IFRAME; }\n if (flashSupport != null) { if (brightcove.isFlashVersionSufficient(experience, flashSupport)) { return brightcove.playerType.FLASH; } else { return brightcove.playerType.INSTALLER; } }\n if (htmlSupport) { if (brightcove.isSupportedHTMLDevice() || experience.params.htmlFallback) { return brightcove.playerType.HTML; } }\n return brightcove.playerType.NO_SUPPORT;\n };\n brightcove.isFlashVersionSufficient = function(experience, flashSupport) {\n if (flashSupport == null) return false;\n var setMajorVersion = false;\n var requestedMajorVersion;\n var requestedMajorRevision;\n var requestedMinorRevision;\n if (experience.params.majorVersion != undefined) { requestedMajorVersion = parseInt(experience.params.majorVersion, 10);\n setMajorVersion = true; } else { requestedMajorVersion = brightcove.majorVersion; }\n if (experience.params.majorRevision != undefined) { requestedMajorRevision = parseInt(experience.params.majorRevision, 10); } else { if (setMajorVersion) { requestedMajorRevision = 0; } else { requestedMajorRevision = brightcove.majorRevision; } }\n if (experience.params.minorRevision != undefined) { requestedMinorRevision = parseInt(experience.params.minorRevision, 10); } else { if (setMajorVersion) { requestedMinorRevision = 0; } else { requestedMinorRevision = brightcove.minorRevision; } }\n return (flashSupport.majorVersion > requestedMajorVersion || (flashSupport.majorVersion == requestedMajorVersion && flashSupport.majorRevision > requestedMajorRevision) || (flashSupport.majorVersion == requestedMajorVersion && flashSupport.majorRevision == requestedMajorRevision && flashSupport.minorRevision >= requestedMinorRevision));\n };\n brightcove.generateRequestUrl = function(experience, playerType, secureConnections) {\n var file;\n if (playerType == brightcove.playerType.INSTALLER) { file = brightcove.cdnURL + \"/viewer/playerProductInstall.swf\"; var MMPlayerType = brightcove.hasActiveX ? \"ActiveX\" : \"PlugIn\";\n document.title = document.title.slice(0, 47) + \" - Flash Player Installation\"; var MMdoctitle = document.title;\n file += \"?&MMredirectURL=\" + window.location + '&MMplayerType=' + MMPlayerType + '&MMdoctitle=' + MMdoctitle;\n brightcove.reportUpgradeRequired(experience); } else {\n if (secureConnections) { file = brightcove.getPubURL(brightcove.secureServicesURL, brightcove.pubSecureHost, experience.params.pubCode); } else { file = brightcove.getPubURL(brightcove.servicesURL, brightcove.pubHost, experience.params.pubCode); }\n var servlet = (playerType == brightcove.playerType.HTML) ? brightcove.servlet.HTML : brightcove.servlet.AS3;\n file += '/viewer/' + servlet + '?' + brightcove.getOverrides();\n for (var config in experience.params) { file += '&' + encodeURIComponent(config) + '=' + encodeURIComponent(experience.params[config]); }\n }\n return file;\n };\n brightcove.renderInstallGif = function(experience, secureConnections) { var cdnURL = secureConnections ? brightcove.secureCDNURL : brightcove.cdnURL; var upgradeFlashImage = cdnURL.indexOf('.co.jp') > 0 ? \"upgrade_flash_player_kk.gif\" : \"upgrade_flash_player2.gif\"; var linkHTML = \"\"; return linkHTML; };\n brightcove.renderExperience = function(experience, file, playerType, secureConnections) {\n var experienceElement;\n var experienceID = experience.id;\n var isPubIdInBlacklist = false;\n var publisherID;\n var dummyElement;\n if (brightcove.renderExperienceInProcess) {\n function wrapRenderExperience(experience, file, playerType, secureConnections) { return function() { brightcove.renderExperience(experience, file, playerType, secureConnections); } }\n brightcove.renderExperienceQueue.push(wrapRenderExperience(experience, file, playerType, secureConnections));\n return;\n }\n brightcove.renderExperienceInProcess = true;\n if (!(experience.params.playerKey || experience.params.playerID || experience.params.playerId || experience.params.playerid)) {\n if (window.console) { console.log(\"No playerID or playerKey was found for the Brightcove player, so it can not be rendered.\"); }\n return;\n }\n brightcove.experienceObjects[experienceID] = experience;\n var unminified = (brightcove.getParameter(\"unminified\") == \"true\") || (experience.params.unminified === \"true\");\n if (experience.params.includeAPI === \"true\" && !(brightcove._apiRequested || brightcove.api)) {\n var source = \"/js/api/\";\n if (unminified) { source += \"unminified/\"; }\n source += \"SmartPlayerAPI.js\";\n var apiInclude = brightcove.createElement('script');\n apiInclude.type = \"text/javascript\";\n var cdnURL = secureConnections ? brightcove.secureCDNURL : brightcove.cdnURL;\n apiInclude.src = cdnURL + source;\n experience.parentNode.appendChild(apiInclude);\n brightcove._apiRequested = true;\n }\n file += \"&startTime=\" + new Date().getTime();\n if (experience.params.playerKey) { publisherID = brightcove.decodePublisherID(experience.params.playerKey); } else { publisherID = experience.params.publisherID; }\n dummyElement = brightcove.createDummyElement(playerType, experience, secureConnections);\n if (experience.params.enableMapping === true || (experience.params.enableMapping !== false && !isPubIdInBlacklist)) {\n brightcove.makeMappingFileRequest(publisherID, function(err, data) {\n if (err) { if (window.console) { console.log(err); } }\n brightcove.generateExperienceElement(experience, publisherID, dummyElement, unminified, file, playerType, experienceID, secureConnections, data);\n });\n } else { brightcove.generateExperienceElement(experience, publisherID, dummyElement, unminified, file, playerType, experienceID, secureConnections, null); }\n };\n brightcove.generateExperienceElement = function(experience, publisherID, dummyElement, unminified, file, playerType, experienceID, secureConnections, data) {\n var playerID;\n var bcPublisherID;\n var bcPlayerID;\n var bcEmbedID;\n var bcNewSmartPlayerID;\n var bcForceRefID;\n var parsedDataObject = {};\n var bcIframe;\n var replaceElement;\n var container;\n var timeout = brightcove.flashTimeoutInterval;\n var cdnURL = secureConnections ? brightcove.secureCDNURL : brightcove.cdnURL;\n var isKKPod = cdnURL.indexOf('.co.jp') > 0;\n var eolExtensionList = [];\n if (experience.params.enableMapping !== false && data && data.statusCode === 200 && data.response && data.response !== \"\") {\n try { if (experience.params.playerKey) { if (window.JSON) { parsedDataObject = JSON.parse(data.response)[experience.params.playerKey]; } else { parsedDataObject = brightcove.json_parse(data.response)[experience.params.playerKey]; } } else { playerID = experience.params.playerId || experience.params.playerID || experience.params.playerid; if (window.JSON) { parsedDataObject = JSON.parse(data.response); } else { parsedDataObject = brightcove.json_parse(data.response); } } } catch (ex) { if (window.console) { console.log('Error: Unable to parse mapping file: ' + ex.message); } }\n if (!experience.params.playerKey) { for (var mappedPlayerKey in parsedDataObject) { var playerMapItem; if (parsedDataObject.hasOwnProperty(mappedPlayerKey)) { playerMapItem = parsedDataObject[mappedPlayerKey]; if (playerMapItem.smart_player_id && playerMapItem.smart_player_id === playerID) { parsedDataObject = playerMapItem; break; } } } }\n if (parsedDataObject && (((!parsedDataObject.hasOwnProperty('enable_mapping') || parsedDataObject.enable_mapping) && experience.params.enableMapping !== false) || ((parsedDataObject.hasOwnProperty('enable_mapping') && parsedDataObject.enable_mapping === false) && experience.params.enableMapping === true))) { bcPublisherID = parsedDataObject.account_id ? parsedDataObject.account_id : publisherID;\n bcPlayerID = parsedDataObject.player_id;\n bcEmbedID = parsedDataObject.embed_id || 'default';\n bcNewSmartPlayerID = parsedDataObject.new_smart_player_id;\n bcForceRefID = parsedDataObject.force_ref_id || false; }\n var isInExtensionList = true;\n if (Array.prototype.indexOf) { isInExtensionList = eolExtensionList.indexOf(String(publisherID)) !== -1; } else { for (var i = 0; i < eolExtensionList.length; i++) { if (eolExtensionList[i] === String(publisherID)) { isInExtensionList = true; break; } } }\n if (!bcPlayerID && (!isInExtensionList || experience.params.enableMapping === true)) { bcPlayerID = 'default';\n bcEmbedID = bcEmbedID || 'default'; }\n }\n if (bcForceRefID) { experience = brightcove.forceRefID(experience);\n file = brightcove.generateRequestUrl(experience, playerType, secureConnections); }\n if (bcNewSmartPlayerID) { delete experience.params.playerKey;\n delete experience.params.playerId;\n delete experience.params.playerid;\n experience.params.playerID = bcNewSmartPlayerID;\n brightcove.servicesURL = brightcove.USservicesURL;\n brightcove.cdnURL = brightcove.UScdnURL;\n brightcove.secureCDNURL = brightcove.USsecureCDNURL;\n brightcove.secureServicesURL = brightcove.USsecureServicesURL;\n file = brightcove.generateRequestUrl(experience, playerType, secureConnections); } else if (bcPlayerID && !bcPublisherID) { bcPublisherID = publisherID; }\n if (isKKPod && (!parsedDataObject || !parsedDataObject.player_id)) {\n var iframeDoc;\n experienceElement = brightcove.createIFrame(experience);\n brightcove.copyNodeProperties(dummyElement, experienceElement);\n replaceElement = brightcove.getElementByClassNameCrossBrowser(experience.params.identifierClassName);\n if (replaceElement && replaceElement.parentNode) { replaceElement.parentNode.replaceChild(experienceElement, replaceElement); }\n brightcove.experiences[experienceID] = experienceElement;\n iframeDoc = experienceElement.contentDocument || experienceElement.contentWindow.document;\n iframeDoc.write('
');\n } else if (bcPublisherID && bcPlayerID) {\n bcIframe = brightcove.getBCPlayerIframe(experience, bcPublisherID, bcPlayerID, bcEmbedID);\n experienceElement = brightcove.createIFrame(experience);\n brightcove.copyNodeProperties(dummyElement, experienceElement);\n replaceElement = brightcove.getElementByClassNameCrossBrowser(experience.params.identifierClassName);\n experienceElement.setAttribute('allowFullScreen', '');\n experienceElement.setAttribute('webkitAllowFullScreen', '');\n experienceElement.setAttribute('mozillaAllowFullScreen', '');\n if (replaceElement && replaceElement.parentNode) { replaceElement.parentNode.replaceChild(experienceElement, replaceElement); }\n brightcove.experiences[experienceID] = experienceElement;\n experienceElement.src = bcIframe;\n } else {\n var iframeDoc;\n experienceElement = brightcove.createIFrame(experience);\n brightcove.copyNodeProperties(dummyElement, experienceElement);\n replaceElement = brightcove.getElementByClassNameCrossBrowser(experience.params.identifierClassName);\n if (replaceElement && replaceElement.parentNode) { replaceElement.parentNode.replaceChild(experienceElement, replaceElement); }\n brightcove.experiences[experienceID] = experienceElement;\n iframeDoc = experienceElement.contentDocument || experienceElement.contentWindow.document;\n iframeDoc.write('
');\n }\n brightcove.renderExperienceInProcess = false;\n if (brightcove.renderExperienceQueue.length > 0) { brightcove.renderExperienceQueue.shift()(); } else if (brightcove.createExperiencesQueue.length > 0) { brightcove.createExperiencesQueue.shift()(); }\n brightcove.timeouts[experience.id] = setTimeout(function() { brightcove.handleExperienceTimeout(experienceID); }, timeout);\n };\n brightcove.copyNode = function(elementFrom) { var experienceElement = elementFrom.cloneNode(true);\n brightcove.copyNodeProperties(elementFrom, experienceElement); return experienceElement; };\n brightcove.copyNodeProperties = function(elementFrom, elementTo) {\n var propertyItem;\n var propertyList = ['name', 'title', 'height', 'width', 'border', 'onclick', 'ondblclick', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onscroll', 'onwheel'];\n for (propertyItem in propertyList) { if (elementFrom[propertyList[propertyItem]]) { elementTo[propertyList[propertyItem]] = elementFrom[propertyList[propertyItem]]; } }\n if (elementTo.className !== elementFrom.className) { elementTo.className += ' ' + elementFrom.className; }\n };\n brightcove.getElementsByClassName = function(selector) {\n var retnode = [];\n var elem = document.getElementsByTagName('*');\n for (var i = 0; i < elem.length; i++) { if ((' ' + elem[i].className + ' ').indexOf(' ' + selector + ' ') > -1) retnode.push(elem[i]); }\n return retnode;\n };\n brightcove.getElementByClassNameCrossBrowser = function(selector) {\n var searchElement;\n if (document.querySelectorAll) { searchElement = document.querySelectorAll('.' + selector)[0]; } else { searchElement = brightcove.getElementsByClassName(selector)[0]; }\n return searchElement;\n };\n brightcove.createDummyElement = function(playerType, experience, secureConnections) {\n var dummyElement;\n var containerID;\n var flashObjectParams;\n var flashEmbedStr;\n experience.className += ' ' + experience.params.identifierClassName;\n if (playerType === brightcove.playerType.NO_SUPPORT) {\n containerID = '_container' + experience.id;\n dummyElement = brightcove.createElement('span');\n if (experience.params.height.charAt(experience.params.height.length - 1) == \"%\") { dummyElement.style.display = 'block'; } else { dummyElement.style.display = 'inline-block'; }\n dummyElement.className = experience.className;\n dummyElement.id = containerID;\n } else if (playerType === brightcove.playerType.HTML || playerType === brightcove.playerType.FLASH_IFRAME) { dummyElement = brightcove.createIFrame(experience); if (experience && experience.parentNode) { experience.parentNode.replaceChild(dummyElement, experience); } } else { if (brightcove.hasActiveX) { flashEmbedStr = brightcove.getDummyFlashEmbedString(experience);\n containerID = '_container' + experience.id;\n dummyElement = brightcove.createFlashEmbed(containerID, experience.params.height); if (experience && experience.parentNode) { experience.parentNode.replaceChild(dummyElement, experience);\n dummyElement.innerHTML = flashEmbedStr; } } else { flashObjectParams = brightcove.getFlashObjectParams(experience);\n dummyElement = brightcove.createFlashObject(flashObjectParams); if (experience && experience.parentNode) { experience.parentNode.replaceChild(dummyElement, experience); } } }\n return dummyElement;\n };\n brightcove.getDummyFlashEmbedString = function(experience) {\n return '';\n };\n brightcove.makeMetricsErrorCall = function(publisherID, errorType) { var img = document.createElement('img'); var metricsUrl = brightcove.metricsBaseUrl['production'];\n img.src = metricsUrl + '?' + 'account=' + publisherID + '&domain=videocloud' + '&platform=as3' + '&event=error' + '&error_code=' + errorType; };\n brightcove.createIFrame = function(experience) { var iframeElement = brightcove.createElement('iframe');\n iframeElement.id = experience.id;\n iframeElement.width = experience.params.width;\n iframeElement.height = experience.params.height;\n iframeElement.className = experience.className;\n iframeElement.frameborder = 0;\n iframeElement.scrolling = \"no\";\n iframeElement.style.borderStyle = \"none\"; return iframeElement; };\n brightcove.getFlashEmbedString = function(experience, secureConnections) {\n var options = '';\n var flashParams = experience.flashParams;\n for (var pOption in flashParams) { options += ''; }\n var protocol = secureConnections ? \"https\" : \"http\";\n return '';\n };\n brightcove.getFlashObjectParams = function(experience, file) {\n var experienceObject = {};\n experienceObject.type = 'application/x-shockwave-flash';\n experienceObject.data = file;\n experienceObject.id = experience.params.flashID;\n experienceObject.width = experience.params.width;\n experienceObject.height = experience.params.height;\n experienceObject.className = experience.className;\n experienceObject.seamlesstabbing = experience.flashParams.seamlessTabbing;\n for (var config in experience.flashParams) { experienceObject[\"flashParam_\" + config] = experience.flashParams[config]; }\n return experienceObject;\n };\n brightcove.createFlashEmbed = function(experienceId, height) {\n var container = brightcove.createElement('span');\n if (height.charAt(height.length - 1) == \"%\") { container.style.display = 'block'; } else { container.style.display = 'inline-block'; }\n container.id = experienceId;\n return container;\n };\n brightcove.createFlashObject = function(playerConfig) {\n var experienceElement = brightcove.createElement('object');\n experienceElement.type = playerConfig.type;\n if (playerConfig.data) { experienceElement.data = playerConfig.data; }\n experienceElement.id = playerConfig.id;\n experienceElement.width = playerConfig.width;\n experienceElement.height = playerConfig.height;\n experienceElement.className = playerConfig.className;\n experienceElement.setAttribute(\"seamlesstabbing\", playerConfig.seamlessTabbing);\n var tempParam;\n var flashParamPrefix = \"flashParam_\";\n for (var config in playerConfig) { var flashParamInd = config.indexOf(flashParamPrefix); if (flashParamInd == 0) { tempParam = brightcove.createElement('param');\n tempParam.name = config.substring(flashParamPrefix.length);\n tempParam.value = playerConfig[config];\n experienceElement.appendChild(tempParam); } }\n return experienceElement;\n };\n brightcove.handleExperienceTimeout = function(pID) { brightcove.executeErrorHandlerForExperience(brightcove.experienceObjects[pID], { type: \"templateError\", errorType: \"serviceUnavailable\", code: brightcove.errorCodes.SERVICE_UNAVAILABLE, info: pID }); };\n brightcove.reportPlayerLoad = function(pID) { var timeout = brightcove.timeouts[pID]; if (timeout) { clearTimeout(timeout); } };\n brightcove.reportUpgradeRequired = function(pExperience) { brightcove.executeErrorHandlerForExperience(pExperience, { type: \"templateError\", errorType: \"upgradeRequiredForPlayer\", code: brightcove.errorCodes.UPGRADE_REQUIRED_FOR_PLAYER, info: pExperience.id }); };\n brightcove.checkFlashSupport = function() { var hasActiveX = (window.ActiveXObject != undefined); return (hasActiveX) ? brightcove.checkFlashSupportIE() : brightcove.checkFlashSupportStandard(); };\n brightcove.checkFlashSupportIE = function() {\n var versions;\n try { var flash = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash.7\"); var version = flash.GetVariable('$version');\n versions = / ([0-9]+),([0-9]+),([0-9]+),/.exec(version); } catch (exception) { return null; }\n return { majorVersion: versions[1], majorRevision: versions[2], minorRevision: versions[3] };\n };\n brightcove.isMetroIE = function() {\n var version = 0;\n if (navigator.appVersion.indexOf(\"MSIE\") != -1) { var appSplit = navigator.appVersion.split(\"MSIE\"); if (appSplit.length > 1) { version = parseFloat(appSplit[1]); } }\n if (version < 10 || isNaN(version)) { return false; }\n var activeXSupport = false;\n try { activeXSupport = !!new ActiveXObject(\"htmlfile\"); } catch (e) { activeXSupport = false; }\n return !activeXSupport;\n };\n brightcove.checkFlashSupportStandard = function() {\n var versions;\n var majorVersion;\n var majorRevision;\n var minorRevision;\n try {\n if (typeof navigator.plugins != 'undefined' && navigator.plugins.length > 0) {\n if (navigator.plugins[\"Shockwave Flash 2.0\"] || navigator.plugins[\"Shockwave Flash\"]) {\n var swfVersion = navigator.plugins[\"Shockwave Flash 2.0\"] ? \" 2.0\" : \"\";\n var description = navigator.plugins[\"Shockwave Flash\" + swfVersion].description;\n var filename = navigator.plugins[\"Shockwave Flash\" + swfVersion].filename;\n if (filename.match) { if (filename.toLowerCase().match(/lite/)) { throw new Error(); } }\n versions = description.split(\" \");\n majorVersion = versions[2].split(\".\")[0];\n majorRevision = versions[2].split(\".\")[1];\n minorRevision = versions[3];\n if (minorRevision == \"\") { minorRevision = versions[4]; }\n if (minorRevision[0] == \"d\") { minorRevision = minorRevision.substring(1); } else if (minorRevision[0] == \"r\") { minorRevision = minorRevision.substring(1); if (minorRevision.indexOf(\"d\") > 0) { minorRevision = minorRevision.substring(0, minorRevision.indexOf(\"d\")); } }\n } else { throw new Error(); }\n } else { return null; }\n } catch (exception) { return null; }\n return { majorVersion: majorVersion, majorRevision: majorRevision, minorRevision: minorRevision };\n };\n brightcove.checkHtmlSupport = function() {\n var v = brightcove.createElement('video');\n var videoSupport = true;\n if (!brightcove.userAgent.match(new RegExp(\"android\", \"i\"))) { videoSupport = !!(v.canPlayType && v.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, '')); }\n if (brightcove.userAgent.match(/BlackBerry.*Version\\/6\\.0/)) { return false; }\n var canvasSupport = !!brightcove.createElement('canvas').getContext;\n return videoSupport && canvasSupport;\n };\n brightcove.isSupportedHTMLDevice = function(pUAString) {\n var types = [\"iPad\", \"iPhone\", \"iPod\", \"android\", \"Silk\", \"IEMobile\"];\n var numTypes = types.length;\n var uaString = pUAString || brightcove.userAgent;\n for (var i = 0; i < numTypes; i++) { if (uaString.match(new RegExp(types[i], \"i\"))) { return true; } }\n return false;\n };\n brightcove.getTechnology = function(pExperienceId) {\n for (var id in brightcove.experiences) { if (pExperienceId == id) { return (brightcove.experiences[id].tagName == \"object\") ? brightcove.playerType.FLASH : brightcove.playerType.HTML; } }\n return brightcove.playerType.NO_SUPPORT;\n };\n brightcove.respondToMessages = function(pMessage) {\n if (brightcove.verifyMessage(pMessage)) {\n var messageData = pMessage.data;\n if (messageData.charAt(0) == \"\\\"\") { if (window.JSON) { messageData = window.JSON.parse(messageData); } else { messageData = brightcove.json_parse(messageData); } }\n var messageParts = messageData.split(\"::\");\n var type = messageParts[1];\n var messageInfo = \"\";\n for (var index = 2; index < messageParts.length; index++) { messageInfo += messageParts[index]; }\n var messageJson = messageInfo.split(\"\\n\").join(\" \");\n var messageDataObject;\n if (window.JSON) { messageDataObject = window.JSON.parse(messageJson); } else { messageDataObject = brightcove.json_parse(messageJson); }\n switch (type) {\n case \"error\":\n brightcove.executeMessageCallback(messageDataObject, brightcove.executeErrorHandlerForExperience);\n break;\n case \"api\":\n brightcove.handleAPICallForHTML(messageDataObject);\n break;\n case \"handler\":\n var event = brightcove.internal._convertDates(messageDataObject.event);\n try { brightcove.internal._handlers[messageDataObject.handler](event); } catch (e) {}\n break;\n case \"asyncGetter\":\n var data = brightcove.internal._convertDates(messageDataObject.data);\n brightcove.internal._handlers[messageDataObject.handler](data);\n break;\n }\n }\n };\n brightcove.verifyMessage = function(pMessage) { return (/^brightcove\\.player/).test(pMessage.data); };\n brightcove.handleAPICallForHTML = function(pMessageObject) {\n var experience = brightcove.experienceObjects[pMessageObject.id];\n if (experience == null) { return; }\n var id = experience.id;\n var method = pMessageObject.method;\n switch (method) {\n case \"initializeBridge\":\n brightcove.reportPlayerLoad(id);\n if (pMessageObject.arguments[0]) { if (brightcove.internal != null) { brightcove.internal._setAPICallback(id, null, pMessageObject.arguments[1]);\n brightcove.callHandlerForPlayer(experience, \"templateLoadHandler\", id); } else if (brightcove._apiRequested) { brightcove._queuedAPICalls.push(pMessageObject); } }\n break;\n case \"callTemplateReady\":\n if (brightcove._apiRequested && !brightcove.internal) { brightcove._queuedAPICalls.push(pMessageObject); } else { var event = pMessageObject.arguments;\n brightcove._addModuleToEvent(id, event);\n brightcove.callHandlerForPlayer(experience, \"templateReadyHandler\", event); }\n break;\n }\n };\n brightcove._addModuleToEvent = function(pID, pEvent) { if (pEvent.type != null && brightcove.api) { var experience = brightcove.api.getExperience(pID); if (experience) { pEvent.target = experience.getModule(\"experience\"); } } };\n brightcove.callHandlerForPlayer = function(pExperience, pHandler, pArgument) {\n if (pExperience && pExperience.params && pExperience.params[pHandler]) {\n var namespaceArray = pExperience.params[pHandler].split(\".\");\n var namespaces;\n if ((namespaces = namespaceArray.length) > 1) {\n var trace = window;\n for (var i = 0; i < namespaces; i++) { trace = trace[namespaceArray[i]]; }\n if (typeof trace === \"function\") { trace(pArgument); }\n } else { window[pExperience.params[pHandler]](pArgument); }\n }\n };\n brightcove.executeErrorHandlerForExperience = function(pExperience, pErrorObject) { brightcove.callHandlerForPlayer(pExperience, \"templateErrorHandler\", pErrorObject); };\n brightcove.executeMessageCallback = function(pMessageDataObject, pCallback) { var experience; for (var experienceKey in brightcove.experienceObjects) { experience = brightcove.experienceObjects[experienceKey]; if (experience.element.src === pMessageDataObject.__srcUrl) { delete pMessageDataObject.__srcUrl;\n pCallback(experience, pMessageDataObject); break; } } };\n brightcove.createExperience = function(pElement, pParentOrSibling, pAppend) {\n if (!pElement.id || pElement.id.length < 1) { pElement.id = 'bcExperienceObj' + (brightcove.experienceNum++); }\n if (pAppend) { pParentOrSibling.appendChild(pElement); } else { pParentOrSibling.parentNode.insertBefore(pElement, pParentOrSibling); }\n brightcove.createExperiences(null, pElement.id);\n };\n brightcove.removeExperience = function(pID) { if (brightcove.experiences[pID] != null) { brightcove.experiences[pID].parentNode.removeChild(brightcove.experiences[pID]); } };\n brightcove.getURL = function() {\n var url;\n if (typeof window.location.search != 'undefined') { url = window.location.search; } else { url = /(\\?.*)$/.exec(document.location.href); }\n return url;\n };\n brightcove.getOverrides = function() {\n var url = brightcove.getURL();\n var query = new RegExp('@[\\\\w\\\\.]+=[^&]+', 'g');\n var value = query.exec(url);\n var overrides = \"\";\n while (value != null) { overrides += \"&\" + value;\n value = query.exec(url); }\n return overrides;\n };\n brightcove.getParameter = function(pName, pDefaultValue) { if (pDefaultValue == null) pDefaultValue = \"\"; var url = brightcove.getURL(); var query = new RegExp(pName + '=([^&]*)'); var value = query.exec(url); if (value != null) { return value[1]; } else { return pDefaultValue; } };\n brightcove.createElement = function(el) { if (document.createElementNS) { return document.createElementNS('http://www.w3.org/1999/xhtml', el); } else { return document.createElement(el); } };\n brightcove.i18n = { 'BROWSER_TOO_OLD': 'The browser you are using is too old. Please upgrade to the latest version of your browser.' };\n brightcove.removeListeners = function() {\n if (/KHTML/i.test(navigator.userAgent)) { clearInterval(checkLoad);\n document.removeEventListener('load', brightcove.createExperiences, false); }\n if (typeof document.addEventListener != 'undefined') { document.removeEventListener('DOMContentLoaded', brightcove.createExperiences, false);\n document.removeEventListener('load', brightcove.createExperiences, false); } else if (typeof window.attachEvent != 'undefined') { window.detachEvent('onload', brightcove.createExperiences); }\n };\n brightcove.getPubURL = function(source, host, pubCode) { if (!pubCode || pubCode == \"\") return source; var re = /^([htps]{4,5}\\:\\/\\/)([^\\/\\:]+)/i;\n host = host.replace(\"$pubcode$\", pubCode).replace(\"$zoneprefix$$zone$\", brightcove.pubSubdomain); return source.replace(re, \"$1\" + host); };\n brightcove.createExperiencesPostLoad = function() { brightcove.removeListeners();\n brightcove.createExperiences(); };\n brightcove.encode = function(string) { string = escape(string);\n string = string.replace(/\\+/g, \"%2B\");\n string = string.replace(/\\-/g, \"%2D\");\n string = string.replace(/\\*/g, \"%2A\");\n string = string.replace(/\\//g, \"%2F\");\n string = string.replace(/\\./g, \"%2E\");\n string = string.replace(/_/g, \"%5F\");\n string = string.replace(/@/g, \"%40\"); return string; };\n brightcove.decodePublisherID = function(playerKey) {\n var b64;\n var bytes = [];\n var keys = [];\n var byteArrayToLong = function(byteArray, length) {\n var value = 0;\n for (var i = 0; i < length; i++) { value = (value * 256) + byteArray[i]; }\n return value;\n };\n if (!playerKey || playerKey.indexOf(',') < 0) {\n if (window.console) { console.log('The player key is in an unexpected format.  Unable to extract publisher ID for potential use with player migration.'); }\n return;\n }\n playerKey = playerKey.replace(/\\./g, \"~\");\n keys = playerKey.split(',');\n try { b64 = brightcove.base64().toByteArray(keys[1]); } catch (ex) {\n if (window.console) { console.log('The player key is in an unexpected format.  Unable to extract publisher ID for potential use with player migration: ' + ex.message); }\n return;\n }\n return byteArrayToLong(b64, 8);\n };\n brightcove.makeMappingFileRequest = function(publisherID, callback) {\n if (!publisherID) { brightcove.makeMetricsErrorCall('null', brightcove.analyticsErrors.BAD_PUBLISHER_ID); return callback(); } else if (brightcove.mappingFileData.hasOwnProperty(publisherID)) { return callback(null, brightcove.mappingFileData[publisherID]); } else {\n return brightcove.makeAjaxRequest('GET', brightcove.performCdnUrl['production'] + publisherID + '/migration/mappings.json', function(err, data) {\n if (window.console && data && data.statusCode === 404) { console.log('It is safe to ignore 404 messages for mappings.json file requests.'); } else if (data && data.statusCode === 0) { brightcove.makeMetricsErrorCall(publisherID, brightcove.analyticsErrors.MAPPINGS_CALL_FAILURE); } else if (data && data.statusCode !== 200 && data.statusCode !== 404) { brightcove.makeMetricsErrorCall(publisherID, brightcove.analyticsErrors.UNEXPECTED_MAPPING_RESPONSE); }\n brightcove.mappingFileData[publisherID] = data;\n return callback(err, data);\n });\n }\n };\n brightcove.makeAjaxRequest = function(action, url, callback) {\n function createXmlHTTPObject() {\n var XMLHttpFactories = [function() { return new XDomainRequest() }, function() { return new XMLHttpRequest() }, function() { return new ActiveXObject('Msxml2.XMLHTTP') }, function() { return new ActiveXObject('Msxml3.XMLHTTP') }, function() { return new ActiveXObject('Microsoft.XMLHTTP') }];\n var xmlhttp = false;\n for (var i = 0; i < XMLHttpFactories.length; i++) {\n try { xmlhttp = XMLHttpFactories[i](); } catch (e) { continue; }\n break;\n }\n return xmlhttp;\n }\n var xhttp = createXmlHTTPObject();\n if (!xhttp) { return callback(); }\n try {\n xhttp.open(action, url, true);\n xhttp.timeout = 3000;\n if (!window.XDomainRequest) { xhttp.onreadystatechange = function() { if (xhttp.readyState == 4) { return callback(null, { statusCode: xhttp.status, response: xhttp.responseText }); } }; } else {\n xhttp.onload = function() { return callback(null, { statusCode: 200, response: xhttp.responseText }); };\n xhttp.ontimeout = function() { return callback(null, { statusCode: 0 }); }\n xhttp.onprogress = function() {};\n xhttp.onerror = function() { return callback(null, { statusCode: 403 }); };\n }\n xhttp.send();\n } catch (e) { callback(null, null); }\n };\n brightcove.base64 = function() {\n var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n var Arr = (typeof Uint8Array !== 'undefined') ? Uint8Array : Array\n var PLUS = '+'.charCodeAt(0)\n var SLASH = '/'.charCodeAt(0)\n var NUMBER = '0'.charCodeAt(0)\n var LOWER = 'a'.charCodeAt(0)\n var UPPER = 'A'.charCodeAt(0)\n var PLUS_URL_SAFE = '-'.charCodeAt(0)\n var SLASH_URL_SAFE = '_'.charCodeAt(0)\n\n function decode(elt) {\n var code = elt.charCodeAt(0)\n if (code === PLUS || code === PLUS_URL_SAFE) return 62\n if (code === SLASH || code === SLASH_URL_SAFE) return 63\n if (code < NUMBER) return -1\n if (code < NUMBER + 10) return code - NUMBER + 26 + 26\n if (code < UPPER + 26) return code - UPPER\n if (code < LOWER + 26) return code - LOWER + 26\n }\n\n function b64ToByteArray(b64) {\n var i, j, l, tmp, placeHolders, arr\n if (b64.length % 4 > 0) { throw new Error('Invalid string. Length must be a multiple of 4') }\n var len = b64.length\n placeHolders = b64.charAt(len - 2) === '=' ? 2 : b64.charAt(len - 1) === '=' ? 1 : 0\n arr = new Arr(b64.length * 3 / 4 - placeHolders)\n l = placeHolders > 0 ? b64.length - 4 : b64.length\n var L = 0\n\n function push(v) { arr[L++] = v }\n for (i = 0, j = 0; i < l; i += 4, j += 3) {\n tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))\n push((tmp & 0xFF0000) >> 16)\n push((tmp & 0xFF00) >> 8)\n push(tmp & 0xFF)\n }\n if (placeHolders === 2) {\n tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)\n push(tmp & 0xFF)\n } else if (placeHolders === 1) {\n tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)\n push((tmp >> 8) & 0xFF)\n push(tmp & 0xFF)\n }\n return arr\n }\n return { toByteArray: b64ToByteArray }\n };\n brightcove.forceRefID = function(experience) {\n var videoID = experience.params.videoID;\n var videoPlayer = experience.params['@videoPlayer'];\n var playlistID = experience.params['@videoList'];\n var lineupID = experience.params.lineupID;\n var playlistTabs = experience.params['@playlistTabs'];\n var playlistCombo = experience.params['@playlistCombo'];\n var playlistVideoFeatured = experience.params['@videoList.featured'];\n var playlistTabsFeatured = experience.params['@playlistTabs.featured'];\n var playlistComboFeatured = experience.params['@playlistCombo.featured'];\n var playlistArray;\n var playlistJoined;\n if (playlistTabs) { playlistArray = playlistTabs.split(','); } else if (playlistCombo) { playlistArray = playlistCombo.split(','); }\n if (playlistArray) {\n for (var i = 0; i < playlistArray.length; i++) { if (playlistArray[i].indexOf('ref:') < 0) { playlistArray[i] = 'ref:' + playlistArray[i]; } }\n playlistJoined = playlistArray.join(',');\n }\n if (playlistTabs) { experience.params['@playlistTabs'] = playlistJoined; } else if (playlistCombo) { experience.params['@playlistCombo'] = playlistJoined; }\n if (playlistID && playlistID.indexOf('ref:') < 0) { experience.params['@videoList'] = 'ref:' + playlistID; }\n if (lineupID && lineupID.indexOf('ref:') < 0) { experience.params.lineupID = 'ref:' + lineupID; }\n if (playlistVideoFeatured && playlistVideoFeatured.indexOf('ref:') < 0) { experience.params['@videoList.featured'] = 'ref:' + playlistVideoFeatured; }\n if (playlistTabsFeatured && playlistTabsFeatured.indexOf('ref:') < 0) { experience.params['@playlistTabs.featured'] = 'ref:' + playlistTabsFeatured; }\n if (playlistComboFeatured && playlistComboFeatured.indexOf('ref:') < 0) { experience.params['@playlistCombo.featured'] = 'ref:' + playlistComboFeatured; }\n if (videoID && videoID.indexOf('ref:') < 0) { experience.params.videoID = 'ref:' + videoID; }\n if (videoPlayer && videoPlayer.indexOf('ref:') < 0) { experience.params['@videoPlayer'] = 'ref:' + videoPlayer; }\n return experience;\n };\n brightcove.getBCPlayerIframe = function(experience, accountID, playerID, embedID) {\n var iframeSource = brightcove.performCdnUrl['production'] + accountID + '/' + playerID + '_' + embedID + '/index.html?directedMigration=true&';\n var videoID = experience.params['@videoPlayer'] || experience.params.videoID;\n var playlistID = experience.params['@videoList'] || experience.params.lineupID;\n var playlistTabs = experience.params['@playlistTabs'];\n var playlistCombo = experience.params['@playlistCombo'];\n var playlistArray;\n var playlistVideoID = experience.params['@videoList.featured'] || experience.params.videoID;\n if (playlistTabs) { playlistArray = playlistTabs.split(','); } else if (playlistCombo) { playlistArray = playlistCombo.split(','); }\n if (experience.params['@playlistTabs.featured']) { playlistID = experience.params['@playlistTabs.featured']; } else if (experience.params['@playlistCombo.featured']) { playlistID = experience.params['@playlistCombo.featured']; } else if (playlistArray && playlistArray[0]) { playlistID = playlistArray[0]; }\n if (playlistID && (isNaN(playlistID) && playlistID.indexOf('ref:') < 0)) { playlistID = 'ref:' + playlistID; }\n if (playlistID) { iframeSource += 'playlistId=' + playlistID + '&'; } else if (videoID && (!isNaN(videoID) || videoID.indexOf('ref:') >= 0)) { iframeSource += 'videoId=' + videoID + '&'; } else if (videoID) { iframeSource += 'videoId=ref:' + videoID + '&'; }\n if (playlistID && playlistVideoID) {\n if (playlistVideoID && (isNaN(playlistVideoID) && playlistVideoID.indexOf('ref:') < 0)) { playlistVideoID = 'ref:' + playlistVideoID; }\n iframeSource += 'playlistVideoId=' + playlistVideoID + '&';\n }\n if (experience.params.language && experience.params.language === 'jp') { iframeSource += 'language=ja&'; } else if (experience.params.language) { iframeSource += 'language=' + experience.params.language + '&'; }\n if (experience.params.autoStart && experience.params.autoStart != 'false') { iframeSource += 'autoplay=' + experience.params.autoStart + '&'; }\n return iframeSource;\n };\n if (/KHTML/i.test(navigator.userAgent)) { var checkLoad = setInterval(function() { if (/loaded|complete/.test(document.readyState)) { clearInterval(checkLoad);\n brightcove.createExperiencesPostLoad(); } }, 70);\n document.addEventListener('load', brightcove.createExperiencesPostLoad, false); }\n if (typeof document.addEventListener != 'undefined') { document.addEventListener('DOMContentLoaded', brightcove.createExperiencesPostLoad, false);\n document.addEventListener('load', brightcove.createExperiencesPostLoad, false);\n window.addEventListener(\"message\", brightcove.respondToMessages, false); } else if (typeof window.attachEvent != 'undefined') { window.attachEvent('onload', brightcove.createExperiencesPostLoad); } else { alert(brightcove.i18n.BROWSER_TOO_OLD); }\n}\nbrightcove.json_parse = (function() {\n \"use strict\";\n var state, stack, container, key, value, escapes = { '\\\\': '\\\\', '\"': '\"', '/': '/', 't': '\\t', 'n': '\\n', 'r': '\\r', 'f': '\\f', 'b': '\\b' },\n string = { go: function() { state = 'ok'; }, firstokey: function() { key = value;\n state = 'colon'; }, okey: function() { key = value;\n state = 'colon'; }, ovalue: function() { state = 'ocomma'; }, firstavalue: function() { state = 'acomma'; }, avalue: function() { state = 'acomma'; } },\n number = { go: function() { state = 'ok'; }, ovalue: function() { state = 'ocomma'; }, firstavalue: function() { state = 'acomma'; }, avalue: function() { state = 'acomma'; } },\n action = {\n '{': { go: function() { stack.push({ state: 'ok' });\n container = {};\n state = 'firstokey'; }, ovalue: function() { stack.push({ container: container, state: 'ocomma', key: key });\n container = {};\n state = 'firstokey'; }, firstavalue: function() { stack.push({ container: container, state: 'acomma' });\n container = {};\n state = 'firstokey'; }, avalue: function() { stack.push({ container: container, state: 'acomma' });\n container = {};\n state = 'firstokey'; } },\n '}': { firstokey: function() { var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state; }, ocomma: function() { var pop = stack.pop();\n container[key] = value;\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state; } },\n '[': { go: function() { stack.push({ state: 'ok' });\n container = [];\n state = 'firstavalue'; }, ovalue: function() { stack.push({ container: container, state: 'ocomma', key: key });\n container = [];\n state = 'firstavalue'; }, firstavalue: function() { stack.push({ container: container, state: 'acomma' });\n container = [];\n state = 'firstavalue'; }, avalue: function() { stack.push({ container: container, state: 'acomma' });\n container = [];\n state = 'firstavalue'; } },\n ']': { firstavalue: function() { var pop = stack.pop();\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state; }, acomma: function() { var pop = stack.pop();\n container.push(value);\n value = container;\n container = pop.container;\n key = pop.key;\n state = pop.state; } },\n ':': {\n colon: function() {\n if (Object.hasOwnProperty.call(container, key)) { throw new SyntaxError('Duplicate key \"' + key + '\"'); }\n state = 'ovalue';\n }\n },\n ',': { ocomma: function() { container[key] = value;\n state = 'okey'; }, acomma: function() { container.push(value);\n state = 'avalue'; } },\n 'true': { go: function() { value = true;\n state = 'ok'; }, ovalue: function() { value = true;\n state = 'ocomma'; }, firstavalue: function() { value = true;\n state = 'acomma'; }, avalue: function() { value = true;\n state = 'acomma'; } },\n 'false': { go: function() { value = false;\n state = 'ok'; }, ovalue: function() { value = false;\n state = 'ocomma'; }, firstavalue: function() { value = false;\n state = 'acomma'; }, avalue: function() { value = false;\n state = 'acomma'; } },\n 'null': { go: function() { value = null;\n state = 'ok'; }, ovalue: function() { value = null;\n state = 'ocomma'; }, firstavalue: function() { value = null;\n state = 'acomma'; }, avalue: function() { value = null;\n state = 'acomma'; } }\n };\n\n function debackslashify(text) { return text.replace(/\\\\(?:u(.{4})|([^u]))/g, function(a, b, c) { return b ? String.fromCharCode(parseInt(b, 16)) : escapes[c]; }); }\n return function(source, reviver) {\n var r, tx = /^[\\x20\\t\\n\\r]*(?:([,:\\[\\]{}]|true|false|null)|(-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)|\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\")/;\n state = 'go';\n stack = [];\n try {\n for (;;) {\n r = tx.exec(source);\n if (!r) { break; }\n if (r[1]) { action[r[1]][state](); } else if (r[2]) { value = +r[2];\n number[state](); } else { value = debackslashify(r[3]);\n string[state](); }\n source = source.slice(r[0].length);\n }\n } catch (e) { state = e; }\n if (state !== 'ok' || (/[^\\x20\\t\\n\\r]/).test(source)) { throw state instanceof SyntaxError ? state : new SyntaxError('JSON'); }\n return typeof reviver === 'function' ? (function walk(holder, key) {\n var k, v, value = holder[key];\n if (value && typeof value === 'object') { for (k in value) { if (Object.prototype.hasOwnProperty.call(value, k)) { v = walk(value, k); if (v !== undefined) { value[k] = v; } else { delete value[k]; } } } }\n return reviver.call(holder, key, value);\n }({ '': value }, '')) : value;\n };\n}());",
299 | "settings":
300 | {
301 | "buffer_size": 62336,
302 | "line_ending": "Windows",
303 | "name": "if (brightcove == undefined) { var brightcove = {}"
304 | }
305 | }
306 | ],
307 | "build_system": "",
308 | "build_system_choices":
309 | [
310 | ],
311 | "build_varint": "",
312 | "command_palette":
313 | {
314 | "height": 392.0,
315 | "last_filter": "insta",
316 | "selected_items":
317 | [
318 | [
319 | "insta",
320 | "Package Control: Install Package"
321 | ],
322 | [
323 | "instal",
324 | "Package Control: Install Package"
325 | ],
326 | [
327 | "install",
328 | "Package Control: Install Package"
329 | ]
330 | ],
331 | "width": 428.0
332 | },
333 | "console":
334 | {
335 | "height": 0.0,
336 | "history":
337 | [
338 | ]
339 | },
340 | "distraction_free":
341 | {
342 | "menu_visible": true,
343 | "show_minimap": false,
344 | "show_open_files": false,
345 | "show_tabs": false,
346 | "side_bar_visible": false,
347 | "status_bar_visible": false
348 | },
349 | "expanded_folders":
350 | [
351 | "/D/Projects/stuffs/autotrader-bot",
352 | "/D/Projects/stuffs/autotrader-bot/indicators"
353 | ],
354 | "file_history":
355 | [
356 | "/D/Projects/stuffs/autotrader-bot/indicators/support.js",
357 | "/D/Projects/stuffs/autotrader-bot/ichi_cloud.js",
358 | "/D/Projects/stuffs/autotrader-bot/indicators/ichimoku.js",
359 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Scripts/Pages/Vehicle/CategoryCenter/KBB.Page.Vehicle.CategoryCenter.js",
360 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Scripts/Common/KBB.Page.Events.js",
361 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/obj/Release/Package/PackageTmp/Styles/OOCss/partials/buyers-hub/_buyer-hub-compare.scss",
362 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/obj/Release/Package/PackageTmp/Styles/OOCss/partials/shared/mixins/_breakpoints.scss",
363 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Styles/OOCss/partials/owners18/_owners-trade-up-module.scss",
364 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Scripts/Utilities/jquery.viewed.js",
365 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Styles/OOCss/partials/shared/variables/_colors.scss",
366 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Areas/KBB.Trident.Web.Areas.Vehicle/Scripts/Modules/Ads/KBB.Ads.SimilarVehicleSponsorship.js",
367 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/tests/modules/ads/KBB.Ads.SimilarVehicleSponsorship.js",
368 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/js/kbb/KBB.js",
369 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Scripts/Configuration/Web/BestResaleValueAwards/Ads.js",
370 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/js/kbb.js",
371 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Areas/KBB.Trident.Web.Areas.Vehicle/Scripts/Modules/Ads/KBB.Ads.BudgetCalculator.js",
372 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Styles/OOCss/partials/ads/_monthly-budget-calculator.scss",
373 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Styles/OOCss/partials/mmymm/components/_similar-vehicles-sponsorship.scss",
374 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/js/ads.js",
375 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Scripts/Modules/Ads/KBB.Ads.SimilarVehicleSponsorship.js",
376 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/tests/files.js",
377 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/obj/Release/Package/PackageTmp/tests/Pages/Vehicle/Path/PriceType/KBB.Page.Path.ConditionQuiz.js",
378 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Scripts/Configuration/Vehicle/Ymm/Index/Default/Ads.js",
379 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Scripts/Configuration/Vehicle/Ymm/Index/Default/Omniture.SimilarVehicle.js",
380 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/obj/Release/Package/PackageTmp/Scripts/Pages/Vehicle/MakeModel/KBB.Page.MakeModel.SimilarVehicles.js",
381 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Scripts/Modules/KBB.SimilarVehicles.js",
382 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Scripts/Configuration/Vehicle/Path/Common/CpoAwareness.Omniture.js",
383 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Scripts/Pages/Vehicle/MakeModel/KBB.Page.MakeModel.SimilarVehicles.js",
384 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/obj/Release/Package/PackageTmp/Styles/OOCss/partials/combined-slp/_price-your-next-car.scss",
385 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Styles/OOCss/partials/company/_sitemap.scss",
386 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/tests/Utilities/Utils.AdsApi.js",
387 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/kbbtv/appletv/js/Presenter.js",
388 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/kbbtv/appletv/js/applicationAds.js",
389 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Scripts/Utilities/Utils.AdsApi.js",
390 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Scripts/Pages/KBB.Page.SnowfallWindow.js",
391 | "/D/Projects/Front-end/rest-apis/database.json",
392 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Scripts/Common/KBB.NewRelic.js",
393 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/tests/modules/KBB.NewRelic.js",
394 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/js/NewRelic/NewRelic.js",
395 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Scripts/Modules/Ads/KBB.Ads.Wallpaper.js",
396 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/.eslintignore",
397 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/package.json",
398 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/tests/fixtures/TestUtils.js",
399 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Styles/OOCss/pages-responsive/homepage/homepage/index/components/_hero-image.scss",
400 | "/D/Projects/Front-end/HTML CSS/html5-css3/public/sass/Partials/_base.scss",
401 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Areas/KBB.Trident.Web.Areas.Prototype/Scripts/Brightcove/videojs.ima3.min.js",
402 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Scripts/Modules/Videos/KBB.Video.Brightcove.js",
403 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/tests/Pages/KBB.Page.SnowfallWindow.js",
404 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Styles/OOCss/partials/modules/video/_player-main.scss",
405 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Styles/OOCss/partials/modules/_kiosk.scss",
406 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Styles/OOCss/partials/shared/components/_snowfall-window.scss",
407 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/tests/Pages/KBB.Page.SnowfallWindowVideo.js",
408 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Scripts/Pages/KBB.Page.SnowfallWindowVideo.js",
409 | "//test70.dev.kbb.com/kbb.com/Styles/OOCss/css/vehicle/category.css",
410 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Styles/OOCss/partials/modules/video/_player-base.scss",
411 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Styles/OOCss/partials/editorial/latestnews/_lastest-news-snowfall-window.scss",
412 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Styles/OOCss/partials/classifieds/search-results/_listings-snowfall-window.scss",
413 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Styles/OOCss/partials/modules/video/_player-sharing.scss",
414 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Styles/OOCss/pages-responsive/vehicle/category.scss",
415 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Scripts/Pages/Editorial/LatestNews/KBB.Page.Editorial.LatestNews.SnowfallWindowModule.js",
416 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Styles/OOCss/partials/shared/variables/_font-family.scss",
417 | "//test69.dev.kbb.com/kbb.com/Scripts/Pages/KBB.Page.SnowfallWindowVideo.js",
418 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Styles/OOCss/partials/modules/video/_player-endscreen.scss",
419 | "/D/Projects/KBB/kbbweb-trident/KBB.Trident.Web/Styles/OOCss/partials/shared/variables/_font-size.scss",
420 | "/C/Windows/System32/drivers/etc/hosts",
421 | "/C/Users/tannguyen/Desktop/1/ad.html",
422 | "/D/Projects/KBB/Ad-templates/Templates/2/Brightcove.txt",
423 | "/D/Projects/KBB/Ad-templates/Templates/1/Akamai.html",
424 | "/D/Projects/KBB/Ad-templates/Templates/1/Akamai.txt",
425 | "/D/Projects/KBB/Ad-templates/Templates/2/ad.html",
426 | "/D/Projects/KBB/Ad-templates/Templates/1/ad.html",
427 | "/D/Projects/Sublime projects config/Kbbweb.sublime-project",
428 | "/D/Projects/Front-end/Redux/Redux_Basic/dist/index.html",
429 | "/D/Projects/Front-end/Redux/Redux_Basic/index.js"
430 | ],
431 | "find":
432 | {
433 | "height": 40.0
434 | },
435 | "find_in_files":
436 | {
437 | "height": 104.0,
438 | "where_history":
439 | [
440 | ""
441 | ]
442 | },
443 | "find_state":
444 | {
445 | "case_sensitive": false,
446 | "find_history":
447 | [
448 | "console.log",
449 | "pair_data",
450 | "calculate_ticks_data",
451 | "/ 60",
452 | "calculate_ticks_data",
453 | "create_pair_data",
454 | "intervals",
455 | "async",
456 | "mute",
457 | "Object.assign",
458 | "addEventListener",
459 | "bot",
460 | "async",
461 | "handleIchimokuSignal",
462 | "calculateIchimoku",
463 | "shouldBuy",
464 | "calculateIchimoku",
465 | "createIchimokuElements",
466 | "calculatePrevGainLoss",
467 | "handleIchimokuSignal",
468 | "wait_time",
469 | "'BUY'",
470 | "BUY",
471 | "getFilteredResistences",
472 | "getResistences",
473 | "trackHourlyPrice",
474 | "get_candleSticks_for_BTC_pairs",
475 | " console.log",
476 | "console.log",
477 | "support",
478 | "Support",
479 | "get_candleSticks_for_BTC_pairs",
480 | "var ",
481 | "supports",
482 | "calculateRSI",
483 | "console.log",
484 | "createPairData"
485 | ],
486 | "highlight": true,
487 | "in_selection": false,
488 | "preserve_case": false,
489 | "regex": false,
490 | "replace_history":
491 | [
492 | "resistence",
493 | "Resistence",
494 | "let",
495 | "resistences"
496 | ],
497 | "reverse": false,
498 | "show_context": true,
499 | "use_buffer2": true,
500 | "whole_word": false,
501 | "wrap": true
502 | },
503 | "groups":
504 | [
505 | {
506 | "selected": 0,
507 | "sheets":
508 | [
509 | {
510 | "buffer": 0,
511 | "file": "pump_detector.js",
512 | "semi_transient": false,
513 | "settings":
514 | {
515 | "buffer_size": 7938,
516 | "regions":
517 | {
518 | },
519 | "selection":
520 | [
521 | [
522 | 4894,
523 | 4894
524 | ]
525 | ],
526 | "settings":
527 | {
528 | "SL.64.region_keys":
529 | [
530 | ],
531 | "syntax": "Packages/JavaScript/JavaScript.sublime-syntax"
532 | },
533 | "translation.x": 0.0,
534 | "translation.y": 2100.0,
535 | "zoom_level": 1.0
536 | },
537 | "stack_index": 0,
538 | "type": "text"
539 | },
540 | {
541 | "buffer": 1,
542 | "semi_transient": false,
543 | "settings":
544 | {
545 | "buffer_size": 9890,
546 | "regions":
547 | {
548 | },
549 | "selection":
550 | [
551 | [
552 | 5805,
553 | 5806
554 | ]
555 | ],
556 | "settings":
557 | {
558 | "auto_name": "",
559 | "syntax": "Packages/Text/Plain text.tmLanguage"
560 | },
561 | "translation.x": 0.0,
562 | "translation.y": 4340.0,
563 | "zoom_level": 1.0
564 | },
565 | "stack_index": 1,
566 | "type": "text"
567 | },
568 | {
569 | "buffer": 2,
570 | "semi_transient": false,
571 | "settings":
572 | {
573 | "buffer_size": 1412,
574 | "regions":
575 | {
576 | },
577 | "selection":
578 | [
579 | [
580 | 817,
581 | 830
582 | ]
583 | ],
584 | "settings":
585 | {
586 | "auto_name": "",
587 | "syntax": "Packages/Text/Plain text.tmLanguage"
588 | },
589 | "translation.x": 0.0,
590 | "translation.y": 560.0,
591 | "zoom_level": 1.0
592 | },
593 | "stack_index": 2,
594 | "type": "text"
595 | },
596 | {
597 | "buffer": 3,
598 | "file": "ichi_cloud.js",
599 | "semi_transient": false,
600 | "settings":
601 | {
602 | "buffer_size": 16557,
603 | "regions":
604 | {
605 | },
606 | "selection":
607 | [
608 | [
609 | 0,
610 | 0
611 | ]
612 | ],
613 | "settings":
614 | {
615 | "SL.65.region_keys":
616 | [
617 | ],
618 | "syntax": "Packages/JavaScript/JavaScript.sublime-syntax"
619 | },
620 | "translation.x": 0.0,
621 | "translation.y": 0.0,
622 | "zoom_level": 1.0
623 | },
624 | "stack_index": 6,
625 | "type": "text"
626 | },
627 | {
628 | "buffer": 4,
629 | "file": "indicators/ovb.js",
630 | "semi_transient": false,
631 | "settings":
632 | {
633 | "buffer_size": 903,
634 | "regions":
635 | {
636 | },
637 | "selection":
638 | [
639 | [
640 | 399,
641 | 399
642 | ]
643 | ],
644 | "settings":
645 | {
646 | "SL.17.region_keys":
647 | [
648 | ],
649 | "SL.21.region_keys":
650 | [
651 | ],
652 | "SL.58.region_keys":
653 | [
654 | ],
655 | "syntax": "Packages/JavaScript/JavaScript.sublime-syntax"
656 | },
657 | "translation.x": 0.0,
658 | "translation.y": 0.0,
659 | "zoom_level": 1.0
660 | },
661 | "stack_index": 5,
662 | "type": "text"
663 | },
664 | {
665 | "buffer": 5,
666 | "file": "indicators/resistence.js",
667 | "semi_transient": false,
668 | "settings":
669 | {
670 | "buffer_size": 1856,
671 | "regions":
672 | {
673 | },
674 | "selection":
675 | [
676 | [
677 | 830,
678 | 830
679 | ]
680 | ],
681 | "settings":
682 | {
683 | "SL.18.region_keys":
684 | [
685 | ],
686 | "SL.59.region_keys":
687 | [
688 | ],
689 | "syntax": "Packages/JavaScript/JavaScript.sublime-syntax"
690 | },
691 | "translation.x": 0.0,
692 | "translation.y": 0.0,
693 | "zoom_level": 1.0
694 | },
695 | "stack_index": 4,
696 | "type": "text"
697 | },
698 | {
699 | "buffer": 6,
700 | "file": "indicators/rsi.js",
701 | "semi_transient": true,
702 | "settings":
703 | {
704 | "buffer_size": 2683,
705 | "regions":
706 | {
707 | },
708 | "selection":
709 | [
710 | [
711 | 0,
712 | 0
713 | ]
714 | ],
715 | "settings":
716 | {
717 | "SL.70.region_keys":
718 | [
719 | ],
720 | "syntax": "Packages/JavaScript/JavaScript.sublime-syntax"
721 | },
722 | "translation.x": 0.0,
723 | "translation.y": 700.0,
724 | "zoom_level": 1.0
725 | },
726 | "stack_index": 3,
727 | "type": "text"
728 | },
729 | {
730 | "buffer": 7,
731 | "semi_transient": false,
732 | "settings":
733 | {
734 | "buffer_size": 62336,
735 | "regions":
736 | {
737 | },
738 | "selection":
739 | [
740 | [
741 | 58811,
742 | 58811
743 | ]
744 | ],
745 | "settings":
746 | {
747 | "auto_name": "if (brightcove == undefined) { var brightcove = {}",
748 | "syntax": "Packages/Text/Plain text.tmLanguage"
749 | },
750 | "translation.x": 0.0,
751 | "translation.y": 3647.0,
752 | "zoom_level": 1.0
753 | },
754 | "stack_index": 7,
755 | "type": "text"
756 | }
757 | ]
758 | }
759 | ],
760 | "incremental_find":
761 | {
762 | "height": 22.0
763 | },
764 | "input":
765 | {
766 | "height": 35.0
767 | },
768 | "layout":
769 | {
770 | "cells":
771 | [
772 | [
773 | 0,
774 | 0,
775 | 1,
776 | 1
777 | ]
778 | ],
779 | "cols":
780 | [
781 | 0.0,
782 | 1.0
783 | ],
784 | "rows":
785 | [
786 | 0.0,
787 | 1.0
788 | ]
789 | },
790 | "menu_visible": true,
791 | "output.SublimeLinter":
792 | {
793 | "height": 26.0
794 | },
795 | "output.SublimeLinter Messages":
796 | {
797 | "height": 26.0
798 | },
799 | "output.exec":
800 | {
801 | "height": 96.0
802 | },
803 | "output.find_results":
804 | {
805 | "height": 0.0
806 | },
807 | "pinned_build_system": "",
808 | "project": "Binance_bot.sublime-project",
809 | "replace":
810 | {
811 | "height": 42.0
812 | },
813 | "save_all_on_build": true,
814 | "select_file":
815 | {
816 | "height": 0.0,
817 | "last_filter": "",
818 | "selected_items":
819 | [
820 | [
821 | "kbb.ads.budgetcalculator",
822 | "tests\\modules\\ads\\KBB.Ads.BudgetCalculator.js"
823 | ],
824 | [
825 | "owner18",
826 | "Scripts\\Configuration\\Vehicle\\Hub\\Index\\Trade-In-Sell\\Ads.Owners18.js"
827 | ],
828 | [
829 | "categorycent",
830 | "Scripts\\Pages\\Vehicle\\CategoryCenter\\KBB.Page.Vehicle.CategoryCenter.js"
831 | ],
832 | [
833 | "vehiclespon",
834 | "Areas\\KBB.Trident.Web.Areas.Vehicle\\Scripts\\Modules\\Ads\\KBB.Ads.SimilarVehicleSponsorship.js"
835 | ],
836 | [
837 | "tradeup",
838 | "Scripts\\Pages\\Vehicle\\Hub\\Index\\Owners18\\Page.TradeUpModule.js"
839 | ],
840 | [
841 | "kbb.js",
842 | "js\\kbb\\KBB.js"
843 | ],
844 | [
845 | "budgetcalu",
846 | "Areas\\KBB.Trident.Web.Areas.Vehicle\\Scripts\\Modules\\Ads\\KBB.Ads.BudgetCalculator.js"
847 | ],
848 | [
849 | "colors.scss",
850 | "Styles\\OOCss\\partials\\shared\\variables\\_colors.scss"
851 | ],
852 | [
853 | "budgetcalculator.sc",
854 | "Styles\\OOCss\\partials\\owners18\\_owners-budget-calculator.scss"
855 | ],
856 | [
857 | "budgetcalculator.scs",
858 | "Styles\\OOCss\\partials\\ads\\_monthly-budget-calculator.scss"
859 | ],
860 | [
861 | "budgetcalculator.js",
862 | "Areas\\KBB.Trident.Web.Areas.Vehicle\\Scripts\\Modules\\Ads\\KBB.Ads.BudgetCalculator.js"
863 | ],
864 | [
865 | "ads.js",
866 | "js\\ads.js"
867 | ],
868 | [
869 | "kbb.ads.similarvehiclesponsorship",
870 | "tests\\modules\\ads\\KBB.Ads.SimilarVehicleSponsorship.js"
871 | ],
872 | [
873 | "tests/files.js",
874 | "tests\\files.js"
875 | ],
876 | [
877 | "default/omniture.similarvehicle.js",
878 | "Scripts\\Configuration\\Vehicle\\Ymm\\Index\\Default\\Omniture.SimilarVehicle.js"
879 | ],
880 | [
881 | "ymm/index/default/ads.js",
882 | "Scripts\\Configuration\\Vehicle\\Ymm\\Index\\Default\\Ads.js"
883 | ],
884 | [
885 | "configuration/vehicle/ymm/index/default/ads.js",
886 | "Scripts\\Configuration\\Vehicle\\Ymm\\Index\\Default\\Ads.js"
887 | ],
888 | [
889 | "simila",
890 | "Styles\\OOCss\\partials\\mmymm\\components\\_similar-vehicles-sponsorship.scss"
891 | ],
892 | [
893 | "similarvehicle",
894 | "Scripts\\Modules\\KBB.SimilarVehicles.js"
895 | ],
896 | [
897 | "similarvehicles",
898 | "Scripts\\Modules\\Ads\\KBB.Ads.SimilarVehicleSponsorship.js"
899 | ],
900 | [
901 | "kbb.page.makemodel.similarvehicles",
902 | "Scripts\\Pages\\Vehicle\\MakeModel\\KBB.Page.MakeModel.SimilarVehicles.js"
903 | ],
904 | [
905 | "/ymm/index/default/omniture.similarvehicle.js",
906 | "Scripts\\Configuration\\Vehicle\\Ymm\\Index\\Default\\Omniture.SimilarVehicle.js"
907 | ],
908 | [
909 | "cpoawareness.omniture.js",
910 | "Scripts\\Configuration\\Vehicle\\Path\\Common\\CpoAwareness.Omniture.js"
911 | ],
912 | [
913 | "vehiclesponsor",
914 | "Scripts\\Modules\\Ads\\KBB.Ads.SimilarVehicleSponsorship.js"
915 | ],
916 | [
917 | "similar-vehi",
918 | "Styles\\OOCss\\partials\\mmymm\\components\\_similar-vehicles-sponsorship.scss"
919 | ],
920 | [
921 | "utils.adsapi.js",
922 | "tests\\Utilities\\Utils.AdsApi.js"
923 | ],
924 | [
925 | "utils.ad",
926 | "tests\\Utilities\\Utils.AdsApi.js"
927 | ],
928 | [
929 | "utilsap",
930 | "Scripts\\Utilities\\Utils.AdsApi.js"
931 | ],
932 | [
933 | "snowfall",
934 | "Scripts\\Pages\\KBB.Page.SnowfallWindow.js"
935 | ],
936 | [
937 | "files.",
938 | "tests\\files.js"
939 | ],
940 | [
941 | "kbb.newrel",
942 | "tests\\modules\\KBB.NewRelic.js"
943 | ],
944 | [
945 | "package",
946 | "package.json"
947 | ],
948 | [
949 | "newr",
950 | "js\\NewRelic\\NewRelic.js"
951 | ],
952 | [
953 | "kbb.new",
954 | "Scripts\\Common\\KBB.NewRelic.js"
955 | ],
956 | [
957 | "kbb.ads.wallpaper.js",
958 | "tests\\modules\\ads\\KBB.Ads.Wallpaper.js"
959 | ],
960 | [
961 | "packa",
962 | "package.json"
963 | ],
964 | [
965 | "testutils",
966 | "tests\\fixtures\\TestUtils.js"
967 | ],
968 | [
969 | "kbb.newre",
970 | "tests\\modules\\KBB.NewRelic.js"
971 | ],
972 | [
973 | "kbb.newrelic",
974 | "Scripts\\Common\\KBB.NewRelic.js"
975 | ],
976 | [
977 | "hero-image",
978 | "Styles\\OOCss\\pages-responsive\\homepage\\homepage\\index\\components\\_hero-image.scss"
979 | ],
980 | [
981 | "brightcove",
982 | "Scripts\\Modules\\Videos\\KBB.Video.Brightcove.js"
983 | ],
984 | [
985 | "video/",
986 | "Styles\\OOCss\\partials\\modules\\video\\_player-main.scss"
987 | ],
988 | [
989 | "kbb.page.snowfallwindow.js",
990 | "tests\\Pages\\KBB.Page.SnowfallWindow.js"
991 | ],
992 | [
993 | "snowfallvideo",
994 | "tests\\Pages\\KBB.Page.SnowfallWindowVideo.js"
995 | ],
996 | [
997 | "_kiosk.scss",
998 | "Styles\\OOCss\\partials\\modules\\_kiosk.scss"
999 | ],
1000 | [
1001 | "lasted",
1002 | "Styles\\OOCss\\partials\\editorial\\latestnews\\_lastest-news-snowfall-window.scss"
1003 | ],
1004 | [
1005 | "player-base",
1006 | "Styles\\OOCss\\partials\\modules\\video\\_player-base.scss"
1007 | ],
1008 | [
1009 | "snowfallwindowmodule",
1010 | "Scripts\\Pages\\Editorial\\LatestNews\\KBB.Page.Editorial.LatestNews.SnowfallWindowModule.js"
1011 | ],
1012 | [
1013 | "snowfallwin",
1014 | "Scripts\\Pages\\KBB.Page.SnowfallWindowVideo.js"
1015 | ],
1016 | [
1017 | "kbb.page.vehicle.categorycenter.js",
1018 | "Scripts\\Pages\\Vehicle\\CategoryCenter\\KBB.Page.Vehicle.CategoryCenter.js"
1019 | ]
1020 | ],
1021 | "width": 0.0
1022 | },
1023 | "select_project":
1024 | {
1025 | "height": 0.0,
1026 | "last_filter": "",
1027 | "selected_items":
1028 | [
1029 | ],
1030 | "width": 0.0
1031 | },
1032 | "select_symbol":
1033 | {
1034 | "height": 0.0,
1035 | "last_filter": "",
1036 | "selected_items":
1037 | [
1038 | ],
1039 | "width": 0.0
1040 | },
1041 | "selected_group": 0,
1042 | "settings":
1043 | {
1044 | },
1045 | "show_minimap": true,
1046 | "show_open_files": false,
1047 | "show_tabs": true,
1048 | "side_bar_visible": true,
1049 | "side_bar_width": 258.0,
1050 | "status_bar_visible": true,
1051 | "template_settings":
1052 | {
1053 | }
1054 | }
1055 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 JSapp.me
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Procfile:
--------------------------------------------------------------------------------
1 | web: node index.js
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 |